From dadbad0bef84f671c8194c84080c760453ecc423 Mon Sep 17 00:00:00 2001 From: Mohamed Issa Date: Tue, 4 Nov 2025 01:58:34 +0000 Subject: [PATCH 001/512] 8371088: Build fails when trying hsdis option Reviewed-by: erikj --- make/autoconf/lib-hsdis.m4 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/make/autoconf/lib-hsdis.m4 b/make/autoconf/lib-hsdis.m4 index 784c76424cf..0530ef90be8 100644 --- a/make/autoconf/lib-hsdis.m4 +++ b/make/autoconf/lib-hsdis.m4 @@ -304,6 +304,8 @@ AC_DEFUN([LIB_SETUP_HSDIS_BINUTILS], # If we have libsframe add it. if test -e $BINUTILS_INSTALL_DIR/lib/libsframe.a; then HSDIS_LIBS="$HSDIS_LIBS $BINUTILS_INSTALL_DIR/lib/libsframe.a" + elif test -e $BINUTILS_INSTALL_DIR/lib64/libsframe.a; then + HSDIS_LIBS="$HSDIS_LIBS $BINUTILS_INSTALL_DIR/lib64/libsframe.a" fi AC_CHECK_LIB(z, deflate, [ HSDIS_LIBS="$HSDIS_LIBS -lz" ], AC_MSG_ERROR([libz not found])) else From 576f9694b092f2a11a6a4e5a82c2b0e12203bd9c Mon Sep 17 00:00:00 2001 From: Serhiy Sachkov Date: Tue, 4 Nov 2025 01:58:54 +0000 Subject: [PATCH 002/512] 8361106: [TEST] com/sun/net/httpserver/Test9.java fails with java.nio.file.FileSystemException Reviewed-by: dfuchs --- test/jdk/com/sun/net/httpserver/Test9.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/test/jdk/com/sun/net/httpserver/Test9.java b/test/jdk/com/sun/net/httpserver/Test9.java index 6f7b1d4f5bc..6051de96596 100644 --- a/test/jdk/com/sun/net/httpserver/Test9.java +++ b/test/jdk/com/sun/net/httpserver/Test9.java @@ -59,7 +59,7 @@ public class Test9 extends Test { HttpServer.class.getPackageName() + '-' + Test9.class.getSimpleName() + '-'; static SSLContext ctx; - static boolean error = false; + static volatile boolean error = false; public static void main (String[] args) throws Exception { HttpServer s1 = null; @@ -67,6 +67,8 @@ public class Test9 extends Test { ExecutorService executor=null; Path smallFilePath = createTempFileOfSize(TEMP_FILE_PREFIX, null, 23); Path largeFilePath = createTempFileOfSize(TEMP_FILE_PREFIX, null, 2730088); + smallFilePath.toFile().deleteOnExit(); + largeFilePath.toFile().deleteOnExit(); try { System.out.print ("Test9: "); InetAddress loopback = InetAddress.getLoopbackAddress(); @@ -122,20 +124,16 @@ public class Test9 extends Test { s2.stop(0); if (executor != null) executor.shutdown (); - Files.delete(smallFilePath); - Files.delete(largeFilePath); } } - static int foo = 1; - static ClientThread test (boolean fixedLen, String protocol, int port, Path filePath) throws Exception { ClientThread t = new ClientThread (fixedLen, protocol, port, filePath); t.start(); return t; } - static Object fileLock = new Object(); + static final Object fileLock = new Object(); static class ClientThread extends Thread { @@ -203,9 +201,8 @@ public class Test9 extends Test { error = true; } assertFileContentsEqual(filePath, temp.toPath()); - temp.delete(); } catch (Exception e) { - e.printStackTrace(); + System.err.println("Error occurred: " + e); error = true; } } From 50bb92a33b32778a96b1823ff995889892bef890 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 4 Nov 2025 04:59:32 +0000 Subject: [PATCH 003/512] 8370871: [s390x] consistently update top_frame_sp Reviewed-by: rrich, lucy --- src/hotspot/cpu/s390/interp_masm_s390.cpp | 21 ++++++++++++++----- .../templateInterpreterGenerator_s390.cpp | 21 +++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/hotspot/cpu/s390/interp_masm_s390.cpp b/src/hotspot/cpu/s390/interp_masm_s390.cpp index aa3d4849062..f62051c628e 100644 --- a/src/hotspot/cpu/s390/interp_masm_s390.cpp +++ b/src/hotspot/cpu/s390/interp_masm_s390.cpp @@ -575,11 +575,17 @@ void InterpreterMacroAssembler::store_ptr(int n, Register val) { void InterpreterMacroAssembler::prepare_to_jump_from_interpreted(Register method) { // Satisfy interpreter calling convention (see generate_normal_entry()). z_lgr(Z_R10, Z_SP); // Set sender sp (aka initial caller sp, aka unextended sp). - // Record top_frame_sp, because the callee might modify it, if it's compiled. - assert_different_registers(Z_R1, method); - z_sgrk(Z_R1, Z_SP, Z_fp); - z_srag(Z_R1, Z_R1, Interpreter::logStackElementSize); - z_stg(Z_R1, _z_ijava_state_neg(top_frame_sp), Z_fp); +#ifdef ASSERT + NearLabel ok; + Register tmp = Z_R1; + z_lg(tmp, Address(Z_fp, _z_ijava_state_neg(top_frame_sp))); + z_slag(tmp, tmp, Interpreter::logStackElementSize); + z_agr(tmp, Z_fp); + z_cgr(tmp, Z_SP); + z_bre(ok); + stop("corrupted top_frame_sp"); + bind(ok); +#endif save_bcp(); save_esp(); z_lgr(Z_method, method); // Set Z_method (kills Z_fp!). @@ -1918,6 +1924,11 @@ void InterpreterMacroAssembler::add_monitor_to_stack(bool stack_is_empty, // Adjust stack pointer for additional monitor entry. resize_frame(RegisterOrConstant((intptr_t) delta), Z_fp, false); + // Rtemp3 is free at this point, use it to store top_frame_sp + z_sgrk(Rtemp3, Z_SP, Z_fp); + z_srag(Rtemp3, Rtemp3, Interpreter::logStackElementSize); + reg2mem_opt(Rtemp3, Address(Z_fp, _z_ijava_state_neg(top_frame_sp))); + if (!stack_is_empty) { // Must copy stack contents down. NearLabel next, done; diff --git a/src/hotspot/cpu/s390/templateInterpreterGenerator_s390.cpp b/src/hotspot/cpu/s390/templateInterpreterGenerator_s390.cpp index 3f568572966..2da21f08bbc 100644 --- a/src/hotspot/cpu/s390/templateInterpreterGenerator_s390.cpp +++ b/src/hotspot/cpu/s390/templateInterpreterGenerator_s390.cpp @@ -1100,6 +1100,11 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) { // ... and push the new frame F0. __ push_frame(top_frame_size, fp, true /*copy_sp*/, false); + + __ z_lcgr(top_frame_size); // negate + __ z_srag(top_frame_size, top_frame_size, Interpreter::logStackElementSize); + // Store relativized top_frame_sp + __ z_stg(top_frame_size, _z_ijava_state_neg(top_frame_sp), fp); } //============================================================================= @@ -2068,6 +2073,14 @@ void TemplateInterpreterGenerator::generate_throw_exception() { __ z_lg(Z_fp, _z_abi(callers_sp), Z_SP); // Frame accessors use Z_fp. // Z_ARG1 (==Z_tos): exception // Z_ARG2 : Return address/pc that threw exception. + { + Register top_frame_sp = Z_R1_scratch; // anyway going to load it with correct value + __ z_lg(top_frame_sp, Address(Z_fp, _z_ijava_state_neg(top_frame_sp))); + __ z_slag(top_frame_sp, top_frame_sp, Interpreter::logStackElementSize); + __ z_agr(top_frame_sp, Z_fp); + + __ resize_frame_absolute(top_frame_sp, /* temp = */ Z_R0, /* load_fp = */ true); + } __ restore_bcp(); // R13 points to call/send. __ restore_locals(); @@ -2175,6 +2188,14 @@ void TemplateInterpreterGenerator::generate_throw_exception() { false, // install_monitor_exception false); // notify_jvmdi __ z_lg(Z_fp, _z_abi(callers_sp), Z_SP); // Restore frame pointer. + { + Register top_frame_sp = Z_R1_scratch; + __ z_lg(top_frame_sp, Address(Z_fp, _z_ijava_state_neg(top_frame_sp))); + __ z_slag(top_frame_sp, top_frame_sp, Interpreter::logStackElementSize); + __ z_agr(top_frame_sp, Z_fp); + + __ resize_frame_absolute(top_frame_sp, /* temp = */ Z_R0, /* load_fp = */ true); + } __ restore_bcp(); __ restore_locals(); __ restore_esp(); From 75e37b06c3e37ee49719a0c0d6b4ab2c4ff76098 Mon Sep 17 00:00:00 2001 From: Emanuel Peter Date: Tue, 4 Nov 2025 07:39:11 +0000 Subject: [PATCH 004/512] 8370332: C2 SuperWord: SIGSEGV because PhaseIdealLoop::split_thru_phi left dead nodes in loop _body Reviewed-by: chagedorn, roland --- src/hotspot/share/opto/loopnode.hpp | 3 + src/hotspot/share/opto/loopopts.cpp | 45 +++++++---- src/hotspot/share/opto/node.cpp | 14 ++++ src/hotspot/share/opto/node.hpp | 7 ++ ...litThruPhiRemoveDeadNodesFromLoopBody.java | 80 +++++++++++++++++++ 5 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/loopopts/TestSplitThruPhiRemoveDeadNodesFromLoopBody.java diff --git a/src/hotspot/share/opto/loopnode.hpp b/src/hotspot/share/opto/loopnode.hpp index aee934b0d11..7ea66ea5486 100644 --- a/src/hotspot/share/opto/loopnode.hpp +++ b/src/hotspot/share/opto/loopnode.hpp @@ -1742,6 +1742,9 @@ private: } }; + + void split_thru_phi_yank_old_nodes(Node* n, Node* region); + public: // Conversion of fill/copy patterns into intrinsic versions diff --git a/src/hotspot/share/opto/loopopts.cpp b/src/hotspot/share/opto/loopopts.cpp index 71e52f373f7..cfbb4fabc0f 100644 --- a/src/hotspot/share/opto/loopopts.cpp +++ b/src/hotspot/share/opto/loopopts.cpp @@ -228,6 +228,9 @@ Node* PhaseIdealLoop::split_thru_phi(Node* n, Node* region, int policy) { } } + split_thru_phi_yank_old_nodes(n, region); + _igvn.replace_node(n, phi); + #ifndef PRODUCT if (TraceLoopOpts) { tty->print_cr("Split %d %s through %d Phi in %d %s", @@ -238,6 +241,28 @@ Node* PhaseIdealLoop::split_thru_phi(Node* n, Node* region, int policy) { return phi; } +// If the region is a Loop, we are removing the old n, +// and need to yank it from the _body. If any phi we +// just split through now has no use any more, it also +// has to be removed. +void PhaseIdealLoop::split_thru_phi_yank_old_nodes(Node* n, Node* region) { + IdealLoopTree* region_loop = get_loop(region); + if (region->is_Loop() && region_loop->is_innermost()) { + region_loop->_body.yank(n); + for (uint j = 1; j < n->req(); j++) { + PhiNode* phi = n->in(j)->isa_Phi(); + // Check that phi belongs to the region and only has n as a use. + if (phi != nullptr && + phi->in(0) == region && + phi->unique_multiple_edges_out_or_null() == n) { + assert(get_ctrl(phi) == region, "sanity"); + assert(get_ctrl(n) == region, "sanity"); + region_loop->_body.yank(phi); + } + } + } +} + // Test whether node 'x' can move into an inner loop relative to node 'n'. // Note: The test is not exact. Returns true if 'x' COULD end up in an inner loop, // BUT it can also return true and 'x' is in the outer loop @@ -1207,13 +1232,10 @@ Node *PhaseIdealLoop::split_if_with_blocks_pre( Node *n ) { if (must_throttle_split_if()) return n; - // Split 'n' through the merge point if it is profitable - Node *phi = split_thru_phi( n, n_blk, policy ); - if (!phi) return n; + // Split 'n' through the merge point if it is profitable, replacing it with a new phi. + Node* phi = split_thru_phi(n, n_blk, policy); + if (phi == nullptr) { return n; } - // Found a Phi to split thru! - // Replace 'n' with the new phi - _igvn.replace_node( n, phi ); // Moved a load around the loop, 'en-registering' something. if (n_blk->is_Loop() && n->is_Load() && !phi->in(LoopNode::LoopBackControl)->is_Load()) @@ -1444,15 +1466,9 @@ void PhaseIdealLoop::split_if_with_blocks_post(Node *n) { return; } - // Found a Phi to split thru! - // Replace 'n' with the new phi - _igvn.replace_node(n, phi); - // Now split the bool up thru the phi - Node *bolphi = split_thru_phi(bol, n_ctrl, -1); + Node* bolphi = split_thru_phi(bol, n_ctrl, -1); guarantee(bolphi != nullptr, "null boolean phi node"); - - _igvn.replace_node(bol, bolphi); assert(iff->in(1) == bolphi, ""); if (bolphi->Value(&_igvn)->singleton()) { @@ -1461,8 +1477,7 @@ void PhaseIdealLoop::split_if_with_blocks_post(Node *n) { // Conditional-move? Must split up now if (!iff->is_If()) { - Node *cmovphi = split_thru_phi(iff, n_ctrl, -1); - _igvn.replace_node(iff, cmovphi); + Node* cmovphi = split_thru_phi(iff, n_ctrl, -1); return; } diff --git a/src/hotspot/share/opto/node.cpp b/src/hotspot/share/opto/node.cpp index 497d0d1aeb0..3a41353101d 100644 --- a/src/hotspot/share/opto/node.cpp +++ b/src/hotspot/share/opto/node.cpp @@ -2889,6 +2889,20 @@ Node* Node::find_similar(int opc) { return nullptr; } +Node* Node::unique_multiple_edges_out_or_null() const { + Node* use = nullptr; + for (DUIterator_Fast kmax, k = fast_outs(kmax); k < kmax; k++) { + Node* u = fast_out(k); + if (use == nullptr) { + use = u; // first use + } else if (u != use) { + return nullptr; // not unique + } else { + // secondary use + } + } + return use; +} //--------------------------unique_ctrl_out_or_null------------------------- // Return the unique control out if only one. Null if none or more than one. diff --git a/src/hotspot/share/opto/node.hpp b/src/hotspot/share/opto/node.hpp index 9ce9e705eec..4e8d74a6f5e 100644 --- a/src/hotspot/share/opto/node.hpp +++ b/src/hotspot/share/opto/node.hpp @@ -422,6 +422,13 @@ public: Node* raw_out(uint i) const { assert(i < _outcnt,"oob"); return _out[i]; } // Return the unique out edge. Node* unique_out() const { assert(_outcnt==1,"not unique"); return _out[0]; } + + // In some cases, a node n is only used by a single use, but the use may use + // n once or multiple times: + // use = ConvF2I(this) + // use = AddI(this, this) + Node* unique_multiple_edges_out_or_null() const; + // Delete out edge at position 'i' by moving last out edge to position 'i' void raw_del_out(uint i) { assert(i < _outcnt,"oob"); diff --git a/test/hotspot/jtreg/compiler/loopopts/TestSplitThruPhiRemoveDeadNodesFromLoopBody.java b/test/hotspot/jtreg/compiler/loopopts/TestSplitThruPhiRemoveDeadNodesFromLoopBody.java new file mode 100644 index 00000000000..e27f2bf2fa4 --- /dev/null +++ b/test/hotspot/jtreg/compiler/loopopts/TestSplitThruPhiRemoveDeadNodesFromLoopBody.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test id=with-flags + * @bug 8370332 + * @summary This test shows a case where split_if split a node through a phi, but left the + * dead node and a dead phi in the loop _body. Subsequently, SuperWord was run, and + * found the dead nodes in the _body, which is not expected. + * @run main/othervm + * -XX:CompileCommand=compileonly,*TestSplitThruPhiRemoveDeadNodesFromLoopBody::test + * -Xbatch + * compiler.loopopts.superword.TestSplitThruPhiRemoveDeadNodesFromLoopBody + */ + +/* + * @test id=vanilla + * @bug 8370332 + * @run main compiler.loopopts.superword.TestSplitThruPhiRemoveDeadNodesFromLoopBody + */ + +package compiler.loopopts.superword; + +public class TestSplitThruPhiRemoveDeadNodesFromLoopBody { + static int N = 400; + static float floatZero = 0; + static boolean falseFlag = false;; + + static int fieldStore = 0; + static int fieldIncr = 0; + static int arrayI[] = new int[N]; + + static void inlined() { + int x = 0; + for (int i = 0; i < 100; i++) { + fieldStore = 42; + if (falseFlag) { + for (int k = 0; k < 20; k++) { + x += i; + } + } + } + } + + static void test() { + inlined(); + for (int k = 0; k < 10; k++) { + for (int j = 0; j < 100; j++) { + fieldIncr += floatZero; + arrayI[j] = 42; // SuperWord happens here -> SIGSEGV + } + } + } + + public static void main(String[] strArr) { + for (int i = 0; i < 1_000; i++) { + test(); + } + } +} From c1476fca9d7a679d32b7b43956638b845d1027cc Mon Sep 17 00:00:00 2001 From: Volkan Yazici Date: Tue, 4 Nov 2025 08:03:30 +0000 Subject: [PATCH 005/512] 8366575: Remove SDP support Reviewed-by: alanb, erikj, jpai, michaelm --- make/modules/java.base/Copy.gmk | 9 - .../share/classes/sun/net/sdp/SdpSupport.java | 78 ----- .../AsynchronousServerSocketChannelImpl.java | 2 - .../nio/ch/AsynchronousSocketChannelImpl.java | 2 - .../classes/sun/nio/ch/NioSocketImpl.java | 7 - .../sun/nio/ch/ServerSocketChannelImpl.java | 2 - .../classes/sun/nio/ch/SocketChannelImpl.java | 3 - .../unix/classes/sun/net/NetHooks.java | 96 ------ .../unix/classes/sun/net/sdp/SdpProvider.java | 326 ------------------ .../ch/UnixAsynchronousSocketChannelImpl.java | 6 - src/java.base/unix/conf/sdp/sdp.conf.template | 30 -- src/java.base/unix/native/libnet/SdpSupport.c | 112 ------ .../windows/classes/sun/net/NetHooks.java | 59 ---- 13 files changed, 732 deletions(-) delete mode 100644 src/java.base/share/classes/sun/net/sdp/SdpSupport.java delete mode 100644 src/java.base/unix/classes/sun/net/NetHooks.java delete mode 100644 src/java.base/unix/classes/sun/net/sdp/SdpProvider.java delete mode 100644 src/java.base/unix/conf/sdp/sdp.conf.template delete mode 100644 src/java.base/unix/native/libnet/SdpSupport.c delete mode 100644 src/java.base/windows/classes/sun/net/NetHooks.java diff --git a/make/modules/java.base/Copy.gmk b/make/modules/java.base/Copy.gmk index 4625c1f7dbc..b8c1f2c05fa 100644 --- a/make/modules/java.base/Copy.gmk +++ b/make/modules/java.base/Copy.gmk @@ -145,15 +145,6 @@ $(NET_PROPERTIES_DST): $(NET_PROPERTIES_SRCS) TARGETS += $(NET_PROPERTIES_DST) -ifeq ($(call isTargetOs, linux), true) - $(eval $(call SetupCopyFiles, COPY_SDP_CONF, \ - FILES := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/conf/sdp/sdp.conf.template, \ - DEST := $(CONF_DST_DIR)/sdp, \ - )) - - TARGETS += $(COPY_SDP_CONF) -endif - ################################################################################ # JDK license and assembly exception files to be packaged in JMOD diff --git a/src/java.base/share/classes/sun/net/sdp/SdpSupport.java b/src/java.base/share/classes/sun/net/sdp/SdpSupport.java deleted file mode 100644 index 5aa1ecaed8a..00000000000 --- a/src/java.base/share/classes/sun/net/sdp/SdpSupport.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.net.sdp; - -import java.io.IOException; -import java.io.FileDescriptor; - -import jdk.internal.access.SharedSecrets; -import jdk.internal.access.JavaIOFileDescriptorAccess; -import jdk.internal.util.OperatingSystem; - - -/** - * This class defines methods for creating SDP sockets or "converting" existing - * file descriptors, referencing (unbound) TCP sockets, to SDP. - */ - -public final class SdpSupport { - private static final boolean isSupported = OperatingSystem.isLinux(); - private static final JavaIOFileDescriptorAccess fdAccess = - SharedSecrets.getJavaIOFileDescriptorAccess(); - - private SdpSupport() { } - - /** - * Creates a SDP socket, returning file descriptor referencing the socket. - */ - public static FileDescriptor createSocket() throws IOException { - if (!isSupported) - throw new UnsupportedOperationException("SDP not supported on this platform"); - int fdVal = create0(); - FileDescriptor fd = new FileDescriptor(); - fdAccess.set(fd, fdVal); - return fd; - } - - /** - * Converts an existing file descriptor, that references an unbound TCP socket, - * to SDP. - */ - public static void convertSocket(FileDescriptor fd) throws IOException { - if (!isSupported) - throw new UnsupportedOperationException("SDP not supported on this platform"); - int fdVal = fdAccess.get(fd); - convert0(fdVal); - } - - private static native int create0() throws IOException; - - private static native void convert0(int fd) throws IOException; - - static { - jdk.internal.loader.BootLoader.loadLibrary("net"); - } -} diff --git a/src/java.base/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java b/src/java.base/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java index 565c393c2a0..2236a42d360 100644 --- a/src/java.base/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java @@ -38,7 +38,6 @@ import java.util.Collections; import java.util.concurrent.Future; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import sun.net.NetHooks; import sun.net.ext.ExtendedSocketOptions; /** @@ -156,7 +155,6 @@ abstract class AsynchronousServerSocketChannelImpl synchronized (stateLock) { if (localAddress != null) throw new AlreadyBoundException(); - NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); Net.listen(fd, backlog < 1 ? 50 : backlog); localAddress = Net.localAddress(fd); diff --git a/src/java.base/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java b/src/java.base/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java index 68983304735..52f0a71d28c 100644 --- a/src/java.base/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java @@ -41,7 +41,6 @@ import java.util.concurrent.*; import java.util.concurrent.locks.*; import jdk.internal.access.JavaNioAccess; import jdk.internal.access.SharedSecrets; -import sun.net.NetHooks; import sun.net.ext.ExtendedSocketOptions; /** @@ -447,7 +446,6 @@ abstract class AsynchronousSocketChannelImpl throw new AlreadyBoundException(); InetSocketAddress isa = (local == null) ? new InetSocketAddress(0) : Net.checkAddress(local); - NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); localAddress = Net.localAddress(fd); } diff --git a/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java b/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java index dd81b356738..5832e7f529a 100644 --- a/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/NioSocketImpl.java @@ -55,7 +55,6 @@ import jdk.internal.access.JavaIOFileDescriptorAccess; import jdk.internal.access.SharedSecrets; import jdk.internal.ref.CleanerFactory; import sun.net.ConnectionResetException; -import sun.net.NetHooks; import sun.net.PlatformSocketImpl; import sun.net.ext.ExtendedSocketOptions; import jdk.internal.util.Exceptions; @@ -501,11 +500,6 @@ public final class NioSocketImpl extends SocketImpl implements PlatformSocketImp } this.state = ST_CONNECTING; - // invoke beforeTcpConnect hook if not already bound - if (localport == 0) { - NetHooks.beforeTcpConnect(fd, address, port); - } - // save the remote address/port this.address = address; this.port = port; @@ -637,7 +631,6 @@ public final class NioSocketImpl extends SocketImpl implements PlatformSocketImp ensureOpen(); if (localport != 0) throw new SocketException("Already bound"); - NetHooks.beforeTcpBind(fd, host, port); Net.bind(fd, host, port); // set the address field to the given host address to // maintain long standing behavior. When binding to 0.0.0.0 diff --git a/src/java.base/share/classes/sun/nio/ch/ServerSocketChannelImpl.java b/src/java.base/share/classes/sun/nio/ch/ServerSocketChannelImpl.java index b8e25b23b69..e75110a76ad 100644 --- a/src/java.base/share/classes/sun/nio/ch/ServerSocketChannelImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/ServerSocketChannelImpl.java @@ -55,7 +55,6 @@ import static java.net.StandardProtocolFamily.INET; import static java.net.StandardProtocolFamily.INET6; import static java.net.StandardProtocolFamily.UNIX; -import sun.net.NetHooks; import sun.net.ext.ExtendedSocketOptions; /** @@ -331,7 +330,6 @@ class ServerSocketChannelImpl } else { isa = Net.checkAddress(local, family); } - NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(family, fd, isa.getAddress(), isa.getPort()); Net.listen(fd, backlog < 1 ? 50 : backlog); return Net.localAddress(fd); diff --git a/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java b/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java index 37e6a71d80d..6f3e8b443dc 100644 --- a/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java @@ -62,7 +62,6 @@ import static java.net.StandardProtocolFamily.UNIX; import jdk.internal.event.SocketReadEvent; import jdk.internal.event.SocketWriteEvent; import sun.net.ConnectionResetException; -import sun.net.NetHooks; import sun.net.ext.ExtendedSocketOptions; import jdk.internal.util.Exceptions; @@ -828,7 +827,6 @@ class SocketChannelImpl } else { isa = Net.checkAddress(local, family); } - NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(family, fd, isa.getAddress(), isa.getPort()); return Net.localAddress(fd); } @@ -871,7 +869,6 @@ class SocketChannelImpl if (isNetSocket() && (localAddress == null)) { InetSocketAddress isa = (InetSocketAddress) sa; - NetHooks.beforeTcpConnect(fd, isa.getAddress(), isa.getPort()); } remoteAddress = sa; diff --git a/src/java.base/unix/classes/sun/net/NetHooks.java b/src/java.base/unix/classes/sun/net/NetHooks.java deleted file mode 100644 index b64e638f46a..00000000000 --- a/src/java.base/unix/classes/sun/net/NetHooks.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.net; - -import java.net.InetAddress; -import java.io.FileDescriptor; -import java.io.IOException; - -/** - * Defines static methods to be invoked prior to binding or connecting TCP sockets. - */ - -public final class NetHooks { - - /** - * A provider with hooks to allow sockets be converted prior to binding or - * connecting a TCP socket. - * - *

Concrete implementations of this class should define a zero-argument - * constructor and implement the abstract methods specified below. - */ - public abstract static class Provider { - /** - * Initializes a new instance of this class. - */ - protected Provider() {} - - /** - * Invoked prior to binding a TCP socket. - */ - public abstract void implBeforeTcpBind(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException; - - /** - * Invoked prior to connecting an unbound TCP socket. - */ - public abstract void implBeforeTcpConnect(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException; - } - - /** - * For now, we load the SDP provider on Solaris. In the future this may - * be changed to use the ServiceLoader facility to allow the deployment of - * other providers. - */ - private static final Provider provider = new sun.net.sdp.SdpProvider(); - - /** - * Invoke prior to binding a TCP socket. - */ - public static void beforeTcpBind(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException - { - provider.implBeforeTcpBind(fdObj, address, port); - } - - /** - * Invoke prior to connecting an unbound TCP socket. - */ - public static void beforeTcpConnect(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException - { - provider.implBeforeTcpConnect(fdObj, address, port); - } -} diff --git a/src/java.base/unix/classes/sun/net/sdp/SdpProvider.java b/src/java.base/unix/classes/sun/net/sdp/SdpProvider.java deleted file mode 100644 index f2ad2717fb6..00000000000 --- a/src/java.base/unix/classes/sun/net/sdp/SdpProvider.java +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Copyright (c) 2009, 2024, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.net.sdp; - -import sun.net.NetHooks; -import java.net.InetAddress; -import java.net.Inet4Address; -import java.net.UnknownHostException; -import java.util.*; -import java.io.File; -import java.io.FileDescriptor; -import java.io.IOException; -import java.io.PrintStream; - -/** - * A NetHooks provider that converts sockets from the TCP to SDP protocol prior - * to binding or connecting. - */ - -public class SdpProvider extends NetHooks.Provider { - // maximum port - private static final int MAX_PORT = 65535; - - // indicates if SDP is enabled and the rules for when the protocol is used - private final boolean enabled; - private final List rules; - - // logging for debug purposes - private PrintStream log; - - public SdpProvider() { - Properties props = System.getProperties(); - // if this property is not defined then there is nothing to do. - String file = props.getProperty("com.sun.sdp.conf"); - if (file == null) { - this.enabled = false; - this.rules = null; - return; - } - - // load configuration file - List list = null; - try { - list = loadRulesFromFile(file); - } catch (IOException e) { - fail("Error reading %s: %s", file, e.getMessage()); - } - - // check if debugging is enabled - PrintStream out = null; - String logfile = props.getProperty("com.sun.sdp.debug"); - if (logfile != null) { - out = System.out; - if (!logfile.isEmpty()) { - try { - out = new PrintStream(logfile); - } catch (IOException ignore) { } - } - } - - this.enabled = !list.isEmpty(); - this.rules = list; - this.log = out; - } - - // supported actions - private static enum Action { - BIND, - CONNECT; - } - - // a rule for matching a bind or connect request - private static interface Rule { - boolean match(Action action, InetAddress address, int port); - } - - // rule to match port[-end] - private static class PortRangeRule implements Rule { - private final Action action; - private final int portStart; - private final int portEnd; - PortRangeRule(Action action, int portStart, int portEnd) { - this.action = action; - this.portStart = portStart; - this.portEnd = portEnd; - } - Action action() { - return action; - } - @Override - public boolean match(Action action, InetAddress address, int port) { - return (action == this.action && - port >= this.portStart && - port <= this.portEnd); - } - } - - // rule to match address[/prefix] port[-end] - private static class AddressPortRangeRule extends PortRangeRule { - private final byte[] addressAsBytes; - private final int prefixByteCount; - private final byte mask; - AddressPortRangeRule(Action action, InetAddress address, - int prefix, int port, int end) - { - super(action, port, end); - this.addressAsBytes = address.getAddress(); - this.prefixByteCount = prefix >> 3; - this.mask = (byte)(0xff << (8 - (prefix % 8))); - } - @Override - public boolean match(Action action, InetAddress address, int port) { - if (action != action()) - return false; - byte[] candidate = address.getAddress(); - // same address type? - if (candidate.length != addressAsBytes.length) - return false; - // check bytes - for (int i=0; i loadRulesFromFile(String file) - throws IOException - { - try (Scanner scanner = new Scanner(new File(file))) { - List result = new ArrayList<>(); - while (scanner.hasNextLine()) { - String line = scanner.nextLine().trim(); - - // skip blank lines and comments - if (line.isEmpty() || line.charAt(0) == '#') - continue; - - // must have 3 fields - String[] s = line.split("\\s+"); - if (s.length != 3) { - fail("Malformed line '%s'", line); - continue; - } - - // first field is the action ("bind" or "connect") - Action action = null; - for (Action a: Action.values()) { - if (s[0].equalsIgnoreCase(a.name())) { - action = a; - break; - } - } - if (action == null) { - fail("Action '%s' not recognized", s[0]); - continue; - } - - // * port[-end] - int[] ports = parsePortRange(s[2]); - if (ports.length == 0) { - fail("Malformed port range '%s'", s[2]); - continue; - } - - // match all addresses - if (s[1].equals("*")) { - result.add(new PortRangeRule(action, ports[0], ports[1])); - continue; - } - - // hostname | ipaddress[/prefix] - int pos = s[1].indexOf('/'); - try { - if (pos < 0) { - // hostname or ipaddress (no prefix) - InetAddress[] addresses = InetAddress.getAllByName(s[1]); - for (InetAddress address: addresses) { - int prefix = - (address instanceof Inet4Address) ? 32 : 128; - result.add(new AddressPortRangeRule(action, address, - prefix, ports[0], ports[1])); - } - } else { - // ipaddress/prefix - InetAddress address = InetAddress - .getByName(s[1].substring(0, pos)); - int prefix = -1; - try { - prefix = Integer.parseInt(s[1], pos + 1, - s[1].length(), 10); - if (address instanceof Inet4Address) { - // must be 1-31 - if (prefix < 0 || prefix > 32) prefix = -1; - } else { - // must be 1-128 - if (prefix < 0 || prefix > 128) prefix = -1; - } - } catch (NumberFormatException e) { - } - - if (prefix > 0) { - result.add(new AddressPortRangeRule(action, - address, prefix, ports[0], ports[1])); - } else { - fail("Malformed prefix '%s'", s[1]); - continue; - } - } - } catch (UnknownHostException uhe) { - fail("Unknown host or malformed IP address '%s'", s[1]); - continue; - } - } - return result; - } - } - - // converts unbound TCP socket to a SDP socket if it matches the rules - private void convertTcpToSdpIfMatch(FileDescriptor fdObj, - Action action, - InetAddress address, - int port) - throws IOException - { - boolean matched = false; - for (Rule rule: rules) { - if (rule.match(action, address, port)) { - SdpSupport.convertSocket(fdObj); - matched = true; - break; - } - } - if (log != null) { - String addr = (address instanceof Inet4Address) ? - address.getHostAddress() : "[" + address.getHostAddress() + "]"; - if (matched) { - log.format("%s to %s:%d (socket converted to SDP protocol)\n", action, addr, port); - } else { - log.format("%s to %s:%d (no match)\n", action, addr, port); - } - } - } - - @Override - public void implBeforeTcpBind(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException - { - if (enabled) - convertTcpToSdpIfMatch(fdObj, Action.BIND, address, port); - } - - @Override - public void implBeforeTcpConnect(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException - { - if (enabled) - convertTcpToSdpIfMatch(fdObj, Action.CONNECT, address, port); - } -} diff --git a/src/java.base/unix/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java b/src/java.base/unix/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java index 5e75e3b2486..c5b23ed2690 100644 --- a/src/java.base/unix/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java +++ b/src/java.base/unix/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java @@ -35,7 +35,6 @@ import java.io.FileDescriptor; import jdk.internal.util.Exceptions; import sun.net.ConnectionResetException; -import sun.net.NetHooks; /** * Unix implementation of AsynchronousSocketChannel @@ -310,7 +309,6 @@ class UnixAsynchronousSocketChannelImpl InetSocketAddress isa = Net.checkAddress(remote); // check and set state - boolean notifyBeforeTcpConnect; synchronized (stateLock) { if (state == ST_CONNECTED) throw new AlreadyConnectedException(); @@ -318,15 +316,11 @@ class UnixAsynchronousSocketChannelImpl throw new ConnectionPendingException(); state = ST_PENDING; pendingRemote = remote; - notifyBeforeTcpConnect = (localAddress == null); } Throwable e = null; try { begin(); - // notify hook if unbound - if (notifyBeforeTcpConnect) - NetHooks.beforeTcpConnect(fd, isa.getAddress(), isa.getPort()); int n = Net.connect(fd, isa.getAddress(), isa.getPort()); if (n == IOStatus.UNAVAILABLE) { // connection could not be established immediately diff --git a/src/java.base/unix/conf/sdp/sdp.conf.template b/src/java.base/unix/conf/sdp/sdp.conf.template deleted file mode 100644 index 71cb5c2ce84..00000000000 --- a/src/java.base/unix/conf/sdp/sdp.conf.template +++ /dev/null @@ -1,30 +0,0 @@ -# -# Configuration file to enable InfiniBand Sockets Direct Protocol. -# -# Each line that does not start with a comment (#) is a rule to indicate when -# the SDP transport protocol should be used. The format of a rule is as follows: -# ("bind"|"connect") 1*LWSP-char (hostname|ipaddress["/"prefix]) 1*LWSP-char ("*"|port)["-"("*"|port)] -# -# A "bind" rule indicates that the SDP protocol transport should be used when -# a TCP socket binds to an address/port that matches the rule. A "connect" rule -# indicates that the SDP protocol transport should be used when an unbound -# TCP socket attempts to connect to an address/port that matches the rule. -# Addresses may be specified as hostnames or literal Internet Protocol (IP) -# addresses. When a literal IP address is used then a prefix length may be used -# to indicate the number of bits for matching (useful when a block of addresses -# or subnet is allocated to the InfiniBand fabric). - -# Use SDP for all sockets that bind to specific local addresses -#bind 192.168.1.1 * -#bind fe80::21b:24ff:fe3d:7896 * - -# Use SDP for all sockets that bind to the wildcard address in a port range -#bind 0.0.0.0 5000-5999 -#bind ::0 5000-5999 - -# Use SDP when connecting to all application services on 192.168.1.* -#connect 192.168.1.0/24 1024-* - -# Use SDP when connecting to the http server or MySQL database on hpccluster. -#connect hpccluster.foo.com 80 -#connect hpccluster.foo.com 3306 diff --git a/src/java.base/unix/native/libnet/SdpSupport.c b/src/java.base/unix/native/libnet/SdpSupport.c deleted file mode 100644 index b56f16905fa..00000000000 --- a/src/java.base/unix/native/libnet/SdpSupport.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2009, 2024, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -#include -#include -#include - -#if defined(__linux__) - #if !defined(AF_INET_SDP) - #define AF_INET_SDP 27 - #endif -#endif - -#include "jni.h" -#include "jni_util.h" -#include "net_util.h" - -/** - * Creates a SDP socket. - */ -static int create(JNIEnv* env) -{ - int s; - -#if defined(__linux__) - /** - * IPv6 not supported by SDP on Linux - */ - if (ipv6_available()) { - JNU_ThrowIOException(env, "IPv6 not supported"); - return -1; - } - s = socket(AF_INET_SDP, SOCK_STREAM, 0); -#else - /* not supported on other platforms at this time */ - s = -1; - errno = EPROTONOSUPPORT; -#endif - - if (s < 0) - JNU_ThrowIOExceptionWithLastError(env, "socket"); - return s; -} - -/** - * Creates a SDP socket, returning file descriptor referencing the socket. - */ -JNIEXPORT jint JNICALL -Java_sun_net_sdp_SdpSupport_create0(JNIEnv *env, jclass cls) -{ - return create(env); -} - -/** - * Converts an existing file descriptor, that references an unbound TCP socket, - * to SDP. - */ -JNIEXPORT void JNICALL -Java_sun_net_sdp_SdpSupport_convert0(JNIEnv *env, jclass cls, int fd) -{ - int s = create(env); - if (s >= 0) { - socklen_t len; - int arg, res; - struct linger linger; - - /* copy socket options that are relevant to SDP */ - len = sizeof(arg); - if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, &len) == 0) - setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, len); -#ifdef SO_REUSEPORT - len = sizeof(arg); - if (getsockopt(fd, SOL_SOCKET, SO_REUSEPORT, (char*)&arg, &len) == 0) - setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (char*)&arg, len); -#endif - len = sizeof(arg); - if (getsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, &len) == 0) - setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, len); - len = sizeof(linger); - if (getsockopt(fd, SOL_SOCKET, SO_LINGER, (void*)&linger, &len) == 0) - setsockopt(s, SOL_SOCKET, SO_LINGER, (char*)&linger, len); - - RESTARTABLE(dup2(s, fd), res); - if (res < 0) - JNU_ThrowIOExceptionWithLastError(env, "dup2"); - res = close(s); - if (res < 0 && !(*env)->ExceptionCheck(env)) - JNU_ThrowIOExceptionWithLastError(env, "close"); - } -} diff --git a/src/java.base/windows/classes/sun/net/NetHooks.java b/src/java.base/windows/classes/sun/net/NetHooks.java deleted file mode 100644 index fada9fecd5f..00000000000 --- a/src/java.base/windows/classes/sun/net/NetHooks.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package sun.net; - -import java.net.InetAddress; -import java.io.FileDescriptor; -import java.io.IOException; - -/** - * Defines static methods to ensure that any installed net hooks are invoked - * prior to binding or connecting TCP sockets. - */ - -public final class NetHooks { - - /** - * Invoke prior to binding a TCP socket. - */ - public static void beforeTcpBind(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException - { - // nothing to do - } - - /** - * Invoke prior to connecting an unbound TCP socket. - */ - public static void beforeTcpConnect(FileDescriptor fdObj, - InetAddress address, - int port) - throws IOException - { - // nothing to do - } -} From e4aed95cac343f1339b9bc87721561bdc4c2f5ad Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Tue, 4 Nov 2025 08:48:48 +0000 Subject: [PATCH 006/512] 8370682: G1: Survivor regions not in young gen cset group Reviewed-by: iwalulya, ayang --- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 28 +++++++++++-------- src/hotspot/share/gc/g1/g1CollectionSet.cpp | 9 +++++- .../share/gc/g1/g1FullGCResetMetadataTask.cpp | 7 ++--- .../gc/g1/g1ParScanThreadState.inline.hpp | 8 ++++-- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index 72a1ae0e2a6..90b38a96d67 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -2563,10 +2563,12 @@ void G1CollectedHeap::verify_region_attr_is_remset_tracked() { public: virtual bool do_heap_region(G1HeapRegion* r) { G1CollectedHeap* g1h = G1CollectedHeap::heap(); - const bool is_remset_tracked = g1h->region_attr(r->bottom()).is_remset_tracked(); - assert(r->rem_set()->is_tracked() == is_remset_tracked, - "Region %u remset tracking status (%s) different to region attribute (%s)", - r->hrm_index(), BOOL_TO_STR(r->rem_set()->is_tracked()), BOOL_TO_STR(is_remset_tracked)); + G1HeapRegionAttr attr = g1h->region_attr(r->bottom()); + bool const is_remset_tracked = attr.is_remset_tracked(); + assert((r->rem_set()->is_tracked() == is_remset_tracked) || + (attr.is_new_survivor() && is_remset_tracked), + "Region %u (%s) remset tracking status (%s) different to region attribute (%s)", + r->hrm_index(), r->get_type_str(), BOOL_TO_STR(r->rem_set()->is_tracked()), BOOL_TO_STR(is_remset_tracked)); return false; } } cl; @@ -3105,9 +3107,8 @@ G1HeapRegion* G1CollectedHeap::new_mutator_alloc_region(size_t word_size, new_alloc_region->set_eden(); _eden.add(new_alloc_region); _policy->set_region_eden(new_alloc_region); - _policy->remset_tracker()->update_at_allocate(new_alloc_region); - // Install the group cardset. - young_regions_cset_group()->add(new_alloc_region); + + collection_set()->add_eden_region(new_alloc_region); G1HeapRegionPrinter::alloc(new_alloc_region); return new_alloc_region; } @@ -3120,7 +3121,6 @@ void G1CollectedHeap::retire_mutator_alloc_region(G1HeapRegion* alloc_region, assert_heap_locked_or_at_safepoint(true /* should_be_vm_thread */); assert(alloc_region->is_eden(), "all mutator alloc regions should be eden"); - collection_set()->add_eden_region(alloc_region); increase_used(allocated_bytes); _eden.add_used_bytes(allocated_bytes); G1HeapRegionPrinter::retire(alloc_region); @@ -3164,14 +3164,20 @@ G1HeapRegion* G1CollectedHeap::new_gc_alloc_region(size_t word_size, G1HeapRegio if (type.is_survivor()) { new_alloc_region->set_survivor(); _survivor.add(new_alloc_region); + // The remembered set/group cardset for this region will be installed at the + // end of GC. Cannot do that right now because we still need the current young + // gen cardset group. + // However, register with the attribute table to collect remembered set entries + // immediately as it is the only source for determining the need for remembered + // set tracking during GC. register_new_survivor_region_with_region_attr(new_alloc_region); - // Install the group cardset. - young_regions_cset_group()->add(new_alloc_region); } else { new_alloc_region->set_old(); + // Update remembered set/cardset. + _policy->remset_tracker()->update_at_allocate(new_alloc_region); + // Synchronize with region attribute table. update_region_attr(new_alloc_region); } - _policy->remset_tracker()->update_at_allocate(new_alloc_region); G1HeapRegionPrinter::alloc(new_alloc_region); return new_alloc_region; } diff --git a/src/hotspot/share/gc/g1/g1CollectionSet.cpp b/src/hotspot/share/gc/g1/g1CollectionSet.cpp index eb50b7ae5be..abfddf860e6 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSet.cpp +++ b/src/hotspot/share/gc/g1/g1CollectionSet.cpp @@ -163,6 +163,7 @@ void G1CollectionSet::clear() { assert_at_safepoint_on_vm_thread(); _regions_cur_length = 0; _groups.clear(); + assert(_optional_groups.length() == 0, "must be"); } void G1CollectionSet::iterate(G1HeapRegionClosure* cl) const { @@ -216,7 +217,11 @@ void G1CollectionSet::add_young_region_common(G1HeapRegion* hr) { assert(hr->is_young(), "invariant"); assert(_inc_build_state == CSetBuildType::Active, "Precondition"); - assert(!hr->in_collection_set(), "invariant"); + // Add to remembered set/cardset group. + _g1h->policy()->remset_tracker()->update_at_allocate(hr); + _g1h->young_regions_cset_group()->add(hr); + + // Synchronize with the region attribute table. _g1h->register_young_region_with_region_attr(hr); // We use UINT_MAX as "invalid" marker in verification. @@ -233,11 +238,13 @@ void G1CollectionSet::add_young_region_common(G1HeapRegion* hr) { } void G1CollectionSet::add_survivor_regions(G1HeapRegion* hr) { + assert_at_safepoint_on_vm_thread(); assert(hr->is_survivor(), "Must only add survivor regions, but is %s", hr->get_type_str()); add_young_region_common(hr); } void G1CollectionSet::add_eden_region(G1HeapRegion* hr) { + assert_heap_locked_or_at_safepoint(true /* should_be_vm_thread */); assert(hr->is_eden(), "Must only add eden regions, but is %s", hr->get_type_str()); add_young_region_common(hr); } diff --git a/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp b/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp index 02397392a6e..c8fba3459aa 100644 --- a/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp +++ b/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp @@ -31,16 +31,13 @@ G1FullGCResetMetadataTask::G1ResetMetadataClosure::G1ResetMetadataClosure(G1Full _collector(collector) { } void G1FullGCResetMetadataTask::G1ResetMetadataClosure::reset_region_metadata(G1HeapRegion* hr) { + assert(hr->is_humongous() || !hr->rem_set()->has_cset_group(), + "Non-humongous regions must not have cset group"); hr->rem_set()->clear(); hr->clear_both_card_tables(); } bool G1FullGCResetMetadataTask::G1ResetMetadataClosure::do_heap_region(G1HeapRegion* hr) { - if (!hr->is_humongous()) { - hr->uninstall_cset_group(); - } - - uint const region_idx = hr->hrm_index(); if (!_collector->is_compaction_target(region_idx)) { assert(!hr->is_free(), "all free regions should be compaction targets"); diff --git a/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp b/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp index 5e827a7fd60..854c341f720 100644 --- a/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp +++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp @@ -151,11 +151,13 @@ template void G1ParScanThreadState::mark_card_if_tracked(G1HeapRegionA #ifdef ASSERT G1HeapRegion* const hr_obj = _g1h->heap_region_containing(o); - assert(region_attr.is_remset_tracked() == hr_obj->rem_set()->is_tracked(), - "State flag indicating remset tracking disagrees (%s) with actual remembered set (%s) for region %u", + assert((region_attr.is_remset_tracked() == hr_obj->rem_set()->is_tracked()) || + (region_attr.is_new_survivor() && region_attr.is_remset_tracked()), + "State flag indicating remset tracking disagrees (%s) with actual remembered set (%s) for region %u (%s)", BOOL_TO_STR(region_attr.is_remset_tracked()), BOOL_TO_STR(hr_obj->rem_set()->is_tracked()), - hr_obj->hrm_index()); + hr_obj->hrm_index(), + hr_obj->get_type_str()); #endif if (!region_attr.is_remset_tracked()) { return; From 21f41c5f49cd3c5e6e4f29ed38701a4d92c16098 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Tue, 4 Nov 2025 09:22:47 +0000 Subject: [PATCH 007/512] 8370774: Merge ModRefBarrierSet into CardTableBarrierSet Reviewed-by: tschatzl, iwalulya --- .../gc/g1/g1BarrierSetAssembler_aarch64.cpp | 2 +- .../gc/g1/g1BarrierSetAssembler_aarch64.hpp | 4 +- .../cardTableBarrierSetAssembler_aarch64.cpp | 25 +++ .../cardTableBarrierSetAssembler_aarch64.hpp | 16 +- .../modRefBarrierSetAssembler_aarch64.cpp | 53 ------- .../modRefBarrierSetAssembler_aarch64.hpp | 54 ------- .../arm/gc/g1/g1BarrierSetAssembler_arm.cpp | 2 +- .../arm/gc/g1/g1BarrierSetAssembler_arm.hpp | 4 +- .../cardTableBarrierSetAssembler_arm.cpp | 24 +++ .../cardTableBarrierSetAssembler_arm.hpp | 17 ++- .../shared/modRefBarrierSetAssembler_arm.cpp | 52 ------- .../shared/modRefBarrierSetAssembler_arm.hpp | 54 ------- .../ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp | 8 +- .../ppc/gc/g1/g1BarrierSetAssembler_ppc.hpp | 4 +- .../cardTableBarrierSetAssembler_ppc.cpp | 61 ++++++++ .../cardTableBarrierSetAssembler_ppc.hpp | 31 +++- .../shared/modRefBarrierSetAssembler_ppc.cpp | 91 ----------- .../shared/modRefBarrierSetAssembler_ppc.hpp | 66 -------- .../gc/g1/g1BarrierSetAssembler_riscv.cpp | 2 +- .../gc/g1/g1BarrierSetAssembler_riscv.hpp | 4 +- .../cardTableBarrierSetAssembler_riscv.cpp | 23 +++ .../cardTableBarrierSetAssembler_riscv.hpp | 18 ++- .../modRefBarrierSetAssembler_riscv.cpp | 53 ------- .../modRefBarrierSetAssembler_riscv.hpp | 55 ------- .../s390/gc/g1/g1BarrierSetAssembler_s390.cpp | 2 +- .../s390/gc/g1/g1BarrierSetAssembler_s390.hpp | 4 +- .../cardTableBarrierSetAssembler_s390.cpp | 39 +++++ .../cardTableBarrierSetAssembler_s390.hpp | 17 ++- .../shared/modRefBarrierSetAssembler_s390.cpp | 73 --------- .../shared/modRefBarrierSetAssembler_s390.hpp | 55 ------- .../x86/gc/g1/g1BarrierSetAssembler_x86.cpp | 2 +- .../x86/gc/g1/g1BarrierSetAssembler_x86.hpp | 4 +- .../cardTableBarrierSetAssembler_x86.cpp | 52 +++++++ .../cardTableBarrierSetAssembler_x86.hpp | 18 ++- .../shared/modRefBarrierSetAssembler_x86.cpp | 80 ---------- .../shared/modRefBarrierSetAssembler_x86.hpp | 53 ------- .../shared/modRefBarrierSetAssembler_zero.hpp | 30 ---- src/hotspot/share/gc/g1/c1/g1BarrierSetC1.hpp | 4 +- src/hotspot/share/gc/g1/g1BarrierSet.hpp | 4 +- .../share/gc/g1/g1BarrierSet.inline.hpp | 6 +- src/hotspot/share/gc/serial/serialFullGC.cpp | 1 - .../share/gc/shared/barrierSetConfig.hpp | 12 +- .../gc/shared/barrierSetConfig.inline.hpp | 1 - .../gc/shared/c1/cardTableBarrierSetC1.cpp | 62 ++++++++ .../gc/shared/c1/cardTableBarrierSetC1.hpp | 15 +- .../share/gc/shared/c1/modRefBarrierSetC1.cpp | 94 ------------ .../share/gc/shared/c1/modRefBarrierSetC1.hpp | 50 ------ .../gc/shared/c2/cardTableBarrierSetC2.cpp | 79 ++++++++++ .../gc/shared/c2/cardTableBarrierSetC2.hpp | 12 +- .../share/gc/shared/c2/modRefBarrierSetC2.cpp | 107 ------------- .../share/gc/shared/c2/modRefBarrierSetC2.hpp | 49 ------ .../share/gc/shared/cardTableBarrierSet.cpp | 20 ++- .../share/gc/shared/cardTableBarrierSet.hpp | 56 ++++++- .../gc/shared/cardTableBarrierSet.inline.hpp | 113 +++++++++++++- .../share/gc/shared/modRefBarrierSet.hpp | 108 ------------- .../gc/shared/modRefBarrierSet.inline.hpp | 144 ------------------ .../gc/shared/modRefBarrierSetAssembler.hpp | 32 ---- src/hotspot/share/gc/shared/vmStructs_gc.hpp | 4 +- src/hotspot/share/oops/access.inline.hpp | 4 +- .../share/runtime/continuationFreezeThaw.cpp | 2 +- 60 files changed, 698 insertions(+), 1433 deletions(-) delete mode 100644 src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.cpp delete mode 100644 src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.hpp delete mode 100644 src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.cpp delete mode 100644 src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.hpp delete mode 100644 src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.cpp delete mode 100644 src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.hpp delete mode 100644 src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.cpp delete mode 100644 src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.hpp delete mode 100644 src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.cpp delete mode 100644 src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.hpp delete mode 100644 src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp delete mode 100644 src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.hpp delete mode 100644 src/hotspot/cpu/zero/gc/shared/modRefBarrierSetAssembler_zero.hpp delete mode 100644 src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.cpp delete mode 100644 src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.hpp delete mode 100644 src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.cpp delete mode 100644 src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.hpp delete mode 100644 src/hotspot/share/gc/shared/modRefBarrierSet.hpp delete mode 100644 src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp delete mode 100644 src/hotspot/share/gc/shared/modRefBarrierSetAssembler.hpp diff --git a/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp index 974527f30e9..3138c76c593 100644 --- a/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.cpp @@ -347,7 +347,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorator bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool on_reference = on_weak || on_phantom; - ModRefBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp2); + CardTableBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp2); if (on_oop && on_reference) { // LR is live. It must be saved around calls. __ enter(/*strip_ret_addr*/true); // barrier may call runtime diff --git a/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.hpp index 72040cd7ad2..777a86e804b 100644 --- a/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/gc/g1/g1BarrierSetAssembler_aarch64.hpp @@ -26,7 +26,7 @@ #define CPU_AARCH64_GC_G1_G1BARRIERSETASSEMBLER_AARCH64_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "utilities/macros.hpp" class LIR_Assembler; @@ -34,7 +34,7 @@ class StubAssembler; class G1PreBarrierStub; class G1PreBarrierStubC2; -class G1BarrierSetAssembler: public ModRefBarrierSetAssembler { +class G1BarrierSetAssembler: public CardTableBarrierSetAssembler { protected: void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, RegSet saved_regs); diff --git a/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.cpp index ea36183c9de..c039e55cd4d 100644 --- a/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.cpp @@ -32,6 +32,31 @@ #define __ masm-> +void CardTableBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register src, Register dst, Register count, RegSet saved_regs) { + + if (is_oop) { + gen_write_ref_array_pre_barrier(masm, decorators, dst, count, saved_regs); + } +} + +void CardTableBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register start, Register count, Register tmp, + RegSet saved_regs) { + if (is_oop) { + gen_write_ref_array_post_barrier(masm, decorators, start, count, tmp, saved_regs); + } +} + +void CardTableBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { + if (is_reference_type(type)) { + oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } else { + BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } +} + void CardTableBarrierSetAssembler::store_check(MacroAssembler* masm, Register obj, Address dst) { BarrierSet* bs = BarrierSet::barrier_set(); diff --git a/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.hpp index d0d5e4c3d4c..91a65710f45 100644 --- a/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/gc/shared/cardTableBarrierSetAssembler_aarch64.hpp @@ -26,17 +26,27 @@ #define CPU_AARCH64_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_AARCH64_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/barrierSetAssembler.hpp" -class CardTableBarrierSetAssembler: public ModRefBarrierSetAssembler { +class CardTableBarrierSetAssembler: public BarrierSetAssembler { protected: - void store_check(MacroAssembler* masm, Register obj, Address dst); + virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, + Register addr, Register count, RegSet saved_regs) {} virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register start, Register count, Register tmp, RegSet saved_regs); virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); + virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register src, Register dst, Register count, RegSet saved_regs); + + virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register start, Register count, Register tmp, RegSet saved_regs); + virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); + + void store_check(MacroAssembler* masm, Register obj, Address dst); }; #endif // CPU_AARCH64_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_AARCH64_HPP diff --git a/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.cpp deleted file mode 100644 index 68901591893..00000000000 --- a/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "asm/macroAssembler.inline.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" - -#define __ masm-> - -void ModRefBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register src, Register dst, Register count, RegSet saved_regs) { - - if (is_oop) { - gen_write_ref_array_pre_barrier(masm, decorators, dst, count, saved_regs); - } -} - -void ModRefBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register start, Register count, Register tmp, - RegSet saved_regs) { - if (is_oop) { - gen_write_ref_array_post_barrier(masm, decorators, start, count, tmp, saved_regs); - } -} - -void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { - if (is_reference_type(type)) { - oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } else { - BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } -} diff --git a/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.hpp deleted file mode 100644 index 22f98441f4e..00000000000 --- a/src/hotspot/cpu/aarch64/gc/shared/modRefBarrierSetAssembler_aarch64.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef CPU_AARCH64_GC_SHARED_MODREFBARRIERSETASSEMBLER_AARCH64_HPP -#define CPU_AARCH64_GC_SHARED_MODREFBARRIERSETASSEMBLER_AARCH64_HPP - -#include "asm/macroAssembler.hpp" -#include "gc/shared/barrierSetAssembler.hpp" - -// The ModRefBarrierSetAssembler filters away accesses on BasicTypes other -// than T_OBJECT/T_ARRAY (oops). The oop accesses call one of the protected -// accesses, which are overridden in the concrete BarrierSetAssembler. - -class ModRefBarrierSetAssembler: public BarrierSetAssembler { -protected: - virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count, RegSet saved_regs) {} - virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register start, Register count, Register tmp, RegSet saved_regs) {} - - virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) = 0; - -public: - virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register src, Register dst, Register count, RegSet saved_regs); - virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register start, Register count, Register tmp, RegSet saved_regs); - virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); -}; - -#endif // CPU_AARCH64_GC_SHARED_MODREFBARRIERSETASSEMBLER_AARCH64_HPP diff --git a/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp b/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp index 74a9f273a43..e8ac1f56bda 100644 --- a/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.cpp @@ -320,7 +320,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorator bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool on_reference = on_weak || on_phantom; - ModRefBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp2, tmp3); + CardTableBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp2, tmp3); if (on_oop && on_reference) { // Generate the G1 pre-barrier code to log the value of // the referent field in an SATB buffer. diff --git a/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.hpp b/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.hpp index 9e0eff4601b..e3c8cf46600 100644 --- a/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.hpp +++ b/src/hotspot/cpu/arm/gc/g1/g1BarrierSetAssembler_arm.hpp @@ -26,7 +26,7 @@ #define CPU_ARM_GC_G1_G1BARRIERSETASSEMBLER_ARM_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "utilities/macros.hpp" class LIR_Assembler; @@ -34,7 +34,7 @@ class StubAssembler; class G1PreBarrierStub; class G1PreBarrierStubC2; -class G1BarrierSetAssembler: public ModRefBarrierSetAssembler { +class G1BarrierSetAssembler: public CardTableBarrierSetAssembler { protected: void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, int callee_saved_regs); diff --git a/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp b/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp index 91d3b8e9e5c..2427d46cafa 100644 --- a/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.cpp @@ -40,6 +40,30 @@ #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") +void CardTableBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register addr, Register count, int callee_saved_regs) { + + if (is_oop) { + gen_write_ref_array_pre_barrier(masm, decorators, addr, count, callee_saved_regs); + } +} + +void CardTableBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register addr, Register count, Register tmp) { + if (is_oop) { + gen_write_ref_array_post_barrier(masm, decorators, addr, count, tmp); + } +} + +void CardTableBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address obj, Register new_val, Register tmp1, Register tmp2, Register tmp3, bool is_null) { + if (type == T_OBJECT || type == T_ARRAY) { + oop_store_at(masm, decorators, type, obj, new_val, tmp1, tmp2, tmp3, is_null); + } else { + BarrierSetAssembler::store_at(masm, decorators, type, obj, new_val, tmp1, tmp2, tmp3, is_null); + } +} + void CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, Register tmp) { BLOCK_COMMENT("CardTablePostBarrier"); diff --git a/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.hpp b/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.hpp index e08a68445a8..ce767754294 100644 --- a/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.hpp +++ b/src/hotspot/cpu/arm/gc/shared/cardTableBarrierSetAssembler_arm.hpp @@ -26,9 +26,9 @@ #define CPU_ARM_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_ARM_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/barrierSetAssembler.hpp" -class CardTableBarrierSetAssembler: public ModRefBarrierSetAssembler { +class CardTableBarrierSetAssembler: public BarrierSetAssembler { private: void store_check(MacroAssembler* masm, Register obj, Address dst); void store_check_part1(MacroAssembler* masm, Register card_table_base); @@ -37,10 +37,23 @@ private: void set_card(MacroAssembler* masm, Register card_table_base, Address card_table_addr, Register tmp); protected: + virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, + Register addr, Register count, int callee_saved_regs) {} + virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, Register tmp); + virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address obj, Register new_val, Register tmp1, Register tmp2, Register tmp3, bool is_null); + +public: + virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register addr, Register count, int callee_saved_regs); + virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register addr, Register count, Register tmp); + virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address obj, Register val, Register tmp1, Register tmp2, Register tmp3, bool is_null); + }; #endif // CPU_ARM_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_ARM_HPP diff --git a/src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.cpp b/src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.cpp deleted file mode 100644 index cb4058d48ed..00000000000 --- a/src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "asm/macroAssembler.inline.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" - -#define __ masm-> - -void ModRefBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register addr, Register count, int callee_saved_regs) { - - if (is_oop) { - gen_write_ref_array_pre_barrier(masm, decorators, addr, count, callee_saved_regs); - } -} - -void ModRefBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register addr, Register count, Register tmp) { - if (is_oop) { - gen_write_ref_array_post_barrier(masm, decorators, addr, count, tmp); - } -} - -void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address obj, Register new_val, Register tmp1, Register tmp2, Register tmp3, bool is_null) { - if (type == T_OBJECT || type == T_ARRAY) { - oop_store_at(masm, decorators, type, obj, new_val, tmp1, tmp2, tmp3, is_null); - } else { - BarrierSetAssembler::store_at(masm, decorators, type, obj, new_val, tmp1, tmp2, tmp3, is_null); - } -} diff --git a/src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.hpp b/src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.hpp deleted file mode 100644 index e41d8dc4727..00000000000 --- a/src/hotspot/cpu/arm/gc/shared/modRefBarrierSetAssembler_arm.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef CPU_ARM_GC_SHARED_MODREFBARRIERSETASSEMBLER_ARM_HPP -#define CPU_ARM_GC_SHARED_MODREFBARRIERSETASSEMBLER_ARM_HPP - -#include "asm/macroAssembler.hpp" -#include "gc/shared/barrierSetAssembler.hpp" - -// The ModRefBarrierSetAssembler filters away accesses on BasicTypes other -// than T_OBJECT/T_ARRAY (oops). The oop accesses call one of the protected -// accesses, which are overridden in the concrete BarrierSetAssembler. - -class ModRefBarrierSetAssembler: public BarrierSetAssembler { -protected: - virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count, int callee_saved_regs) {} - virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count, Register tmp) {} - - virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address obj, Register val, Register tmp1, Register tmp2, Register tmp3, bool is_null) = 0; - -public: - virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register addr, Register count, int callee_saved_regs); - virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register addr, Register count, Register tmp); - virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address obj, Register val, Register tmp1, Register tmp2, Register tmp3, bool is_null); -}; - -#endif // CPU_ARM_GC_SHARED_MODREFBARRIERSETASSEMBLER_ARM_HPP diff --git a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp index 65bfd683abd..5c3e1302ed3 100644 --- a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp @@ -321,10 +321,10 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorator Label done; if (on_oop && on_reference && L_handle_null == nullptr) { L_handle_null = &done; } // Load the value of the referent field. - ModRefBarrierSetAssembler::load_at(masm, decorators, type, - base, ind_or_offs, dst, - tmp1, tmp2, - preservation_level, L_handle_null); + CardTableBarrierSetAssembler::load_at(masm, decorators, type, + base, ind_or_offs, dst, + tmp1, tmp2, + preservation_level, L_handle_null); if (on_oop && on_reference) { // Generate the G1 pre-barrier code to log the value of // the referent field in an SATB buffer. Note with diff --git a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.hpp b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.hpp index e059cc661af..a72dfb80ee4 100644 --- a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.hpp @@ -27,7 +27,7 @@ #define CPU_PPC_GC_G1_G1BARRIERSETASSEMBLER_PPC_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "utilities/macros.hpp" #ifdef COMPILER2 @@ -39,7 +39,7 @@ class StubAssembler; class G1PreBarrierStub; class G1PreBarrierStubC2; -class G1BarrierSetAssembler: public ModRefBarrierSetAssembler { +class G1BarrierSetAssembler: public CardTableBarrierSetAssembler { protected: virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register from, Register to, Register count, diff --git a/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.cpp index e1272ce508d..7404f7e2e5c 100644 --- a/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.cpp @@ -29,6 +29,7 @@ #include "gc/shared/cardTableBarrierSet.hpp" #include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "interpreter/interp_masm.hpp" +#include "runtime/jniHandles.hpp" #define __ masm-> @@ -40,6 +41,66 @@ #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") +void CardTableBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count, Register preserve1, Register preserve2) { + if (type == T_OBJECT) { + gen_write_ref_array_pre_barrier(masm, decorators, + src, dst, count, + preserve1, preserve2); + + bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; + if (!checkcast) { + assert_different_registers(dst, count, R9_ARG7, R10_ARG8); + // Save some arguments for epilogue, e.g. disjoint_long_copy_core destroys them. + __ mr(R9_ARG7, dst); + __ mr(R10_ARG8, count); + } + } +} + +void CardTableBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register dst, Register count, Register preserve) { + if (type == T_OBJECT) { + bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; + if (!checkcast) { + gen_write_ref_array_post_barrier(masm, decorators, R9_ARG7, R10_ARG8, preserve); + } else { + gen_write_ref_array_post_barrier(masm, decorators, dst, count, preserve); + } + } +} + +void CardTableBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register base, RegisterOrConstant ind_or_offs, Register val, + Register tmp1, Register tmp2, Register tmp3, + MacroAssembler::PreservationLevel preservation_level) { + if (is_reference_type(type)) { + oop_store_at(masm, decorators, type, + base, ind_or_offs, val, + tmp1, tmp2, tmp3, + preservation_level); + } else { + BarrierSetAssembler::store_at(masm, decorators, type, + base, ind_or_offs, val, + tmp1, tmp2, tmp3, + preservation_level); + } +} + +void CardTableBarrierSetAssembler::resolve_jobject(MacroAssembler* masm, Register value, + Register tmp1, Register tmp2, + MacroAssembler::PreservationLevel preservation_level) { + Label done; + __ cmpdi(CR0, value, 0); + __ beq(CR0, done); // Use null as-is. + + __ clrrdi(tmp1, value, JNIHandles::tag_size); + __ ld(value, 0, tmp1); // Resolve (untagged) jobject. + + __ verify_oop(value, FILE_AND_LINE); + __ bind(done); +} + void CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, Register preserve) { CardTableBarrierSet* ctbs = barrier_set_cast(BarrierSet::barrier_set()); diff --git a/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.hpp b/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.hpp index 7d8e59e2c98..261d6ef85d9 100644 --- a/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/gc/shared/cardTableBarrierSetAssembler_ppc.hpp @@ -27,21 +27,42 @@ #define CPU_PPC_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_PPC_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/barrierSetAssembler.hpp" -class CardTableBarrierSetAssembler: public ModRefBarrierSetAssembler { +class CardTableBarrierSetAssembler: public BarrierSetAssembler { protected: - virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count, Register preserve); - void card_table_write(MacroAssembler* masm, CardTable::CardValue* byte_map_base, Register tmp, Register obj); void card_write_barrier_post(MacroAssembler* masm, Register store_addr, Register tmp); + virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, + Register from, Register to, Register count, + Register preserve1, Register preserve2) {} + virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, + Register addr, Register count, Register preserve); + virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register base, RegisterOrConstant ind_or_offs, Register val, Register tmp1, Register tmp2, Register tmp3, MacroAssembler::PreservationLevel preservation_level); + +public: + virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count, + Register preserve1, Register preserve2); + virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register dst, Register count, + Register preserve); + + virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register base, RegisterOrConstant ind_or_offs, Register val, + Register tmp1, Register tmp2, Register tmp3, + MacroAssembler::PreservationLevel preservation_level); + + virtual void resolve_jobject(MacroAssembler* masm, Register value, + Register tmp1, Register tmp2, + MacroAssembler::PreservationLevel preservation_level); + }; #endif // CPU_PPC_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_PPC_HPP diff --git a/src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.cpp deleted file mode 100644 index 4cdf56f6ad6..00000000000 --- a/src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2018, 2025 SAP SE. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "asm/macroAssembler.inline.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" -#include "runtime/jniHandles.hpp" -#include "utilities/macros.hpp" - -#define __ masm-> - -void ModRefBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count, Register preserve1, Register preserve2) { - if (type == T_OBJECT) { - gen_write_ref_array_pre_barrier(masm, decorators, - src, dst, count, - preserve1, preserve2); - - bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; - if (!checkcast) { - assert_different_registers(dst, count, R9_ARG7, R10_ARG8); - // Save some arguments for epilogue, e.g. disjoint_long_copy_core destroys them. - __ mr(R9_ARG7, dst); - __ mr(R10_ARG8, count); - } - } -} - -void ModRefBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register dst, Register count, Register preserve) { - if (type == T_OBJECT) { - bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; - if (!checkcast) { - gen_write_ref_array_post_barrier(masm, decorators, R9_ARG7, R10_ARG8, preserve); - } else { - gen_write_ref_array_post_barrier(masm, decorators, dst, count, preserve); - } - } -} - -void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register base, RegisterOrConstant ind_or_offs, Register val, - Register tmp1, Register tmp2, Register tmp3, - MacroAssembler::PreservationLevel preservation_level) { - if (is_reference_type(type)) { - oop_store_at(masm, decorators, type, - base, ind_or_offs, val, - tmp1, tmp2, tmp3, - preservation_level); - } else { - BarrierSetAssembler::store_at(masm, decorators, type, - base, ind_or_offs, val, - tmp1, tmp2, tmp3, - preservation_level); - } -} - -void ModRefBarrierSetAssembler::resolve_jobject(MacroAssembler* masm, Register value, - Register tmp1, Register tmp2, - MacroAssembler::PreservationLevel preservation_level) { - Label done; - __ cmpdi(CR0, value, 0); - __ beq(CR0, done); // Use null as-is. - - __ clrrdi(tmp1, value, JNIHandles::tag_size); - __ ld(value, 0, tmp1); // Resolve (untagged) jobject. - - __ verify_oop(value, FILE_AND_LINE); - __ bind(done); -} diff --git a/src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.hpp b/src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.hpp deleted file mode 100644 index 5d105f6c048..00000000000 --- a/src/hotspot/cpu/ppc/gc/shared/modRefBarrierSetAssembler_ppc.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2018, 2021 SAP SE. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef CPU_PPC_GC_SHARED_MODREFBARRIERSETASSEMBLER_PPC_HPP -#define CPU_PPC_GC_SHARED_MODREFBARRIERSETASSEMBLER_PPC_HPP - -#include "asm/macroAssembler.hpp" -#include "gc/shared/barrierSetAssembler.hpp" - -// The ModRefBarrierSetAssembler filters away accesses on BasicTypes other -// than T_OBJECT/T_ARRAY (oops). The oop accesses call one of the protected -// accesses, which are overridden in the concrete BarrierSetAssembler. - -class ModRefBarrierSetAssembler: public BarrierSetAssembler { -protected: - virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register from, Register to, Register count, - Register preserve1, Register preserve2) {} - virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count, Register preserve) {} - - virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register base, RegisterOrConstant ind_or_offs, Register val, - Register tmp1, Register tmp2, Register tmp3, - MacroAssembler::PreservationLevel preservation_level) = 0; -public: - virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count, - Register preserve1, Register preserve2); - virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register dst, Register count, - Register preserve); - - virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register base, RegisterOrConstant ind_or_offs, Register val, - Register tmp1, Register tmp2, Register tmp3, - MacroAssembler::PreservationLevel preservation_level); - - virtual void resolve_jobject(MacroAssembler* masm, Register value, - Register tmp1, Register tmp2, - MacroAssembler::PreservationLevel preservation_level); -}; - -#endif // CPU_PPC_GC_SHARED_MODREFBARRIERSETASSEMBLER_PPC_HPP diff --git a/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.cpp index 64e9cbe1f47..966afde4cb0 100644 --- a/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.cpp @@ -345,7 +345,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorator bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool on_reference = on_weak || on_phantom; - ModRefBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp2); + CardTableBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1, tmp2); if (on_oop && on_reference) { // RA is live. It must be saved around calls. __ enter(); // barrier may call runtime diff --git a/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.hpp b/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.hpp index 654ba934242..d2d2f4d49bc 100644 --- a/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/gc/g1/g1BarrierSetAssembler_riscv.hpp @@ -27,7 +27,7 @@ #define CPU_RISCV_GC_G1_G1BARRIERSETASSEMBLER_RISCV_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "utilities/macros.hpp" #ifdef COMPILER1 @@ -37,7 +37,7 @@ class StubAssembler; class G1PreBarrierStub; class G1PreBarrierStubC2; -class G1BarrierSetAssembler: public ModRefBarrierSetAssembler { +class G1BarrierSetAssembler: public CardTableBarrierSetAssembler { protected: void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, RegSet saved_regs); diff --git a/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.cpp index df7ff65442e..408620dc56f 100644 --- a/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.cpp @@ -33,6 +33,29 @@ #define __ masm-> +void CardTableBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register src, Register dst, Register count, RegSet saved_regs) { + if (is_oop) { + gen_write_ref_array_pre_barrier(masm, decorators, dst, count, saved_regs); + } +} + +void CardTableBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register start, Register count, Register tmp, + RegSet saved_regs) { + if (is_oop) { + gen_write_ref_array_post_barrier(masm, decorators, start, count, tmp, saved_regs); + } +} + +void CardTableBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { + if (is_reference_type(type)) { + oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } else { + BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } +} void CardTableBarrierSetAssembler::store_check(MacroAssembler* masm, Register obj, Register tmp) { assert_different_registers(obj, tmp); diff --git a/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.hpp b/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.hpp index b8ce585ea70..98737c3623f 100644 --- a/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/gc/shared/cardTableBarrierSetAssembler_riscv.hpp @@ -27,16 +27,30 @@ #define CPU_RISCV_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_RISCV_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/barrierSetAssembler.hpp" -class CardTableBarrierSetAssembler: public ModRefBarrierSetAssembler { +class CardTableBarrierSetAssembler: public BarrierSetAssembler { protected: void store_check(MacroAssembler* masm, Register obj, Register tmp); + virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, + Register addr, Register count, RegSet saved_regs) {} + virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register start, Register count, Register tmp, RegSet saved_regs); + virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); + +public: + virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register src, Register dst, Register count, RegSet saved_regs); + + virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, + Register start, Register count, Register tmp, RegSet saved_regs); + + virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); }; #endif // #ifndef CPU_RISCV_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_RISCV_HPP diff --git a/src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.cpp deleted file mode 100644 index 6b0871007f4..00000000000 --- a/src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2020, 2022, Huawei Technologies Co., Ltd. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "asm/macroAssembler.inline.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" - -#define __ masm-> - -void ModRefBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register src, Register dst, Register count, RegSet saved_regs) { - if (is_oop) { - gen_write_ref_array_pre_barrier(masm, decorators, dst, count, saved_regs); - } -} - -void ModRefBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register start, Register count, Register tmp, - RegSet saved_regs) { - if (is_oop) { - gen_write_ref_array_post_barrier(masm, decorators, start, count, tmp, saved_regs); - } -} - -void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { - if (is_reference_type(type)) { - oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } else { - BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } -} diff --git a/src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.hpp b/src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.hpp deleted file mode 100644 index 45e64777ed7..00000000000 --- a/src/hotspot/cpu/riscv/gc/shared/modRefBarrierSetAssembler_riscv.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2020, 2022, Huawei Technologies Co., Ltd. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef CPU_RISCV_GC_SHARED_MODREFBARRIERSETASSEMBLER_RISCV_HPP -#define CPU_RISCV_GC_SHARED_MODREFBARRIERSETASSEMBLER_RISCV_HPP - -#include "asm/macroAssembler.hpp" -#include "gc/shared/barrierSetAssembler.hpp" - -// The ModRefBarrierSetAssembler filters away accesses on BasicTypes other -// than T_OBJECT/T_ARRAY (oops). The oop accesses call one of the protected -// accesses, which are overridden in the concrete BarrierSetAssembler. - -class ModRefBarrierSetAssembler: public BarrierSetAssembler { -protected: - virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count, RegSet saved_regs) {} - virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register start, Register count, Register tmp, RegSet saved_regs) {} - - virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) = 0; - -public: - virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register src, Register dst, Register count, RegSet saved_regs); - virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, bool is_oop, - Register start, Register count, Register tmp, RegSet saved_regs); - virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); -}; - -#endif // CPU_RISCV_GC_SHARED_MODREFBARRIERSETASSEMBLER_RISCV_HPP diff --git a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp index e4fe690663a..272136fc28c 100644 --- a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp @@ -279,7 +279,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorator bool on_reference = on_weak || on_phantom; Label done; if (on_oop && on_reference && L_handle_null == nullptr) { L_handle_null = &done; } - ModRefBarrierSetAssembler::load_at(masm, decorators, type, src, dst, tmp1, tmp2, L_handle_null); + CardTableBarrierSetAssembler::load_at(masm, decorators, type, src, dst, tmp1, tmp2, L_handle_null); if (on_oop && on_reference) { // Generate the G1 pre-barrier code to log the value of // the referent field in an SATB buffer. diff --git a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.hpp b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.hpp index fdec751c43b..00e0a116207 100644 --- a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.hpp +++ b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.hpp @@ -27,7 +27,7 @@ #define CPU_S390_GC_G1_G1BARRIERSETASSEMBLER_S390_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "utilities/macros.hpp" class LIR_Assembler; @@ -35,7 +35,7 @@ class StubAssembler; class G1PreBarrierStub; class G1PreBarrierStubC2; -class G1BarrierSetAssembler: public ModRefBarrierSetAssembler { +class G1BarrierSetAssembler: public CardTableBarrierSetAssembler { protected: virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count); virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, diff --git a/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.cpp b/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.cpp index f8f1fe839d2..a0da6ebe682 100644 --- a/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.cpp @@ -29,6 +29,7 @@ #include "gc/shared/cardTableBarrierSet.hpp" #include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "interpreter/interp_masm.hpp" +#include "runtime/jniHandles.hpp" #define __ masm-> @@ -42,6 +43,44 @@ #define TIMES_OOP (UseCompressedOops ? Address::times_4 : Address::times_8) +void CardTableBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count) { + if (is_reference_type(type)) { + gen_write_ref_array_pre_barrier(masm, decorators, dst, count); + } +} + +void CardTableBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register dst, Register count, bool do_return) { + if (is_reference_type(type)) { + gen_write_ref_array_post_barrier(masm, decorators, dst, count, do_return); + } else { + if (do_return) { __ z_br(Z_R14); } + } +} + +void CardTableBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + const Address& dst, Register val, Register tmp1, Register tmp2, Register tmp3) { + if (is_reference_type(type)) { + oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } else { + BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } +} + +void CardTableBarrierSetAssembler::resolve_jobject(MacroAssembler* masm, Register value, Register tmp1, Register tmp2) { + NearLabel done; + + __ z_ltgr(value, value); + __ z_bre(done); // use null as-is. + + __ z_nill(value, ~JNIHandles::tag_mask); + __ z_lg(value, 0, value); // Resolve (untagged) jobject. + + __ verify_oop(value, FILE_AND_LINE); + __ bind(done); +} + void CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, bool do_return) { CardTableBarrierSet* ctbs = barrier_set_cast(BarrierSet::barrier_set()); diff --git a/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.hpp b/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.hpp index 43ec1e08dca..eb64a09a51f 100644 --- a/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.hpp +++ b/src/hotspot/cpu/s390/gc/shared/cardTableBarrierSetAssembler_s390.hpp @@ -27,17 +27,30 @@ #define CPU_S390_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_S390_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/barrierSetAssembler.hpp" -class CardTableBarrierSetAssembler: public ModRefBarrierSetAssembler { +class CardTableBarrierSetAssembler: public BarrierSetAssembler { protected: void store_check(MacroAssembler* masm, Register store_addr, Register tmp); + virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count) {} + virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, bool do_return); virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, const Address& dst, Register val, Register tmp1, Register tmp2, Register tmp3); +public: + virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count); + + virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register dst, Register count, bool do_return = false); + + virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + const Address& dst, Register val, Register tmp1, Register tmp2, Register tmp3); + + virtual void resolve_jobject(MacroAssembler* masm, Register value, Register tmp1, Register tmp2); }; #endif // CPU_S390_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_S390_HPP diff --git a/src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.cpp b/src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.cpp deleted file mode 100644 index 4d37ae2e4ce..00000000000 --- a/src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2018, 2024 SAP SE. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "asm/macroAssembler.inline.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" -#include "runtime/jniHandles.hpp" - -#define __ masm-> - -void ModRefBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, - bool do_return) { - if (do_return) { __ z_br(Z_R14); } -} - -void ModRefBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count) { - if (is_reference_type(type)) { - gen_write_ref_array_pre_barrier(masm, decorators, dst, count); - } -} - -void ModRefBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register dst, Register count, bool do_return) { - if (is_reference_type(type)) { - gen_write_ref_array_post_barrier(masm, decorators, dst, count, do_return); - } else { - if (do_return) { __ z_br(Z_R14); } - } -} - -void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - const Address& dst, Register val, Register tmp1, Register tmp2, Register tmp3) { - if (is_reference_type(type)) { - oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } else { - BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } -} - -void ModRefBarrierSetAssembler::resolve_jobject(MacroAssembler* masm, Register value, Register tmp1, Register tmp2) { - NearLabel done; - - __ z_ltgr(value, value); - __ z_bre(done); // use null as-is. - - __ z_nill(value, ~JNIHandles::tag_mask); - __ z_lg(value, 0, value); // Resolve (untagged) jobject. - - __ verify_oop(value, FILE_AND_LINE); - __ bind(done); -} diff --git a/src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.hpp b/src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.hpp deleted file mode 100644 index 7f53d033780..00000000000 --- a/src/hotspot/cpu/s390/gc/shared/modRefBarrierSetAssembler_s390.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2018, 2024 SAP SE. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef CPU_S390_GC_SHARED_MODREFBARRIERSETASSEMBLER_S390_HPP -#define CPU_S390_GC_SHARED_MODREFBARRIERSETASSEMBLER_S390_HPP - -#include "asm/macroAssembler.hpp" -#include "gc/shared/barrierSetAssembler.hpp" - -// The ModRefBarrierSetAssembler filters away accesses on BasicTypes other -// than T_OBJECT/T_ARRAY (oops). The oop accesses call one of the protected -// accesses, which are overridden in the concrete BarrierSetAssembler. - -class ModRefBarrierSetAssembler: public BarrierSetAssembler { -protected: - virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count) {} - virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, - bool do_return); - virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - const Address& dst, Register val, Register tmp1, Register tmp2, Register tmp3) = 0; -public: - virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count); - virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register dst, Register count, bool do_return = false); - - virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - const Address& dst, Register val, Register tmp1, Register tmp2, Register tmp3); - - virtual void resolve_jobject(MacroAssembler* masm, Register value, Register tmp1, Register tmp2); -}; - -#endif // CPU_S390_GC_SHARED_MODREFBARRIERSETASSEMBLER_S390_HPP diff --git a/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp index a846289d91b..586135fcebc 100644 --- a/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp @@ -144,7 +144,7 @@ void G1BarrierSetAssembler::load_at(MacroAssembler* masm, DecoratorSet decorator bool on_weak = (decorators & ON_WEAK_OOP_REF) != 0; bool on_phantom = (decorators & ON_PHANTOM_OOP_REF) != 0; bool on_reference = on_weak || on_phantom; - ModRefBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1); + CardTableBarrierSetAssembler::load_at(masm, decorators, type, dst, src, tmp1); if (on_oop && on_reference) { // Generate the G1 pre-barrier code to log the value of // the referent field in an SATB buffer. diff --git a/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.hpp b/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.hpp index 4b2de41de69..0db96495bee 100644 --- a/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.hpp @@ -26,7 +26,7 @@ #define CPU_X86_GC_G1_G1BARRIERSETASSEMBLER_X86_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/cardTableBarrierSetAssembler.hpp" class LIR_Assembler; class StubAssembler; @@ -34,7 +34,7 @@ class G1PreBarrierStub; class G1BarrierStubC2; class G1PreBarrierStubC2; -class G1BarrierSetAssembler: public ModRefBarrierSetAssembler { +class G1BarrierSetAssembler: public CardTableBarrierSetAssembler { protected: virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count); virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, Register tmp); diff --git a/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.cpp index ba89b09e4dc..2b91662ddb5 100644 --- a/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.cpp @@ -41,6 +41,58 @@ #define TIMES_OOP (UseCompressedOops ? Address::times_4 : Address::times_8) +void CardTableBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count) { + bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; + bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0; + bool obj_int = (type == T_OBJECT) && UseCompressedOops; + + if (is_reference_type(type)) { + if (!checkcast) { + if (!obj_int) { + // Save count for barrier + __ movptr(r11, count); + } else if (disjoint) { + // Save dst in r11 in the disjoint case + __ movq(r11, dst); + } + } + gen_write_ref_array_pre_barrier(masm, decorators, dst, count); + } +} + +void CardTableBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count) { + bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; + bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0; + bool obj_int = (type == T_OBJECT) && UseCompressedOops; + Register tmp = rax; + + if (is_reference_type(type)) { + if (!checkcast) { + if (!obj_int) { + // Save count for barrier + count = r11; + } else if (disjoint) { + // Use the saved dst in the disjoint case + dst = r11; + } + } else { + tmp = rscratch1; + } + gen_write_ref_array_post_barrier(masm, decorators, dst, count, tmp); + } +} + +void CardTableBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { + if (is_reference_type(type)) { + oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } else { + BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); + } +} + void CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, Register tmp) { BarrierSet *bs = BarrierSet::barrier_set(); diff --git a/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.hpp b/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.hpp index 4760b222977..6f71ec64218 100644 --- a/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/gc/shared/cardTableBarrierSetAssembler_x86.hpp @@ -26,16 +26,30 @@ #define CPU_X86_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_X86_HPP #include "asm/macroAssembler.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" +#include "gc/shared/barrierSetAssembler.hpp" -class CardTableBarrierSetAssembler: public ModRefBarrierSetAssembler { +class CardTableBarrierSetAssembler: public BarrierSetAssembler { protected: + virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, + Register addr, Register count) {} + void store_check(MacroAssembler* masm, Register obj, Address dst); virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, Register addr, Register count, Register tmp); virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); + +public: + virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count); + + virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Register src, Register dst, Register count); + + virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, + Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); + }; #endif // CPU_X86_GC_SHARED_CARDTABLEBARRIERSETASSEMBLER_X86_HPP diff --git a/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp deleted file mode 100644 index 42109b069f2..00000000000 --- a/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "asm/macroAssembler.inline.hpp" -#include "gc/shared/modRefBarrierSetAssembler.hpp" - -#define __ masm-> - -void ModRefBarrierSetAssembler::arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count) { - bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; - bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0; - bool obj_int = (type == T_OBJECT) && UseCompressedOops; - - if (is_reference_type(type)) { - if (!checkcast) { - if (!obj_int) { - // Save count for barrier - __ movptr(r11, count); - } else if (disjoint) { - // Save dst in r11 in the disjoint case - __ movq(r11, dst); - } - } - gen_write_ref_array_pre_barrier(masm, decorators, dst, count); - } -} - -void ModRefBarrierSetAssembler::arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count) { - bool checkcast = (decorators & ARRAYCOPY_CHECKCAST) != 0; - bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0; - bool obj_int = (type == T_OBJECT) && UseCompressedOops; - Register tmp = rax; - - if (is_reference_type(type)) { - if (!checkcast) { - if (!obj_int) { - // Save count for barrier - count = r11; - } else if (disjoint) { - // Use the saved dst in the disjoint case - dst = r11; - } - } else { - tmp = rscratch1; - } - gen_write_ref_array_post_barrier(masm, decorators, dst, count, tmp); - } -} - -void ModRefBarrierSetAssembler::store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) { - if (is_reference_type(type)) { - oop_store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } else { - BarrierSetAssembler::store_at(masm, decorators, type, dst, val, tmp1, tmp2, tmp3); - } -} diff --git a/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.hpp b/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.hpp deleted file mode 100644 index c8b5043256a..00000000000 --- a/src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef CPU_X86_GC_SHARED_MODREFBARRIERSETASSEMBLER_X86_HPP -#define CPU_X86_GC_SHARED_MODREFBARRIERSETASSEMBLER_X86_HPP - -#include "asm/macroAssembler.hpp" -#include "gc/shared/barrierSetAssembler.hpp" - -// The ModRefBarrierSetAssembler filters away accesses on BasicTypes other -// than T_OBJECT/T_ARRAY (oops). The oop accesses call one of the protected -// accesses, which are overridden in the concrete BarrierSetAssembler. - -class ModRefBarrierSetAssembler: public BarrierSetAssembler { -protected: - virtual void gen_write_ref_array_pre_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count) {} - virtual void gen_write_ref_array_post_barrier(MacroAssembler* masm, DecoratorSet decorators, - Register addr, Register count, Register tmp) {} - virtual void oop_store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3) = 0; -public: - virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count); - virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Register src, Register dst, Register count); - - virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, - Address dst, Register val, Register tmp1, Register tmp2, Register tmp3); -}; - -#endif // CPU_X86_GC_SHARED_MODREFBARRIERSETASSEMBLER_X86_HPP diff --git a/src/hotspot/cpu/zero/gc/shared/modRefBarrierSetAssembler_zero.hpp b/src/hotspot/cpu/zero/gc/shared/modRefBarrierSetAssembler_zero.hpp deleted file mode 100644 index 78c8fc1653a..00000000000 --- a/src/hotspot/cpu/zero/gc/shared/modRefBarrierSetAssembler_zero.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef CPU_ZERO_GC_SHARED_MODREFBARRIERSETASSEMBLER_ZERO_HPP -#define CPU_ZERO_GC_SHARED_MODREFBARRIERSETASSEMBLER_ZERO_HPP - -class ModRefBarrierSetAssembler; - -#endif // CPU_ZERO_GC_SHARED_MODREFBARRIERSETASSEMBLER_ZERO_HPP diff --git a/src/hotspot/share/gc/g1/c1/g1BarrierSetC1.hpp b/src/hotspot/share/gc/g1/c1/g1BarrierSetC1.hpp index 89f5676a2d2..76dcd7fa4ff 100644 --- a/src/hotspot/share/gc/g1/c1/g1BarrierSetC1.hpp +++ b/src/hotspot/share/gc/g1/c1/g1BarrierSetC1.hpp @@ -27,7 +27,7 @@ #include "c1/c1_CodeStubs.hpp" #include "c1/c1_Compilation.hpp" -#include "gc/shared/c1/modRefBarrierSetC1.hpp" +#include "gc/shared/c1/cardTableBarrierSetC1.hpp" class G1PreBarrierStub: public CodeStub { friend class G1BarrierSetC1; @@ -93,7 +93,7 @@ class G1PreBarrierStub: public CodeStub { class CodeBlob; -class G1BarrierSetC1 : public ModRefBarrierSetC1 { +class G1BarrierSetC1 : public CardTableBarrierSetC1 { protected: CodeBlob* _pre_barrier_c1_runtime_code_blob; diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.hpp index 58a70ed6a60..bf595973a32 100644 --- a/src/hotspot/share/gc/g1/g1BarrierSet.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.hpp @@ -117,8 +117,8 @@ class G1BarrierSet: public CardTableBarrierSet { // Callbacks for runtime accesses. template - class AccessBarrier: public ModRefBarrierSet::AccessBarrier { - typedef ModRefBarrierSet::AccessBarrier ModRef; + class AccessBarrier: public CardTableBarrierSet::AccessBarrier { + typedef CardTableBarrierSet::AccessBarrier CardTableBS; typedef BarrierSet::AccessBarrier Raw; public: diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp index ffba561f11f..ee2c1450d9b 100644 --- a/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp @@ -94,7 +94,7 @@ template template inline oop G1BarrierSet::AccessBarrier:: oop_load_not_in_heap(T* addr) { - oop value = ModRef::oop_load_not_in_heap(addr); + oop value = CardTableBS::oop_load_not_in_heap(addr); enqueue_preloaded_if_weak(decorators, value); return value; } @@ -103,7 +103,7 @@ template template inline oop G1BarrierSet::AccessBarrier:: oop_load_in_heap(T* addr) { - oop value = ModRef::oop_load_in_heap(addr); + oop value = CardTableBS::oop_load_in_heap(addr); enqueue_preloaded_if_weak(decorators, value); return value; } @@ -111,7 +111,7 @@ oop_load_in_heap(T* addr) { template inline oop G1BarrierSet::AccessBarrier:: oop_load_in_heap_at(oop base, ptrdiff_t offset) { - oop value = ModRef::oop_load_in_heap_at(base, offset); + oop value = CardTableBS::oop_load_in_heap_at(base, offset); enqueue_preloaded_if_weak(AccessBarrierSupport::resolve_possibly_unknown_oop_ref_strength(base, offset), value); return value; } diff --git a/src/hotspot/share/gc/serial/serialFullGC.cpp b/src/hotspot/share/gc/serial/serialFullGC.cpp index 76a335d209f..546084e38dd 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.cpp +++ b/src/hotspot/share/gc/serial/serialFullGC.cpp @@ -48,7 +48,6 @@ #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" #include "gc/shared/gcTraceTime.inline.hpp" -#include "gc/shared/modRefBarrierSet.hpp" #include "gc/shared/oopStorageSet.inline.hpp" #include "gc/shared/preservedMarks.inline.hpp" #include "gc/shared/referencePolicy.hpp" diff --git a/src/hotspot/share/gc/shared/barrierSetConfig.hpp b/src/hotspot/share/gc/shared/barrierSetConfig.hpp index 8bb7cf7c7ef..5a160f52c5a 100644 --- a/src/hotspot/share/gc/shared/barrierSetConfig.hpp +++ b/src/hotspot/share/gc/shared/barrierSetConfig.hpp @@ -27,20 +27,12 @@ #include "utilities/macros.hpp" -// Do something for each concrete barrier set part of the build. -#define FOR_EACH_CONCRETE_BARRIER_SET_DO(f) \ +// Do something for each barrier set part of the build. +#define FOR_EACH_BARRIER_SET_DO(f) \ f(CardTableBarrierSet) \ EPSILONGC_ONLY(f(EpsilonBarrierSet)) \ G1GC_ONLY(f(G1BarrierSet)) \ SHENANDOAHGC_ONLY(f(ShenandoahBarrierSet)) \ ZGC_ONLY(f(ZBarrierSet)) -#define FOR_EACH_ABSTRACT_BARRIER_SET_DO(f) \ - f(ModRef) - -// Do something for each known barrier set. -#define FOR_EACH_BARRIER_SET_DO(f) \ - FOR_EACH_ABSTRACT_BARRIER_SET_DO(f) \ - FOR_EACH_CONCRETE_BARRIER_SET_DO(f) - #endif // SHARE_GC_SHARED_BARRIERSETCONFIG_HPP diff --git a/src/hotspot/share/gc/shared/barrierSetConfig.inline.hpp b/src/hotspot/share/gc/shared/barrierSetConfig.inline.hpp index f637c227ee1..32a8719e21f 100644 --- a/src/hotspot/share/gc/shared/barrierSetConfig.inline.hpp +++ b/src/hotspot/share/gc/shared/barrierSetConfig.inline.hpp @@ -28,7 +28,6 @@ #include "gc/shared/barrierSetConfig.hpp" #include "gc/shared/cardTableBarrierSet.inline.hpp" -#include "gc/shared/modRefBarrierSet.inline.hpp" #if INCLUDE_EPSILONGC #include "gc/epsilon/epsilonBarrierSet.hpp" diff --git a/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.cpp b/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.cpp index 278b1b158aa..ebc1c1c7fb7 100644 --- a/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.cpp +++ b/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.cpp @@ -34,6 +34,68 @@ #define __ gen->lir()-> #endif +void CardTableBarrierSetC1::store_at_resolved(LIRAccess& access, LIR_Opr value) { + DecoratorSet decorators = access.decorators(); + bool is_array = (decorators & IS_ARRAY) != 0; + bool on_anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0; + + if (access.is_oop()) { + pre_barrier(access, access.resolved_addr(), + LIR_OprFact::illegalOpr /* pre_val */, access.patch_emit_info()); + } + + BarrierSetC1::store_at_resolved(access, value); + + if (access.is_oop()) { + bool precise = is_array || on_anonymous; + LIR_Opr post_addr = precise ? access.resolved_addr() : access.base().opr(); + post_barrier(access, post_addr, value); + } +} + +LIR_Opr CardTableBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value) { + if (access.is_oop()) { + pre_barrier(access, access.resolved_addr(), + LIR_OprFact::illegalOpr /* pre_val */, nullptr); + } + + LIR_Opr result = BarrierSetC1::atomic_cmpxchg_at_resolved(access, cmp_value, new_value); + + if (access.is_oop()) { + post_barrier(access, access.resolved_addr(), new_value.result()); + } + + return result; +} + +LIR_Opr CardTableBarrierSetC1::atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value) { + if (access.is_oop()) { + pre_barrier(access, access.resolved_addr(), + LIR_OprFact::illegalOpr /* pre_val */, nullptr); + } + + LIR_Opr result = BarrierSetC1::atomic_xchg_at_resolved(access, value); + + if (access.is_oop()) { + post_barrier(access, access.resolved_addr(), value.result()); + } + + return result; +} + +// This overrides the default to resolve the address into a register, +// assuming it will be used by a write barrier anyway. +LIR_Opr CardTableBarrierSetC1::resolve_address(LIRAccess& access, bool resolve_in_register) { + DecoratorSet decorators = access.decorators(); + bool needs_patching = (decorators & C1_NEEDS_PATCHING) != 0; + bool is_write = (decorators & ACCESS_WRITE) != 0; + bool is_array = (decorators & IS_ARRAY) != 0; + bool on_anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0; + bool precise = is_array || on_anonymous; + resolve_in_register |= !needs_patching && is_write && access.is_oop() && precise; + return BarrierSetC1::resolve_address(access, resolve_in_register); +} + void CardTableBarrierSetC1::post_barrier(LIRAccess& access, LIR_Opr addr, LIR_Opr new_val) { DecoratorSet decorators = access.decorators(); LIRGenerator* gen = access.gen(); diff --git a/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.hpp b/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.hpp index 2b1629575b3..10e8311e764 100644 --- a/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.hpp +++ b/src/hotspot/share/gc/shared/c1/cardTableBarrierSetC1.hpp @@ -25,11 +25,22 @@ #ifndef SHARE_GC_SHARED_C1_CARDTABLEBARRIERSETC1_HPP #define SHARE_GC_SHARED_C1_CARDTABLEBARRIERSETC1_HPP -#include "gc/shared/c1/modRefBarrierSetC1.hpp" +#include "gc/shared/c1/barrierSetC1.hpp" -class CardTableBarrierSetC1 : public ModRefBarrierSetC1 { +class CardTableBarrierSetC1 : public BarrierSetC1 { protected: + virtual void pre_barrier(LIRAccess& access, LIR_Opr addr_opr, + LIR_Opr pre_val, CodeEmitInfo* info) {} + virtual void post_barrier(LIRAccess& access, LIR_Opr addr, LIR_Opr new_val); + + virtual LIR_Opr resolve_address(LIRAccess& access, bool resolve_in_register); + + virtual void store_at_resolved(LIRAccess& access, LIR_Opr value); + + virtual LIR_Opr atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value); + + virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value); }; #endif // SHARE_GC_SHARED_C1_CARDTABLEBARRIERSETC1_HPP diff --git a/src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.cpp b/src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.cpp deleted file mode 100644 index d7d463d252e..00000000000 --- a/src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "gc/shared/c1/modRefBarrierSetC1.hpp" -#include "utilities/macros.hpp" - -#ifdef ASSERT -#define __ gen->lir(__FILE__, __LINE__)-> -#else -#define __ gen->lir()-> -#endif - -void ModRefBarrierSetC1::store_at_resolved(LIRAccess& access, LIR_Opr value) { - DecoratorSet decorators = access.decorators(); - bool is_array = (decorators & IS_ARRAY) != 0; - bool on_anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0; - - if (access.is_oop()) { - pre_barrier(access, access.resolved_addr(), - LIR_OprFact::illegalOpr /* pre_val */, access.patch_emit_info()); - } - - BarrierSetC1::store_at_resolved(access, value); - - if (access.is_oop()) { - bool precise = is_array || on_anonymous; - LIR_Opr post_addr = precise ? access.resolved_addr() : access.base().opr(); - post_barrier(access, post_addr, value); - } -} - -LIR_Opr ModRefBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value) { - if (access.is_oop()) { - pre_barrier(access, access.resolved_addr(), - LIR_OprFact::illegalOpr /* pre_val */, nullptr); - } - - LIR_Opr result = BarrierSetC1::atomic_cmpxchg_at_resolved(access, cmp_value, new_value); - - if (access.is_oop()) { - post_barrier(access, access.resolved_addr(), new_value.result()); - } - - return result; -} - -LIR_Opr ModRefBarrierSetC1::atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value) { - if (access.is_oop()) { - pre_barrier(access, access.resolved_addr(), - LIR_OprFact::illegalOpr /* pre_val */, nullptr); - } - - LIR_Opr result = BarrierSetC1::atomic_xchg_at_resolved(access, value); - - if (access.is_oop()) { - post_barrier(access, access.resolved_addr(), value.result()); - } - - return result; -} - -// This overrides the default to resolve the address into a register, -// assuming it will be used by a write barrier anyway. -LIR_Opr ModRefBarrierSetC1::resolve_address(LIRAccess& access, bool resolve_in_register) { - DecoratorSet decorators = access.decorators(); - bool needs_patching = (decorators & C1_NEEDS_PATCHING) != 0; - bool is_write = (decorators & ACCESS_WRITE) != 0; - bool is_array = (decorators & IS_ARRAY) != 0; - bool on_anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0; - bool precise = is_array || on_anonymous; - resolve_in_register |= !needs_patching && is_write && access.is_oop() && precise; - return BarrierSetC1::resolve_address(access, resolve_in_register); -} diff --git a/src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.hpp b/src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.hpp deleted file mode 100644 index 2bd547c41b1..00000000000 --- a/src/hotspot/share/gc/shared/c1/modRefBarrierSetC1.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_GC_SHARED_C1_MODREFBARRIERSETC1_HPP -#define SHARE_GC_SHARED_C1_MODREFBARRIERSETC1_HPP - -#include "gc/shared/c1/barrierSetC1.hpp" - -// The ModRefBarrierSetC1 filters away accesses on BasicTypes other -// than T_OBJECT/T_ARRAY (oops). The oop accesses call one of the protected -// accesses, which are overridden in the concrete BarrierSetAssembler. - -class ModRefBarrierSetC1 : public BarrierSetC1 { -protected: - virtual void pre_barrier(LIRAccess& access, LIR_Opr addr_opr, - LIR_Opr pre_val, CodeEmitInfo* info) {} - virtual void post_barrier(LIRAccess& access, LIR_Opr addr, - LIR_Opr new_val) {} - - virtual LIR_Opr resolve_address(LIRAccess& access, bool resolve_in_register); - - virtual void store_at_resolved(LIRAccess& access, LIR_Opr value); - - virtual LIR_Opr atomic_cmpxchg_at_resolved(LIRAccess& access, LIRItem& cmp_value, LIRItem& new_value); - - virtual LIR_Opr atomic_xchg_at_resolved(LIRAccess& access, LIRItem& value); -}; - -#endif // SHARE_GC_SHARED_C1_MODREFBARRIERSETC1_HPP diff --git a/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp b/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp index 536cd6da1ef..fada2672e9f 100644 --- a/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp +++ b/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.cpp @@ -35,6 +35,85 @@ #define __ ideal. +Node* CardTableBarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val) const { + DecoratorSet decorators = access.decorators(); + + Node* adr = access.addr().node(); + + bool is_array = (decorators & IS_ARRAY) != 0; + bool anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0; + bool in_heap = (decorators & IN_HEAP) != 0; + bool use_precise = is_array || anonymous; + bool tightly_coupled_alloc = (decorators & C2_TIGHTLY_COUPLED_ALLOC) != 0; + + if (!access.is_oop() || tightly_coupled_alloc || (!in_heap && !anonymous)) { + return BarrierSetC2::store_at_resolved(access, val); + } + + assert(access.is_parse_access(), "entry not supported at optimization time"); + C2ParseAccess& parse_access = static_cast(access); + + Node* store = BarrierSetC2::store_at_resolved(access, val); + post_barrier(parse_access.kit(), access.base(), adr, val.node(), use_precise); + + return store; +} + +Node* CardTableBarrierSetC2::atomic_cmpxchg_val_at_resolved(C2AtomicParseAccess& access, Node* expected_val, + Node* new_val, const Type* value_type) const { + if (!access.is_oop()) { + return BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, value_type); + } + + Node* result = BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, value_type); + + post_barrier(access.kit(), access.base(), access.addr().node(), new_val, true); + + return result; +} + +Node* CardTableBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& access, Node* expected_val, + Node* new_val, const Type* value_type) const { + GraphKit* kit = access.kit(); + + if (!access.is_oop()) { + return BarrierSetC2::atomic_cmpxchg_bool_at_resolved(access, expected_val, new_val, value_type); + } + + Node* load_store = BarrierSetC2::atomic_cmpxchg_bool_at_resolved(access, expected_val, new_val, value_type); + + // Emit the post barrier only when the actual store happened. This makes sense + // to check only for LS_cmp_* that can fail to set the value. + // LS_cmp_exchange does not produce any branches by default, so there is no + // boolean result to piggyback on. TODO: When we merge CompareAndSwap with + // CompareAndExchange and move branches here, it would make sense to conditionalize + // post_barriers for LS_cmp_exchange as well. + // + // CAS success path is marked more likely since we anticipate this is a performance + // critical path, while CAS failure path can use the penalty for going through unlikely + // path as backoff. Which is still better than doing a store barrier there. + IdealKit ideal(kit); + ideal.if_then(load_store, BoolTest::ne, ideal.ConI(0), PROB_STATIC_FREQUENT); { + kit->sync_kit(ideal); + post_barrier(kit, access.base(), access.addr().node(), new_val, true); + ideal.sync_kit(kit); + } ideal.end_if(); + kit->final_sync(ideal); + + return load_store; +} + +Node* CardTableBarrierSetC2::atomic_xchg_at_resolved(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const { + Node* result = BarrierSetC2::atomic_xchg_at_resolved(access, new_val, value_type); + if (!access.is_oop()) { + return result; + } + + post_barrier(access.kit(), access.base(), access.addr().node(), new_val, true); + + return result; +} + Node* CardTableBarrierSetC2::byte_map_base_node(GraphKit* kit) const { // Get base of card map CardTable::CardValue* card_table_base = ci_card_table_address(); diff --git a/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp b/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp index 1263030a8b5..84876808f0d 100644 --- a/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp +++ b/src/hotspot/share/gc/shared/c2/cardTableBarrierSetC2.hpp @@ -25,9 +25,9 @@ #ifndef SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP #define SHARE_GC_SHARED_C2_CARDTABLEBARRIERSETC2_HPP -#include "gc/shared/c2/modRefBarrierSetC2.hpp" +#include "gc/shared/c2/barrierSetC2.hpp" -class CardTableBarrierSetC2: public ModRefBarrierSetC2 { +class CardTableBarrierSetC2: public BarrierSetC2 { protected: virtual void post_barrier(GraphKit* kit, Node* obj, @@ -35,6 +35,14 @@ protected: Node* val, bool use_precise) const; + virtual Node* store_at_resolved(C2Access& access, C2AccessValue& val) const; + + virtual Node* atomic_cmpxchg_val_at_resolved(C2AtomicParseAccess& access, Node* expected_val, + Node* new_val, const Type* value_type) const; + virtual Node* atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& access, Node* expected_val, + Node* new_val, const Type* value_type) const; + virtual Node* atomic_xchg_at_resolved(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const; + Node* byte_map_base_node(GraphKit* kit) const; public: diff --git a/src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.cpp b/src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.cpp deleted file mode 100644 index ddc9caedd71..00000000000 --- a/src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "gc/shared/c2/modRefBarrierSetC2.hpp" -#include "opto/arraycopynode.hpp" -#include "opto/graphKit.hpp" -#include "opto/idealKit.hpp" - -Node* ModRefBarrierSetC2::store_at_resolved(C2Access& access, C2AccessValue& val) const { - DecoratorSet decorators = access.decorators(); - - Node* adr = access.addr().node(); - - bool is_array = (decorators & IS_ARRAY) != 0; - bool anonymous = (decorators & ON_UNKNOWN_OOP_REF) != 0; - bool in_heap = (decorators & IN_HEAP) != 0; - bool use_precise = is_array || anonymous; - bool tightly_coupled_alloc = (decorators & C2_TIGHTLY_COUPLED_ALLOC) != 0; - - if (!access.is_oop() || tightly_coupled_alloc || (!in_heap && !anonymous)) { - return BarrierSetC2::store_at_resolved(access, val); - } - - assert(access.is_parse_access(), "entry not supported at optimization time"); - C2ParseAccess& parse_access = static_cast(access); - - Node* store = BarrierSetC2::store_at_resolved(access, val); - post_barrier(parse_access.kit(), access.base(), adr, val.node(), use_precise); - - return store; -} - -Node* ModRefBarrierSetC2::atomic_cmpxchg_val_at_resolved(C2AtomicParseAccess& access, Node* expected_val, - Node* new_val, const Type* value_type) const { - if (!access.is_oop()) { - return BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, value_type); - } - - Node* result = BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, value_type); - - post_barrier(access.kit(), access.base(), access.addr().node(), new_val, true); - - return result; -} - -Node* ModRefBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& access, Node* expected_val, - Node* new_val, const Type* value_type) const { - GraphKit* kit = access.kit(); - - if (!access.is_oop()) { - return BarrierSetC2::atomic_cmpxchg_bool_at_resolved(access, expected_val, new_val, value_type); - } - - Node* load_store = BarrierSetC2::atomic_cmpxchg_bool_at_resolved(access, expected_val, new_val, value_type); - - // Emit the post barrier only when the actual store happened. This makes sense - // to check only for LS_cmp_* that can fail to set the value. - // LS_cmp_exchange does not produce any branches by default, so there is no - // boolean result to piggyback on. TODO: When we merge CompareAndSwap with - // CompareAndExchange and move branches here, it would make sense to conditionalize - // post_barriers for LS_cmp_exchange as well. - // - // CAS success path is marked more likely since we anticipate this is a performance - // critical path, while CAS failure path can use the penalty for going through unlikely - // path as backoff. Which is still better than doing a store barrier there. - IdealKit ideal(kit); - ideal.if_then(load_store, BoolTest::ne, ideal.ConI(0), PROB_STATIC_FREQUENT); { - kit->sync_kit(ideal); - post_barrier(kit, access.base(), access.addr().node(), new_val, true); - ideal.sync_kit(kit); - } ideal.end_if(); - kit->final_sync(ideal); - - return load_store; -} - -Node* ModRefBarrierSetC2::atomic_xchg_at_resolved(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const { - Node* result = BarrierSetC2::atomic_xchg_at_resolved(access, new_val, value_type); - if (!access.is_oop()) { - return result; - } - - post_barrier(access.kit(), access.base(), access.addr().node(), new_val, true); - - return result; -} diff --git a/src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.hpp b/src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.hpp deleted file mode 100644 index 42fe3f7d0b6..00000000000 --- a/src/hotspot/share/gc/shared/c2/modRefBarrierSetC2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_GC_SHARED_C2_MODREFBARRIERSETC2_HPP -#define SHARE_GC_SHARED_C2_MODREFBARRIERSETC2_HPP - -#include "gc/shared/c2/barrierSetC2.hpp" - -class TypeOopPtr; - -class ModRefBarrierSetC2: public BarrierSetC2 { -protected: - virtual void post_barrier(GraphKit* kit, - Node* obj, - Node* adr, - Node* val, - bool use_precise) const {} - - virtual Node* store_at_resolved(C2Access& access, C2AccessValue& val) const; - - virtual Node* atomic_cmpxchg_val_at_resolved(C2AtomicParseAccess& access, Node* expected_val, - Node* new_val, const Type* value_type) const; - virtual Node* atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& access, Node* expected_val, - Node* new_val, const Type* value_type) const; - virtual Node* atomic_xchg_at_resolved(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const; -}; - -#endif // SHARE_GC_SHARED_C2_MODREFBARRIERSETC2_HPP diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp index de514f64be2..539e40820a8 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp @@ -53,18 +53,22 @@ CardTableBarrierSet::CardTableBarrierSet(BarrierSetAssembler* barrier_set_assemb BarrierSetC2* barrier_set_c2, CardTable* card_table, const BarrierSet::FakeRtti& fake_rtti) : - ModRefBarrierSet(barrier_set_assembler, - barrier_set_c1, - barrier_set_c2, - fake_rtti.add_tag(BarrierSet::CardTableBarrierSet)), + BarrierSet(barrier_set_assembler, + barrier_set_c1, + barrier_set_c2, + nullptr /* barrier_set_nmethod */, + nullptr /* barrier_set_stack_chunk */, + fake_rtti.add_tag(BarrierSet::CardTableBarrierSet)), _card_table(card_table) {} CardTableBarrierSet::CardTableBarrierSet(CardTable* card_table) : - ModRefBarrierSet(make_barrier_set_assembler(), - make_barrier_set_c1(), - make_barrier_set_c2(), - BarrierSet::FakeRtti(BarrierSet::CardTableBarrierSet)), + BarrierSet(make_barrier_set_assembler(), + make_barrier_set_c1(), + make_barrier_set_c2(), + nullptr /* barrier_set_nmethod */, + nullptr /* barrier_set_stack_chunk */, + BarrierSet::FakeRtti(BarrierSet::CardTableBarrierSet)), _card_table(card_table) {} diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp index a5646c303f3..dea36098673 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp @@ -25,8 +25,9 @@ #ifndef SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP #define SHARE_GC_SHARED_CARDTABLEBARRIERSET_HPP +#include "gc/shared/barrierSet.hpp" #include "gc/shared/cardTable.hpp" -#include "gc/shared/modRefBarrierSet.hpp" +#include "memory/memRegion.hpp" #include "utilities/align.hpp" // This kind of "BarrierSet" allows a "CollectedHeap" to detect and @@ -41,7 +42,7 @@ // Closures used to scan dirty cards should take these // considerations into account. -class CardTableBarrierSet: public ModRefBarrierSet { +class CardTableBarrierSet: public BarrierSet { // Some classes get to look at some private stuff. friend class VMStructs; @@ -59,23 +60,68 @@ public: CardTableBarrierSet(CardTable* card_table); virtual ~CardTableBarrierSet(); - CardTable* card_table() const { return _card_table; } + template + inline void write_ref_field_pre(T* addr) {} // Record a reference update. Note that these versions are precise! // The scanning code has to handle the fact that the write barrier may be // either precise or imprecise. We make non-virtual inline variants of // these functions here for performance. template - void write_ref_field_post(T* field); + inline void write_ref_field_post(T *addr); + // Causes all refs in "mr" to be assumed to be modified (by this JavaThread). virtual void write_region(MemRegion mr); + // Operations on arrays, or general regions (e.g., for "clone") may be + // optimized by some barriers. + + // Below length is the # array elements being written + virtual void write_ref_array_pre(oop* dst, size_t length, + bool dest_uninitialized) {} + virtual void write_ref_array_pre(narrowOop* dst, size_t length, + bool dest_uninitialized) {} + // Below count is the # array elements being written, starting + // at the address "start", which may not necessarily be HeapWord-aligned + inline void write_ref_array(HeapWord* start, size_t count); + + CardTable* card_table() const { return _card_table; } + virtual void on_slowpath_allocation_exit(JavaThread* thread, oop new_obj); virtual void print_on(outputStream* st) const; template - class AccessBarrier: public ModRefBarrierSet::AccessBarrier {}; + class AccessBarrier: public BarrierSet::AccessBarrier { + typedef BarrierSet::AccessBarrier Raw; + + public: + template + static void oop_store_in_heap(T* addr, oop value); + template + static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value); + template + static oop oop_atomic_xchg_in_heap(T* addr, oop new_value); + + template + static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw, + arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, + size_t length); + + static void clone_in_heap(oop src, oop dst, size_t size); + + static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) { + oop_store_in_heap(AccessInternal::oop_field_addr(base, offset), value); + } + + static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) { + return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr(base, offset), new_value); + } + + static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) { + return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr(base, offset), compare_value, new_value); + } + }; }; template<> diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.inline.hpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.inline.hpp index 3d87cb2e69d..7fc3fee1e7c 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.inline.hpp @@ -27,8 +27,11 @@ #include "gc/shared/cardTableBarrierSet.hpp" +#include "gc/shared/barrierSet.hpp" #include "gc/shared/cardTable.hpp" -#include "runtime/atomicAccess.hpp" +#include "oops/compressedOops.inline.hpp" +#include "oops/objArrayOop.hpp" +#include "oops/oop.hpp" template inline void CardTableBarrierSet::write_ref_field_post(T* field) { @@ -36,4 +39,112 @@ inline void CardTableBarrierSet::write_ref_field_post(T* field) { *byte = CardTable::dirty_card_val(); } +class Klass; + +// count is number of array elements being written +void CardTableBarrierSet::write_ref_array(HeapWord* start, size_t count) { + HeapWord* end = (HeapWord*)((char*)start + (count*heapOopSize)); + // In the case of compressed oops, start and end may potentially be misaligned; + // so we need to conservatively align the first downward (this is not + // strictly necessary for current uses, but a case of good hygiene and, + // if you will, aesthetics) and the second upward (this is essential for + // current uses) to a HeapWord boundary, so we mark all cards overlapping + // this write. If this evolves in the future to calling a + // logging barrier of narrow oop granularity, like the pre-barrier for G1 + // (mentioned here merely by way of example), we will need to change this + // interface, so it is "exactly precise" (if i may be allowed the adverbial + // redundancy for emphasis) and does not include narrow oop slots not + // included in the original write interval. + HeapWord* aligned_start = align_down(start, HeapWordSize); + HeapWord* aligned_end = align_up (end, HeapWordSize); + // If compressed oops were not being used, these should already be aligned + assert(UseCompressedOops || (aligned_start == start && aligned_end == end), + "Expected heap word alignment of start and end"); + write_region(MemRegion(aligned_start, aligned_end)); +} + +template +template +inline void CardTableBarrierSet::AccessBarrier:: +oop_store_in_heap(T* addr, oop value) { + BarrierSetT *bs = barrier_set_cast(barrier_set()); + bs->template write_ref_field_pre(addr); + Raw::oop_store(addr, value); + bs->template write_ref_field_post(addr); +} + +template +template +inline oop CardTableBarrierSet::AccessBarrier:: +oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value) { + BarrierSetT *bs = barrier_set_cast(barrier_set()); + bs->template write_ref_field_pre(addr); + oop result = Raw::oop_atomic_cmpxchg(addr, compare_value, new_value); + if (result == compare_value) { + bs->template write_ref_field_post(addr); + } + return result; +} + +template +template +inline oop CardTableBarrierSet::AccessBarrier:: +oop_atomic_xchg_in_heap(T* addr, oop new_value) { + BarrierSetT *bs = barrier_set_cast(barrier_set()); + bs->template write_ref_field_pre(addr); + oop result = Raw::oop_atomic_xchg(addr, new_value); + bs->template write_ref_field_post(addr); + return result; +} + +template +template +inline bool CardTableBarrierSet::AccessBarrier:: +oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw, + arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, + size_t length) { + BarrierSetT *bs = barrier_set_cast(barrier_set()); + + src_raw = arrayOopDesc::obj_offset_to_raw(src_obj, src_offset_in_bytes, src_raw); + dst_raw = arrayOopDesc::obj_offset_to_raw(dst_obj, dst_offset_in_bytes, dst_raw); + + if (!HasDecorator::value) { + // Optimized covariant case + bs->write_ref_array_pre(dst_raw, length, + HasDecorator::value); + Raw::oop_arraycopy(nullptr, 0, src_raw, nullptr, 0, dst_raw, length); + bs->write_ref_array((HeapWord*)dst_raw, length); + } else { + assert(dst_obj != nullptr, "better have an actual oop"); + Klass* bound = objArrayOop(dst_obj)->element_klass(); + T* from = const_cast(src_raw); + T* end = from + length; + for (T* p = dst_raw; from < end; from++, p++) { + T element = *from; + if (oopDesc::is_instanceof_or_null(CompressedOops::decode(element), bound)) { + bs->template write_ref_field_pre(p); + *p = element; + } else { + // We must do a barrier to cover the partial copy. + const size_t pd = pointer_delta(p, dst_raw, (size_t)heapOopSize); + // pointer delta is scaled to number of elements (length field in + // objArrayOop) which we assume is 32 bit. + assert(pd == (size_t)(int)pd, "length field overflow"); + bs->write_ref_array((HeapWord*)dst_raw, pd); + return false; + } + } + bs->write_ref_array((HeapWord*)dst_raw, length); + } + return true; +} + +template +inline void CardTableBarrierSet::AccessBarrier:: +clone_in_heap(oop src, oop dst, size_t size) { + Raw::clone(src, dst, size); + BarrierSetT *bs = barrier_set_cast(barrier_set()); + bs->write_region(MemRegion((HeapWord*)(void*)dst, size)); +} + #endif // SHARE_GC_SHARED_CARDTABLEBARRIERSET_INLINE_HPP diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp deleted file mode 100644 index c078d151233..00000000000 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2000, 2024, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_GC_SHARED_MODREFBARRIERSET_HPP -#define SHARE_GC_SHARED_MODREFBARRIERSET_HPP - -#include "gc/shared/barrierSet.hpp" -#include "memory/memRegion.hpp" - -class Klass; - -class ModRefBarrierSet: public BarrierSet { -protected: - ModRefBarrierSet(BarrierSetAssembler* barrier_set_assembler, - BarrierSetC1* barrier_set_c1, - BarrierSetC2* barrier_set_c2, - const BarrierSet::FakeRtti& fake_rtti) - : BarrierSet(barrier_set_assembler, - barrier_set_c1, - barrier_set_c2, - nullptr /* barrier_set_nmethod */, - nullptr /* barrier_set_stack_chunk */, - fake_rtti.add_tag(BarrierSet::ModRef)) { } - ~ModRefBarrierSet() { } - -public: - template - inline void write_ref_field_pre(T* addr) {} - - template - inline void write_ref_field_post(T *addr) {} - - // Causes all refs in "mr" to be assumed to be modified (by this JavaThread). - virtual void write_region(MemRegion mr) = 0; - - // Operations on arrays, or general regions (e.g., for "clone") may be - // optimized by some barriers. - - // Below length is the # array elements being written - virtual void write_ref_array_pre(oop* dst, size_t length, - bool dest_uninitialized) {} - virtual void write_ref_array_pre(narrowOop* dst, size_t length, - bool dest_uninitialized) {} - // Below count is the # array elements being written, starting - // at the address "start", which may not necessarily be HeapWord-aligned - inline void write_ref_array(HeapWord* start, size_t count); - - // The ModRef abstraction introduces pre and post barriers - template - class AccessBarrier: public BarrierSet::AccessBarrier { - typedef BarrierSet::AccessBarrier Raw; - - public: - template - static void oop_store_in_heap(T* addr, oop value); - template - static oop oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value); - template - static oop oop_atomic_xchg_in_heap(T* addr, oop new_value); - - template - static bool oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw, - arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, - size_t length); - - static void clone_in_heap(oop src, oop dst, size_t size); - - static void oop_store_in_heap_at(oop base, ptrdiff_t offset, oop value) { - oop_store_in_heap(AccessInternal::oop_field_addr(base, offset), value); - } - - static oop oop_atomic_xchg_in_heap_at(oop base, ptrdiff_t offset, oop new_value) { - return oop_atomic_xchg_in_heap(AccessInternal::oop_field_addr(base, offset), new_value); - } - - static oop oop_atomic_cmpxchg_in_heap_at(oop base, ptrdiff_t offset, oop compare_value, oop new_value) { - return oop_atomic_cmpxchg_in_heap(AccessInternal::oop_field_addr(base, offset), compare_value, new_value); - } - }; -}; - -template<> -struct BarrierSet::GetName { - static const BarrierSet::Name value = BarrierSet::ModRef; -}; - -#endif // SHARE_GC_SHARED_MODREFBARRIERSET_HPP diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp deleted file mode 100644 index f5ad4f2c756..00000000000 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_GC_SHARED_MODREFBARRIERSET_INLINE_HPP -#define SHARE_GC_SHARED_MODREFBARRIERSET_INLINE_HPP - -#include "gc/shared/modRefBarrierSet.hpp" - -#include "gc/shared/barrierSet.hpp" -#include "oops/compressedOops.inline.hpp" -#include "oops/objArrayOop.hpp" -#include "oops/oop.hpp" -#include "runtime/thread.hpp" - -class Klass; - -// count is number of array elements being written -void ModRefBarrierSet::write_ref_array(HeapWord* start, size_t count) { - HeapWord* end = (HeapWord*)((char*)start + (count*heapOopSize)); - // In the case of compressed oops, start and end may potentially be misaligned; - // so we need to conservatively align the first downward (this is not - // strictly necessary for current uses, but a case of good hygiene and, - // if you will, aesthetics) and the second upward (this is essential for - // current uses) to a HeapWord boundary, so we mark all cards overlapping - // this write. If this evolves in the future to calling a - // logging barrier of narrow oop granularity, like the pre-barrier for G1 - // (mentioned here merely by way of example), we will need to change this - // interface, so it is "exactly precise" (if i may be allowed the adverbial - // redundancy for emphasis) and does not include narrow oop slots not - // included in the original write interval. - HeapWord* aligned_start = align_down(start, HeapWordSize); - HeapWord* aligned_end = align_up (end, HeapWordSize); - // If compressed oops were not being used, these should already be aligned - assert(UseCompressedOops || (aligned_start == start && aligned_end == end), - "Expected heap word alignment of start and end"); - write_region(MemRegion(aligned_start, aligned_end)); -} - -template -template -inline void ModRefBarrierSet::AccessBarrier:: -oop_store_in_heap(T* addr, oop value) { - BarrierSetT *bs = barrier_set_cast(barrier_set()); - bs->template write_ref_field_pre(addr); - Raw::oop_store(addr, value); - bs->template write_ref_field_post(addr); -} - -template -template -inline oop ModRefBarrierSet::AccessBarrier:: -oop_atomic_cmpxchg_in_heap(T* addr, oop compare_value, oop new_value) { - BarrierSetT *bs = barrier_set_cast(barrier_set()); - bs->template write_ref_field_pre(addr); - oop result = Raw::oop_atomic_cmpxchg(addr, compare_value, new_value); - if (result == compare_value) { - bs->template write_ref_field_post(addr); - } - return result; -} - -template -template -inline oop ModRefBarrierSet::AccessBarrier:: -oop_atomic_xchg_in_heap(T* addr, oop new_value) { - BarrierSetT *bs = barrier_set_cast(barrier_set()); - bs->template write_ref_field_pre(addr); - oop result = Raw::oop_atomic_xchg(addr, new_value); - bs->template write_ref_field_post(addr); - return result; -} - -template -template -inline bool ModRefBarrierSet::AccessBarrier:: -oop_arraycopy_in_heap(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw, - arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw, - size_t length) { - BarrierSetT *bs = barrier_set_cast(barrier_set()); - - src_raw = arrayOopDesc::obj_offset_to_raw(src_obj, src_offset_in_bytes, src_raw); - dst_raw = arrayOopDesc::obj_offset_to_raw(dst_obj, dst_offset_in_bytes, dst_raw); - - if (!HasDecorator::value) { - // Optimized covariant case - bs->write_ref_array_pre(dst_raw, length, - HasDecorator::value); - Raw::oop_arraycopy(nullptr, 0, src_raw, nullptr, 0, dst_raw, length); - bs->write_ref_array((HeapWord*)dst_raw, length); - } else { - assert(dst_obj != nullptr, "better have an actual oop"); - Klass* bound = objArrayOop(dst_obj)->element_klass(); - T* from = const_cast(src_raw); - T* end = from + length; - for (T* p = dst_raw; from < end; from++, p++) { - T element = *from; - if (oopDesc::is_instanceof_or_null(CompressedOops::decode(element), bound)) { - bs->template write_ref_field_pre(p); - *p = element; - } else { - // We must do a barrier to cover the partial copy. - const size_t pd = pointer_delta(p, dst_raw, (size_t)heapOopSize); - // pointer delta is scaled to number of elements (length field in - // objArrayOop) which we assume is 32 bit. - assert(pd == (size_t)(int)pd, "length field overflow"); - bs->write_ref_array((HeapWord*)dst_raw, pd); - return false; - } - } - bs->write_ref_array((HeapWord*)dst_raw, length); - } - return true; -} - -template -inline void ModRefBarrierSet::AccessBarrier:: -clone_in_heap(oop src, oop dst, size_t size) { - Raw::clone(src, dst, size); - BarrierSetT *bs = barrier_set_cast(barrier_set()); - bs->write_region(MemRegion((HeapWord*)(void*)dst, size)); -} - -#endif // SHARE_GC_SHARED_MODREFBARRIERSET_INLINE_HPP diff --git a/src/hotspot/share/gc/shared/modRefBarrierSetAssembler.hpp b/src/hotspot/share/gc/shared/modRefBarrierSetAssembler.hpp deleted file mode 100644 index 43f1a5d2dc3..00000000000 --- a/src/hotspot/share/gc/shared/modRefBarrierSetAssembler.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_GC_SHARED_MODREFBARRIERSETASSEMBLER_HPP -#define SHARE_GC_SHARED_MODREFBARRIERSETASSEMBLER_HPP - -#include "utilities/macros.hpp" - -#include CPU_HEADER(gc/shared/modRefBarrierSetAssembler) - -#endif // SHARE_GC_SHARED_MODREFBARRIERSETASSEMBLER_HPP diff --git a/src/hotspot/share/gc/shared/vmStructs_gc.hpp b/src/hotspot/share/gc/shared/vmStructs_gc.hpp index 9d84a56fbd7..3a644079875 100644 --- a/src/hotspot/share/gc/shared/vmStructs_gc.hpp +++ b/src/hotspot/share/gc/shared/vmStructs_gc.hpp @@ -132,8 +132,7 @@ declare_toplevel_type(CollectedHeap) \ declare_toplevel_type(ContiguousSpace) \ declare_toplevel_type(BarrierSet) \ - declare_type(ModRefBarrierSet, BarrierSet) \ - declare_type(CardTableBarrierSet, ModRefBarrierSet) \ + declare_type(CardTableBarrierSet, BarrierSet) \ declare_toplevel_type(CardTable) \ declare_toplevel_type(BarrierSet::Name) \ \ @@ -183,7 +182,6 @@ \ declare_constant(AgeTable::table_size) \ \ - declare_constant(BarrierSet::ModRef) \ declare_constant(BarrierSet::CardTableBarrierSet) \ \ declare_constant(BOTConstants::LogBase) \ diff --git a/src/hotspot/share/oops/access.inline.hpp b/src/hotspot/share/oops/access.inline.hpp index b3f15f1168d..da3d54c4902 100644 --- a/src/hotspot/share/oops/access.inline.hpp +++ b/src/hotspot/share/oops/access.inline.hpp @@ -219,7 +219,7 @@ namespace AccessInternal { AccessBarrier, barrier_type, ds>::oop_access_barrier; \ } \ break; - FOR_EACH_CONCRETE_BARRIER_SET_DO(BARRIER_SET_RESOLVE_BARRIER_CLOSURE) + FOR_EACH_BARRIER_SET_DO(BARRIER_SET_RESOLVE_BARRIER_CLOSURE) #undef BARRIER_SET_RESOLVE_BARRIER_CLOSURE default: @@ -242,7 +242,7 @@ namespace AccessInternal { AccessBarrier, barrier_type, ds>::access_barrier; \ } \ break; - FOR_EACH_CONCRETE_BARRIER_SET_DO(BARRIER_SET_RESOLVE_BARRIER_CLOSURE) + FOR_EACH_BARRIER_SET_DO(BARRIER_SET_RESOLVE_BARRIER_CLOSURE) #undef BARRIER_SET_RESOLVE_BARRIER_CLOSURE default: diff --git a/src/hotspot/share/runtime/continuationFreezeThaw.cpp b/src/hotspot/share/runtime/continuationFreezeThaw.cpp index 5df1220a5ce..6ede40c22e0 100644 --- a/src/hotspot/share/runtime/continuationFreezeThaw.cpp +++ b/src/hotspot/share/runtime/continuationFreezeThaw.cpp @@ -3054,7 +3054,7 @@ private: resolve::type>(); \ } \ break; - FOR_EACH_CONCRETE_BARRIER_SET_DO(BARRIER_SET_RESOLVE_BARRIER_CLOSURE) + FOR_EACH_BARRIER_SET_DO(BARRIER_SET_RESOLVE_BARRIER_CLOSURE) #undef BARRIER_SET_RESOLVE_BARRIER_CLOSURE default: From 19cca0a2a829396291fa4140b2082ef518425518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joel=20Sikstr=C3=B6m?= Date: Tue, 4 Nov 2025 09:35:46 +0000 Subject: [PATCH 008/512] 8371131: Cleanup Thread parameter in CollectedHeap TLAB methods Reviewed-by: ayang, tschatzl --- src/hotspot/share/gc/epsilon/epsilonHeap.cpp | 2 +- src/hotspot/share/gc/epsilon/epsilonHeap.hpp | 8 ++++---- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 6 +++--- src/hotspot/share/gc/g1/g1CollectedHeap.hpp | 6 +++--- .../share/gc/parallel/mutableNUMASpace.cpp | 6 +++--- .../share/gc/parallel/mutableNUMASpace.hpp | 6 +++--- src/hotspot/share/gc/parallel/mutableSpace.hpp | 10 +++++----- .../share/gc/parallel/parallelScavengeHeap.cpp | 12 ++++++------ .../share/gc/parallel/parallelScavengeHeap.hpp | 6 +++--- src/hotspot/share/gc/serial/serialHeap.cpp | 6 +++--- src/hotspot/share/gc/serial/serialHeap.hpp | 6 +++--- src/hotspot/share/gc/shared/collectedHeap.hpp | 8 ++++---- .../share/gc/shared/threadLocalAllocBuffer.cpp | 15 +++++++-------- .../gc/shared/threadLocalAllocBuffer.inline.hpp | 3 +-- .../gc/shenandoah/shenandoahGenerationalHeap.cpp | 2 +- .../gc/shenandoah/shenandoahGenerationalHeap.hpp | 2 +- .../share/gc/shenandoah/shenandoahHeap.cpp | 6 +++--- .../share/gc/shenandoah/shenandoahHeap.hpp | 6 +++--- src/hotspot/share/gc/z/zCollectedHeap.cpp | 6 +++--- src/hotspot/share/gc/z/zCollectedHeap.hpp | 6 +++--- 20 files changed, 63 insertions(+), 65 deletions(-) diff --git a/src/hotspot/share/gc/epsilon/epsilonHeap.cpp b/src/hotspot/share/gc/epsilon/epsilonHeap.cpp index f3d411e34ba..e5ae673ef0c 100644 --- a/src/hotspot/share/gc/epsilon/epsilonHeap.cpp +++ b/src/hotspot/share/gc/epsilon/epsilonHeap.cpp @@ -91,7 +91,7 @@ GrowableArray EpsilonHeap::memory_pools() { return memory_pools; } -size_t EpsilonHeap::unsafe_max_tlab_alloc(Thread* thr) const { +size_t EpsilonHeap::unsafe_max_tlab_alloc() const { // Return max allocatable TLAB size, and let allocation path figure out // the actual allocation size. Note: result should be in bytes. return _max_tlab_size * HeapWordSize; diff --git a/src/hotspot/share/gc/epsilon/epsilonHeap.hpp b/src/hotspot/share/gc/epsilon/epsilonHeap.hpp index e23e24a5afc..4f812bde8b3 100644 --- a/src/hotspot/share/gc/epsilon/epsilonHeap.hpp +++ b/src/hotspot/share/gc/epsilon/epsilonHeap.hpp @@ -90,10 +90,10 @@ public: size_t* actual_size) override; // TLAB allocation - size_t tlab_capacity(Thread* thr) const override { return capacity(); } - size_t tlab_used(Thread* thr) const override { return used(); } - size_t max_tlab_size() const override { return _max_tlab_size; } - size_t unsafe_max_tlab_alloc(Thread* thr) const override; + size_t tlab_capacity() const override { return capacity(); } + size_t tlab_used() const override { return used(); } + size_t max_tlab_size() const override { return _max_tlab_size; } + size_t unsafe_max_tlab_alloc() const override; void collect(GCCause::Cause cause) override; void do_full_collection(bool clear_all_soft_refs) override; diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index 90b38a96d67..8a5c6d4579e 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -2268,11 +2268,11 @@ bool G1CollectedHeap::block_is_obj(const HeapWord* addr) const { return hr->block_is_obj(addr, hr->parsable_bottom_acquire()); } -size_t G1CollectedHeap::tlab_capacity(Thread* ignored) const { +size_t G1CollectedHeap::tlab_capacity() const { return eden_target_length() * G1HeapRegion::GrainBytes; } -size_t G1CollectedHeap::tlab_used(Thread* ignored) const { +size_t G1CollectedHeap::tlab_used() const { return _eden.length() * G1HeapRegion::GrainBytes; } @@ -2282,7 +2282,7 @@ size_t G1CollectedHeap::max_tlab_size() const { return align_down(_humongous_object_threshold_in_words, MinObjAlignment); } -size_t G1CollectedHeap::unsafe_max_tlab_alloc(Thread* ignored) const { +size_t G1CollectedHeap::unsafe_max_tlab_alloc() const { return _allocator->unsafe_max_tlab_alloc(); } diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp index 3dc52c037ec..e160cb9e428 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp @@ -1202,10 +1202,10 @@ public: // Section on thread-local allocation buffers (TLABs) // See CollectedHeap for semantics. - size_t tlab_capacity(Thread* ignored) const override; - size_t tlab_used(Thread* ignored) const override; + size_t tlab_capacity() const override; + size_t tlab_used() const override; size_t max_tlab_size() const override; - size_t unsafe_max_tlab_alloc(Thread* ignored) const override; + size_t unsafe_max_tlab_alloc() const override; inline bool is_in_young(const oop obj) const; inline bool requires_barriers(stackChunkOop obj) const override; diff --git a/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp b/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp index 62ece4e0605..e0b1edf2efc 100644 --- a/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp +++ b/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp @@ -110,7 +110,7 @@ size_t MutableNUMASpace::free_in_words() const { return s; } -size_t MutableNUMASpace::tlab_capacity(Thread *ignored) const { +size_t MutableNUMASpace::tlab_capacity() const { size_t s = 0; for (LGRPSpace* ls : *lgrp_spaces()) { s += ls->space()->capacity_in_bytes(); @@ -118,7 +118,7 @@ size_t MutableNUMASpace::tlab_capacity(Thread *ignored) const { return s / (size_t)lgrp_spaces()->length(); } -size_t MutableNUMASpace::tlab_used(Thread *ignored) const { +size_t MutableNUMASpace::tlab_used() const { size_t s = 0; for (LGRPSpace* ls : *lgrp_spaces()) { s += ls->space()->used_in_bytes(); @@ -126,7 +126,7 @@ size_t MutableNUMASpace::tlab_used(Thread *ignored) const { return s / (size_t)lgrp_spaces()->length(); } -size_t MutableNUMASpace::unsafe_max_tlab_alloc(Thread *ignored) const { +size_t MutableNUMASpace::unsafe_max_tlab_alloc() const { size_t s = 0; for (LGRPSpace* ls : *lgrp_spaces()) { s += ls->space()->free_in_bytes(); diff --git a/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp b/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp index 9302b262bb8..4b8bca430f8 100644 --- a/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp +++ b/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp @@ -166,9 +166,9 @@ public: virtual size_t used_in_words() const; virtual size_t free_in_words() const; - virtual size_t tlab_capacity(Thread* ignored) const; - virtual size_t tlab_used(Thread* ignored) const; - virtual size_t unsafe_max_tlab_alloc(Thread* ignored) const; + virtual size_t tlab_capacity() const; + virtual size_t tlab_used() const; + virtual size_t unsafe_max_tlab_alloc() const; // Allocation (return null if full) virtual HeapWord* cas_allocate(size_t word_size); diff --git a/src/hotspot/share/gc/parallel/mutableSpace.hpp b/src/hotspot/share/gc/parallel/mutableSpace.hpp index 785bfe27228..37fa7e3710e 100644 --- a/src/hotspot/share/gc/parallel/mutableSpace.hpp +++ b/src/hotspot/share/gc/parallel/mutableSpace.hpp @@ -117,11 +117,11 @@ public: size_t free_in_bytes() const { return free_in_words() * HeapWordSize; } // Size computations. Sizes are in heapwords. - virtual size_t used_in_words() const { return pointer_delta(top(), bottom()); } - virtual size_t free_in_words() const { return pointer_delta(end(), top()); } - virtual size_t tlab_capacity(Thread* thr) const { return capacity_in_bytes(); } - virtual size_t tlab_used(Thread* thr) const { return used_in_bytes(); } - virtual size_t unsafe_max_tlab_alloc(Thread* thr) const { return free_in_bytes(); } + virtual size_t used_in_words() const { return pointer_delta(top(), bottom()); } + virtual size_t free_in_words() const { return pointer_delta(end(), top()); } + virtual size_t tlab_capacity() const { return capacity_in_bytes(); } + virtual size_t tlab_used() const { return used_in_bytes(); } + virtual size_t unsafe_max_tlab_alloc() const { return free_in_bytes(); } // Allocation (return null if full) virtual HeapWord* cas_allocate(size_t word_size); diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp index 2e7d8011869..f5ed40c40e5 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp @@ -456,16 +456,16 @@ void ParallelScavengeHeap::ensure_parsability(bool retire_tlabs) { young_gen()->eden_space()->ensure_parsability(); } -size_t ParallelScavengeHeap::tlab_capacity(Thread* thr) const { - return young_gen()->eden_space()->tlab_capacity(thr); +size_t ParallelScavengeHeap::tlab_capacity() const { + return young_gen()->eden_space()->tlab_capacity(); } -size_t ParallelScavengeHeap::tlab_used(Thread* thr) const { - return young_gen()->eden_space()->tlab_used(thr); +size_t ParallelScavengeHeap::tlab_used() const { + return young_gen()->eden_space()->tlab_used(); } -size_t ParallelScavengeHeap::unsafe_max_tlab_alloc(Thread* thr) const { - return young_gen()->eden_space()->unsafe_max_tlab_alloc(thr); +size_t ParallelScavengeHeap::unsafe_max_tlab_alloc() const { + return young_gen()->eden_space()->unsafe_max_tlab_alloc(); } HeapWord* ParallelScavengeHeap::allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size) { diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp index 962a3c4b15b..de1e3ce851c 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp @@ -214,9 +214,9 @@ public: void ensure_parsability(bool retire_tlabs) override; void resize_all_tlabs() override; - size_t tlab_capacity(Thread* thr) const override; - size_t tlab_used(Thread* thr) const override; - size_t unsafe_max_tlab_alloc(Thread* thr) const override; + size_t tlab_capacity() const override; + size_t tlab_used() const override; + size_t unsafe_max_tlab_alloc() const override; void object_iterate(ObjectClosure* cl) override; void object_iterate_parallel(ObjectClosure* cl, HeapBlockClaimer* claimer); diff --git a/src/hotspot/share/gc/serial/serialHeap.cpp b/src/hotspot/share/gc/serial/serialHeap.cpp index 1d62af65ebd..00d74e691eb 100644 --- a/src/hotspot/share/gc/serial/serialHeap.cpp +++ b/src/hotspot/share/gc/serial/serialHeap.cpp @@ -660,16 +660,16 @@ bool SerialHeap::block_is_obj(const HeapWord* addr) const { return addr < _old_gen->space()->top(); } -size_t SerialHeap::tlab_capacity(Thread* thr) const { +size_t SerialHeap::tlab_capacity() const { // Only young-gen supports tlab allocation. return _young_gen->tlab_capacity(); } -size_t SerialHeap::tlab_used(Thread* thr) const { +size_t SerialHeap::tlab_used() const { return _young_gen->tlab_used(); } -size_t SerialHeap::unsafe_max_tlab_alloc(Thread* thr) const { +size_t SerialHeap::unsafe_max_tlab_alloc() const { return _young_gen->unsafe_max_tlab_alloc(); } diff --git a/src/hotspot/share/gc/serial/serialHeap.hpp b/src/hotspot/share/gc/serial/serialHeap.hpp index 3915f8c4af9..432cd73f616 100644 --- a/src/hotspot/share/gc/serial/serialHeap.hpp +++ b/src/hotspot/share/gc/serial/serialHeap.hpp @@ -189,9 +189,9 @@ public: bool block_is_obj(const HeapWord* addr) const; // Section on TLAB's. - size_t tlab_capacity(Thread* thr) const override; - size_t tlab_used(Thread* thr) const override; - size_t unsafe_max_tlab_alloc(Thread* thr) const override; + size_t tlab_capacity() const override; + size_t tlab_used() const override; + size_t unsafe_max_tlab_alloc() const override; HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size) override; diff --git a/src/hotspot/share/gc/shared/collectedHeap.hpp b/src/hotspot/share/gc/shared/collectedHeap.hpp index 63ef2cf83de..3b5865e0001 100644 --- a/src/hotspot/share/gc/shared/collectedHeap.hpp +++ b/src/hotspot/share/gc/shared/collectedHeap.hpp @@ -341,17 +341,17 @@ protected: virtual void ensure_parsability(bool retire_tlabs); // The amount of space available for thread-local allocation buffers. - virtual size_t tlab_capacity(Thread *thr) const = 0; + virtual size_t tlab_capacity() const = 0; - // The amount of used space for thread-local allocation buffers for the given thread. - virtual size_t tlab_used(Thread *thr) const = 0; + // The amount of space used for thread-local allocation buffers. + virtual size_t tlab_used() const = 0; virtual size_t max_tlab_size() const; // An estimate of the maximum allocation that could be performed // for thread-local allocation buffers without triggering any // collection or expansion activity. - virtual size_t unsafe_max_tlab_alloc(Thread *thr) const = 0; + virtual size_t unsafe_max_tlab_alloc() const = 0; // Perform a collection of the heap; intended for use in implementing // "System.gc". This probably implies as full a collection as the diff --git a/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp b/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp index dc5e415ea38..9635ed4d0cb 100644 --- a/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp +++ b/src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp @@ -72,12 +72,11 @@ size_t ThreadLocalAllocBuffer::remaining() { } void ThreadLocalAllocBuffer::accumulate_and_reset_statistics(ThreadLocalAllocStats* stats) { - Thread* thr = thread(); - size_t capacity = Universe::heap()->tlab_capacity(thr); - size_t used = Universe::heap()->tlab_used(thr); + size_t capacity = Universe::heap()->tlab_capacity(); + size_t used = Universe::heap()->tlab_used(); _gc_waste += (unsigned)remaining(); - size_t total_allocated = thr->allocated_bytes(); + size_t total_allocated = (size_t)thread()->allocated_bytes(); size_t allocated_since_last_gc = total_allocated - _allocated_before_last_gc; _allocated_before_last_gc = total_allocated; @@ -148,7 +147,7 @@ void ThreadLocalAllocBuffer::resize() { // Compute the next tlab size using expected allocation amount assert(ResizeTLAB, "Should not call this otherwise"); size_t alloc = (size_t)(_allocation_fraction.average() * - (Universe::heap()->tlab_capacity(thread()) / HeapWordSize)); + (Universe::heap()->tlab_capacity() / HeapWordSize)); size_t new_size = alloc / _target_refills; new_size = clamp(new_size, min_size(), max_size()); @@ -204,7 +203,7 @@ void ThreadLocalAllocBuffer::initialize() { set_desired_size(initial_desired_size()); - size_t capacity = Universe::heap()->tlab_capacity(thread()) / HeapWordSize; + size_t capacity = Universe::heap()->tlab_capacity() / HeapWordSize; if (capacity > 0) { // Keep alloc_frac as float and not double to avoid the double to float conversion float alloc_frac = desired_size() * target_refills() / (float)capacity; @@ -268,7 +267,7 @@ size_t ThreadLocalAllocBuffer::initial_desired_size() { // Initial size is a function of the average number of allocating threads. unsigned int nof_threads = ThreadLocalAllocStats::allocating_threads_avg(); - init_sz = (Universe::heap()->tlab_capacity(thread()) / HeapWordSize) / + init_sz = (Universe::heap()->tlab_capacity() / HeapWordSize) / (nof_threads * target_refills()); init_sz = align_object_size(init_sz); } @@ -289,7 +288,7 @@ void ThreadLocalAllocBuffer::print_stats(const char* tag) { Thread* thrd = thread(); size_t waste = _gc_waste + _refill_waste; double waste_percent = percent_of(waste, _allocated_size); - size_t tlab_used = Universe::heap()->tlab_used(thrd); + size_t tlab_used = Universe::heap()->tlab_used(); log.trace("TLAB: %s thread: " PTR_FORMAT " [id: %2d]" " desired_size: %zuKB" " slow allocs: %d refill waste: %zuB" diff --git a/src/hotspot/share/gc/shared/threadLocalAllocBuffer.inline.hpp b/src/hotspot/share/gc/shared/threadLocalAllocBuffer.inline.hpp index 22d19b77806..441686c5c4c 100644 --- a/src/hotspot/share/gc/shared/threadLocalAllocBuffer.inline.hpp +++ b/src/hotspot/share/gc/shared/threadLocalAllocBuffer.inline.hpp @@ -54,8 +54,7 @@ inline HeapWord* ThreadLocalAllocBuffer::allocate(size_t size) { inline size_t ThreadLocalAllocBuffer::compute_size(size_t obj_size) { // Compute the size for the new TLAB. // The "last" tlab may be smaller to reduce fragmentation. - // unsafe_max_tlab_alloc is just a hint. - const size_t available_size = Universe::heap()->unsafe_max_tlab_alloc(thread()) / HeapWordSize; + const size_t available_size = Universe::heap()->unsafe_max_tlab_alloc() / HeapWordSize; size_t new_tlab_size = MIN3(available_size, desired_size() + align_object_size(obj_size), max_size()); // Make sure there's enough room for object and filler int[]. diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp index e5f766f9df1..28053dffd5a 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp @@ -74,7 +74,7 @@ size_t ShenandoahGenerationalHeap::calculate_max_plab() { } // Returns size in bytes -size_t ShenandoahGenerationalHeap::unsafe_max_tlab_alloc(Thread *thread) const { +size_t ShenandoahGenerationalHeap::unsafe_max_tlab_alloc() const { return MIN2(ShenandoahHeapRegion::max_tlab_size_bytes(), young_generation()->available()); } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.hpp index 3eeec26dbbf..ed0223dc6fd 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.hpp @@ -56,7 +56,7 @@ public: void print_init_logger() const override; - size_t unsafe_max_tlab_alloc(Thread *thread) const override; + size_t unsafe_max_tlab_alloc() const override; private: // ---------- Evacuations and Promotions diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index f66d83204a4..5b353ee2103 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -1507,7 +1507,7 @@ void ShenandoahHeap::gclabs_retire(bool resize) { } // Returns size in bytes -size_t ShenandoahHeap::unsafe_max_tlab_alloc(Thread *thread) const { +size_t ShenandoahHeap::unsafe_max_tlab_alloc() const { // Return the max allowed size, and let the allocation path // figure out the safe size for current allocation. return ShenandoahHeapRegion::max_tlab_size_bytes(); @@ -1649,7 +1649,7 @@ void ShenandoahHeap::verify(VerifyOption vo) { } } } -size_t ShenandoahHeap::tlab_capacity(Thread *thr) const { +size_t ShenandoahHeap::tlab_capacity() const { return _free_set->capacity(); } @@ -2125,7 +2125,7 @@ GCTracer* ShenandoahHeap::tracer() { return shenandoah_policy()->tracer(); } -size_t ShenandoahHeap::tlab_used(Thread* thread) const { +size_t ShenandoahHeap::tlab_used() const { return _free_set->used(); } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp index 6cbe44fef09..e5961efd36e 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp @@ -692,10 +692,10 @@ public: Metaspace::MetadataType mdtype) override; HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size) override; - size_t tlab_capacity(Thread *thr) const override; - size_t unsafe_max_tlab_alloc(Thread *thread) const override; + size_t tlab_capacity() const override; + size_t unsafe_max_tlab_alloc() const override; size_t max_tlab_size() const override; - size_t tlab_used(Thread* ignored) const override; + size_t tlab_used() const override; void ensure_parsability(bool retire_labs) override; diff --git a/src/hotspot/share/gc/z/zCollectedHeap.cpp b/src/hotspot/share/gc/z/zCollectedHeap.cpp index ae60219139c..1fbb4b25e2d 100644 --- a/src/hotspot/share/gc/z/zCollectedHeap.cpp +++ b/src/hotspot/share/gc/z/zCollectedHeap.cpp @@ -222,11 +222,11 @@ void ZCollectedHeap::do_full_collection(bool clear_all_soft_refs) { ShouldNotReachHere(); } -size_t ZCollectedHeap::tlab_capacity(Thread* ignored) const { +size_t ZCollectedHeap::tlab_capacity() const { return _heap.tlab_capacity(); } -size_t ZCollectedHeap::tlab_used(Thread* ignored) const { +size_t ZCollectedHeap::tlab_used() const { return _heap.tlab_used(); } @@ -234,7 +234,7 @@ size_t ZCollectedHeap::max_tlab_size() const { return _heap.max_tlab_size() / HeapWordSize; } -size_t ZCollectedHeap::unsafe_max_tlab_alloc(Thread* ignored) const { +size_t ZCollectedHeap::unsafe_max_tlab_alloc() const { return _heap.unsafe_max_tlab_alloc(); } diff --git a/src/hotspot/share/gc/z/zCollectedHeap.hpp b/src/hotspot/share/gc/z/zCollectedHeap.hpp index bbcddec917f..07366b35d30 100644 --- a/src/hotspot/share/gc/z/zCollectedHeap.hpp +++ b/src/hotspot/share/gc/z/zCollectedHeap.hpp @@ -83,10 +83,10 @@ public: void collect_as_vm_thread(GCCause::Cause cause) override; void do_full_collection(bool clear_all_soft_refs) override; - size_t tlab_capacity(Thread* thr) const override; - size_t tlab_used(Thread* thr) const override; + size_t tlab_capacity() const override; + size_t tlab_used() const override; size_t max_tlab_size() const override; - size_t unsafe_max_tlab_alloc(Thread* thr) const override; + size_t unsafe_max_tlab_alloc() const override; MemoryUsage memory_usage() override; GrowableArray memory_managers() override; From a98b9e7cfa433d4bf2acbf59a1c9d3714c3c065d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Maillard?= Date: Tue, 4 Nov 2025 09:42:18 +0000 Subject: [PATCH 009/512] 8362832: compiler/macronodes/TestTopInMacroElimination.java hits assert(false) failed: unexpected node Reviewed-by: dlunden, epeter, kvn --- src/hotspot/share/opto/macro.cpp | 5 +++++ test/hotspot/jtreg/ProblemList-jvmti-stress-agent.txt | 3 --- .../jtreg/compiler/macronodes/TestTopInMacroElimination.java | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/opto/macro.cpp b/src/hotspot/share/opto/macro.cpp index ce33f0bec82..702aca592f3 100644 --- a/src/hotspot/share/opto/macro.cpp +++ b/src/hotspot/share/opto/macro.cpp @@ -501,6 +501,11 @@ Node *PhaseMacroExpand::value_from_mem(Node *sfpt_mem, Node *sfpt_ctl, BasicType } } else if (mem->is_ArrayCopy()) { done = true; + } else if (mem->is_top()) { + // The slice is on a dead path. Returning nullptr would lead to elimination + // bailout, but we want to prevent that. Just forwarding the top is also legal, + // and IGVN can just clean things up, and remove whatever receives top. + return mem; } else { DEBUG_ONLY( mem->dump(); ) assert(false, "unexpected node"); diff --git a/test/hotspot/jtreg/ProblemList-jvmti-stress-agent.txt b/test/hotspot/jtreg/ProblemList-jvmti-stress-agent.txt index 636d02cb8b0..1e6c0c735a9 100644 --- a/test/hotspot/jtreg/ProblemList-jvmti-stress-agent.txt +++ b/test/hotspot/jtreg/ProblemList-jvmti-stress-agent.txt @@ -27,9 +27,6 @@ # ############################################################################# - -compiler/macronodes/TestTopInMacroElimination.java 8362832 generic-all - gc/stringdedup/TestStringDeduplicationAgeThreshold.java 8362562 generic-all gc/stringdedup/TestStringDeduplicationInterned.java 8362562 generic-all gc/stringdedup/TestStringDeduplicationPrintOptions.java 8362562 generic-all diff --git a/test/hotspot/jtreg/compiler/macronodes/TestTopInMacroElimination.java b/test/hotspot/jtreg/compiler/macronodes/TestTopInMacroElimination.java index 86ff4e9b874..c57eb78c6a1 100644 --- a/test/hotspot/jtreg/compiler/macronodes/TestTopInMacroElimination.java +++ b/test/hotspot/jtreg/compiler/macronodes/TestTopInMacroElimination.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8325030 + * @bug 8325030 8362832 * @summary Regression test for an assert triggered during allocation elimination because top is found during * constructing new phis. * @run main/othervm -XX:-ProfileExceptionHandlers compiler.macronodes.TestTopInMacroElimination From a840dc22c575b5d2b5b6017a536a6541fc1f0a44 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Tue, 4 Nov 2025 09:54:50 +0000 Subject: [PATCH 010/512] 8364741: [asan] runtime/ErrorHandling/PrintVMInfoAtExitTest.java fails because output differs slightly Reviewed-by: syan, phubner, jsikstro --- .../ErrorHandling/PrintVMInfoAtExitTest.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test/hotspot/jtreg/runtime/ErrorHandling/PrintVMInfoAtExitTest.java b/test/hotspot/jtreg/runtime/ErrorHandling/PrintVMInfoAtExitTest.java index 2b9393e3d35..5e535bab626 100644 --- a/test/hotspot/jtreg/runtime/ErrorHandling/PrintVMInfoAtExitTest.java +++ b/test/hotspot/jtreg/runtime/ErrorHandling/PrintVMInfoAtExitTest.java @@ -27,14 +27,18 @@ * @test * @summary Test PrintVMInfoAtExit * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @modules java.base/jdk.internal.misc * @requires vm.flagless * @requires vm.bits == "64" - * @run driver PrintVMInfoAtExitTest + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI PrintVMInfoAtExitTest */ import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; +import jdk.test.whitebox.WhiteBox; + public class PrintVMInfoAtExitTest { @@ -53,7 +57,14 @@ public class PrintVMInfoAtExitTest { output_detail.shouldContain("-- S U M M A R Y --"); output_detail.shouldContain("Command Line: -Xmx64M -Xms64M -XX:-CreateCoredumpOnCrash -XX:+UnlockDiagnosticVMOptions -XX:+PrintVMInfoAtExit -XX:NativeMemoryTracking=summary -XX:CompressedClassSpaceSize=256m"); output_detail.shouldContain("Native Memory Tracking:"); - output_detail.shouldContain("Java Heap (reserved=65536KB, committed=65536KB)"); + WhiteBox wb = WhiteBox.getWhiteBox(); + if (wb.isAsanEnabled()) { + // the reserved value can be influenced by asan + output_detail.shouldContain("Java Heap (reserved="); + output_detail.shouldContain(", committed=65536KB)"); + } else { + output_detail.shouldContain("Java Heap (reserved=65536KB, committed=65536KB)"); + } } } From e6546683a8dd9a64255ce4c5606089068ec92e5d Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Tue, 4 Nov 2025 11:17:56 +0000 Subject: [PATCH 011/512] 8327963: C2: fix construction of memory graph around Initialize node to prevent incorrect execution if allocation is removed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Emanuel Peter Co-authored-by: Roberto Castañeda Lozano Reviewed-by: epeter, rcastanedalo --- src/hotspot/share/opto/classes.hpp | 1 + src/hotspot/share/opto/escape.cpp | 52 ++- src/hotspot/share/opto/escape.hpp | 8 +- src/hotspot/share/opto/graphKit.cpp | 15 +- src/hotspot/share/opto/idealGraphPrinter.cpp | 2 +- src/hotspot/share/opto/library_call.cpp | 18 +- src/hotspot/share/opto/loopTransform.cpp | 4 +- src/hotspot/share/opto/loopopts.cpp | 5 +- src/hotspot/share/opto/macro.cpp | 49 ++- src/hotspot/share/opto/matcher.cpp | 22 +- src/hotspot/share/opto/memnode.cpp | 59 ++- src/hotspot/share/opto/memnode.hpp | 44 ++- src/hotspot/share/opto/multnode.cpp | 73 ++-- src/hotspot/share/opto/multnode.hpp | 134 +++++++ src/hotspot/share/opto/node.cpp | 2 +- src/hotspot/share/opto/node.hpp | 3 + src/hotspot/share/opto/phaseX.cpp | 10 +- src/hotspot/share/opto/stringopts.cpp | 8 +- .../ServerCompilerScheduler.java | 4 +- .../filters/condenseGraph.filter | 1 + .../escapeAnalysis/TestIterativeEA.java | 10 +- ...arlyEliminationOfAllocationWithoutUse.java | 67 ++++ ...TestEliminationOfAllocationWithoutUse.java | 338 ++++++++++++++++++ .../TestInitializingStoreCapturing.java | 59 +++ 24 files changed, 897 insertions(+), 91 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/macronodes/TestEarlyEliminationOfAllocationWithoutUse.java create mode 100644 test/hotspot/jtreg/compiler/macronodes/TestEliminationOfAllocationWithoutUse.java create mode 100644 test/hotspot/jtreg/compiler/macronodes/TestInitializingStoreCapturing.java diff --git a/src/hotspot/share/opto/classes.hpp b/src/hotspot/share/opto/classes.hpp index 587d5fad8f2..d56abaa17dd 100644 --- a/src/hotspot/share/opto/classes.hpp +++ b/src/hotspot/share/opto/classes.hpp @@ -274,6 +274,7 @@ macro(NegL) macro(NegD) macro(NegF) macro(NeverBranch) +macro(NarrowMemProj) macro(OnSpinWait) macro(Opaque1) macro(OpaqueLoopInit) diff --git a/src/hotspot/share/opto/escape.cpp b/src/hotspot/share/opto/escape.cpp index a148b167ee3..61aa009361f 100644 --- a/src/hotspot/share/opto/escape.cpp +++ b/src/hotspot/share/opto/escape.cpp @@ -863,7 +863,7 @@ Node* ConnectionGraph::split_castpp_load_through_phi(Node* curr_addp, Node* curr // \|/ // Phi # "Field" Phi // -void ConnectionGraph::reduce_phi_on_castpp_field_load(Node* curr_castpp, GrowableArray &alloc_worklist, GrowableArray &memnode_worklist) { +void ConnectionGraph::reduce_phi_on_castpp_field_load(Node* curr_castpp, GrowableArray &alloc_worklist) { Node* ophi = curr_castpp->in(1); assert(ophi->is_Phi(), "Expected this to be a Phi node."); @@ -1279,7 +1279,7 @@ bool ConnectionGraph::reduce_phi_on_safepoints_helper(Node* ophi, Node* cast, No return true; } -void ConnectionGraph::reduce_phi(PhiNode* ophi, GrowableArray &alloc_worklist, GrowableArray &memnode_worklist) { +void ConnectionGraph::reduce_phi(PhiNode* ophi, GrowableArray &alloc_worklist) { bool delay = _igvn->delay_transform(); _igvn->set_delay_transform(true); _igvn->hash_delete(ophi); @@ -1306,7 +1306,7 @@ void ConnectionGraph::reduce_phi(PhiNode* ophi, GrowableArray &alloc_wo // splitting CastPPs we make reference to the inputs of the Cmp that is used // by the If controlling the CastPP. for (uint i = 0; i < castpps.size(); i++) { - reduce_phi_on_castpp_field_load(castpps.at(i), alloc_worklist, memnode_worklist); + reduce_phi_on_castpp_field_load(castpps.at(i), alloc_worklist); } for (uint i = 0; i < others.size(); i++) { @@ -4152,6 +4152,11 @@ Node* ConnectionGraph::find_inst_mem(Node *orig_mem, int alias_idx, GrowableArra // which contains this memory slice, otherwise skip over it. if (alloc == nullptr || alloc->_idx != (uint)toop->instance_id()) { result = proj_in->in(TypeFunc::Memory); + } else if (C->get_alias_index(result->adr_type()) != alias_idx) { + assert(C->get_general_index(alias_idx) == C->get_alias_index(result->adr_type()), "should be projection for the same field/array element"); + result = get_map(result->_idx); + assert(result != nullptr, "new projection should have been allocated"); + break; } } else if (proj_in->is_MemBar()) { // Check if there is an array copy for a clone @@ -4448,6 +4453,22 @@ void ConnectionGraph::split_unique_types(GrowableArray &alloc_worklist, _compile->get_alias_index(tinst->add_offset(oopDesc::mark_offset_in_bytes())); _compile->get_alias_index(tinst->add_offset(oopDesc::klass_offset_in_bytes())); if (alloc->is_Allocate() && (t->isa_instptr() || t->isa_aryptr())) { + // Add a new NarrowMem projection for each existing NarrowMem projection with new adr type + InitializeNode* init = alloc->as_Allocate()->initialization(); + assert(init != nullptr, "can't find Initialization node for this Allocate node"); + auto process_narrow_proj = [&](NarrowMemProjNode* proj) { + const TypePtr* adr_type = proj->adr_type(); + const TypePtr* new_adr_type = tinst->add_offset(adr_type->offset()); + if (adr_type != new_adr_type && !init->already_has_narrow_mem_proj_with_adr_type(new_adr_type)) { + DEBUG_ONLY( uint alias_idx = _compile->get_alias_index(new_adr_type); ) + assert(_compile->get_general_index(alias_idx) == _compile->get_alias_index(adr_type), "new adr type should be narrowed down from existing adr type"); + NarrowMemProjNode* new_proj = new NarrowMemProjNode(init, new_adr_type); + igvn->set_type(new_proj, new_proj->bottom_type()); + record_for_optimizer(new_proj); + set_map(proj, new_proj); // record it so ConnectionGraph::find_inst_mem() can find it + } + }; + init->for_each_narrow_mem_proj_with_new_uses(process_narrow_proj); // First, put on the worklist all Field edges from Connection Graph // which is more accurate than putting immediate users from Ideal Graph. @@ -4519,7 +4540,7 @@ void ConnectionGraph::split_unique_types(GrowableArray &alloc_worklist, // finishes. For now we just try to split out the SR inputs of the merge. Node* parent = n->in(1); if (reducible_merges.member(n)) { - reduce_phi(n->as_Phi(), alloc_worklist, memnode_worklist); + reduce_phi(n->as_Phi(), alloc_worklist); #ifdef ASSERT if (VerifyReduceAllocationMerges) { reduced_merges.push(n); @@ -4711,11 +4732,13 @@ void ConnectionGraph::split_unique_types(GrowableArray &alloc_worklist, } if (n->is_Phi() || n->is_ClearArray()) { // we don't need to do anything, but the users must be pushed - } else if (n->is_MemBar()) { // Initialize, MemBar nodes - // we don't need to do anything, but the users must be pushed - n = n->as_MemBar()->proj_out_or_null(TypeFunc::Memory); - if (n == nullptr) { - continue; + } else if (n->is_MemBar()) { // MemBar nodes + if (!n->is_Initialize()) { // memory projections for Initialize pushed below (so we get to all their uses) + // we don't need to do anything, but the users must be pushed + n = n->as_MemBar()->proj_out_or_null(TypeFunc::Memory); + if (n == nullptr) { + continue; + } } } else if (n->is_CallLeaf()) { // Runtime calls with narrow memory input (no MergeMem node) @@ -4732,6 +4755,8 @@ void ConnectionGraph::split_unique_types(GrowableArray &alloc_worklist, // get the memory projection n = n->find_out_with(Op_SCMemProj); assert(n != nullptr && n->Opcode() == Op_SCMemProj, "memory projection required"); + } else if (n->is_Proj()) { + assert(n->in(0)->is_Initialize(), "we only push memory projections for Initialize"); } else { #ifdef ASSERT if (!n->is_Mem()) { @@ -4775,6 +4800,11 @@ void ConnectionGraph::split_unique_types(GrowableArray &alloc_worklist, if (use->in(TypeFunc::Memory) == n) { // Ignore precedent edge memnode_worklist.append_if_missing(use); } + } else if (use->is_Proj()) { + assert(n->is_Initialize(), "We only push projections of Initialize"); + if (use->as_Proj()->_con == TypeFunc::Memory) { // Ignore precedent edge + memnode_worklist.append_if_missing(use); + } #ifdef ASSERT } else if(use->is_Mem()) { assert(use->in(MemNode::Memory) != n, "EA: missing memory path"); @@ -4826,7 +4856,7 @@ void ConnectionGraph::split_unique_types(GrowableArray &alloc_worklist, // First, update mergemem by moving memory nodes to corresponding slices // if their type became more precise since this mergemem was created. while (mem->is_Mem()) { - const Type *at = igvn->type(mem->in(MemNode::Address)); + const Type* at = igvn->type(mem->in(MemNode::Address)); if (at != Type::TOP) { assert (at->isa_ptr() != nullptr, "pointer type required."); uint idx = (uint)_compile->get_alias_index(at->is_ptr()); @@ -4946,7 +4976,7 @@ void ConnectionGraph::split_unique_types(GrowableArray &alloc_worklist, record_for_optimizer(n); } else { assert(n->is_Allocate() || n->is_CheckCastPP() || - n->is_AddP() || n->is_Phi(), "unknown node used for set_map()"); + n->is_AddP() || n->is_Phi() || n->is_NarrowMemProj(), "unknown node used for set_map()"); } } #if 0 // ifdef ASSERT diff --git a/src/hotspot/share/opto/escape.hpp b/src/hotspot/share/opto/escape.hpp index 0b8cd3aa138..77d14525383 100644 --- a/src/hotspot/share/opto/escape.hpp +++ b/src/hotspot/share/opto/escape.hpp @@ -563,8 +563,10 @@ private: // Memory Phi - most recent unique Phi split out // from this Phi // MemNode - new memory input for this node - // ChecCastPP - allocation that this is a cast of + // CheckCastPP - allocation that this is a cast of // allocation - CheckCastPP of the allocation + // NarrowMem - newly created projection (type includes instance_id) from projection created + // before EA // manage entries in _node_map @@ -609,11 +611,11 @@ private: bool can_reduce_phi_check_inputs(PhiNode* ophi) const; void reduce_phi_on_field_access(Node* previous_addp, GrowableArray &alloc_worklist); - void reduce_phi_on_castpp_field_load(Node* castpp, GrowableArray &alloc_worklist, GrowableArray &memnode_worklist); + void reduce_phi_on_castpp_field_load(Node* castpp, GrowableArray &alloc_worklist); void reduce_phi_on_cmp(Node* cmp); bool reduce_phi_on_safepoints(PhiNode* ophi); bool reduce_phi_on_safepoints_helper(Node* ophi, Node* cast, Node* selector, Unique_Node_List& safepoints); - void reduce_phi(PhiNode* ophi, GrowableArray &alloc_worklist, GrowableArray &memnode_worklist); + void reduce_phi(PhiNode* ophi, GrowableArray &alloc_worklist); void set_not_scalar_replaceable(PointsToNode* ptn NOT_PRODUCT(COMMA const char* reason)) const { #ifndef PRODUCT diff --git a/src/hotspot/share/opto/graphKit.cpp b/src/hotspot/share/opto/graphKit.cpp index d4776d9d2f0..49c411843d5 100644 --- a/src/hotspot/share/opto/graphKit.cpp +++ b/src/hotspot/share/opto/graphKit.cpp @@ -3641,14 +3641,17 @@ Node* GraphKit::set_output_for_allocation(AllocateNode* alloc, record_for_igvn(minit_in); // fold it up later, if possible Node* minit_out = memory(rawidx); assert(minit_out->is_Proj() && minit_out->in(0) == init, ""); - // Add an edge in the MergeMem for the header fields so an access - // to one of those has correct memory state - set_memory(minit_out, C->get_alias_index(oop_type->add_offset(oopDesc::mark_offset_in_bytes()))); - set_memory(minit_out, C->get_alias_index(oop_type->add_offset(oopDesc::klass_offset_in_bytes()))); + int mark_idx = C->get_alias_index(oop_type->add_offset(oopDesc::mark_offset_in_bytes())); + // Add an edge in the MergeMem for the header fields so an access to one of those has correct memory state. + // Use one NarrowMemProjNode per slice to properly record the adr type of each slice. The Initialize node will have + // multiple projections as a result. + set_memory(_gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(mark_idx))), mark_idx); + int klass_idx = C->get_alias_index(oop_type->add_offset(oopDesc::klass_offset_in_bytes())); + set_memory(_gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(klass_idx))), klass_idx); if (oop_type->isa_aryptr()) { const TypePtr* telemref = oop_type->add_offset(Type::OffsetBot); int elemidx = C->get_alias_index(telemref); - hook_memory_on_init(*this, elemidx, minit_in, minit_out); + hook_memory_on_init(*this, elemidx, minit_in, _gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(elemidx)))); } else if (oop_type->isa_instptr()) { ciInstanceKlass* ik = oop_type->is_instptr()->instance_klass(); for (int i = 0, len = ik->nof_nonstatic_fields(); i < len; i++) { @@ -3657,7 +3660,7 @@ Node* GraphKit::set_output_for_allocation(AllocateNode* alloc, continue; // do not bother to track really large numbers of fields // Find (or create) the alias category for this field: int fieldidx = C->alias_type(field)->index(); - hook_memory_on_init(*this, fieldidx, minit_in, minit_out); + hook_memory_on_init(*this, fieldidx, minit_in, _gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(fieldidx)))); } } } diff --git a/src/hotspot/share/opto/idealGraphPrinter.cpp b/src/hotspot/share/opto/idealGraphPrinter.cpp index 9a35691f7ff..2873c1ef9d7 100644 --- a/src/hotspot/share/opto/idealGraphPrinter.cpp +++ b/src/hotspot/share/opto/idealGraphPrinter.cpp @@ -598,7 +598,7 @@ void IdealGraphPrinter::visit_node(Node* n, bool edges) { t->dump_on(&s2); } else if( t == Type::MEMORY ) { s2.print(" Memory:"); - MemNode::dump_adr_type(node, node->adr_type(), &s2); + MemNode::dump_adr_type(node->adr_type(), &s2); } assert(s2.size() < sizeof(buffer), "size in range"); diff --git a/src/hotspot/share/opto/library_call.cpp b/src/hotspot/share/opto/library_call.cpp index bd8a550b9ab..7a213102efd 100644 --- a/src/hotspot/share/opto/library_call.cpp +++ b/src/hotspot/share/opto/library_call.cpp @@ -5544,7 +5544,7 @@ void LibraryCallKit::arraycopy_move_allocation_here(AllocateArrayNode* alloc, No InitializeNode* init = alloc->initialization(); Node* alloc_mem = alloc->in(TypeFunc::Memory); C->gvn_replace_by(callprojs.fallthrough_ioproj, alloc->in(TypeFunc::I_O)); - C->gvn_replace_by(init->proj_out(TypeFunc::Memory), alloc_mem); + init->replace_mem_projs_by(alloc_mem, C); // The CastIINode created in GraphKit::new_array (in AllocateArrayNode::make_ideal_length) must stay below // the allocation (i.e. is only valid if the allocation succeeds): @@ -5595,8 +5595,20 @@ void LibraryCallKit::arraycopy_move_allocation_here(AllocateArrayNode* alloc, No } const TypePtr* telemref = ary_type->add_offset(Type::OffsetBot); int elemidx = C->get_alias_index(telemref); - set_memory(init->proj_out_or_null(TypeFunc::Memory), Compile::AliasIdxRaw); - set_memory(init->proj_out_or_null(TypeFunc::Memory), elemidx); + // Need to properly move every memory projection for the Initialize +#ifdef ASSERT + int mark_idx = C->get_alias_index(ary_type->add_offset(oopDesc::mark_offset_in_bytes())); + int klass_idx = C->get_alias_index(ary_type->add_offset(oopDesc::klass_offset_in_bytes())); +#endif + auto move_proj = [&](ProjNode* proj) { + int alias_idx = C->get_alias_index(proj->adr_type()); + assert(alias_idx == Compile::AliasIdxRaw || + alias_idx == elemidx || + alias_idx == mark_idx || + alias_idx == klass_idx, "should be raw memory or array element type"); + set_memory(proj, alias_idx); + }; + init->for_each_proj(move_proj, TypeFunc::Memory); Node* allocx = _gvn.transform(alloc); assert(allocx == alloc, "where has the allocation gone?"); diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp index 0c03a85d64c..9a21c7f5dda 100644 --- a/src/hotspot/share/opto/loopTransform.cpp +++ b/src/hotspot/share/opto/loopTransform.cpp @@ -4042,7 +4042,9 @@ bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) { call->init_req(TypeFunc::I_O, C->top()); // Does no I/O. call->init_req(TypeFunc::Memory, mem_phi->in(LoopNode::EntryControl)); call->init_req(TypeFunc::ReturnAdr, C->start()->proj_out_or_null(TypeFunc::ReturnAdr)); - call->init_req(TypeFunc::FramePtr, C->start()->proj_out_or_null(TypeFunc::FramePtr)); + Node* frame = new ParmNode(C->start(), TypeFunc::FramePtr); + _igvn.register_new_node_with_optimizer(frame); + call->init_req(TypeFunc::FramePtr, frame); _igvn.register_new_node_with_optimizer(call); result_ctrl = new ProjNode(call,TypeFunc::Control); _igvn.register_new_node_with_optimizer(result_ctrl); diff --git a/src/hotspot/share/opto/loopopts.cpp b/src/hotspot/share/opto/loopopts.cpp index cfbb4fabc0f..50b1ae0de8d 100644 --- a/src/hotspot/share/opto/loopopts.cpp +++ b/src/hotspot/share/opto/loopopts.cpp @@ -2693,8 +2693,9 @@ void PhaseIdealLoop::fix_ctrl_uses(const Node_List& body, const IdealLoopTree* l if (head->is_strip_mined() && mode != IgnoreStripMined) { CountedLoopNode* cl = head->as_CountedLoop(); CountedLoopEndNode* cle = cl->loopexit(); - Node* cle_out = cle->proj_out_or_null(false); - if (use == cle_out) { + // is use the projection that exits the loop from the CountedLoopEndNode? + if (use->in(0) == cle) { + IfFalseNode* cle_out = use->as_IfFalse(); IfNode* le = cl->outer_loop_end(); use = le->proj_out(false); use_loop = get_loop(use); diff --git a/src/hotspot/share/opto/macro.cpp b/src/hotspot/share/opto/macro.cpp index 702aca592f3..90602bc2b35 100644 --- a/src/hotspot/share/opto/macro.cpp +++ b/src/hotspot/share/opto/macro.cpp @@ -1042,7 +1042,6 @@ void PhaseMacroExpand::process_users_of_allocation(CallNode *alloc) { if (use->is_Initialize()) { // Eliminate Initialize node. InitializeNode *init = use->as_Initialize(); - assert(init->outcnt() <= 2, "only a control and memory projection expected"); Node *ctrl_proj = init->proj_out_or_null(TypeFunc::Control); if (ctrl_proj != nullptr) { _igvn.replace_node(ctrl_proj, init->in(TypeFunc::Control)); @@ -1052,18 +1051,18 @@ void PhaseMacroExpand::process_users_of_allocation(CallNode *alloc) { assert(tmp == nullptr || tmp == _callprojs.fallthrough_catchproj, "allocation control projection"); #endif } - Node *mem_proj = init->proj_out_or_null(TypeFunc::Memory); - if (mem_proj != nullptr) { - Node *mem = init->in(TypeFunc::Memory); + Node* mem = init->in(TypeFunc::Memory); #ifdef ASSERT + if (init->number_of_projs(TypeFunc::Memory) > 0) { if (mem->is_MergeMem()) { - assert(mem->in(TypeFunc::Memory) == _callprojs.fallthrough_memproj, "allocation memory projection"); + assert(mem->as_MergeMem()->memory_at(Compile::AliasIdxRaw) == _callprojs.fallthrough_memproj, "allocation memory projection"); } else { assert(mem == _callprojs.fallthrough_memproj, "allocation memory projection"); } -#endif - _igvn.replace_node(mem_proj, mem); } +#endif + init->replace_mem_projs_by(mem, &_igvn); + assert(init->outcnt() == 0, "should only have had a control and some memory projections, and we removed them"); } else { assert(false, "only Initialize or AddP expected"); } @@ -1650,7 +1649,16 @@ void PhaseMacroExpand::expand_initialize_membar(AllocateNode* alloc, InitializeN // No InitializeNode or no stores captured by zeroing // elimination. Simply add the MemBarStoreStore after object // initialization. - MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxBot); + // What we want is to prevent the compiler and the CPU from re-ordering the stores that initialize this object + // with subsequent stores to any slice. As a consequence, this MemBar should capture the entire memory state at + // this point in the IR and produce a new memory state that should cover all slices. However, the Initialize node + // only captures/produces a partial memory state making it complicated to insert such a MemBar. Because + // re-ordering by the compiler can't happen by construction (a later Store that publishes the just allocated + // object reference is indirectly control dependent on the Initialize node), preventing reordering by the CPU is + // sufficient. For that a MemBar on the raw memory slice is good enough. + // If init is null, this allocation does have an InitializeNode but this logic can't locate it (see comment in + // PhaseMacroExpand::initialize_object()). + MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxRaw); transform_later(mb); mb->init_req(TypeFunc::Memory, fast_oop_rawmem); @@ -1666,24 +1674,33 @@ void PhaseMacroExpand::expand_initialize_membar(AllocateNode* alloc, InitializeN // barrier. Node* init_ctrl = init->proj_out_or_null(TypeFunc::Control); - Node* init_mem = init->proj_out_or_null(TypeFunc::Memory); - MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxBot); + // See comment above that explains why a raw memory MemBar is good enough. + MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxRaw); transform_later(mb); Node* ctrl = new ProjNode(init, TypeFunc::Control); transform_later(ctrl); - Node* mem = new ProjNode(init, TypeFunc::Memory); - transform_later(mem); + Node* old_raw_mem_proj = nullptr; + auto find_raw_mem = [&](ProjNode* proj) { + if (C->get_alias_index(proj->adr_type()) == Compile::AliasIdxRaw) { + assert(old_raw_mem_proj == nullptr, "only one expected"); + old_raw_mem_proj = proj; + } + }; + init->for_each_proj(find_raw_mem, TypeFunc::Memory); + assert(old_raw_mem_proj != nullptr, "should have found raw mem Proj"); + Node* raw_mem_proj = new ProjNode(init, TypeFunc::Memory); + transform_later(raw_mem_proj); // The MemBarStoreStore depends on control and memory coming // from the InitializeNode - mb->init_req(TypeFunc::Memory, mem); + mb->init_req(TypeFunc::Memory, raw_mem_proj); mb->init_req(TypeFunc::Control, ctrl); ctrl = new ProjNode(mb, TypeFunc::Control); transform_later(ctrl); - mem = new ProjNode(mb, TypeFunc::Memory); + Node* mem = new ProjNode(mb, TypeFunc::Memory); transform_later(mem); // All nodes that depended on the InitializeNode for control @@ -1692,9 +1709,7 @@ void PhaseMacroExpand::expand_initialize_membar(AllocateNode* alloc, InitializeN if (init_ctrl != nullptr) { _igvn.replace_node(init_ctrl, ctrl); } - if (init_mem != nullptr) { - _igvn.replace_node(init_mem, mem); - } + _igvn.replace_node(old_raw_mem_proj, mem); } } } diff --git a/src/hotspot/share/opto/matcher.cpp b/src/hotspot/share/opto/matcher.cpp index c63cefe7ac2..159e13d8d23 100644 --- a/src/hotspot/share/opto/matcher.cpp +++ b/src/hotspot/share/opto/matcher.cpp @@ -151,6 +151,8 @@ void Matcher::verify_new_nodes_only(Node* xroot) { continue; } assert(C->node_arena()->contains(n), "dead node"); + assert(!n->is_Initialize() || n->as_Initialize()->number_of_projs(TypeFunc::Memory) == 1, + "after matching, Initialize should have a single memory projection"); for (uint j = 0; j < n->req(); j++) { Node* in = n->in(j); if (in != nullptr) { @@ -1029,7 +1031,7 @@ Node *Matcher::xform( Node *n, int max_stack ) { // Old-space or new-space check if (!C->node_arena()->contains(n)) { // Old space! - Node* m; + Node* m = nullptr; if (has_new_node(n)) { // Not yet Label/Reduced m = new_node(n); } else { @@ -1044,9 +1046,21 @@ Node *Matcher::xform( Node *n, int max_stack ) { } } else { // Nothing the matcher cares about if (n->is_Proj() && n->in(0) != nullptr && n->in(0)->is_Multi()) { // Projections? - // Convert to machine-dependent projection - m = n->in(0)->as_Multi()->match( n->as_Proj(), this ); - NOT_PRODUCT(record_new2old(m, n);) + if (n->in(0)->is_Initialize() && n->as_Proj()->_con == TypeFunc::Memory) { + // Initialize may have multiple NarrowMem projections. They would all match to identical raw mem MachProjs. + // We don't need multiple MachProjs. Create one if none already exist, otherwise use existing one. + m = n->in(0)->as_Initialize()->mem_mach_proj(); + if (m == nullptr && has_new_node(n->in(0))) { + InitializeNode* new_init = new_node(n->in(0))->as_Initialize(); + m = new_init->mem_mach_proj(); + } + assert(m == nullptr || m->is_MachProj(), "no mem projection yet or a MachProj created during matching"); + } + if (m == nullptr) { + // Convert to machine-dependent projection + m = n->in(0)->as_Multi()->match( n->as_Proj(), this ); + NOT_PRODUCT(record_new2old(m, n);) + } if (m->in(0) != nullptr) // m might be top collect_null_checks(m, n); } else { // Else just a regular 'ol guy diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp index 9187ef1a361..f42a6ea9489 100644 --- a/src/hotspot/share/opto/memnode.cpp +++ b/src/hotspot/share/opto/memnode.cpp @@ -91,7 +91,7 @@ void MemNode::dump_spec(outputStream *st) const { if (in(Address) != nullptr) _adr_type = in(Address)->bottom_type()->isa_ptr(); #endif - dump_adr_type(this, _adr_type, st); + dump_adr_type(_adr_type, st); Compile* C = Compile::current(); if (C->alias_type(_adr_type)->is_volatile()) { @@ -108,7 +108,7 @@ void MemNode::dump_spec(outputStream *st) const { } } -void MemNode::dump_adr_type(const Node* mem, const TypePtr* adr_type, outputStream *st) { +void MemNode::dump_adr_type(const TypePtr* adr_type, outputStream* st) { st->print(" @"); if (adr_type == nullptr) { st->print("null"); @@ -4229,7 +4229,7 @@ MemBarNode* MemBarNode::make(Compile* C, int opcode, int atp, Node* pn) { } void MemBarNode::remove(PhaseIterGVN *igvn) { - assert(outcnt() > 0 && outcnt() <= 2, "Only one or two out edges allowed"); + assert(outcnt() > 0 && (outcnt() <= 2 || Opcode() == Op_Initialize), "Only one or two out edges allowed"); if (trailing_store() || trailing_load_store()) { MemBarNode* leading = leading_membar(); if (leading != nullptr) { @@ -4237,12 +4237,16 @@ void MemBarNode::remove(PhaseIterGVN *igvn) { leading->remove(igvn); } } - if (proj_out_or_null(TypeFunc::Memory) != nullptr) { - igvn->replace_node(proj_out(TypeFunc::Memory), in(TypeFunc::Memory)); - } if (proj_out_or_null(TypeFunc::Control) != nullptr) { igvn->replace_node(proj_out(TypeFunc::Control), in(TypeFunc::Control)); } + if (is_Initialize()) { + as_Initialize()->replace_mem_projs_by(in(TypeFunc::Memory), igvn); + } else { + if (proj_out_or_null(TypeFunc::Memory) != nullptr) { + igvn->replace_node(proj_out(TypeFunc::Memory), in(TypeFunc::Memory)); + } + } } //------------------------------Ideal------------------------------------------ @@ -5445,6 +5449,48 @@ Node* InitializeNode::complete_stores(Node* rawctl, Node* rawmem, Node* rawptr, return rawmem; } +void InitializeNode::replace_mem_projs_by(Node* mem, Compile* C) { + auto replace_proj = [&](ProjNode* proj) { + C->gvn_replace_by(proj, mem); + return CONTINUE; + }; + apply_to_projs(replace_proj, TypeFunc::Memory); +} + +void InitializeNode::replace_mem_projs_by(Node* mem, PhaseIterGVN* igvn) { + DUIterator_Fast imax, i = fast_outs(imax); + auto replace_proj = [&](ProjNode* proj) { + igvn->replace_node(proj, mem); + --i; --imax; + return CONTINUE; + }; + apply_to_projs(imax, i, replace_proj, TypeFunc::Memory); +} + +bool InitializeNode::already_has_narrow_mem_proj_with_adr_type(const TypePtr* adr_type) const { + auto find_proj = [&](ProjNode* proj) { + if (proj->adr_type() == adr_type) { + return BREAK_AND_RETURN_CURRENT_PROJ; + } + return CONTINUE; + }; + DUIterator_Fast imax, i = fast_outs(imax); + return apply_to_narrow_mem_projs_any_iterator(UsesIteratorFast(imax, i, this), find_proj) != nullptr; +} + +MachProjNode* InitializeNode::mem_mach_proj() const { + auto find_proj = [](ProjNode* proj) { + if (proj->is_MachProj()) { + return BREAK_AND_RETURN_CURRENT_PROJ; + } + return CONTINUE; + }; + ProjNode* proj = apply_to_projs(find_proj, TypeFunc::Memory); + if (proj == nullptr) { + return nullptr; + } + return proj->as_MachProj(); +} #ifdef ASSERT bool InitializeNode::stores_are_sane(PhaseValues* phase) { @@ -5867,6 +5913,7 @@ Node* MergeMemNode::memory_at(uint alias_idx) const { || n->adr_type() == nullptr // address is TOP || n->adr_type() == TypePtr::BOTTOM || n->adr_type() == TypeRawPtr::BOTTOM + || n->is_NarrowMemProj() || !Compile::current()->do_aliasing(), "must be a wide memory"); // do_aliasing == false if we are organizing the memory states manually. diff --git a/src/hotspot/share/opto/memnode.hpp b/src/hotspot/share/opto/memnode.hpp index 810a9fe9445..d554c037012 100644 --- a/src/hotspot/share/opto/memnode.hpp +++ b/src/hotspot/share/opto/memnode.hpp @@ -167,7 +167,7 @@ public: bool is_unsafe_access() const { return _unsafe_access; } #ifndef PRODUCT - static void dump_adr_type(const Node* mem, const TypePtr* adr_type, outputStream *st); + static void dump_adr_type(const TypePtr* adr_type, outputStream* st); virtual void dump_spec(outputStream *st) const; #endif }; @@ -1371,7 +1371,20 @@ public: intptr_t header_size, Node* size_in_bytes, PhaseIterGVN* phase); - private: + // An Initialize node has multiple memory projections. Helper methods used when the node is removed. + // For use at parse time + void replace_mem_projs_by(Node* mem, Compile* C); + // For use with IGVN + void replace_mem_projs_by(Node* mem, PhaseIterGVN* igvn); + + // Does a NarrowMemProj with this adr_type and this node as input already exist? + bool already_has_narrow_mem_proj_with_adr_type(const TypePtr* adr_type) const; + + // Used during matching: find the MachProj memory projection if there's one. Expectation is that there should be at + // most one. + MachProjNode* mem_mach_proj() const; + +private: void remove_extra_zeroes(); // Find out where a captured store should be placed (or already is placed). @@ -1388,6 +1401,33 @@ public: PhaseGVN* phase); intptr_t find_next_fullword_store(uint i, PhaseGVN* phase); + + // Iterate with i over all NarrowMemProj uses calling callback + template NarrowMemProjNode* apply_to_narrow_mem_projs_any_iterator(Iterator i, Callback callback) const { + auto filter = [&](ProjNode* proj) { + if (proj->is_NarrowMemProj() && callback(proj->as_NarrowMemProj()) == BREAK_AND_RETURN_CURRENT_PROJ) { + return BREAK_AND_RETURN_CURRENT_PROJ; + } + return CONTINUE; + }; + ProjNode* res = apply_to_projs_any_iterator(i, filter); + if (res == nullptr) { + return nullptr; + } + return res->as_NarrowMemProj(); + } + +public: + + // callback is allowed to add new uses that will then be iterated over + template void for_each_narrow_mem_proj_with_new_uses(Callback callback) const { + auto callback_always_continue = [&](NarrowMemProjNode* proj) { + callback(proj); + return MultiNode::CONTINUE; + }; + DUIterator i = outs(); + apply_to_narrow_mem_projs_any_iterator(UsesIterator(i, this), callback_always_continue); + } }; //------------------------------MergeMem--------------------------------------- diff --git a/src/hotspot/share/opto/multnode.cpp b/src/hotspot/share/opto/multnode.cpp index 4d8d1f4246c..9409a2f6af3 100644 --- a/src/hotspot/share/opto/multnode.cpp +++ b/src/hotspot/share/opto/multnode.cpp @@ -45,30 +45,58 @@ Node *MultiNode::match( const ProjNode *proj, const Matcher *m ) { return proj-> // Get a named projection or null if not found ProjNode* MultiNode::proj_out_or_null(uint which_proj) const { assert((Opcode() != Op_If && Opcode() != Op_RangeCheck) || which_proj == (uint)true || which_proj == (uint)false, "must be 1 or 0"); - for( DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++ ) { - Node *p = fast_out(i); - if (p->is_Proj()) { - ProjNode *proj = p->as_Proj(); - if (proj->_con == which_proj) { - assert((Opcode() != Op_If && Opcode() != Op_RangeCheck) || proj->Opcode() == (which_proj ? Op_IfTrue : Op_IfFalse), "bad if #2"); - return proj; - } - } else { - assert(p == this && this->is_Start(), "else must be proj"); - continue; - } - } - return nullptr; + assert(number_of_projs(which_proj) <= 1, "only when there's a single projection"); + ProjNode* proj = find_first(which_proj); + assert(proj == nullptr || (Opcode() != Op_If && Opcode() != Op_RangeCheck) || proj->Opcode() == (which_proj ? Op_IfTrue : Op_IfFalse), + "incorrect projection node at If/RangeCheck: IfTrue on false path or IfFalse on true path"); + return proj; } ProjNode* MultiNode::proj_out_or_null(uint which_proj, bool is_io_use) const { - for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) { - ProjNode* proj = fast_out(i)->isa_Proj(); - if (proj != nullptr && (proj->_con == which_proj) && (proj->_is_io_use == is_io_use)) { - return proj; + assert(number_of_projs(which_proj, is_io_use) <= 1, "only when there's a single projection"); + return find_first(which_proj, is_io_use); +} + +template ProjNode* MultiNode::apply_to_projs(Callback callback, uint which_proj, bool is_io_use) const { + auto filter = [&](ProjNode* proj) { + if (proj->_is_io_use == is_io_use && callback(proj) == BREAK_AND_RETURN_CURRENT_PROJ) { + return BREAK_AND_RETURN_CURRENT_PROJ; } - } - return nullptr; + return CONTINUE; + }; + return apply_to_projs(filter, which_proj); +} + +uint MultiNode::number_of_projs(uint which_proj) const { + uint cnt = 0; + auto count_projs = [&](ProjNode* proj) { + cnt++; + }; + for_each_proj(count_projs, which_proj); + return cnt; +} + +uint MultiNode::number_of_projs(uint which_proj, bool is_io_use) const { + uint cnt = 0; + auto count_projs = [&](ProjNode* proj) { + cnt++; + }; + for_each_proj(count_projs, which_proj, is_io_use); + return cnt; +} + +ProjNode* MultiNode::find_first(uint which_proj) const { + auto find_proj = [&](ProjNode* proj) { + return BREAK_AND_RETURN_CURRENT_PROJ; + }; + return apply_to_projs(find_proj, which_proj); +} + +ProjNode* MultiNode::find_first(uint which_proj, bool is_io_use) const { + auto find_proj = [](ProjNode* proj) { + return BREAK_AND_RETURN_CURRENT_PROJ; + }; + return apply_to_projs(find_proj, which_proj, is_io_use); } // Get a named projection @@ -239,3 +267,8 @@ ProjNode* ProjNode::other_if_proj() const { assert(_con == 0 || _con == 1, "not an if?"); return in(0)->as_If()->proj_out(1-_con); } + +NarrowMemProjNode::NarrowMemProjNode(InitializeNode* src, const TypePtr* adr_type) + : ProjNode(src, TypeFunc::Memory), _adr_type(adr_type) { + init_class_id(Class_NarrowMemProj); +} diff --git a/src/hotspot/share/opto/multnode.hpp b/src/hotspot/share/opto/multnode.hpp index 834dcfdca6d..be1351cc5b1 100644 --- a/src/hotspot/share/opto/multnode.hpp +++ b/src/hotspot/share/opto/multnode.hpp @@ -49,6 +49,105 @@ public: ProjNode* proj_out(uint which_proj) const; // Get a named projection ProjNode* proj_out_or_null(uint which_proj) const; ProjNode* proj_out_or_null(uint which_proj, bool is_io_use) const; + uint number_of_projs(uint which_proj) const; + uint number_of_projs(uint which_proj, bool is_io_use) const; + +protected: + + // Provide single interface for DUIterator_Fast/DUIterator for template method below + class UsesIteratorFast { + DUIterator_Fast& _imax; + DUIterator_Fast& _i; + const Node* _node; + + public: + bool cont() { + return _i < _imax; + } + void next() { + _i++; + } + Node* current() { + return _node->fast_out(_i); + } + UsesIteratorFast(DUIterator_Fast& imax, DUIterator_Fast& i, const Node* node) + : _imax(imax), _i(i), _node(node) { + } + }; + + class UsesIterator { + DUIterator& _i; + const Node* _node; + + public: + bool cont() { + return _node->has_out(_i); + } + void next() { + _i++; + } + Node* current() { + return _node->out(_i); + } + UsesIterator(DUIterator& i, const Node* node) + : _i(i), _node(node) { + } + }; + + // Iterate with i over all Proj uses calling callback + template ProjNode* apply_to_projs_any_iterator(Iterator i, Callback callback) const { + for (; i.cont(); i.next()) { + Node* p = i.current(); + if (p->is_Proj()) { + ProjNode* proj = p->as_Proj(); + ApplyToProjs result = callback(proj); + if (result == BREAK_AND_RETURN_CURRENT_PROJ) { + return proj; + } + assert(result == CONTINUE, "should be either break or continue"); + } else { + assert(p == this && is_Start(), "else must be proj"); + } + } + return nullptr; + } + enum ApplyToProjs { + CONTINUE, + BREAK_AND_RETURN_CURRENT_PROJ + }; + + // Run callback on projections with iterator passed as argument + template ProjNode* apply_to_projs(DUIterator_Fast& imax, DUIterator_Fast& i, Callback callback, uint which_proj) const; + + // Same but with default iterator and for matching _con + template ProjNode* apply_to_projs(Callback callback, uint which_proj) const { + DUIterator_Fast imax, i = fast_outs(imax); + return apply_to_projs(imax, i, callback, which_proj); + } + + // Same but for matching _con and _is_io_use + template ProjNode* apply_to_projs(Callback callback, uint which_proj, bool is_io_use) const; + +public: + template void for_each_proj(Callback callback, uint which_proj) const { + auto callback_always_continue = [&](ProjNode* proj) { + callback(proj); + return MultiNode::CONTINUE; + }; + apply_to_projs(callback_always_continue, which_proj); + } + + template void for_each_proj(Callback callback, uint which_proj, bool is_io_use) const { + auto callback_always_continue = [&](ProjNode* proj) { + callback(proj); + return MultiNode::CONTINUE; + }; + apply_to_projs(callback_always_continue, which_proj, is_io_use); + } + + + ProjNode* find_first(uint which_proj) const; + ProjNode* find_first(uint which_proj, bool is_io_use) const; }; //------------------------------ProjNode--------------------------------------- @@ -106,6 +205,41 @@ public: ProjNode* other_if_proj() const; }; +// A ProjNode variant that captures an adr_type(). Used as a projection of InitializeNode to have the right adr_type() +// for array elements/fields. +class NarrowMemProjNode : public ProjNode { +private: + const TypePtr* const _adr_type; +protected: + virtual uint hash() const { + return ProjNode::hash() + _adr_type->hash(); + } + virtual bool cmp(const Node& n) const { + return ProjNode::cmp(n) && ((NarrowMemProjNode&)n)._adr_type == _adr_type; + } + virtual uint size_of() const { + return sizeof(*this); + } +public: + NarrowMemProjNode(InitializeNode* src, const TypePtr* adr_type); + + virtual const TypePtr* adr_type() const { + return _adr_type; + } + + virtual int Opcode() const; +}; + +template ProjNode* MultiNode::apply_to_projs(DUIterator_Fast& imax, DUIterator_Fast& i, Callback callback, uint which_proj) const { + auto filter = [&](ProjNode* proj) { + if (proj->_con == which_proj && callback(proj) == BREAK_AND_RETURN_CURRENT_PROJ) { + return BREAK_AND_RETURN_CURRENT_PROJ; + } + return CONTINUE; + }; + return apply_to_projs_any_iterator(UsesIteratorFast(imax, i, this), filter); +} + /* Tuples are used to avoid manual graph surgery. When a node with Proj outputs (such as a call) * must be removed and its ouputs replaced by its input, or some other value, we can make its * ::Ideal return a tuple of what we want for each output: the ::Identity of output Proj will diff --git a/src/hotspot/share/opto/node.cpp b/src/hotspot/share/opto/node.cpp index 3a41353101d..93ded36363e 100644 --- a/src/hotspot/share/opto/node.cpp +++ b/src/hotspot/share/opto/node.cpp @@ -2602,7 +2602,7 @@ void Node::dump(const char* suffix, bool mark, outputStream* st, DumpConfig* dc) t->dump_on(st); } else if (t == Type::MEMORY) { st->print(" Memory:"); - MemNode::dump_adr_type(this, adr_type(), st); + MemNode::dump_adr_type(adr_type(), st); } else if (Verbose || WizardMode) { st->print(" Type:"); if (t) { diff --git a/src/hotspot/share/opto/node.hpp b/src/hotspot/share/opto/node.hpp index 4e8d74a6f5e..6067bcbac8d 100644 --- a/src/hotspot/share/opto/node.hpp +++ b/src/hotspot/share/opto/node.hpp @@ -134,6 +134,7 @@ class MoveNode; class MulNode; class MultiNode; class MultiBranchNode; +class NarrowMemProjNode; class NegNode; class NegVNode; class NeverBranchNode; @@ -771,6 +772,7 @@ public: DEFINE_CLASS_ID(IfFalse, IfProj, 1) DEFINE_CLASS_ID(Parm, Proj, 4) DEFINE_CLASS_ID(MachProj, Proj, 5) + DEFINE_CLASS_ID(NarrowMemProj, Proj, 6) DEFINE_CLASS_ID(Mem, Node, 4) DEFINE_CLASS_ID(Load, Mem, 0) @@ -989,6 +991,7 @@ public: DEFINE_CLASS_QUERY(Multi) DEFINE_CLASS_QUERY(MultiBranch) DEFINE_CLASS_QUERY(MulVL) + DEFINE_CLASS_QUERY(NarrowMemProj) DEFINE_CLASS_QUERY(Neg) DEFINE_CLASS_QUERY(NegV) DEFINE_CLASS_QUERY(NeverBranch) diff --git a/src/hotspot/share/opto/phaseX.cpp b/src/hotspot/share/opto/phaseX.cpp index ce5160c5984..b5b15275e21 100644 --- a/src/hotspot/share/opto/phaseX.cpp +++ b/src/hotspot/share/opto/phaseX.cpp @@ -2592,12 +2592,14 @@ void PhaseIterGVN::add_users_of_use_to_worklist(Node* n, Node* use, Unique_Node_ } } } + auto enqueue_init_mem_projs = [&](ProjNode* proj) { + add_users_to_worklist0(proj, worklist); + }; // If changed initialization activity, check dependent Stores if (use_op == Op_Allocate || use_op == Op_AllocateArray) { InitializeNode* init = use->as_Allocate()->initialization(); if (init != nullptr) { - Node* imem = init->proj_out_or_null(TypeFunc::Memory); - if (imem != nullptr) add_users_to_worklist0(imem, worklist); + init->for_each_proj(enqueue_init_mem_projs, TypeFunc::Memory); } } // If the ValidLengthTest input changes then the fallthrough path out of the AllocateArray may have become dead. @@ -2611,8 +2613,8 @@ void PhaseIterGVN::add_users_of_use_to_worklist(Node* n, Node* use, Unique_Node_ } if (use_op == Op_Initialize) { - Node* imem = use->as_Initialize()->proj_out_or_null(TypeFunc::Memory); - if (imem != nullptr) add_users_to_worklist0(imem, worklist); + InitializeNode* init = use->as_Initialize(); + init->for_each_proj(enqueue_init_mem_projs, TypeFunc::Memory); } // Loading the java mirror from a Klass requires two loads and the type // of the mirror load depends on the type of 'n'. See LoadNode::Value(). diff --git a/src/hotspot/share/opto/stringopts.cpp b/src/hotspot/share/opto/stringopts.cpp index 420423dd246..6b98c4ca2b0 100644 --- a/src/hotspot/share/opto/stringopts.cpp +++ b/src/hotspot/share/opto/stringopts.cpp @@ -380,17 +380,13 @@ void StringConcat::eliminate_initialize(InitializeNode* init) { Compile* C = _stringopts->C; // Eliminate Initialize node. - assert(init->outcnt() <= 2, "only a control and memory projection expected"); assert(init->req() <= InitializeNode::RawStores, "no pending inits"); Node *ctrl_proj = init->proj_out_or_null(TypeFunc::Control); if (ctrl_proj != nullptr) { C->gvn_replace_by(ctrl_proj, init->in(TypeFunc::Control)); } - Node *mem_proj = init->proj_out_or_null(TypeFunc::Memory); - if (mem_proj != nullptr) { - Node *mem = init->in(TypeFunc::Memory); - C->gvn_replace_by(mem_proj, mem); - } + Node* mem = init->in(TypeFunc::Memory); + init->replace_mem_projs_by(mem, C); C->gvn_replace_by(init, C->top()); init->disconnect_inputs(C); } diff --git a/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/java/com/sun/hotspot/igv/servercompiler/ServerCompilerScheduler.java b/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/java/com/sun/hotspot/igv/servercompiler/ServerCompilerScheduler.java index 93199ea35a1..c7d18eccf11 100644 --- a/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/java/com/sun/hotspot/igv/servercompiler/ServerCompilerScheduler.java +++ b/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/java/com/sun/hotspot/igv/servercompiler/ServerCompilerScheduler.java @@ -675,7 +675,9 @@ public class ServerCompilerScheduler implements Scheduler { } private static boolean isProj(Node n) { - return hasName(n, "Proj") || hasName(n, "MachProj"); + return hasName(n, "Proj") || + hasName(n, "MachProj") || + hasName(n, "NarrowMemProj"); } private static boolean isParm(Node n) { diff --git a/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/resources/com/sun/hotspot/igv/servercompiler/filters/condenseGraph.filter b/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/resources/com/sun/hotspot/igv/servercompiler/filters/condenseGraph.filter index 6919f06da00..5e9de455e1f 100644 --- a/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/resources/com/sun/hotspot/igv/servercompiler/filters/condenseGraph.filter +++ b/src/utils/IdealGraphVisualizer/ServerCompiler/src/main/resources/com/sun/hotspot/igv/servercompiler/filters/condenseGraph.filter @@ -53,6 +53,7 @@ split(and([matches("name", "Parm|MachProj"), // Combine single-input nodes. combine(anyNode, matches("name", "Proj|IfFalse|IfTrue|JProj|MachProj|JumpProj|CatchProj|Parm")); +combine(anyNode, matches("name", "NarrowMemProj"), ["N"]); combine(anyNode, matches("name", "SCMemProj"), ["SCM"]); combine(matches("name", "SubTypeCheck|Cmp.*"), matches("name", "Bool"), ["[dump_spec]"]); combine(anyNode, matches("name", "Decode(N|NarrowPtr|NKlass)"), ["DC"]); diff --git a/test/hotspot/jtreg/compiler/escapeAnalysis/TestIterativeEA.java b/test/hotspot/jtreg/compiler/escapeAnalysis/TestIterativeEA.java index 299f98995a0..a5688ef8041 100644 --- a/test/hotspot/jtreg/compiler/escapeAnalysis/TestIterativeEA.java +++ b/test/hotspot/jtreg/compiler/escapeAnalysis/TestIterativeEA.java @@ -48,9 +48,13 @@ public class TestIterativeEA { System.out.println(analyzer.getOutput()); analyzer.shouldHaveExitValue(0); - analyzer.shouldContain("++++ Eliminated: 26 Allocate"); - analyzer.shouldContain("++++ Eliminated: 48 Allocate"); - analyzer.shouldContain("++++ Eliminated: 78 Allocate"); + analyzer.shouldMatch( + "(?s)" + // Let .* also match line terminators. + "Eliminated: \\d+ Allocate" + + ".*" + + "Eliminated: \\d+ Allocate" + + ".*" + + "Eliminated: \\d+ Allocate"); } static class A { diff --git a/test/hotspot/jtreg/compiler/macronodes/TestEarlyEliminationOfAllocationWithoutUse.java b/test/hotspot/jtreg/compiler/macronodes/TestEarlyEliminationOfAllocationWithoutUse.java new file mode 100644 index 00000000000..5987bb0bb4b --- /dev/null +++ b/test/hotspot/jtreg/compiler/macronodes/TestEarlyEliminationOfAllocationWithoutUse.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8327963 + * @summary C2: fix construction of memory graph around Initialize node to prevent incorrect execution if allocation is removed + * @run main/othervm -XX:-BackgroundCompilation compiler.macronodes.TestEarlyEliminationOfAllocationWithoutUse + * @run main/othervm compiler.macronodes.TestEarlyEliminationOfAllocationWithoutUse + */ + +package compiler.macronodes; +import java.util.Arrays; + +public class TestEarlyEliminationOfAllocationWithoutUse { + private static volatile int volatileField; + + public static void main(String[] args) { + boolean[] allTrue = new boolean[3]; + Arrays.fill(allTrue, true); + A a = new A(); + boolean[] allFalse = new boolean[3]; + for (int i = 0; i < 20_000; i++) { + a.field1 = 0; + test1(a, allTrue); + test1(a, allFalse); + if (a.field1 != 42) { + throw new RuntimeException("Lost Store"); + } + } + } + + private static void test1(A otherA, boolean[] flags) { + otherA.field1 = 42; + // Fully unrolled before EA + for (int i = 0; i < 3; i++) { + A a = new A(); // removed right after EA + if (flags[i]) { + break; + } + } + } + + private static class A { + int field1; + } +} diff --git a/test/hotspot/jtreg/compiler/macronodes/TestEliminationOfAllocationWithoutUse.java b/test/hotspot/jtreg/compiler/macronodes/TestEliminationOfAllocationWithoutUse.java new file mode 100644 index 00000000000..9eee4c555bf --- /dev/null +++ b/test/hotspot/jtreg/compiler/macronodes/TestEliminationOfAllocationWithoutUse.java @@ -0,0 +1,338 @@ +/* + * Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8327012 8327963 + * @summary Revealed issue where hook_memory_on_init links some array slice to the rawptr slice. + * Now that array slice depends on the rawslice. And then when the Initialize MemBar gets + * removed in expand_allocate_common, the rawslice sees that it has now no effect, looks + * through the MergeMem and sees the initial state. That way, also the linked array slice + * goes to the initial state, even if before the allocation there were stores on the array + * slice. This leads to a messed up memory graph, and missing stores in the generated code. + * + * @run main/othervm -Xcomp -XX:-TieredCompilation + * -XX:CompileCommand=compileonly,compiler.macronodes.TestEliminationOfAllocationWithoutUse::test* + * compiler.macronodes.TestEliminationOfAllocationWithoutUse + * @run main/othervm -Xcomp + * -XX:CompileCommand=compileonly,compiler.macronodes.TestEliminationOfAllocationWithoutUse::test* + * compiler.macronodes.TestEliminationOfAllocationWithoutUse + */ + +package compiler.macronodes; + +public class TestEliminationOfAllocationWithoutUse { + + static public void main(String[] args) { + int failures = 0; + failures += run1(); + failures += run2(); + failures += run3(); + failures += run4(); + failures += run5(); + failures += run6(); + failures += run7(); + failures += run8(); + failures += run9(); + if (failures != 0) { + throw new RuntimeException("Had test failures: " + failures); + } + } + + static public int run1() { + int size = 10; + double[] arr1 = new double[size]; + double[] arr2 = new double[size]; + test1(arr1, arr2); + + double sum = 0; + for (int i = 0; i < arr1.length; ++i) { + sum += arr1[i] - arr2[i]; + } + + if (sum != (double)(size)) { + System.out.println("test1: wrong result: " + sum + " vs expected: " + size); + return 1; + } + return 0; + } + + // Simplified from JDK-8327012 regression test. + public static void test1(double[] arr1, double[] arr2) { + for(int i = 0; i < arr1.length; ++i) { + // stores on double[] slice + arr1[i] = (double)(i + 2); + arr2[i] = (double)(i + 1); + // Allocation without use: but Initialize MemBar tangles the rawptr and double[] slices + double[] tmp = new double[100]; + // When the Initialize MemBar is removed, the rawptr slice sees that there is no effect + // and takes the initial state. The double[] slice is hooked on to the rawptr slice, and + // also thinks it has the initial state, ignoring the double[] stores above. + } + } + + static public int run2() { + int size = 10; + double[] arr1 = new double[size]; + test2(arr1); + + double sum = 0; + for(int i = 0; i < arr1.length; ++i) { + sum += arr1[i]; + } + + if (sum != (double)(size)) { + System.out.println("test2: wrong result: " + sum + " vs expected: " + size); + return 1; + } + return 0; + } + + // Simplified from test1 + public static void test2(double[] arr1) { + for(int i = 0; i < arr1.length; ++i) { + arr1[i] = 1; + double[] tmp = new double[100]; + } + } + + static public int run3() { + int size = 10; + int[] arr1 = new int[size]; + test3(arr1); + + int sum = 0; + for(int i = 0; i < arr1.length; ++i) { + sum += arr1[i]; + } + + if (sum != size) { + System.out.println("test3: wrong result: " + sum + " vs expected: " + size); + return 1; + } + return 0; + } + + // Modified from test2 + public static void test3(int[] arr1) { + for(int i = 0; i < arr1.length; ++i) { + arr1[i] = 1; + int[] tmp = new int[100]; + } + } + + // From TestIncorrectResult.java in JDK-8324739 + static int test4(int l2) { + int[] tmp = new int[20]; + + for (int j = 0; j < l2; ++j) { + tmp[j] = 42; + int[] unused_but_necessary = new int[400]; + } + + return tmp[0]; + } + + public static int run4() { + for (int i = 0; i < 100; ++i) { + long res = test4(20); + + if (res != 42) { + System.out.println("test4: wrong result: " + res + " vs expected: 42"); + return 1; + } + } + return 0; + } + + // From JDK-8336701 + static class Test5 { + int[] b = new int[400]; + static int[] staticArray = new int[400]; + } + + static void test5() { + long e; + for (e = 1; e < 9; ++e) { + Test5.staticArray[(int) e] -= e; + synchronized (new Test5()) { } + } + for (int f = 0; f < 10000; ++f) ; + } + + static int run5() { + new Test5(); + for (int i = 0; i < 1000; ++i) { + test5(); + } + if (Test5.staticArray[8] != -8000) { + System.out.println("test5: wrong result: " + Test5.staticArray[8] + " vs expected: -8000"); + return 1; + } + return 0; + } + + // From JDK-8336293 + static class Test6 { + static long c; + static int a = 400; + double[] b = new double[400]; + } + + static void test6() { + long d; + double[] e = new double[Test6.a]; + for (int f = 0; f < e.length; f++) + e[f] = 1.116242; + d = 1; + while (++d < 7) + synchronized (new Test6()) { } + long g = 0; + for (int f = 0; f < e.length; f++) + g += e[f]; + Test6.c += g; + } + + static int run6() { + new Test6(); + for (int f = 0; f < 10000; ++f) { + test6(); + } + if (Test6.c != 4000000) { + System.out.println("test6: wrong result: " + Test6.c + " vs expected: 4000000 "); + return 1; + } + return 0; + } + + // From JDK-8327868 + static class Test7 { + static int a = 400; + int[] b = new int[400]; + static int[] staticArray = new int[a]; + } + + static int test7() { + int l, d = 3; + for (l = 2; 58 > l; l++) { + for (int e = 2; e < 8; e += 2) + for (int f = 1; f < e; f += 2) + synchronized (new Test7()) { + } + do + ; while (d < 2); + int g = 0; + do + g++; + while (g < 20000); + Test7.staticArray[1] -= 3023399; + } + int h = 0; + for (int i = 0; i < Test7.staticArray.length; i++) + h += Test7.staticArray[i]; + return h; + } + + static int run7() { + new Test7(); + int res = test7(); + if (res != -169310344) { + System.out.println("test7: wrong result: " + res + " vs expected: -169310344"); + return 1; + } + return 0; + } + + // from JDK-8329984 + static class Test8 { + static int a = 400; + int[] e = new int[400]; + } + + static int test8() { + int i = 22738; + int b; + int h; + int[] c = new int[Test8.a]; + for (b = 3; b < 273; b++) { + h = 1; + while (++h < 97) switch (b % 6 + 56) { + case 56: + c[1] = i; + case 57: + synchronized (new Test8()) {} + } + } + int k = 0; + for (int j = 0; j < c.length; j++) k += c[j]; + return k; + } + + public static int run8() { + new Test8(); + for (int i = 0; i < 20; i++) { + int res = test8(); + if (res != 22738) { + System.out.println("test8: wrong result: " + res + " vs expected: 22738"); + return 1; + } + } + return 0; + } + + // from JDK-8341009 + static class Test9 { + static int a = 256; + float[] b = new float[256]; + static long c; + } + + static void test9() { + for (int f = 0; f < 10000; ++f) ; + float[][] g = new float[Test9.a][Test9.a]; + for (int d = 7; d < 16; d++) { + long e = 1; + do { + g[d][(int) e] = d; + synchronized (new Test9()) { + } + } while (++e < 5); + } + for (int i = 0; i < Test9.a; ++i) { + for (int j = 0; j < Test9.a ; ++j) { + Test9.c += g[i][j]; + } + } + } + + static int run9() { + for (int j = 6; 116 > j; ++j) { + test9(); + } + if (Test9.c != 43560) { + System.out.println("test9: wrong result: " + Test9.c + " vs expected: 43560"); + return 1; + } + return 0; + } +} diff --git a/test/hotspot/jtreg/compiler/macronodes/TestInitializingStoreCapturing.java b/test/hotspot/jtreg/compiler/macronodes/TestInitializingStoreCapturing.java new file mode 100644 index 00000000000..0176d6a4801 --- /dev/null +++ b/test/hotspot/jtreg/compiler/macronodes/TestInitializingStoreCapturing.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8327012 8327963 + * @summary Test that initializing store gets captured, i.e. moved before the InitializeNode + * and made into a raw-store. + * @library /test/lib / + * @run driver compiler.macronodes.TestInitializingStoreCapturing + */ + +package compiler.macronodes; + +import compiler.lib.ir_framework.*; + +public class TestInitializingStoreCapturing { + + static class A { + float value; + A(float v) { value = v; } + }; + + static public void main(String[] args) { + TestFramework.run(); + } + + @Test + @IR(counts = {IRNode.STORE_F, "= 0"}) + static A testInitializeField() { + return new A(4.2f); + } + + @Test + @IR(counts = {IRNode.STORE_F, "= 0"}) + static float[] testInitializeArray() { + return new float[] {4.2f}; + } +} From 642ba4cfd18b7e17ff7f0ac3b2ce557bcaa93784 Mon Sep 17 00:00:00 2001 From: Kieran Farrell Date: Tue, 4 Nov 2025 14:02:24 +0000 Subject: [PATCH 012/512] 8334015: Add Support for UUID Version 7 (UUIDv7) defined in RFC 9562 Reviewed-by: rriggs, jpai, alanb --- .../share/classes/java/util/UUID.java | 82 +++++++++++++++---- test/jdk/java/util/UUID/UUIDTest.java | 50 ++++++++++- 2 files changed, 117 insertions(+), 15 deletions(-) diff --git a/src/java.base/share/classes/java/util/UUID.java b/src/java.base/share/classes/java/util/UUID.java index d1c81badba6..fa66d199239 100644 --- a/src/java.base/share/classes/java/util/UUID.java +++ b/src/java.base/share/classes/java/util/UUID.java @@ -59,21 +59,21 @@ import jdk.internal.util.ByteArrayLittleEndian; * {@code UUID}. The bit layout described above is valid only for a {@code * UUID} with a variant value of 2, which indicates the Leach-Salz variant. * - *

The version field holds a value that describes the type of this {@code - * UUID}. There are four different basic types of UUIDs: time-based, DCE - * security, name-based, and randomly generated UUIDs. These types have a - * version value of 1, 2, 3 and 4, respectively. + *

See + * RFC 9562: Universally Unique Identifiers (UUIDs) for the complete specification, + * including the UUID format, layouts, and algorithms for creating {@code UUID}s. * - *

For more information including algorithms used to create {@code UUID}s, - * see RFC 4122: A - * Universally Unique IDentifier (UUID) URN Namespace, section 4.2 - * "Algorithms for Creating a Time-Based UUID". + *

There are eight defined types of UUIDs, each identified by a version number: + * time-based (version 1), DCE security (version 2), name-based with MD5 (version 3), + * randomly generated (version 4), name-based with SHA-1 (version 5), reordered time-based (version 6), + * Unix epoch time-based (version 7), and custom-defined layout (version 8). * - * @spec https://www.rfc-editor.org/info/rfc4122 - * RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace + * @spec https://www.rfc-editor.org/rfc/rfc9562.html + * RFC 9562 Universally Unique IDentifiers (UUIDs) * @since 1.5 */ public final class UUID implements java.io.Serializable, Comparable { + /** * Explicit serialVersionUID for interoperability. */ @@ -178,6 +178,62 @@ public final class UUID implements java.io.Serializable, Comparable { return new UUID(md5Bytes); } + /** + * Creates a type 7 UUID (UUIDv7) {@code UUID} from the given Unix Epoch timestamp. + * + * The returned {@code UUID} will have the given {@code timestamp} in + * the first 6 bytes, followed by the version and variant bits representing {@code UUIDv7}, + * and the remaining bytes will contain random data from a cryptographically strong + * pseudo-random number generator. + * + * @apiNote {@code UUIDv7} values are created by allocating a Unix timestamp in milliseconds + * in the most significant 48 bits, allocating the required version (4 bits) and variant (2-bits) + * and filling the remaining 74 bits with random bits. As such, this method rejects {@code timestamp} + * values that do not fit into 48 bits. + *

+ * Monotonicity (each subsequent value being greater than the last) is a primary characteristic + * of {@code UUIDv7} values. This is due to the {@code timestamp} value being part of the {@code UUID}. + * Callers of this method that wish to generate monotonic {@code UUIDv7} values are expected to + * ensure that the given {@code timestamp} value is monotonic. + * + * + * @param timestamp the number of milliseconds since midnight 1 Jan 1970 UTC, + * leap seconds excluded. + * + * @return a {@code UUID} constructed using the given {@code timestamp} + * + * @throws IllegalArgumentException if the timestamp is negative or greater than {@code (1L << 48) - 1} + * + * @since 26 + */ + public static UUID ofEpochMillis(long timestamp) { + if ((timestamp >> 48) != 0) { + throw new IllegalArgumentException("Supplied timestamp: " + timestamp + "does not fit within 48 bits"); + } + + SecureRandom ng = Holder.numberGenerator; + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + + // Embed the timestamp into the first 6 bytes + randomBytes[0] = (byte)(timestamp >>> 40); + randomBytes[1] = (byte)(timestamp >>> 32); + randomBytes[2] = (byte)(timestamp >>> 24); + randomBytes[3] = (byte)(timestamp >>> 16); + randomBytes[4] = (byte)(timestamp >>> 8); + randomBytes[5] = (byte)(timestamp); + + // Set version to 7 + randomBytes[6] &= 0x0f; + randomBytes[6] |= 0x70; + + // Set variant to IETF + randomBytes[8] &= 0x3f; + randomBytes[8] |= (byte) 0x80; + + return new UUID(randomBytes); + } + private static final byte[] NIBBLES; static { byte[] ns = new byte[256]; @@ -320,6 +376,7 @@ public final class UUID implements java.io.Serializable, Comparable { *

  • 2 DCE security UUID *
  • 3 Name-based UUID *
  • 4 Randomly generated UUID + *
  • 7 Unix Epoch time-based UUID * * * @return The version number of this {@code UUID} @@ -336,16 +393,13 @@ public final class UUID implements java.io.Serializable, Comparable { * The variant number has the following meaning: *
      *
    • 0 Reserved for NCS backward compatibility - *
    • 2 IETF RFC 4122 + *
    • 2 IETF RFC 9562 * (Leach-Salz), used by this class *
    • 6 Reserved, Microsoft Corporation backward compatibility *
    • 7 Reserved for future definition *
    * * @return The variant number of this {@code UUID} - * - * @spec https://www.rfc-editor.org/info/rfc4122 - * RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace */ public int variant() { // This field is composed of a varying number of bits. diff --git a/test/jdk/java/util/UUID/UUIDTest.java b/test/jdk/java/util/UUID/UUIDTest.java index 9fbd6dc1788..cb447a05656 100644 --- a/test/jdk/java/util/UUID/UUIDTest.java +++ b/test/jdk/java/util/UUID/UUIDTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ public class UUIDTest { randomUUIDTest(); randomUUIDTest_Multi(); nameUUIDFromBytesTest(); + testOfEpochMillisTimestamp(); stringTest(); versionTest(); variantTest(); @@ -146,6 +147,44 @@ public class UUIDTest { } } + private static void testOfEpochMillisTimestamp() { + // Should not throw for valid currentTimeMillis() timestamp + long timestamp = System.currentTimeMillis(); + try { + UUID u = UUID.ofEpochMillis(timestamp); + if (u == null) { + throw new AssertionError("Generated UUID should not be null for timestamp: " + timestamp); + } + } catch (Exception e) { + throw new AssertionError("Unexpected exception with timestamp " + timestamp, e); + } + + // Should not throw for the 48-bit long + long value = 0xFEDCBA987654L; + try { + UUID u = UUID.ofEpochMillis(value); + if (u == null) { + throw new AssertionError("Generated UUID should not be null for 48-bit long: " + value); + } + } catch (Exception e) { + throw new AssertionError("Unexpected exception with 48-bit long " + value, e); + } + + // Should throw for negative timestamp + value = -0xFEDCBA987654L; + try { + UUID.ofEpochMillis(value); + throw new AssertionError("Expected IllegalArgumentException with negative timestamp: " + value); + } catch (IllegalArgumentException expected) {} + + // Should throw for timestamp > 48 bits + value = 1L << 48; + try { + UUID.ofEpochMillis(value); + throw new AssertionError("Expected IllegalArgumentException with timestamp > 48 bits: " + value); + } catch (IllegalArgumentException expected) {} + } + private static void stringTest() throws Exception { for (int i = 0; i < COUNT; i++) { UUID u1 = UUID.randomUUID(); @@ -187,6 +226,15 @@ public class UUIDTest { throw new Exception("nameUUIDFromBytes not type 3: " + test); } + long timestamp = System.currentTimeMillis(); + test = UUID.ofEpochMillis(timestamp); + if (test.version() != 7) { + throw new Exception("ofEpochMillis not type 7: " + test); + } + if (test.variant() != 2) { + throw new Exception("ofEpochMillis not variant 2: " + test); + } + test = UUID.fromString("9835451d-e2e0-1e41-8a5a-be785f17dcda"); if (test.version() != 1) { throw new Exception("wrong version fromString 1"); From d4622b2ceac6b6aef2717bf427878df1290c4a38 Mon Sep 17 00:00:00 2001 From: Jonas Norlinder Date: Tue, 4 Nov 2025 14:27:14 +0000 Subject: [PATCH 013/512] 8371130: Remove String template leftovers Reviewed-by: redestad, rriggs --- .../java/lang/AbstractStringBuilder.java | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java index f1da102236a..05b395ebf83 100644 --- a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java +++ b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java @@ -2046,42 +2046,6 @@ abstract sealed class AbstractStringBuilder implements Appendable, CharSequence return value; } - /** - * Used by StringConcatHelper via JLA. Adds the current builder count to the - * accumulation of items being concatenated. If the coder for the builder is - * UTF16 then upgrade the whole concatenation to UTF16. - * - * @param lengthCoder running accumulation of length and coder - * - * @return updated accumulation of length and coder - */ - long mix(long lengthCoder) { - return (lengthCoder + count) | ((long)coder << 32); - } - - /** - * Used by StringConcatHelper via JLA. Adds the characters in the builder value to the - * concatenation buffer and then updates the running accumulation of length. - * - * @param lengthCoder running accumulation of length and coder - * @param buffer concatenation buffer - * - * @return running accumulation of length and coder minus the number of characters added - */ - long prepend(long lengthCoder, byte[] buffer) { - lengthCoder -= count; - - if (lengthCoder < ((long)UTF16 << 32)) { - System.arraycopy(value, 0, buffer, (int)lengthCoder, count); - } else if (isLatin1(coder)) { - StringUTF16.inflate(value, 0, buffer, (int)lengthCoder, count); - } else { - System.arraycopy(value, 0, buffer, (int)lengthCoder << 1, count << 1); - } - - return lengthCoder; - } - private AbstractStringBuilder repeat(char c, int count) { byte coder = this.coder; int prevCount = this.count; From c0c76703bc10d5caa1cda7e2820d0702df5b8008 Mon Sep 17 00:00:00 2001 From: Fernando Guallini Date: Tue, 4 Nov 2025 15:20:22 +0000 Subject: [PATCH 014/512] 8366817: test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcServer.java and JdkProcClient.java should not delete logs Reviewed-by: syan, rhalade --- .../javax/net/ssl/TLSCommon/interop/AbstractPeer.java | 9 +-------- .../javax/net/ssl/TLSCommon/interop/JdkProcClient.java | 3 +-- .../javax/net/ssl/TLSCommon/interop/JdkProcServer.java | 3 +-- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/test/jdk/javax/net/ssl/TLSCommon/interop/AbstractPeer.java b/test/jdk/javax/net/ssl/TLSCommon/interop/AbstractPeer.java index 1bfc3ebcdbb..9950caf1921 100644 --- a/test/jdk/javax/net/ssl/TLSCommon/interop/AbstractPeer.java +++ b/test/jdk/javax/net/ssl/TLSCommon/interop/AbstractPeer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,13 +49,6 @@ public abstract class AbstractPeer implements Peer { System.out.println(Utilities.readFile(logPath).orElse("")); } - /* - * Deletes log file if exists. - */ - protected void deleteLog() throws IOException { - Utilities.deleteFile(getLogPath()); - } - /* * The negotiated application protocol. */ diff --git a/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcClient.java b/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcClient.java index 91d1a8d1ead..7d3cb7d1665 100644 --- a/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcClient.java +++ b/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -148,7 +148,6 @@ public class JdkProcClient extends AbstractClient { @Override public void close() throws IOException { printLog(); - deleteLog(); } public static void main(String[] args) throws Exception { diff --git a/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcServer.java b/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcServer.java index b07a039203e..a6c8a13e0c6 100644 --- a/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcServer.java +++ b/test/jdk/javax/net/ssl/TLSCommon/interop/JdkProcServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -166,7 +166,6 @@ public class JdkProcServer extends AbstractServer { public void close() throws IOException { printLog(); deletePort(); - deleteLog(); } private static int readPort() { From a51a0bf57feaae0862fd7f3dbf305883d49781a0 Mon Sep 17 00:00:00 2001 From: Jorn Vernee Date: Tue, 4 Nov 2025 15:40:40 +0000 Subject: [PATCH 015/512] 8370344: Arbitrary Java frames on stack during scoped access Reviewed-by: pchilanomate, dholmes, liach --- .../share/prims/scopedMemoryAccess.cpp | 55 +++++--- src/hotspot/share/runtime/handshake.cpp | 2 + src/hotspot/share/runtime/javaThread.cpp | 1 + src/hotspot/share/runtime/javaThread.hpp | 18 +++ .../sharedclosejfr/TestSharedCloseJFR.java | 123 ++++++++++++++++ .../foreign/sharedclosejfr/sharedCloseJfr.jfc | 7 + .../TestSharedCloseJvmti.java | 130 +++++++++++++++++ .../sharedclosejvmti/libSharedCloseAgent.cpp | 133 ++++++++++++++++++ .../lang/foreign/SharedCloseStackWalk.java | 92 ++++++++++++ 9 files changed, 545 insertions(+), 16 deletions(-) create mode 100644 test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java create mode 100644 test/jdk/java/foreign/sharedclosejfr/sharedCloseJfr.jfc create mode 100644 test/jdk/java/foreign/sharedclosejvmti/TestSharedCloseJvmti.java create mode 100644 test/jdk/java/foreign/sharedclosejvmti/libSharedCloseAgent.cpp create mode 100644 test/micro/org/openjdk/bench/java/lang/foreign/SharedCloseStackWalk.java diff --git a/src/hotspot/share/prims/scopedMemoryAccess.cpp b/src/hotspot/share/prims/scopedMemoryAccess.cpp index c1d1b8cd8c0..26ae5bc03f5 100644 --- a/src/hotspot/share/prims/scopedMemoryAccess.cpp +++ b/src/hotspot/share/prims/scopedMemoryAccess.cpp @@ -22,9 +22,11 @@ * */ +#include "classfile/moduleEntry.hpp" #include "classfile/vmSymbols.hpp" #include "jni.h" #include "jvm.h" +#include "jvmtifiles/jvmtiEnv.hpp" #include "logging/logStream.hpp" #include "oops/access.inline.hpp" #include "oops/oop.inline.hpp" @@ -36,7 +38,7 @@ #include "runtime/vframe.inline.hpp" template -static bool for_scoped_method(JavaThread* jt, const Func& func) { +static void for_scoped_methods(JavaThread* jt, bool agents_loaded, const Func& func) { ResourceMark rm; #ifdef ASSERT LogMessage(foreign) msg; @@ -44,12 +46,26 @@ static bool for_scoped_method(JavaThread* jt, const Func& func) { if (ls.is_enabled()) { ls.print_cr("Walking thread: %s", jt->name()); } + + bool would_have_bailed = false; #endif - const int max_critical_stack_depth = 10; - int depth = 0; for (vframeStream stream(jt); !stream.at_end(); stream.next()) { Method* m = stream.method(); + + if (!agents_loaded && + (m->method_holder()->module()->name() != vmSymbols::java_base())) { + // Stop walking if we see a frame outside of java.base. + + // If any JVMTI agents are loaded, we also have to keep walking, since + // agents can add arbitrary Java frames to the stack inside a @Scoped method. +#ifndef ASSERT + return; +#else + would_have_bailed = true; +#endif + } + bool is_scoped = m->is_scoped(); #ifdef ASSERT @@ -60,36 +76,43 @@ static bool for_scoped_method(JavaThread* jt, const Func& func) { #endif if (is_scoped) { - assert(depth < max_critical_stack_depth, "can't have more than %d critical frames", max_critical_stack_depth); - return func(stream); + assert(!would_have_bailed, "would have missed scoped method on release build"); + bool done = func(stream); + if (done || !agents_loaded) { + // We may also have to keep walking after finding a @Scoped method, + // since there may be multiple @Scoped methods active on the stack + // if a JVMTI agent callback runs during a scoped access and calls + // back into Java code that then itself does a scoped access. + return; + } } - depth++; - -#ifndef ASSERT - // On debug builds, just keep searching the stack - // in case we missed an @Scoped method further up - if (depth >= max_critical_stack_depth) { - break; - } -#endif } - return false; } static bool is_accessing_session(JavaThread* jt, oop session, bool& in_scoped) { - return for_scoped_method(jt, [&](vframeStream& stream){ + bool agents_loaded = JvmtiEnv::environments_might_exist(); + if (!agents_loaded && jt->is_throwing_unsafe_access_error()) { + // Ignore this thread. It is in the process of throwing another exception + // already. + return false; + } + + bool is_accessing_session = false; + for_scoped_methods(jt, agents_loaded, [&](vframeStream& stream){ in_scoped = true; StackValueCollection* locals = stream.asJavaVFrame()->locals(); for (int i = 0; i < locals->size(); i++) { StackValue* var = locals->at(i); if (var->type() == T_OBJECT) { if (var->get_obj() == session) { + is_accessing_session = true; return true; } } } return false; }); + return is_accessing_session; } static frame get_last_frame(JavaThread* jt) { diff --git a/src/hotspot/share/runtime/handshake.cpp b/src/hotspot/share/runtime/handshake.cpp index e9a00c2a3bc..f468f27e2c0 100644 --- a/src/hotspot/share/runtime/handshake.cpp +++ b/src/hotspot/share/runtime/handshake.cpp @@ -722,6 +722,8 @@ void HandshakeState::handle_unsafe_access_error() { MutexUnlocker ml(&_lock, Mutex::_no_safepoint_check_flag); // We may be at method entry which requires we save the do-not-unlock flag. UnlockFlagSaver fs(_handshakee); + // Tell code inspecting handshakee's stack what we are doing + ThrowingUnsafeAccessError tuae(_handshakee); Handle h_exception = Exceptions::new_exception(_handshakee, vmSymbols::java_lang_InternalError(), "a fault occurred in an unsafe memory access operation"); if (h_exception()->is_a(vmClasses::InternalError_klass())) { java_lang_InternalError::set_during_unsafe_access(h_exception()); diff --git a/src/hotspot/share/runtime/javaThread.cpp b/src/hotspot/share/runtime/javaThread.cpp index 36544cf1118..b9b4237e7ee 100644 --- a/src/hotspot/share/runtime/javaThread.cpp +++ b/src/hotspot/share/runtime/javaThread.cpp @@ -444,6 +444,7 @@ JavaThread::JavaThread(MemTag mem_tag) : _terminated(_not_terminated), _in_deopt_handler(0), _doing_unsafe_access(false), + _throwing_unsafe_access_error(false), _do_not_unlock_if_synchronized(false), #if INCLUDE_JVMTI _carrier_thread_suspended(false), diff --git a/src/hotspot/share/runtime/javaThread.hpp b/src/hotspot/share/runtime/javaThread.hpp index a6a00bfbd03..c0b25384fac 100644 --- a/src/hotspot/share/runtime/javaThread.hpp +++ b/src/hotspot/share/runtime/javaThread.hpp @@ -317,6 +317,7 @@ class JavaThread: public Thread { jint _in_deopt_handler; // count of deoptimization // handlers thread is in volatile bool _doing_unsafe_access; // Thread may fault due to unsafe access + volatile bool _throwing_unsafe_access_error; // Thread has faulted and is throwing an exception bool _do_not_unlock_if_synchronized; // Do not unlock the receiver of a synchronized method (since it was // never locked) when throwing an exception. Used by interpreter only. #if INCLUDE_JVMTI @@ -622,6 +623,9 @@ private: bool doing_unsafe_access() { return _doing_unsafe_access; } void set_doing_unsafe_access(bool val) { _doing_unsafe_access = val; } + bool is_throwing_unsafe_access_error() { return _throwing_unsafe_access_error; } + void set_throwing_unsafe_access_error(bool val) { _throwing_unsafe_access_error = val; } + bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; } void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; } @@ -1354,4 +1358,18 @@ class ThreadInClassInitializer : public StackObj { } }; +class ThrowingUnsafeAccessError : public StackObj { + JavaThread* _thread; + bool _prev; +public: + ThrowingUnsafeAccessError(JavaThread* thread) : + _thread(thread), + _prev(thread->is_throwing_unsafe_access_error()) { + _thread->set_throwing_unsafe_access_error(true); + } + ~ThrowingUnsafeAccessError() { + _thread->set_throwing_unsafe_access_error(_prev); + } +}; + #endif // SHARE_RUNTIME_JAVATHREAD_HPP diff --git a/test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java b/test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java new file mode 100644 index 00000000000..b59373b5b4e --- /dev/null +++ b/test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8370344 + * @requires os.family != "windows" + * @requires vm.flavor != "zero" + * @requires vm.hasJFR + * @summary Test closing a shared scope during faulting access + * + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main jdk.test.lib.FileInstaller sharedCloseJfr.jfc sharedCloseJfr.jfc + * @run main/othervm + * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:StartFlightRecording:filename=recording.jfr,dumponexit=true,settings=sharedCloseJfr.jfc + * TestSharedCloseJFR + */ + +import jdk.test.whitebox.WhiteBox; + +import java.io.RandomAccessFile; +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.atomic.AtomicBoolean; + +// We are interested in the following scenario: +// When accessing a memory-mapped file that is truncated +// a segmentation fault will occur (see also test/hotspot/jtreg/runtime/Unsafe/InternalErrorTest.java) +// +// This segmentation fault will be caught in the VM's signal handler +// and get turned into an InternalError by a VM handshake operation. +// This handshake operation calls back into Java to the constructor +// of InternalError. This constructor calls super constructors until +// it ends up in the constructor of Throwable, where JFR starts logging +// the Throwable being created. This logging code adds a bunch +// of extra Java frames to the stack. +// +// All of this occurs during the original memory access, i.e. +// while we are inside a @Scoped method call (jdk.internal.misc.ScopedMemoryAccess). +// If at this point a shared arena is closed in another thread, +// the shared scope closure handshake (src/hotspot/share/prims/scopedMemoryAccess.cpp) +// will see all the extra frames added by JFR and the InternalError constructor, +// while walking the stack of the thread doing the faulting access. +// +// This test is here to make sure that the shared scope closure handshake can +// deal with that situation. +public class TestSharedCloseJFR { + + private static final int PAGE_SIZE = WhiteBox.getWhiteBox().getVMPageSize(); + + public static void main(String[] args) throws Throwable { + String fileName = "tmp.txt"; + Path path = Path.of(fileName); + AtomicBoolean stop = new AtomicBoolean(); + + Files.write(path, "1".repeat(PAGE_SIZE + 1000).getBytes()); + try (RandomAccessFile file = new RandomAccessFile(fileName, "rw")) { + FileChannel fileChannel = file.getChannel(); + MemorySegment segment = + fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, fileChannel.size(), Arena.ofAuto()); + // truncate file + // this will make the access fault + Files.write(path, "2".getBytes()); + + // start worker thread + CountDownLatch latch = new CountDownLatch(1); + Thread.ofPlatform().start(() -> { + latch.countDown(); + while (!stop.get()) { + Arena.ofShared().close(); // hammer VM with handshakes + } + }); + + // wait util the worker thread has started + latch.await(); + + // access (should fault) + // try it a few times until we get a handshake during JFR reporting + for (int i = 0; i < 50_000; i++) { + try { + segment.get(ValueLayout.JAVA_INT, PAGE_SIZE); + throw new RuntimeException("InternalError was expected"); + } catch (InternalError e) { + // InternalError as expected + if (!e.getMessage().contains("a fault occurred in an unsafe memory access")) { + throw new RuntimeException("Unexpected exception", e); + } + } + } + } finally { + // stop worker + stop.set(true); + } + } +} diff --git a/test/jdk/java/foreign/sharedclosejfr/sharedCloseJfr.jfc b/test/jdk/java/foreign/sharedclosejfr/sharedCloseJfr.jfc new file mode 100644 index 00000000000..13f3406a5de --- /dev/null +++ b/test/jdk/java/foreign/sharedclosejfr/sharedCloseJfr.jfc @@ -0,0 +1,7 @@ + + + + true + true + + diff --git a/test/jdk/java/foreign/sharedclosejvmti/TestSharedCloseJvmti.java b/test/jdk/java/foreign/sharedclosejvmti/TestSharedCloseJvmti.java new file mode 100644 index 00000000000..b7106da24e8 --- /dev/null +++ b/test/jdk/java/foreign/sharedclosejvmti/TestSharedCloseJvmti.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8370344 + * @library /test/lib + * @run junit/native TestSharedCloseJvmti + */ + +import jdk.test.lib.Utils; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import org.junit.jupiter.api.Test; + +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class TestSharedCloseJvmti { + + private static final String JVMTI_AGENT_LIB = Path.of(Utils.TEST_NATIVE_PATH, System.mapLibraryName("SharedCloseAgent")) + .toAbsolutePath().toString(); + + @Test + void eventDuringScopedAccess() throws Throwable { + List command = new ArrayList<>(List.of( + "-agentpath:" + JVMTI_AGENT_LIB, + "-Xcheck:jni", + EventDuringScopedAccessRunner.class.getName() + )); + + try { + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(command); + Process process = ProcessTools.startProcess("fork", pb, null, null, 1L, TimeUnit.MINUTES); + OutputAnalyzer output = new OutputAnalyzer(process); + output.shouldHaveExitValue(0); + output.stderrShouldContain("Exception in thread \"Trigger\" jdk.internal.misc.ScopedMemoryAccess$ScopedAccessError: Invalid memory access"); + } catch (TimeoutException e) { + throw new RuntimeException("Timeout while waiting for forked process"); + } + } + + public static class EventDuringScopedAccessRunner { + static final int ADDED_FRAMES = 10; + + static final CountDownLatch MAIN_LATCH = new CountDownLatch(1); + static final CountDownLatch TARGET_LATCH = new CountDownLatch(1); + static final MemorySegment OTHER_SEGMENT = Arena.global().allocate(4); + + static volatile int SINK; + + public static void main(String[] args) throws Throwable { + try (Arena arena = Arena.ofShared()) { + MemorySegment segment = arena.allocate(4); + // run in separate thread so that waiting on + // latch doesn't block main thread + Thread.ofPlatform().name("Trigger").start(() -> { + SINK = segment.get(ValueLayout.JAVA_INT, 0); + }); + // wait until trigger thread is in JVMTI event callback + MAIN_LATCH.await(); + } + // Notify trigger thread that arena was closed + TARGET_LATCH.countDown(); + } + + static boolean reentrant = false; + + // called by jvmti agent + // we get here after checking arena liveness + private static void target() { + String callerName = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk(frames -> + frames.skip(2).findFirst().orElseThrow().getClassName()); + if (!callerName.equals("jdk.internal.misc.ScopedMemoryAccess")) { + return; + } + + if (reentrant) { + // put some frames on the stack, so stack walk does not see @Scoped method + addFrames(0); + } else { + reentrant = true; + SINK = OTHER_SEGMENT.get(ValueLayout.JAVA_INT, 0); + reentrant = false; + } + } + + private static void addFrames(int depth) { + if (depth >= ADDED_FRAMES) { + // notify main thread to close the arena + MAIN_LATCH.countDown(); + try { + // wait here until main thread has closed arena + TARGET_LATCH.await(); + } catch (InterruptedException ex) { + throw new RuntimeException("Unexpected interruption"); + } + return; + } + addFrames(depth + 1); + } + } +} diff --git a/test/jdk/java/foreign/sharedclosejvmti/libSharedCloseAgent.cpp b/test/jdk/java/foreign/sharedclosejvmti/libSharedCloseAgent.cpp new file mode 100644 index 00000000000..6406c46f61c --- /dev/null +++ b/test/jdk/java/foreign/sharedclosejvmti/libSharedCloseAgent.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include + +#include + +static jclass MAIN_CLS; +static jmethodID TARGET_ID; + +static const char* TARGET_CLASS_NAME = "TestSharedCloseJvmti$EventDuringScopedAccessRunner"; +static const char* TARGET_METHOD_NAME = "target"; +static const char* TARGET_METHOD_SIG = "()V"; + +static const char* INTERCEPT_CLASS_NAME = "Ljdk/internal/foreign/MemorySessionImpl;"; +static const char* INTERCEPT_METHOD_NAME = "checkValidStateRaw"; + +void start(jvmtiEnv *jvmti_env, JNIEnv* jni_env) { + + jclass cls = jni_env->FindClass(TARGET_CLASS_NAME); + if (cls == nullptr) { + jni_env->ExceptionDescribe(); + return; + } + + MAIN_CLS = (jclass) jni_env->NewGlobalRef(cls); + + TARGET_ID = jni_env->GetStaticMethodID(cls, TARGET_METHOD_NAME, TARGET_METHOD_SIG); + if (TARGET_ID == nullptr) { + jni_env->ExceptionDescribe(); + return; + } +} + +void method_exit(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread, jmethodID method, + jboolean was_popped_by_exception, jvalue return_value) { + char* method_name = nullptr; + jvmtiError err = jvmti_env->GetMethodName(method, &method_name, nullptr, nullptr); + if (err != JVMTI_ERROR_NONE) { + return; + } + + if (strcmp(method_name, INTERCEPT_METHOD_NAME) != 0) { + jvmti_env->Deallocate((unsigned char*) method_name); + return; + } + + jclass cls; + err = jvmti_env->GetMethodDeclaringClass(method, &cls); + if (err != JVMTI_ERROR_NONE) { + jvmti_env->Deallocate((unsigned char*) method_name); + return; + } + + char* class_sig = nullptr; + err = jvmti_env->GetClassSignature(cls, &class_sig, nullptr); + if (err != JVMTI_ERROR_NONE) { + jvmti_env->Deallocate((unsigned char*) method_name); + return; + } + + if (strcmp(class_sig, INTERCEPT_CLASS_NAME) != 0) { + jvmti_env->Deallocate((unsigned char*) method_name); + jvmti_env->Deallocate((unsigned char*) class_sig); + return; + } + + jni_env->CallStaticVoidMethod(MAIN_CLS, TARGET_ID); + if (jni_env->ExceptionOccurred()) { + jni_env->ExceptionDescribe(); + } + + jvmti_env->Deallocate((unsigned char*) method_name); + jvmti_env->Deallocate((unsigned char*) class_sig); +} + +JNIEXPORT jint JNICALL +Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { + jvmtiEnv* env; + jint jni_err = vm->GetEnv((void**) &env, JVMTI_VERSION); + if (jni_err != JNI_OK) { + return jni_err; + } + + jvmtiCapabilities capabilities{}; + capabilities.can_generate_method_exit_events = 1; + + jvmtiError err = env->AddCapabilities(&capabilities); + if (err != JVMTI_ERROR_NONE) { + return err; + } + + jvmtiEventCallbacks callbacks; + callbacks.VMStart = start; + callbacks.MethodExit = method_exit; + + err = env->SetEventCallbacks(&callbacks, (jint) sizeof(callbacks)); + if (err != JVMTI_ERROR_NONE) { + return err; + } + + err = env->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_METHOD_EXIT, nullptr); + if (err != JVMTI_ERROR_NONE) { + return err; + } + + err = env->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_VM_START, nullptr); + if (err != JVMTI_ERROR_NONE) { + return err; + } + + return 0; +} diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/SharedCloseStackWalk.java b/test/micro/org/openjdk/bench/java/lang/foreign/SharedCloseStackWalk.java new file mode 100644 index 00000000000..ead4bcb5089 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/lang/foreign/SharedCloseStackWalk.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package org.openjdk.bench.java.lang.foreign; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; + +import java.lang.foreign.Arena; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@Warmup(iterations = 5, time = 10, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 10, time = 10, timeUnit = TimeUnit.SECONDS) +@State(Scope.Benchmark) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@Fork(value = 1, jvmArgs = { "--enable-native-access=ALL-UNNAMED", "-Djava.library.path=micro/native" }) +public class SharedCloseStackWalk { + + @Param({"1", "10", "100"}) + int numOtherThread; + + @Param({"10", "100", "1000"}) + int extraFrames; + + @Param({"false", "true"}) + boolean virtualThreads; + + private CountDownLatch stop; + + @Setup + public void setup() { + stop = new CountDownLatch(1); + for (int i = 0; i < numOtherThread; i++) { + (virtualThreads + ? Thread.ofVirtual() + : Thread.ofPlatform()).start(() -> recurse(0)); + } + } + + @TearDown + public void teardown() { + stop.countDown(); + } + + @Benchmark + public void sharedOpenClose() { + Arena.ofShared().close(); + } + + private void recurse(int depth) { + if (depth == extraFrames) { + try { + stop.await(); + } catch (InterruptedException e) { + throw new RuntimeException("Don't interrupt me!", e); + } + } else { + recurse(depth + 1); + } + } +} From 7d3c66f379fcb24d4505c2c12e20b24dce313e56 Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Tue, 4 Nov 2025 15:58:19 +0000 Subject: [PATCH 016/512] 8371114: Problemlist vmTestbase/nsk/jvmti/scenarios/events/EM02/em02t006/TestDescription.java Reviewed-by: amenkov, syan, sspitsyn --- test/hotspot/jtreg/ProblemList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 3dac8821165..2065737c2a1 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -167,6 +167,7 @@ vmTestbase/metaspace/gc/firstGC_default/TestDescription.java 8208250 generic-all vmTestbase/nsk/jvmti/scenarios/capability/CM03/cm03t001/TestDescription.java 8073470 linux-all vmTestbase/nsk/jvmti/InterruptThread/intrpthrd003/TestDescription.java 8288911 macosx-all +vmTestbase/nsk/jvmti/scenarios/events/EM02/em02t006/TestDescription.java 8371103 generic-all vmTestbase/jit/escape/LockCoarsening/LockCoarsening001.java 8148743 generic-all vmTestbase/jit/escape/LockCoarsening/LockCoarsening002.java 8208259 generic-all From 2f455ed146ff2e56da4532e9430e4c85ca9497ad Mon Sep 17 00:00:00 2001 From: Peyang Date: Tue, 4 Nov 2025 16:08:15 +0000 Subject: [PATCH 017/512] 8371092: NullPointerException in AltServiceUsageTest.afterClass() test Reviewed-by: dfuchs --- .../java/net/httpclient/AltServiceUsageTest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/jdk/java/net/httpclient/AltServiceUsageTest.java b/test/jdk/java/net/httpclient/AltServiceUsageTest.java index 8b9193432f0..673357a59aa 100644 --- a/test/jdk/java/net/httpclient/AltServiceUsageTest.java +++ b/test/jdk/java/net/httpclient/AltServiceUsageTest.java @@ -123,7 +123,7 @@ public class AltServiceUsageTest implements HttpServerAdapters { public void afterClass() throws Exception { safeStop(originServer); safeStop(altServer); - udpNotResponding.close(); + safeClose(udpNotResponding); } private static void safeStop(final HttpTestServer server) { @@ -140,6 +140,19 @@ public class AltServiceUsageTest implements HttpServerAdapters { } } + private static void safeClose(final DatagramChannel channel) { + if (channel == null) { + return; + } + try { + System.out.println("Closing DatagramChannel " + channel.getLocalAddress()); + channel.close(); + } catch (Exception e) { + System.err.println("Ignoring exception: " + e.getMessage() + " that occurred " + + "during close of DatagramChannel: " + channel); + } + } + private static class H3AltServicePublisher implements HttpTestHandler { private static final String RESPONSE_CONTENT = "apple"; From 4c6af03f81e068a98b8f4628b96682a54f3946da Mon Sep 17 00:00:00 2001 From: Vicente Romero Date: Tue, 4 Nov 2025 16:47:33 +0000 Subject: [PATCH 018/512] 8337142: StackOverflowError in Types.containsTypeRecursive with deeply nested type hierarchy Reviewed-by: mcimadamore --- .../com/sun/tools/javac/code/Types.java | 44 +++++++++++-- .../types/SOEForDeeplyNestedTypeTest.java | 64 +++++++++++++++++++ 2 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 test/langtools/tools/javac/types/SOEForDeeplyNestedTypeTest.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java index 98ad65fdc05..ffd304c18a2 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java @@ -1346,7 +1346,7 @@ public class Types { * Type-equality relation - type variables are considered * equals if they share the same object identity. */ - TypeRelation isSameTypeVisitor = new TypeRelation() { + abstract class TypeEqualityVisitor extends TypeRelation { public Boolean visitType(Type t, Type s) { if (t.equalsIgnoreMetadata(s)) @@ -1385,10 +1385,12 @@ public class Types { } else { WildcardType t2 = (WildcardType)s; return (t.kind == t2.kind || (t.isExtendsBound() && s.isExtendsBound())) && - isSameType(t.type, t2.type); + sameTypeComparator(t.type, t2.type); } } + abstract boolean sameTypeComparator(Type t, Type s); + @Override public Boolean visitClassType(ClassType t, Type s) { if (t == s) @@ -1419,9 +1421,11 @@ public class Types { } return t.tsym == s.tsym && visit(t.getEnclosingType(), s.getEnclosingType()) - && containsTypeEquivalent(t.getTypeArguments(), s.getTypeArguments()); + && sameTypeArguments(t.getTypeArguments(), s.getTypeArguments()); } + abstract boolean sameTypeArguments(List ts, List ss); + @Override public Boolean visitArrayType(ArrayType t, Type s) { if (t == s) @@ -1477,6 +1481,16 @@ public class Types { public Boolean visitErrorType(ErrorType t, Type s) { return true; } + } + + TypeEqualityVisitor isSameTypeVisitor = new TypeEqualityVisitor() { + boolean sameTypeComparator(Type t, Type s) { + return isSameType(t, s); + } + + boolean sameTypeArguments(List ts, List ss) { + return containsTypeEquivalent(ts, ss); + } }; // @@ -3862,7 +3876,7 @@ public class Types { // where class TypePair { final Type t1; - final Type t2;; + final Type t2; TypePair(Type t1, Type t2) { this.t1 = t1; @@ -3875,10 +3889,28 @@ public class Types { @Override public boolean equals(Object obj) { return (obj instanceof TypePair typePair) - && isSameType(t1, typePair.t1) - && isSameType(t2, typePair.t2); + && exactTypeVisitor.visit(t1, typePair.t1) + && exactTypeVisitor.visit(t2, typePair.t2); } } + + TypeEqualityVisitor exactTypeVisitor = new TypeEqualityVisitor() { + @Override + boolean sameTypeArguments(List ts, List ss) { + while (ts.nonEmpty() && ss.nonEmpty() + && sameTypeComparator(ts.head, ss.head)) { + ts = ts.tail; + ss = ss.tail; + } + return ts.isEmpty() && ss.isEmpty(); + } + + @Override + boolean sameTypeComparator(Type t, Type s) { + return exactTypeVisitor.visit(t, s); + } + }; + Set mergeCache = new HashSet<>(); private Type merge(Type c1, Type c2) { ClassType class1 = (ClassType) c1; diff --git a/test/langtools/tools/javac/types/SOEForDeeplyNestedTypeTest.java b/test/langtools/tools/javac/types/SOEForDeeplyNestedTypeTest.java new file mode 100644 index 00000000000..ad268ddef24 --- /dev/null +++ b/test/langtools/tools/javac/types/SOEForDeeplyNestedTypeTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8337142 + * @summary StackOverflowError in Types.containsTypeRecursive with deeply nested type hierarchy + * @compile SOEForDeeplyNestedTypeTest.java + */ + +import java.util.List; + +public class SOEForDeeplyNestedTypeTest { + class T { + List> xs = List.of(new M<>(One.class), new M<>(Two.class), new M<>(Two.class)); + } + + class M> { + M(Class c) {} + } + + class One implements Three, Six {} + class Two implements Four, Six {} + interface Three extends Nine {} + interface Four extends Nine {} + class Five extends Ten implements Eleven, Thirteen {} + interface Six extends TwentyTwo {} + class Seven extends Ten implements Eleven, Thirteen {} + interface Eight {} + interface Nine extends TwentyTwo {} + class Ten implements TwentyTwo {} + interface Eleven extends Twenty {} + class Twelve extends Ten implements Eleven, Thirteen {} + interface Thirteen extends Seventeen {} + class Fourteen extends Ten implements Eleven, Thirteen {} + class Fifteen extends Ten implements Eleven, Thirteen {} + class Sixteen extends Nineteen implements Eighteen, Thirteen {} + interface Seventeen extends Twenty {} + interface Eighteen extends Twenty {} + class Nineteen extends Ten implements Twenty {} + interface Twenty extends TwentyTwo {} + class TwentyOne {} + interface TwentyTwo extends Eight {} +} From 8224292ba57f3d6f79c1a3515348824d92ef45fe Mon Sep 17 00:00:00 2001 From: Koushik Thirupattur Date: Tue, 4 Nov 2025 18:42:52 +0000 Subject: [PATCH 019/512] 8365069: Refactor tests to use PEM API (Phase 1) Reviewed-by: ascarpino --- .../KeyStore/PKCS12/WriteP12Test.java | 29 ++--- .../security/KeyStore/TestKeyStoreBasic.java | 83 ++++++------- .../selfIssued/DisableRevocation.java | 66 ++++------- .../selfIssued/KeyUsageMatters.java | 86 +++++--------- .../CertPathValidator/OCSP/FailoverToCRL.java | 30 ++--- .../indirectCRL/CircularCRLOneLevel.java | 42 +++---- .../CircularCRLOneLevelRevoked.java | 43 +++---- .../NameConstraintsWithRID.java | 28 ++--- .../NameConstraintsWithUnexpectedRID.java | 25 ++-- .../NameConstraintsWithoutRID.java | 28 ++--- .../trustAnchor/ValWithAnchorByName.java | 18 ++- test/jdk/javax/net/ssl/TLSCommon/TLSTest.java | 110 +++++++++++------- .../DisabledAlgorithms/CPBuilder.java | 41 +++---- .../DisabledAlgorithms/CPBuilderWithMD5.java | 37 +++--- .../CPValidatorEndEntity.java | 32 +++-- .../CPValidatorIntermediate.java | 29 ++--- .../X509TrustManagerImpl/PKIXExtendedTM.java | 17 ++- .../SunX509ExtendedTM.java | 18 ++- 18 files changed, 322 insertions(+), 440 deletions(-) diff --git a/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java b/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java index f4024090f2f..96bbbbcde13 100644 --- a/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java +++ b/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,12 +30,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; -import java.security.Key; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.UnrecoverableKeyException; +import java.security.*; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; @@ -50,6 +45,7 @@ import java.util.Enumeration; * @summary Write different types p12 key store to Check the write related * APIs. * @run main WriteP12Test + * @enablePreview */ public class WriteP12Test { @@ -128,19 +124,16 @@ public class WriteP12Test { private final Certificate testLeadCert; private final Certificate caCert; - WriteP12Test() throws CertificateException { - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - caCert = cf.generateCertificate(new ByteArrayInputStream(CA_CERT_STR - .getBytes())); - testLeadCert = cf.generateCertificate(new ByteArrayInputStream( - LEAD_CERT.getBytes())); - testerCert = cf.generateCertificate(new ByteArrayInputStream(END_CERT - .getBytes())); + WriteP12Test() { + PEMDecoder pemDecoder = PEMDecoder.of(); + caCert = pemDecoder.decode(CA_CERT_STR, X509Certificate.class); + testLeadCert = pemDecoder.decode(LEAD_CERT, X509Certificate.class); + testerCert = pemDecoder.decode(END_CERT, X509Certificate.class); } - public static void main(String[] args) throws CertificateException, - UnrecoverableKeyException, KeyStoreException, - NoSuchProviderException, NoSuchAlgorithmException, IOException { + public static void main(String[] args) throws UnrecoverableKeyException, + KeyStoreException, NoSuchProviderException, + NoSuchAlgorithmException, IOException { WriteP12Test jstest = new WriteP12Test(); out.println("test WriteP12CertChain"); /* diff --git a/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java b/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java index 1a31d51c418..8218c9cb48a 100644 --- a/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java +++ b/test/jdk/java/security/KeyStore/TestKeyStoreBasic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,54 +21,48 @@ * questions. */ -import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.security.KeyFactory; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchProviderException; -import java.security.PrivateKey; -import java.security.UnrecoverableKeyException; +import java.security.*; import java.security.cert.Certificate; -import java.security.cert.CertificateFactory; -import java.security.spec.KeySpec; -import java.security.spec.PKCS8EncodedKeySpec; -import java.util.Base64; +import java.security.cert.X509Certificate; /* * @test * @bug 8048621 8133090 8167371 8236671 + * @enablePreview * @summary Test basic operations with keystores (jks, jceks, pkcs12) * @author Yu-Ching Valerie PENG */ public class TestKeyStoreBasic { - private static final String PRIVATE_KEY_PKCS8_BASE64 = "" - + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCpyz97liuWPDYcLH9TX8BiT78o" - + "lCmAfmevvch6ncXUVuCzbdaKuKXwn4EVbDszsVJLoK5zdtP+X3iDhutj+IgKmLhuczF3M9VIcWr+" - + "JJUyTH4+3h/RT8cjCDZOmk9iXkb5ifruVsLqzb9g+Vp140Oz7leikne7KmclHvTfvFd0WDI7Gb9v" - + "o4f5rT717BXJ/n+M6pNk8DLpLiEu6eziYvXRv5x+t5Go3x0eCXdaxEQUf2j876Wfr2qHRJK7lDfF" - + "e1DDsMg/KpKGiILYZ+g2qtVMZSxtp5BZEtfB5qV/IE5kWO+mCIAGpXSZIdbERR6pZUq8GLEe1T9e" - + "+sO6H24w2F19AgMBAAECggEBAId/12187dO6wUPCjumuJA1QrrBnbKdKONyai36uoc1Od4s5QFj7" - + "+hEIeS7rbGNYQuBvnkgusAbzkW0FIpxpHce3EJez/emux6pEOKoP77BwMt9gy+txyu0+BHi91FQg" - + "AGvrnQDO5EYVY4Cz/WjOsJzKu8zVLg+DS0Toa2qRFwmUe9mVAXPNOCZ3Oae/Q6tCDsaINNw0fmjj" - + "jn6uohPbS+n6xENG3FkQXB36getXy310xTGED2J27cmAQH6gLR6Kl2iROzNPbbpBqbuemI9kbcld" - + "EwBS1jRfZWeaPstYA1niVrE9UgUBzemnoh4TDkG076sYthHMr5QFGjPswnwtJ4ECgYEA0sURQ5+v" - + "baH4tdaemI3qpnknXTlzSpuZZmAoyvY0Id0mlduwKwmZ3Y5989wHfnnhFfyNO4IkTKjI2Wp97qP5" - + "4eqUNpA7FtNU7KUzMcFDTtwtNZuRYMrKlqo2lLbA+gVrAYpYZFL4b7tcwtX4DnYorDsmude6W8sG" - + "4Mx2VdFJC9UCgYEAzjsdXCYH5doWUHb0dvn9ID7IikffEMRM720MRjrnnnVbpzx6ACntkPDNZg7p" - + "TRE/mx7iBz81ZaUWE+V0wd0JvCHEdpAz3mksyvDFhU4Bgs6xzf2pSul5muhsx3hHcvvPezz5Bnxs" - + "faJlzkxfwotyGmvWN15GA/pyfsZjsbbTpwkCgYAO6NnbysQCIV8SnegCKqfatt9N/O5m7LLhRxQb" - + "p2bwrlA4cZ34rWkw/w9x3LK7A6wkfgUPnJkswxPSLXJTG05l6M4rPfCwIKr1Qopojp9QSMr569NQ" - + "4YeLOOc7heIIzbFQHpU6I5Rncv2Q2sn9W+ZsqJKIuvX34FjQNiZ406EzMQKBgHSxOGS61D84DuZK" - + "2Ps1awhC3kB4eHzJRms3vflDPWoJJ+pSKwpKrzUTPHXiPBqyhtYkPGszVeiE6CAr9sv3YZnFVaBs" - + "6hyQUJsob+uE/w/gGvXe8VsFDx0bJOodYfhrCbTHBHWqE81nBcocpxayxsayfAzqWB3KKd0YLrMR" - + "K2PZAoGAcZa8915R2m0KZ6HVJUt/JDR85jCbN71kcVDFY2XSFkOJvOdFoHNfRckfLzjq9Y2MSSTV" - + "+QDWbDo2doUQCejJUTaN8nP79tfyir24X5uVPvQaeVoGTKYb+LfUqK0F60lStmjuddIGSZH55y3v" - + "+9XjmxbVERtd1lqgQg3VlmKlEXY="; + private static final String PRIVATE_KEY_PKCS8_BASE64 = """ + -----BEGIN PRIVATE KEY----- + MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCpyz97liuWPDYcLH9TX8BiT78o + lCmAfmevvch6ncXUVuCzbdaKuKXwn4EVbDszsVJLoK5zdtP+X3iDhutj+IgKmLhuczF3M9VIcWr+ + JJUyTH4+3h/RT8cjCDZOmk9iXkb5ifruVsLqzb9g+Vp140Oz7leikne7KmclHvTfvFd0WDI7Gb9v + o4f5rT717BXJ/n+M6pNk8DLpLiEu6eziYvXRv5x+t5Go3x0eCXdaxEQUf2j876Wfr2qHRJK7lDfF + e1DDsMg/KpKGiILYZ+g2qtVMZSxtp5BZEtfB5qV/IE5kWO+mCIAGpXSZIdbERR6pZUq8GLEe1T9e + +sO6H24w2F19AgMBAAECggEBAId/12187dO6wUPCjumuJA1QrrBnbKdKONyai36uoc1Od4s5QFj7 + +hEIeS7rbGNYQuBvnkgusAbzkW0FIpxpHce3EJez/emux6pEOKoP77BwMt9gy+txyu0+BHi91FQg + AGvrnQDO5EYVY4Cz/WjOsJzKu8zVLg+DS0Toa2qRFwmUe9mVAXPNOCZ3Oae/Q6tCDsaINNw0fmjj + jn6uohPbS+n6xENG3FkQXB36getXy310xTGED2J27cmAQH6gLR6Kl2iROzNPbbpBqbuemI9kbcld + EwBS1jRfZWeaPstYA1niVrE9UgUBzemnoh4TDkG076sYthHMr5QFGjPswnwtJ4ECgYEA0sURQ5+v + baH4tdaemI3qpnknXTlzSpuZZmAoyvY0Id0mlduwKwmZ3Y5989wHfnnhFfyNO4IkTKjI2Wp97qP5 + 4eqUNpA7FtNU7KUzMcFDTtwtNZuRYMrKlqo2lLbA+gVrAYpYZFL4b7tcwtX4DnYorDsmude6W8sG + 4Mx2VdFJC9UCgYEAzjsdXCYH5doWUHb0dvn9ID7IikffEMRM720MRjrnnnVbpzx6ACntkPDNZg7p + TRE/mx7iBz81ZaUWE+V0wd0JvCHEdpAz3mksyvDFhU4Bgs6xzf2pSul5muhsx3hHcvvPezz5Bnxs + faJlzkxfwotyGmvWN15GA/pyfsZjsbbTpwkCgYAO6NnbysQCIV8SnegCKqfatt9N/O5m7LLhRxQb + p2bwrlC4cZ34rWkw/w9x3LK7A6wkfgUPnJkswxPSLXJTG05l6M4rPfCwIKr1Qopojp9QSMr569NQ + 4YeLOOc7heIIzbFQHpU6I5Rncv2Q2sn9W+ZsqJKIuvX34FjQNiZ406EzMQKBgHSxOGS61D84DuZK + 2Ps1awhC3kB4eHzJRms3vflDPWoJJ+pSKwpKrzUTPHXiPBqyhtYkPGszVeiE6CAr9sv3YZnFVaBs + 6hyQUJsob+uE/w/gGvXe8VsFDx0bJOodYfhrCbTHBHWqE81nBcocpxayxsayfAzqWB3KKd0YLrMR + K2PZAoGAcZa8915R2m0KZ6HVJUt/JDR85jCbN71kcVDFY2XSFkOJvOdFoHNfRckfLzjq9Y2MSSTV + +QDWbDo2doUQCejJUTaN8nP79tfyir24X5uVPvQaeVoGTKYb+LfUqK0F60lStmjuddIGSZH55y3v + +9XjmxbVERtd1lqgQg3VlmKlEXY= + -----END PRIVATE KEY----- + """; /* * Certificate: @@ -132,20 +126,9 @@ public class TestKeyStoreBasic { public void runTest(String provider) throws Exception { - // load private key - // all keystore types should support private keys - KeySpec spec = new PKCS8EncodedKeySpec( - Base64.getMimeDecoder().decode(PRIVATE_KEY_PKCS8_BASE64)); - PrivateKey privateKey = KeyFactory.getInstance("RSA") - .generatePrivate(spec); - - // load x509 certificate - Certificate cert; - try (InputStream is = new BufferedInputStream( - new ByteArrayInputStream(CERTIFICATE.getBytes()))) { - cert = CertificateFactory.getInstance("X.509") - .generateCertificate(is); - } + PEMDecoder pemDecoder = PEMDecoder.of(); + PrivateKey privateKey = pemDecoder.decode(PRIVATE_KEY_PKCS8_BASE64, PrivateKey.class); + Certificate cert = pemDecoder.decode(CERTIFICATE, X509Certificate.class); int numEntries = 5; String type = null; diff --git a/test/jdk/java/security/cert/CertPathBuilder/selfIssued/DisableRevocation.java b/test/jdk/java/security/cert/CertPathBuilder/selfIssued/DisableRevocation.java index b72550e4c5d..23a0b11d93c 100644 --- a/test/jdk/java/security/cert/CertPathBuilder/selfIssued/DisableRevocation.java +++ b/test/jdk/java/security/cert/CertPathBuilder/selfIssued/DisableRevocation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,11 +36,14 @@ * @run main/othervm DisableRevocation subca * @run main/othervm DisableRevocation subci * @run main/othervm DisableRevocation alice + * @enablePreview * @author Xuelei Fan */ import java.io.*; import java.net.SocketException; +import java.security.DEREncodable; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -143,49 +146,29 @@ public final class DisableRevocation { "G93Dcf0U1JRO77juc61Br5paAy8Bok18Y/MeG7uKgB2MAEJYKhGKbCrfMw==\n" + "-----END CERTIFICATE-----"; + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + private static Set generateTrustAnchors() throws CertificateException { // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + X509Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate a trust anchor TrustAnchor anchor = - new TrustAnchor((X509Certificate)selfSignedCert, null); + new TrustAnchor(selfSignedCert, null); return Collections.singleton(anchor); } private static CertStore generateCertificateStore() throws Exception { - Collection entries = new HashSet(); + Collection entries = new HashSet<>(); // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is; - - is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(subCaCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(topCrlIssuerCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(subCrlIssuerCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); + entries.add(PEM_DECODER.decode(targetCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(subCaCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(topCrlIssuerCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(subCrlIssuerCertStr, X509Certificate.class)); return CertStore.getInstance("Collection", new CollectionCertStoreParameters(entries)); @@ -198,15 +181,16 @@ public final class DisableRevocation { // generate certificate from certificate string CertificateFactory cf = CertificateFactory.getInstance("X.509"); ByteArrayInputStream is = null; + String cert; if (name.equals("subca")) { - is = new ByteArrayInputStream(subCaCertStr.getBytes()); + cert = subCaCertStr; } else if (name.equals("subci")) { - is = new ByteArrayInputStream(subCrlIssuerCertStr.getBytes()); + cert = subCrlIssuerCertStr; } else { - is = new ByteArrayInputStream(targetCertStr.getBytes()); + cert = targetCertStr; } - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(cert, X509Certificate.class); byte[] extVal = target.getExtensionValue("2.5.29.14"); if (extVal != null) { DerInputStream in = new DerInputStream(extVal); @@ -222,19 +206,17 @@ public final class DisableRevocation { private static boolean match(String name, Certificate cert) throws Exception { - X509CertSelector selector = new X509CertSelector(); // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = null; + String newCert; if (name.equals("subca")) { - is = new ByteArrayInputStream(subCaCertStr.getBytes()); + newCert = subCaCertStr; } else if (name.equals("subci")) { - is = new ByteArrayInputStream(subCrlIssuerCertStr.getBytes()); + newCert = subCrlIssuerCertStr; } else { - is = new ByteArrayInputStream(targetCertStr.getBytes()); + newCert = targetCertStr; } - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(newCert, X509Certificate.class); return target.equals(cert); } diff --git a/test/jdk/java/security/cert/CertPathBuilder/selfIssued/KeyUsageMatters.java b/test/jdk/java/security/cert/CertPathBuilder/selfIssued/KeyUsageMatters.java index ec238cb40c9..1343aefa7f3 100644 --- a/test/jdk/java/security/cert/CertPathBuilder/selfIssued/KeyUsageMatters.java +++ b/test/jdk/java/security/cert/CertPathBuilder/selfIssued/KeyUsageMatters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ * @bug 6852744 8133489 * @summary PIT b61: PKI test suite fails because self signed certificates * are being rejected + * @enablePreview * @modules java.base/sun.security.util * @run main/othervm -Djava.security.debug=certpath KeyUsageMatters subca * @run main/othervm -Djava.security.debug=certpath KeyUsageMatters subci @@ -41,6 +42,8 @@ import java.io.*; import java.net.SocketException; +import java.security.DEREncodable; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -66,6 +69,8 @@ import sun.security.util.DerInputStream; */ public final class KeyUsageMatters { + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + // the trust anchor static String selfSignedCertStr = "-----BEGIN CERTIFICATE-----\n" + @@ -179,57 +184,30 @@ public final class KeyUsageMatters { private static Set generateTrustAnchors() throws CertificateException { - // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = - new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + // generate certificate from cert string + X509Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate a trust anchor TrustAnchor anchor = - new TrustAnchor((X509Certificate)selfSignedCert, null); + new TrustAnchor(selfSignedCert, null); return Collections.singleton(anchor); } private static CertStore generateCertificateStore() throws Exception { - Collection entries = new HashSet(); + Collection entries = new HashSet<>(); - // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is; - - is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(subCaCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(topCrlIssuerCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); - - is = new ByteArrayInputStream(subCrlIssuerCertStr.getBytes()); - cert = cf.generateCertificate(is); - entries.add(cert); - - // generate CRL from CRL string - is = new ByteArrayInputStream(topCrlStr.getBytes()); - Collection mixes = cf.generateCRLs(is); - entries.addAll(mixes); - - is = new ByteArrayInputStream(subCrlStr.getBytes()); - mixes = cf.generateCRLs(is); - entries.addAll(mixes); + // Decode and add certificates + entries.add(PEM_DECODER.decode(targetCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(subCaCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(topCrlIssuerCertStr, X509Certificate.class)); + entries.add(PEM_DECODER.decode(subCrlIssuerCertStr, X509Certificate.class)); + // Decode and add CRLs + entries.add(PEM_DECODER.decode(topCrlStr, X509CRL.class)); + entries.add(PEM_DECODER.decode(subCrlStr, X509CRL.class)); return CertStore.getInstance("Collection", new CollectionCertStoreParameters(entries)); } @@ -239,17 +217,16 @@ public final class KeyUsageMatters { X509CertSelector selector = new X509CertSelector(); // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = null; + String cert; if (name.equals("subca")) { - is = new ByteArrayInputStream(subCaCertStr.getBytes()); + cert = subCaCertStr; } else if (name.equals("subci")) { - is = new ByteArrayInputStream(subCrlIssuerCertStr.getBytes()); + cert = subCrlIssuerCertStr; } else { - is = new ByteArrayInputStream(targetCertStr.getBytes()); + cert = targetCertStr; } - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(cert, X509Certificate.class); byte[] extVal = target.getExtensionValue("2.5.29.14"); if (extVal != null) { DerInputStream in = new DerInputStream(extVal); @@ -263,21 +240,18 @@ public final class KeyUsageMatters { return selector; } - private static boolean match(String name, Certificate cert) - throws Exception { - X509CertSelector selector = new X509CertSelector(); + private static boolean match(String name, Certificate cert) { // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = null; + String newCert; if (name.equals("subca")) { - is = new ByteArrayInputStream(subCaCertStr.getBytes()); + newCert = subCaCertStr; } else if (name.equals("subci")) { - is = new ByteArrayInputStream(subCrlIssuerCertStr.getBytes()); + newCert = subCrlIssuerCertStr; } else { - is = new ByteArrayInputStream(targetCertStr.getBytes()); + newCert = targetCertStr; } - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(newCert, X509Certificate.class); return target.equals(cert); } diff --git a/test/jdk/java/security/cert/CertPathValidator/OCSP/FailoverToCRL.java b/test/jdk/java/security/cert/CertPathValidator/OCSP/FailoverToCRL.java index d1e4e8c6a29..2232ae06711 100644 --- a/test/jdk/java/security/cert/CertPathValidator/OCSP/FailoverToCRL.java +++ b/test/jdk/java/security/cert/CertPathValidator/OCSP/FailoverToCRL.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ * @bug 6383095 * @summary CRL revoked certificate failures masked by OCSP failures * @run main/othervm FailoverToCRL + * @enablePreview * @author Xuelei Fan */ @@ -136,11 +137,14 @@ import java.io.*; import java.net.SocketException; +import java.security.DEREncodable; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; import java.security.InvalidAlgorithmParameterException; import java.security.cert.CertPathValidatorException.BasicReason; +import java.util.Collections; public class FailoverToCRL { @@ -193,32 +197,29 @@ public class FailoverToCRL { "-----END X509 CRL-----"; + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + private static CertPath generateCertificatePath() - throws CertificateException { + throws CertificateException, IOException { // generate certificate from cert strings CertificateFactory cf = CertificateFactory.getInstance("X.509"); ByteArrayInputStream is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate targetCert = cf.generateCertificate(is); // generate certification path - List list = Arrays.asList(new Certificate[] {targetCert}); + List list = Collections.singletonList(PEM_DECODER.decode + (is, X509Certificate.class)); return cf.generateCertPath(list); } - private static Set generateTrustAnchors() - throws CertificateException { + private static Set generateTrustAnchors() { // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(trusedCertStr.getBytes()); - Certificate trusedCert = cf.generateCertificate(is); + X509Certificate trustedCert = PEM_DECODER.decode(trusedCertStr, X509Certificate.class); // generate a trust anchor - TrustAnchor anchor = new TrustAnchor((X509Certificate)trusedCert, null); + TrustAnchor anchor = new TrustAnchor(trustedCert, null); return Collections.singleton(anchor); } @@ -231,7 +232,10 @@ public class FailoverToCRL { new ByteArrayInputStream(crlStr.getBytes()); // generate a cert store - Collection crls = cf.generateCRLs(is); + Collection crls = new HashSet<>(); + + crls.add(PEM_DECODER.decode(crlStr, X509CRL.class)); + return CertStore.getInstance("Collection", new CollectionCertStoreParameters(crls)); } diff --git a/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevel.java b/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevel.java index 9a21ae2de0d..947f0e0b485 100644 --- a/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevel.java +++ b/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,11 +33,14 @@ * @bug 6720721 * @summary CRL check with circular depency support needed * @run main/othervm CircularCRLOneLevel + * @enablePreview * @author Xuelei Fan */ import java.io.*; import java.net.SocketException; +import java.security.DEREncodable; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -107,22 +110,19 @@ public class CircularCRLOneLevel { "oKLrE9+yCOkYUOpiRlz43/3vkEL5hjIKMcDSZnPKBZi1h16Yj2hPe9GMibNip54=\n" + "-----END X509 CRL-----"; + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + private static CertPath generateCertificatePath() throws CertificateException { // generate certificate from cert strings CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is; + Certificate targetCert = PEM_DECODER.decode(targetCertStr, X509Certificate.class); - is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate targetCert = cf.generateCertificate(is); - - is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate certification path - List list = Arrays.asList(new Certificate[] { - targetCert, selfSignedCert}); + List list = Arrays.asList(targetCert, selfSignedCert); return cf.generateCertPath(list); } @@ -130,35 +130,21 @@ public class CircularCRLOneLevel { private static Set generateTrustAnchors() throws CertificateException { // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + X509Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate a trust anchor TrustAnchor anchor = - new TrustAnchor((X509Certificate)selfSignedCert, null); + new TrustAnchor(selfSignedCert, null); return Collections.singleton(anchor); } private static CertStore generateCertificateStore() throws Exception { - // generate CRL from CRL string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(crlStr.getBytes()); // generate a cert store - Collection crls = cf.generateCRLs(is); - - is = new ByteArrayInputStream(crlIssuerCertStr.getBytes()); - Collection certs = cf.generateCertificates(is); - - Collection entries = new HashSet(); - entries.addAll(crls); - entries.addAll(certs); + Collection entries = new HashSet<>(); + entries.add(PEM_DECODER.decode(crlStr, X509CRL.class)); + entries.add(PEM_DECODER.decode(crlIssuerCertStr, X509Certificate.class)); return CertStore.getInstance("Collection", new CollectionCertStoreParameters(entries)); diff --git a/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevelRevoked.java b/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevelRevoked.java index 944483683ba..251883d4e51 100644 --- a/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevelRevoked.java +++ b/test/jdk/java/security/cert/CertPathValidator/indirectCRL/CircularCRLOneLevelRevoked.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,11 +33,14 @@ * @bug 6720721 * @summary CRL check with circular depency support needed * @run main/othervm CircularCRLOneLevelRevoked + * @enablePreview * @author Xuelei Fan */ import java.io.*; import java.net.SocketException; +import java.security.DEREncodable; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -108,22 +111,19 @@ public class CircularCRLOneLevelRevoked { "oKLrE9+yCOkYUOpiRlz43/3vkEL5hjIKMcDSZnPKBZi1h16Yj2hPe9GMibNip54=\n" + "-----END X509 CRL-----"; + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + private static CertPath generateCertificatePath() throws CertificateException { // generate certificate from cert strings CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is; + Certificate targetCert = PEM_DECODER.decode(targetCertStr, X509Certificate.class); - is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate targetCert = cf.generateCertificate(is); - - is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate certification path - List list = Arrays.asList(new Certificate[] { - targetCert, selfSignedCert}); + List list = Arrays.asList(targetCert, selfSignedCert); return cf.generateCertPath(list); } @@ -131,35 +131,20 @@ public class CircularCRLOneLevelRevoked { private static Set generateTrustAnchors() throws CertificateException { // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + X509Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate a trust anchor TrustAnchor anchor = - new TrustAnchor((X509Certificate)selfSignedCert, null); + new TrustAnchor(selfSignedCert, null); return Collections.singleton(anchor); } private static CertStore generateCertificateStore() throws Exception { // generate CRL from CRL string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(crlStr.getBytes()); - - // generate a cert store - Collection crls = cf.generateCRLs(is); - - is = new ByteArrayInputStream(crlIssuerCertStr.getBytes()); - Collection certs = cf.generateCertificates(is); - - Collection entries = new HashSet(); - entries.addAll(crls); - entries.addAll(certs); + Collection entries = new HashSet<>(); + entries.add(PEM_DECODER.decode(crlStr, X509CRL.class)); + entries.add(PEM_DECODER.decode(crlIssuerCertStr, X509Certificate.class)); return CertStore.getInstance("Collection", new CollectionCertStoreParameters(entries)); diff --git a/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithRID.java b/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithRID.java index 34a15287f2d..d7dcfc6b6d5 100644 --- a/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithRID.java +++ b/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithRID.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,13 @@ * * @bug 6845286 * @summary Add regression test for name constraints + * @enablePreview * @author Xuelei Fan */ import java.io.*; import java.net.SocketException; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -90,25 +92,21 @@ public class NameConstraintsWithRID { "FbcNIaCtg8blO5ImdOz5hAi+NuY=\n" + "-----END CERTIFICATE-----"; + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + private static CertPath generateCertificatePath() throws CertificateException { // generate certificate from cert strings CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is; + Certificate targetCert = PEM_DECODER.decode(targetCertStr, X509Certificate.class); - is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate targetCert = cf.generateCertificate(is); + Certificate subCaCert = PEM_DECODER.decode(subCaCertStr, X509Certificate.class); - is = new ByteArrayInputStream(subCaCertStr.getBytes()); - Certificate subCaCert = cf.generateCertificate(is); - - is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate certification path - List list = Arrays.asList(new Certificate[] { - targetCert, subCaCert, selfSignedCert}); + List list = Arrays.asList(targetCert, subCaCert, selfSignedCert); return cf.generateCertPath(list); } @@ -116,15 +114,11 @@ public class NameConstraintsWithRID { private static Set generateTrustAnchors() throws CertificateException { // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + X509Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate a trust anchor TrustAnchor anchor = - new TrustAnchor((X509Certificate)selfSignedCert, null); + new TrustAnchor(selfSignedCert, null); return Collections.singleton(anchor); } diff --git a/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithUnexpectedRID.java b/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithUnexpectedRID.java index a493d6c7324..333e9b19f30 100644 --- a/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithUnexpectedRID.java +++ b/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithUnexpectedRID.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,13 @@ * * @bug 6845286 * @summary Add regression test for name constraints + * @enablePreview * @author Xuelei Fan */ import java.io.*; import java.net.SocketException; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -90,41 +92,40 @@ public class NameConstraintsWithUnexpectedRID { "dcVScVdLUDeqE/3f+5yt1JPRuA==\n" + "-----END CERTIFICATE-----"; + private static final PEMDecoder PEM_DECODER = PEMDecoder.of() + ; private static CertPath generateCertificatePath() - throws CertificateException { + throws CertificateException, IOException { // generate certificate from cert strings CertificateFactory cf = CertificateFactory.getInstance("X.509"); ByteArrayInputStream is; is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate targetCert = cf.generateCertificate(is); + Certificate targetCert = PEM_DECODER.decode(is, X509Certificate.class); is = new ByteArrayInputStream(subCaCertStr.getBytes()); - Certificate subCaCert = cf.generateCertificate(is); + Certificate subCaCert = PEM_DECODER.decode(is, X509Certificate.class); is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + Certificate selfSignedCert = PEM_DECODER.decode(is, X509Certificate.class); // generate certification path - List list = Arrays.asList(new Certificate[] { - targetCert, subCaCert, selfSignedCert}); + List list = Arrays.asList(targetCert, subCaCert, selfSignedCert); return cf.generateCertPath(list); } private static Set generateTrustAnchors() - throws CertificateException { + throws IOException { // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + X509Certificate selfSignedCert = PEM_DECODER.decode(is, X509Certificate.class);; // generate a trust anchor TrustAnchor anchor = - new TrustAnchor((X509Certificate)selfSignedCert, null); + new TrustAnchor(selfSignedCert, null); return Collections.singleton(anchor); } diff --git a/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithoutRID.java b/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithoutRID.java index 0d11d767625..63b4f921e0e 100644 --- a/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithoutRID.java +++ b/test/jdk/java/security/cert/CertPathValidator/nameConstraints/NameConstraintsWithoutRID.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,13 @@ * * @bug 6845286 * @summary Add regression test for name constraints + * @enablePreview * @author Xuelei Fan */ import java.io.*; import java.net.SocketException; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -90,25 +92,21 @@ public class NameConstraintsWithoutRID { "/A==\n" + "-----END CERTIFICATE-----"; + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + private static CertPath generateCertificatePath() throws CertificateException { // generate certificate from cert strings CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is; + Certificate targetCert = PEM_DECODER.decode(targetCertStr, X509Certificate.class); - is = new ByteArrayInputStream(targetCertStr.getBytes()); - Certificate targetCert = cf.generateCertificate(is); + Certificate subCaCert = PEM_DECODER.decode(subCaCertStr, X509Certificate.class); - is = new ByteArrayInputStream(subCaCertStr.getBytes()); - Certificate subCaCert = cf.generateCertificate(is); - - is = new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate certification path - List list = Arrays.asList(new Certificate[] { - targetCert, subCaCert, selfSignedCert}); + List list = Arrays.asList(targetCert, subCaCert, selfSignedCert); return cf.generateCertPath(list); } @@ -116,15 +114,11 @@ public class NameConstraintsWithoutRID { private static Set generateTrustAnchors() throws CertificateException { // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(selfSignedCertStr.getBytes()); - Certificate selfSignedCert = cf.generateCertificate(is); + X509Certificate selfSignedCert = PEM_DECODER.decode(selfSignedCertStr, X509Certificate.class); // generate a trust anchor TrustAnchor anchor = - new TrustAnchor((X509Certificate)selfSignedCert, null); + new TrustAnchor(selfSignedCert, null); return Collections.singleton(anchor); } diff --git a/test/jdk/java/security/cert/CertPathValidator/trustAnchor/ValWithAnchorByName.java b/test/jdk/java/security/cert/CertPathValidator/trustAnchor/ValWithAnchorByName.java index c57abdf243d..58d3c37975a 100644 --- a/test/jdk/java/security/cert/CertPathValidator/trustAnchor/ValWithAnchorByName.java +++ b/test/jdk/java/security/cert/CertPathValidator/trustAnchor/ValWithAnchorByName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,10 +26,13 @@ * @bug 8132926 * @summary PKIXParameters built with public key form of TrustAnchor causes * NPE during cert path building/validation + * @enablePreview * @run main ValWithAnchorByName */ import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.security.PEMDecoder; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.CertPath; @@ -232,9 +235,10 @@ public class ValWithAnchorByName { public static void main(String[] args) throws Exception { TrustAnchor anchor; CertificateFactory cf = CertificateFactory.getInstance("X.509"); - X509Certificate rootCert = generateCertificate(cf, ROOT_CA_CERT); - X509Certificate eeCert = generateCertificate(cf, EE_CERT); - X509Certificate intCaCert = generateCertificate(cf, INT_CA_CERT); + PEMDecoder pemDecoder = PEMDecoder.of(); + X509Certificate rootCert = pemDecoder.decode(ROOT_CA_CERT, X509Certificate.class); + X509Certificate eeCert = pemDecoder.decode(EE_CERT, X509Certificate.class); + X509Certificate intCaCert = pemDecoder.decode(INT_CA_CERT, X509Certificate.class); List certList = new ArrayList() {{ add(eeCert); add(intCaCert); @@ -283,10 +287,4 @@ public class ValWithAnchorByName { validator.validate(path, params); } - - private static X509Certificate generateCertificate(CertificateFactory cf, - String encoded) throws CertificateException { - ByteArrayInputStream is = new ByteArrayInputStream(encoded.getBytes()); - return (X509Certificate)cf.generateCertificate(is); - } } diff --git a/test/jdk/javax/net/ssl/TLSCommon/TLSTest.java b/test/jdk/javax/net/ssl/TLSCommon/TLSTest.java index 1b3aef8b0fe..6aec08deedd 100644 --- a/test/jdk/javax/net/ssl/TLSCommon/TLSTest.java +++ b/test/jdk/javax/net/ssl/TLSCommon/TLSTest.java @@ -25,12 +25,10 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.InetSocketAddress; -import java.security.KeyFactory; -import java.security.KeyStore; -import java.security.PrivateKey; -import java.security.Security; +import java.security.*; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; import java.util.concurrent.CountDownLatch; @@ -49,6 +47,7 @@ import javax.net.ssl.TrustManagerFactory; /* * @test * @bug 8205111 + * @enablePreview * @summary Test TLS with different types of supported keys. * @run main/othervm -Djavax.net.debug=ssl,handshake TLSTest TLSv1.3 rsa_pkcs1_sha1 TLS_AES_128_GCM_SHA256 * @run main/othervm -Djavax.net.debug=ssl,handshake TLSTest TLSv1.3 rsa_pkcs1_sha256 TLS_AES_128_GCM_SHA256 @@ -315,34 +314,27 @@ public class TLSTest { String trustedCertStr, String keyCertStr, String privateKey, String keyType) throws Exception { - // Generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); + PEMDecoder pemDecoder = PEMDecoder.of(); // Create a key store KeyStore ts = KeyStore.getInstance("PKCS12"); KeyStore ks = KeyStore.getInstance("PKCS12"); ts.load(null, null); ks.load(null, null); - char passphrase[] = "passphrase".toCharArray(); + char[] passphrase = "passphrase".toCharArray(); // Import the trusted cert ts.setCertificateEntry("trusted-cert-" + keyType, - cf.generateCertificate(new ByteArrayInputStream( - trustedCertStr.getBytes()))); + pemDecoder.decode(trustedCertStr, X509Certificate.class)); boolean hasKeyMaterials = keyCertStr != null && privateKey != null; if (hasKeyMaterials) { // Generate the private key. - PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec( - Base64.getMimeDecoder().decode(privateKey)); - KeyFactory kf = KeyFactory.getInstance(keyType); - PrivateKey priKey = kf.generatePrivate(priKeySpec); - + PrivateKey priKey = pemDecoder.decode(privateKey, PrivateKey.class); // Generate certificate chain - Certificate keyCert = cf.generateCertificate( - new ByteArrayInputStream(keyCertStr.getBytes())); - Certificate[] chain = new Certificate[]{keyCert}; + Certificate keyCert =pemDecoder.decode(keyCertStr, X509Certificate.class); + Certificate[] chain = new Certificate[]{keyCert}; // Import the key entry. ks.setKeyEntry("cert-" + keyType, priKey, passphrase, chain); @@ -422,9 +414,11 @@ public class TLSTest { // // Private key. // - "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgVHQp1EG3PgASz7Nu\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgVHQp1EG3PgASz7Nu\n" + "uv9dvFLxsr3qfgC6CgZU4xorLbChRANCAARdc4XgHchFHqyzVKlx8Nlpl5zFSZyk\n" - + "jE3qvm5PVrGRgTmcyXBLcq9fPOyQEbq59Lieyd2C1DZTLh2klmfIRMRr" + + "jE3qvm5PVrGRgTmcyXBLcq9fPOyQEbq59Lieyd2C1DZTLh2klmfIRMRr\n" + + "-----END PRIVATE KEY-----" ), ecdsa_sha1( "EC", @@ -449,9 +443,11 @@ public class TLSTest { // // Private key. // - "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgyJJNI8eqYVKcCshG\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgyJJNI8eqYVKcCshG\n" + "t89mrRZ1jMeD8fAbgijAG7WfgtGhRANCAAR6LMO6lBGdmpo87XTjtA2vsXvq1kd8\n" - + "ktaIGEdCrA8BKk0A30LW8SY5Be29ScYu8d+IjQ3X/fpblrVh/64pOgQz" + + "ktaIGEdCrA8BKk0A30LW8SY5Be29ScYu8d+IjQ3X/fpblrVh/64pOgQz\n" + + "-----END PRIVATE KEY-----" ), rsa_pss_pss_sha256( "RSASSA-PSS", @@ -487,7 +483,8 @@ public class TLSTest { // // Private key. // - "MIIEuwIBADALBgkqhkiG9w0BAQoEggSnMIIEowIBAAKCAQEApfK+EK4NuwWFDv9V\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEuwIBADALBgkqhkiG9w0BAQoEggSnMIIEowIBAAKCAQEApfK+EK4NuwWFDv9V\n" + "WtiMfEDxszf5b85irz+RX9uqLzVuL0VMevB8wIYYlrXJfj8C0myaia3hJE5ZXuz5\n" + "0QMqW8t3zu2QCtGN2Ih6rmgYO3fu2BYYR8L/IBtJWXMgNAZFxSR6nau+qmq9MRwu\n" + "g1Xs15tCt5nHHsphrRUfQc1pgI/uw2LEsL7U0O1jaEJn9HHQzEjO9SMGk8CML09s\n" @@ -512,7 +509,8 @@ public class TLSTest { + "ofaiiWffsaytVvotmT6+atElvAMbAua42V+nAQKBgHtIn3mYMHLriYGhQzpkFEA2\n" + "8YcAMlKppueOMAKVy8nLu2r3MidmLAhMiKJQKG45I3Yg0/t/25tXLiOPJlwrOebh\n" + "xQqUBI/JUOIpGAEnr48jhOXnCS+i+z294G5U/RgjXrlR4bCPvrtCmwzWwe0h79w2\n" - + "Q2hO5ZTW6UD9CVA85whf" + + "Q2hO5ZTW6UD9CVA85whf\n" + + "-----END PRIVATE KEY-----" ), rsa_pss_rsae_sha256( "RSA", @@ -579,7 +577,8 @@ public class TLSTest { // // Private key. // - "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDD8nVjgSWSwVmP\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDD8nVjgSWSwVmP\n" + "6wHXl+8cjESonTvCqSU1xLiySoqOH+/u5kTcg5uk7J9qr3sDpLLVmnB7lITrv3cx\n" + "X7GufAC2lrWPhKdY2/BTpCGP4Twg/sC7Z2MnAPNabmPh+BhpQA3PllULdnsV/aEK\n" + "eP3dFF+piJmSDKwowLhDc0wdD1t15jDk812UnNQugd465g0g6z57m3MFX1veUrya\n" @@ -604,7 +603,8 @@ public class TLSTest { + "j+4Sinm9qkHWc7ixKZdocRQjCriHrENSMy/FBNBBAoGAfi0ZGZxyIeik5qUBy+P+\n" + "+ce6n5/1kdczPTpzJae+eCPqg3VQuGz3NutZ2tdx1IMcYSeMfiB6xLMWSKSraxEi\n" + "2BCtdPcyUau8w12BXwn+hyK2u79OhHbexisrJUOVXE+yA8C/k0r0SrZHS0PHYZjj\n" - + "xkWyr/6XyeGP/vX8WvfF2eM=" + + "xkWyr/6XyeGP/vX8WvfF2eM=\n" + + "-----END PRIVATE KEY-----" ), rsa_pkcs1_sha1( "RSA", @@ -638,7 +638,8 @@ public class TLSTest { // // Private key. // - "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQClt40e4e/lW5S1\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQClt40e4e/lW5S1\n" + "4zFrkZrg3ZAOeYaTWkAa6EVUbtGiH/eRTeAnODRQey9zQFRY8cM6izBheJbfPN9r\n" + "ZN1SfL8R4XfHHDXS9udX4zWIOcrAMQxoK2KEFMcJ1F3cMFGQ1vIM+A4FTjObHl9m\n" + "Et6Pq0LQTPlX7JJw+1R7REJYSkxFm7h/lsr/8CScVxF4SZtO6/EMPoG2kSPylQlq\n" @@ -663,7 +664,8 @@ public class TLSTest { + "7qCBIYk8Nk9F7v+7M69NAfK97Dd5gzRsyL3sbFECgYBxz2nCKeBv2frxtD36nlY1\n" + "bDhZv1Asyxq0yt9GSkVWeHnSIFHfwBu3w6qW7+qdlQizu+6GZ3wq9dyyrXUA4zPU\n" + "QnYWYYk30p4uqLXFCrnscVOm3v7f51oEYVoEKjqGl2C/BTy7iSgCRd+cp6y34DsV\n" - + "PsRyQCB/QarxsDNAuioguQ==" + + "PsRyQCB/QarxsDNAuioguQ==\n" + + "-----END PRIVATE KEY-----" ), rsa_pkcs1_sha256( "RSA", @@ -697,7 +699,8 @@ public class TLSTest { // // Private key. // - "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDaMM8YyiBz12rb\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDaMM8YyiBz12rb\n" + "Dlv4Uept9oY+iRGbI5uJTzL+X92qQzn0hX6qPxVBQjg22l0JNavXrzXbPgCNeuTk\n" + "cgGsQJ9Bsc9RybWuZ7lhVnRbFXT5R/KEOasbAMuGTEapzeE6FGuUXbB1d5R+MjOG\n" + "9L35L/jTX763+O+r5yoUXUEefNg676WduL+j3k6qjwyXCJGqDfHLd81F+peTsNbL\n" @@ -722,7 +725,8 @@ public class TLSTest { + "QFuQIMdYm9dJLZnOkxLXrOZoHeui0poX2Ya6FawhAoGAAI/QCyDbuvnJzGmjSbvl\n" + "5Ndr9lNAansCXaUzXuVLp6dD6PnB8HVCE8tdETZrcXseyTBeltaxAhj+tCybJvDO\n" + "sV8UmPR0w9ibExmUIVGX5BpoRlB/KWxEG3ar/wJbUZVZ2oSdIAZvCvdbN956SLDg\n" - + "Pg5M5wrRqs71s2EiIJd0HrU=" + + "Pg5M5wrRqs71s2EiIJd0HrU=\n" + + "-----END PRIVATE KEY-----" ), rsa_pkcs1_sha384( "RSA", @@ -756,7 +760,8 @@ public class TLSTest { // // Private key. // - "MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC8iCdCvecakzP9\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC8iCdCvecakzP9\n" + "BiSyTav5KmptGGI4Wejpz+TImZK7xNDTxFXwB3wJqWcAOQeU8GhOYKpjm/1o66ly\n" + "XX6MJ7t7iJ3Pggmy5jUpFT9SPiVhWo7VbvwfEiAp3eNtKAD3rbyUno2G/o6rIDwo\n" + "IicpugjwV0OZ1FXO74UKYYosG1RWc486TMzO22SuDujJSgJqBiLNktjyWFQDxF+D\n" @@ -781,7 +786,8 @@ public class TLSTest { + "jFP4YVofTd3ltSFI3x5pVZA2a88rE49gNkGWU9mReD0CgYEAkXoH6Sn+Elp6Oa+k\n" + "jF5jQ14RNH4SoBSFR8mY6jOIGzINTWiMCaBMiPusjkrq7SfgIM3iEeJWmgghlZdl\n" + "0ynmwThnfQnEEtsvpSMteI11eVrZrMGVZOhgALxf4zcmQCpPVQicNQLkocuAZSAo\n" - + "mzO1FvNUBCMZb/5PQdiFw3pMEyQ=" + + "mzO1FvNUBCMZb/5PQdiFw3pMEyQ=\n" + + "-----END PRIVATE KEY-----" ), rsa_pkcs1_sha512( "RSA", @@ -815,7 +821,8 @@ public class TLSTest { // // Private key. // - "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDaF4fhwBKMatza\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDaF4fhwBKMatza\n" + "KvqfimqhBLNPmaGVHz+IX/let8hJJud9k1mc+TZxNBIMPwc1tFP1u+2shhAhOsaB\n" + "RgoFPC3DJywzq/vr5MVaw8EdZufxufJ4awXGE1eytFdliKoPCiI8T4nxpNAy3haU\n" + "0FpmO3/0ERRjJPJnxzndZZoT1pITexDKe6Vnyu6GRz2FvJsQ7VR8BARYhj6dHRT1\n" @@ -840,7 +847,8 @@ public class TLSTest { + "K86SqEklQKYXAnUmZiESGQgjSn68llowSwTznZPhAoGBAMH2scnvGRbPmzm91pyY\n" + "1loeejtO8qWQsRFaSZyqtlW1c/zHaotTU1XhmVxnliv/HCb3t7qlssb3snCTUY9R\n" + "mcyMWbaTIBMNfW2IspX4hhkLuCwzhskl/08/8GJwkOEAo3q/TYigyFPVEwq8R9uq\n" - + "l0uEakWMhPrvr/N1FT1KXo6S" + + "l0uEakWMhPrvr/N1FT1KXo6S\n" + + "-----END PRIVATE KEY-----" ), ecdsa_secp384r1_sha384( "EC", @@ -867,10 +875,12 @@ public class TLSTest { // // Private key. // - "MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCpxyn85BJ+JFfT5U7U\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCpxyn85BJ+JFfT5U7U\n" + "VY+c8v2oY873YOVussMDiC82VYGKZDZH8D6C6h0b33iCpm2hZANiAAR5esh3fLL/\n" + "SYk81dcZeUxJAS8ilLIMJwopB3ZmbWq3SADUdRIe6V9K3IdQjoOX+ljuJHTA7/Fg\n" - + "haGKuapP5dtU9NYglvbjkt/0YWJH93pTJRupe42D0amdRGzLlmHHgN8=" + + "haGKuapP5dtU9NYglvbjkt/0YWJH93pTJRupe42D0amdRGzLlmHHgN8=\n" + + "-----END PRIVATE KEY-----" ), ecdsa_secp521r1_sha512( "EC", @@ -898,12 +908,14 @@ public class TLSTest { // // Private key. // - "MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAz7qc9msPhSoh0iiT\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAz7qc9msPhSoh0iiT\n" + "Z0146/sLJL5K+JNo2KdKpZOf1mS/egCCbp7lndigL7jr0JnBRIjk+pmeBtIId6mW\n" + "MrcvF4KhgYkDgYYABACzWmHHe0hLD4bYcDyvhl+VDdD/mj1TnN4XPv0+woQ9KwTX\n" + "GEZtTJYNqwFJ5Qo69WyWLm9jLSF07XfZDs2X5AA1QQBFjZrHkRFcgkFj1L49F0/s\n" + "4bh+v3rpG/y9oITaDylX02cC1qU3eyTyIIR1VS2G8v1HqeimIR3sXP1IxEY5K7Xw\n" - + "Vg==" + + "Vg==\n" + + "-----END PRIVATE KEY-----" ), rsa_pss_rsae_sha384( "RSA", @@ -970,7 +982,8 @@ public class TLSTest { // // Private key. // - "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCe7chGqR+iYpXW\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCe7chGqR+iYpXW\n" + "HDWK0LZVff4XDc/dS0CloNQr6GAa/Gb7p37vkjWStk5BKpRg1SNZtssFNEOXR4ph\n" + "jFf3boUQ7A1i9e+eYJAmbGalwwotY1zxdr5kfaWYxIiMSaPHHwPfe/pnY1RF6lOs\n" + "LlegPw6xxg08LETaU+M9QCJ9EodXDEb19/KwINer/Cduou7TdVDFPYY02lMoj7Wr\n" @@ -995,7 +1008,8 @@ public class TLSTest { + "xd/NBqsx/vHpxxxeekBfu8rhI1h7M7XLBHL4s30CgYEAnmwpLxK36H4fyg3FT5uS\n" + "nCJuWFIP8LvWaPm8iDUJ45flOPbXokoV+UZbe7A+TK6tdyTXtfoM59/IsLtiEp7n\n" + "VuE9osST2ZOTD+l10ukIcjJJgI/Pwjtd36EGXyGftdAtT4sFMRxP4sGSXZodqHrZ\n" - + "T9fE4yY/E4FyzS7yMeoXIyo=" + + "T9fE4yY/E4FyzS7yMeoXIyo=\n" + + "-----END PRIVATE KEY-----" ), rsa_pss_rsae_sha512( "RSA", @@ -1062,7 +1076,8 @@ public class TLSTest { // // Private key. // - "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCyeGmgpaHoXnR\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCyeGmgpaHoXnR\n" + "csuhMhzsoinxDqSCHfJB62g0HuZDpZG3yjlEU9zVTLeuCtWsrQnC0LCaNODjjvE9\n" + "vI1tbY5L7B1pz3JNHrASzituzd3vPNlKjX5fEUG4dBEOIx0UvwTDlf8taL897aLR\n" + "mUHKE29qPV3Xo80M794CdQsUSq/sNQDkE1qFm7MAmznXTS++RUqtofyz4W570KBw\n" @@ -1087,7 +1102,8 @@ public class TLSTest { + "+LAfJE/tRliLHYDfAyRnjoZn2bPZQr8Qroj5+xydAoGACHEc7aoEwZ/z8cnrHuoT\n" + "T0QUw6HNlic5FgK+bZy7SXj9SqJBkWADzRJ/tVDopWT/EiDiGeqNP/uBPYt6i7m2\n" + "SoqCLYdGDIbUFyDQg3zC48IXlHyEF3whx0bg/0hoKs/E/rXuxYIH/10aEwmb0FQO\n" - + "GA3T726uW8XrrTssMkhzixU=" + + "GA3T726uW8XrrTssMkhzixU=\n" + + "-----END PRIVATE KEY-----" ), rsa_pss_pss_sha384( "RSASSA-PSS", @@ -1123,7 +1139,8 @@ public class TLSTest { // // Private key. // - "MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAz+1/SVKdaz83Mcs6\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAz+1/SVKdaz83Mcs6\n" + "RzkuIyZvwDoYCQubniueMJ/mcMSJOIQIxxgxrFCH8cw5jFu5wsb5sPwVdMXwKgnS\n" + "0WHdSHfXDLjYj2Ig7vywtdKzEW3RZdBkL52qlxi29BCREyYhFomHppY7MK+BN4c3\n" + "ipOmdnVw+FoVJfTPuAAoweYRg01A9LCmDDLY0X89U1VLYJ286hzHNHWRWOwVQiKD\n" @@ -1148,7 +1165,8 @@ public class TLSTest { + "MZwdpuKcfsysbPZhnaoBHc5kf6lNBreahd+PfQKBgQDzZHFUndVfI28zn10ZzY8M\n" + "zVeUMn+m1Dhp/e4F0t3XPTWCkwlYI3bk0k5BWHYSdLb2R7gKhTMynxPUb53oeY6P\n" + "Pt/tA+dbjGHPx+v98wOorsD28qH0WG/V1xQdGRA9/dDZtJDolLqNn2B3t0QH9Kco\n" - + "LsJldTLzMQSVP/05BAt6DQ==" + + "LsJldTLzMQSVP/05BAt6DQ==\n" + + "-----END PRIVATE KEY-----" ), rsa_pss_pss_sha512( "RSASSA-PSS", @@ -1184,7 +1202,8 @@ public class TLSTest { // // Private key. // - "MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAxv/aW7ezE+gXt2lI\n" + "-----BEGIN PRIVATE KEY-----\n" + + "MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAxv/aW7ezE+gXt2lI\n" + "PeFSkPQTKIy2IwQ8zO23f8tO/i33XeuyFIUOVZCXMYLO0LW/M7Z1CUBM8iwZHGQP\n" + "4b76S1FyVD91IrETVddjAXx1HBQFTd96XZu1/1CQ1WnVGUwH3uj1CLpP/maTpk58\n" + "BP7BH4QmQLTcJvtPBHcrFISvWlZfN7wvnhI9tufOFc3dn0I/WGFNYTdDilr2r6x7\n" @@ -1209,7 +1228,8 @@ public class TLSTest { + "qckcE14nt7o5rlcHNwLQ0o8h+IHxBnZdXernwQKBgQCunOWvYd7MGlIjpkl6roq7\n" + "MrQ/zaAkUyGsTgBxEu3p5+x2ENG6SukEtHGGDE6TMxlcKdTSohL2lXZX2AkP+eXf\n" + "sF3h66iQ8DrGrYoyCgx3KTx3G+KPfblAqwDMTqj2G5fAeWDwXrpEacpTXiFZvNAn\n" - + "KtqEurWf+mUeJVzLj1x1BA==" + + "KtqEurWf+mUeJVzLj1x1BA==\n" + + "-----END PRIVATE KEY-----" ); private final String keyType; diff --git a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilder.java b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilder.java index 0037ac7bad6..91ea3533cb8 100644 --- a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilder.java +++ b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ * * @bug 6861062 * @summary Disable MD2 support + * @enablePreview * * @run main/othervm CPBuilder trustAnchor_SHA1withRSA_1024 0 true * @run main/othervm CPBuilder trustAnchor_SHA1withRSA_512 0 true @@ -48,14 +49,16 @@ * @author Xuelei Fan */ -import java.io.*; -import java.net.SocketException; +import java.security.DEREncodable; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; public class CPBuilder { + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + // SHA1withRSA 1024 static String trustAnchor_SHA1withRSA_1024 = "-----BEGIN CERTIFICATE-----\n" + @@ -321,35 +324,27 @@ public class CPBuilder { private static Set generateTrustAnchors() throws CertificateException { - // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); + HashSet anchors = new HashSet(); - ByteArrayInputStream is = - new ByteArrayInputStream(trustAnchor_SHA1withRSA_1024.getBytes()); - Certificate cert = cf.generateCertificate(is); - TrustAnchor anchor = new TrustAnchor((X509Certificate)cert, null); + // generate certificate from certificate string + X509Certificate cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_1024, X509Certificate.class); + TrustAnchor anchor = new TrustAnchor(cert, null); anchors.add(anchor); - is = new ByteArrayInputStream(trustAnchor_SHA1withRSA_512.getBytes()); - cert = cf.generateCertificate(is); - anchor = new TrustAnchor((X509Certificate)cert, null); + cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_512, X509Certificate.class); + anchor = new TrustAnchor(cert, null); anchors.add(anchor); return anchors; } private static CertStore generateCertificateStore() throws Exception { - Collection entries = new HashSet(); - - // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); + Collection entries = new HashSet<>(); for (String key : certmap.keySet()) { String certStr = certmap.get(key); - ByteArrayInputStream is = - new ByteArrayInputStream(certStr.getBytes()); - Certificate cert = cf.generateCertificate(is); + DEREncodable cert = PEM_DECODER.decode(certStr, X509Certificate.class); entries.add(cert); } @@ -367,9 +362,7 @@ public class CPBuilder { } // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes()); - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(certStr, X509Certificate.class); selector.setCertificate(target); @@ -386,9 +379,7 @@ public class CPBuilder { } // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes()); - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(certStr, X509Certificate.class); return target.equals(cert); } diff --git a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilderWithMD5.java b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilderWithMD5.java index 9785b270299..036a9634469 100644 --- a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilderWithMD5.java +++ b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPBuilderWithMD5.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ * * @bug 8030829 * @summary Add MD5 to jdk.certpath.disabledAlgorithms security property + * @enablePreview * * @run main/othervm CPBuilderWithMD5 trustAnchor_SHA1withRSA_1024 0 true * @run main/othervm CPBuilderWithMD5 trustAnchor_SHA1withRSA_512 0 true @@ -53,14 +54,15 @@ * certificates used in this test are generated by an updated generate.sh that * replacing MD2 with MD5 algorithm. */ -import java.io.*; -import java.net.SocketException; +import java.security.DEREncodable; +import java.security.PEMDecoder; import java.util.*; -import java.security.Security; import java.security.cert.*; public class CPBuilderWithMD5 { + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + // SHA1withRSA 1024 static String trustAnchor_SHA1withRSA_1024 = "-----BEGIN CERTIFICATE-----\n" + @@ -326,35 +328,30 @@ public class CPBuilderWithMD5 { private static Set generateTrustAnchors() throws CertificateException { - // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); + HashSet anchors = new HashSet(); - ByteArrayInputStream is = - new ByteArrayInputStream(trustAnchor_SHA1withRSA_1024.getBytes()); - Certificate cert = cf.generateCertificate(is); + // generate certificate from certificate string + X509Certificate cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_1024, X509Certificate.class); TrustAnchor anchor = new TrustAnchor((X509Certificate)cert, null); anchors.add(anchor); - is = new ByteArrayInputStream(trustAnchor_SHA1withRSA_512.getBytes()); - cert = cf.generateCertificate(is); - anchor = new TrustAnchor((X509Certificate)cert, null); + cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_512, X509Certificate.class); + anchor = new TrustAnchor(cert, null); anchors.add(anchor); return anchors; } private static CertStore generateCertificateStore() throws Exception { - Collection entries = new HashSet(); + Collection entries = new HashSet<>(); // generate certificate from certificate string CertificateFactory cf = CertificateFactory.getInstance("X.509"); for (String key : certmap.keySet()) { String certStr = certmap.get(key); - ByteArrayInputStream is = - new ByteArrayInputStream(certStr.getBytes()); - Certificate cert = cf.generateCertificate(is); + DEREncodable cert = PEM_DECODER.decode(certStr, X509Certificate.class); entries.add(cert); } @@ -372,9 +369,7 @@ public class CPBuilderWithMD5 { } // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes()); - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(certStr, X509Certificate.class); selector.setCertificate(target); @@ -391,9 +386,7 @@ public class CPBuilderWithMD5 { } // generate certificate from certificate string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes()); - X509Certificate target = (X509Certificate)cf.generateCertificate(is); + X509Certificate target = PEM_DECODER.decode(certStr, X509Certificate.class); return target.equals(cert); } diff --git a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorEndEntity.java b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorEndEntity.java index bd43bde75e4..aa19bc2f0c8 100644 --- a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorEndEntity.java +++ b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorEndEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,12 +31,14 @@ * @summary Disable MD2 support. * New CertPathValidatorException.BasicReason enum constant for * constrained algorithm. + * @enablePreview * @run main/othervm CPValidatorEndEntity * @author Xuelei Fan */ import java.io.*; import java.net.SocketException; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -44,6 +46,8 @@ import java.security.cert.CertPathValidatorException.*; public class CPValidatorEndEntity { + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + // SHA1withRSA 1024 static String trustAnchor_SHA1withRSA_1024 = "-----BEGIN CERTIFICATE-----\n" + @@ -278,38 +282,28 @@ public class CPValidatorEndEntity { private static CertPath generateCertificatePath(String castr, String eestr) throws CertificateException { // generate certificate from cert strings - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is; - - is = new ByteArrayInputStream(castr.getBytes()); - Certificate cacert = cf.generateCertificate(is); - - is = new ByteArrayInputStream(eestr.getBytes()); - Certificate eecert = cf.generateCertificate(is); + Certificate cacert = PEM_DECODER.decode(castr, X509Certificate.class); + Certificate eecert = PEM_DECODER.decode(eestr, X509Certificate.class); // generate certification path List list = Arrays.asList(new Certificate[] { eecert, cacert}); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); return cf.generateCertPath(list); } private static Set generateTrustAnchors() throws CertificateException { - // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); + HashSet anchors = new HashSet(); - ByteArrayInputStream is = - new ByteArrayInputStream(trustAnchor_SHA1withRSA_1024.getBytes()); - Certificate cert = cf.generateCertificate(is); - TrustAnchor anchor = new TrustAnchor((X509Certificate)cert, null); + X509Certificate cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_1024, X509Certificate.class); + TrustAnchor anchor = new TrustAnchor(cert, null); anchors.add(anchor); - is = new ByteArrayInputStream(trustAnchor_SHA1withRSA_512.getBytes()); - cert = cf.generateCertificate(is); - anchor = new TrustAnchor((X509Certificate)cert, null); + cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_512, X509Certificate.class); + anchor = new TrustAnchor(cert, null); anchors.add(anchor); return anchors; diff --git a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorIntermediate.java b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorIntermediate.java index d7d0fe69f23..72dff1694b1 100644 --- a/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorIntermediate.java +++ b/test/jdk/sun/security/provider/certpath/DisabledAlgorithms/CPValidatorIntermediate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,12 +31,12 @@ * @summary Disable MD2 support * new CertPathValidatorException.BasicReason enum constant for * constrained algorithm + * @enablePreview * @run main/othervm CPValidatorIntermediate * @author Xuelei Fan */ -import java.io.*; -import java.net.SocketException; +import java.security.PEMDecoder; import java.util.*; import java.security.Security; import java.security.cert.*; @@ -44,6 +44,8 @@ import java.security.cert.CertPathValidatorException.*; public class CPValidatorIntermediate { + private static final PEMDecoder PEM_DECODER = PEMDecoder.of(); + // SHA1withRSA 1024 static String trustAnchor_SHA1withRSA_1024 = "-----BEGIN CERTIFICATE-----\n" + @@ -183,10 +185,7 @@ public class CPValidatorIntermediate { // generate certificate from cert strings CertificateFactory cf = CertificateFactory.getInstance("X.509"); - ByteArrayInputStream is; - - is = new ByteArrayInputStream(certStr.getBytes()); - Certificate cert = cf.generateCertificate(is); + Certificate cert = PEM_DECODER.decode(certStr, X509Certificate.class); // generate certification path List list = Arrays.asList(new Certificate[] {cert}); @@ -196,19 +195,15 @@ public class CPValidatorIntermediate { private static Set generateTrustAnchors() throws CertificateException { - // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - HashSet anchors = new HashSet(); - ByteArrayInputStream is = - new ByteArrayInputStream(trustAnchor_SHA1withRSA_1024.getBytes()); - Certificate cert = cf.generateCertificate(is); - TrustAnchor anchor = new TrustAnchor((X509Certificate)cert, null); + HashSet anchors = new HashSet(); + // generate certificate from cert string + X509Certificate cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_1024, X509Certificate.class); + TrustAnchor anchor = new TrustAnchor(cert, null); anchors.add(anchor); - is = new ByteArrayInputStream(trustAnchor_SHA1withRSA_512.getBytes()); - cert = cf.generateCertificate(is); - anchor = new TrustAnchor((X509Certificate)cert, null); + cert = PEM_DECODER.decode(trustAnchor_SHA1withRSA_512, X509Certificate.class); + anchor = new TrustAnchor(cert, null); anchors.add(anchor); return anchors; diff --git a/test/jdk/sun/security/ssl/X509TrustManagerImpl/PKIXExtendedTM.java b/test/jdk/sun/security/ssl/X509TrustManagerImpl/PKIXExtendedTM.java index fcc7cbf73f0..28f9f8e1f19 100644 --- a/test/jdk/sun/security/ssl/X509TrustManagerImpl/PKIXExtendedTM.java +++ b/test/jdk/sun/security/ssl/X509TrustManagerImpl/PKIXExtendedTM.java @@ -30,6 +30,7 @@ * @test * @bug 6916074 8170131 * @summary Add support for TLS 1.2 + * @enablePreview * @run main/othervm PKIXExtendedTM 0 * @run main/othervm PKIXExtendedTM 1 * @run main/othervm PKIXExtendedTM 2 @@ -38,12 +39,14 @@ import java.io.*; import javax.net.ssl.*; +import java.security.PEMDecoder; import java.security.Security; import java.security.KeyStore; import java.security.KeyFactory; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.CertPathValidatorException; +import java.security.cert.X509Certificate; import java.security.spec.*; import java.security.interfaces.*; import java.math.BigInteger; @@ -904,7 +907,7 @@ public class PKIXExtendedTM { (byte)0x4f }; - static char passphrase[] = "passphrase".toCharArray(); + static char[] passphrase = "passphrase".toCharArray(); /* * Is the server ready to serve? @@ -999,13 +1002,9 @@ public class PKIXExtendedTM { String keyCertStr, byte[] modulus, byte[] privateExponent, char[] passphrase) throws Exception { + PEMDecoder pemDecoder = PEMDecoder.of(); // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - - ByteArrayInputStream is = - new ByteArrayInputStream(trusedCertStr.getBytes()); - Certificate trusedCert = cf.generateCertificate(is); - is.close(); + Certificate trusedCert = pemDecoder.decode(trusedCertStr, X509Certificate.class); // create a key store KeyStore ks = KeyStore.getInstance("JKS"); @@ -1024,9 +1023,7 @@ public class PKIXExtendedTM { (RSAPrivateKey)kf.generatePrivate(priKeySpec); // generate certificate chain - is = new ByteArrayInputStream(keyCertStr.getBytes()); - Certificate keyCert = cf.generateCertificate(is); - is.close(); + Certificate keyCert = pemDecoder.decode(keyCertStr, X509Certificate.class); Certificate[] chain = new Certificate[2]; chain[0] = keyCert; diff --git a/test/jdk/sun/security/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java b/test/jdk/sun/security/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java index f95aee76dab..13491bebe22 100644 --- a/test/jdk/sun/security/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java +++ b/test/jdk/sun/security/ssl/X509TrustManagerImpl/SunX509ExtendedTM.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,10 +30,13 @@ * @test * @bug 6916074 * @summary Add support for TLS 1.2 + * @enablePreview * @run main/othervm SunX509ExtendedTM */ import java.net.*; +import java.security.PEMDecoder; +import java.security.cert.X509Certificate; import java.util.*; import java.io.*; import javax.net.ssl.*; @@ -997,13 +1000,10 @@ public class SunX509ExtendedTM { String keyCertStr, byte[] modulus, byte[] privateExponent, char[] passphrase) throws Exception { - // generate certificate from cert string - CertificateFactory cf = CertificateFactory.getInstance("X.509"); + PEMDecoder pemDecoder = PEMDecoder.of(); - ByteArrayInputStream is = - new ByteArrayInputStream(trusedCertStr.getBytes()); - Certificate trusedCert = cf.generateCertificate(is); - is.close(); + // generate certificate from cert string + Certificate trusedCert = pemDecoder.decode(trusedCertStr, X509Certificate.class); // create a key store KeyStore ks = KeyStore.getInstance("JKS"); @@ -1022,9 +1022,7 @@ public class SunX509ExtendedTM { (RSAPrivateKey)kf.generatePrivate(priKeySpec); // generate certificate chain - is = new ByteArrayInputStream(keyCertStr.getBytes()); - Certificate keyCert = cf.generateCertificate(is); - is.close(); + Certificate keyCert = pemDecoder.decode(keyCertStr, X509Certificate.class); Certificate[] chain = new Certificate[2]; chain[0] = keyCert; From 0555f6228c59c6739b8b824d64eb6c1545a5520a Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Tue, 4 Nov 2025 19:44:04 +0000 Subject: [PATCH 020/512] 8371094: --mac-signing-key-user-name no longer works Reviewed-by: almatvee --- .../jdk/jpackage/internal/SigningIdentityBuilder.java | 4 +++- test/jdk/tools/jpackage/macosx/MacSignTest.java | 7 +++++++ test/jdk/tools/jpackage/macosx/base/SigningBase.java | 4 +++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/SigningIdentityBuilder.java b/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/SigningIdentityBuilder.java index 119d7797453..bf8f1519fe1 100644 --- a/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/SigningIdentityBuilder.java +++ b/src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/SigningIdentityBuilder.java @@ -113,14 +113,16 @@ final class SigningIdentityBuilder { final var signingIdentityNames = certificateSelector.signingIdentities(); + // Look up for the exact match. var matchingCertificates = mappedCertficates.stream().filter(e -> { return signingIdentityNames.contains(e.getKey()); }).map(Map.Entry::getValue).toList(); if (matchingCertificates.isEmpty()) { + // No exact matches found, look up for substrings. matchingCertificates = mappedCertficates.stream().filter(e -> { return signingIdentityNames.stream().anyMatch(filter -> { - return filter.startsWith(e.getKey()); + return e.getKey().startsWith(filter); }); }).map(Map.Entry::getValue).toList(); } diff --git a/test/jdk/tools/jpackage/macosx/MacSignTest.java b/test/jdk/tools/jpackage/macosx/MacSignTest.java index f5f8b3825cc..014fbc84548 100644 --- a/test/jdk/tools/jpackage/macosx/MacSignTest.java +++ b/test/jdk/tools/jpackage/macosx/MacSignTest.java @@ -184,6 +184,7 @@ public class MacSignTest { @Test @ParameterSupplier + @ParameterSupplier("testSelectSigningIdentity_JDK_8371094") public static void testSelectSigningIdentity(String signingKeyUserName, CertificateRequest certRequest) { MacSign.withKeychain(keychain -> { @@ -207,6 +208,12 @@ public class MacSignTest { }).toList(); } + public static Collection testSelectSigningIdentity_JDK_8371094() { + return List.of(new Object[] { + "ACME Technologies Limited", SigningBase.StandardCertificateRequest.CODESIGN_ACME_TECH_LTD.spec() + }); + } + enum SignOption { EXPIRED_SIGNING_KEY_USER_NAME("--mac-signing-key-user-name", SigningBase.StandardCertificateRequest.CODESIGN_EXPIRED.spec(), true, false), EXPIRED_SIGNING_KEY_USER_NAME_PKG("--mac-signing-key-user-name", SigningBase.StandardCertificateRequest.PKG_EXPIRED.spec(), true, false), diff --git a/test/jdk/tools/jpackage/macosx/base/SigningBase.java b/test/jdk/tools/jpackage/macosx/base/SigningBase.java index 1e38f9b0c29..b1a709c9cf0 100644 --- a/test/jdk/tools/jpackage/macosx/base/SigningBase.java +++ b/test/jdk/tools/jpackage/macosx/base/SigningBase.java @@ -68,6 +68,7 @@ public class SigningBase { public enum StandardCertificateRequest { CODESIGN(cert().userName(DEV_NAMES[CertIndex.ASCII_INDEX.value()])), CODESIGN_COPY(cert().days(100).userName(DEV_NAMES[CertIndex.ASCII_INDEX.value()])), + CODESIGN_ACME_TECH_LTD(cert().days(100).userName("ACME Technologies Limited (ABC12345)")), PKG(cert().type(CertificateType.INSTALLER).userName(DEV_NAMES[CertIndex.ASCII_INDEX.value()])), PKG_COPY(cert().type(CertificateType.INSTALLER).days(100).userName(DEV_NAMES[CertIndex.ASCII_INDEX.value()])), CODESIGN_UNICODE(cert().userName(DEV_NAMES[CertIndex.UNICODE_INDEX.value()])), @@ -101,7 +102,8 @@ public class SigningBase { StandardCertificateRequest.CODESIGN, StandardCertificateRequest.PKG, StandardCertificateRequest.CODESIGN_UNICODE, - StandardCertificateRequest.PKG_UNICODE), + StandardCertificateRequest.PKG_UNICODE, + StandardCertificateRequest.CODESIGN_ACME_TECH_LTD), /** * A keychain with some good and some expired certificates. */ From 325082302266f25d4fac33d0d4a9492c72de3ffc Mon Sep 17 00:00:00 2001 From: Roger Riggs Date: Tue, 4 Nov 2025 20:40:38 +0000 Subject: [PATCH 021/512] 8364361: [process] java.lang.Process should implement Closeable Reviewed-by: lancea, darcy, naoto, jpai, alanb, prappo --- .../share/classes/java/lang/Process.java | 140 +++- .../lang/snippet-files/ProcessExamples.java | 51 ++ .../java/lang/Process/ProcessCloseTest.java | 760 ++++++++++++++++++ 3 files changed, 945 insertions(+), 6 deletions(-) create mode 100644 src/java.base/share/classes/java/lang/snippet-files/ProcessExamples.java create mode 100644 test/jdk/java/lang/Process/ProcessCloseTest.java diff --git a/src/java.base/share/classes/java/lang/Process.java b/src/java.base/share/classes/java/lang/Process.java index 577ee538326..8aef43fe6c9 100644 --- a/src/java.base/share/classes/java/lang/Process.java +++ b/src/java.base/share/classes/java/lang/Process.java @@ -85,7 +85,29 @@ import java.util.stream.Stream; *

    As of 1.5, {@link ProcessBuilder#start()} is the preferred way * to create a {@code Process}. * - *

    Subclasses of Process should override the {@link #onExit()} and + *

    Subclasses of Process should ensure that each overridden method + * invokes the superclass method. + * For example, if {@linkplain #close() close} is overridden, the subclass should + * ensure that {@code Process.close()} is called. + * {@snippet lang = "java" : + * public class LoggingProcess extends java.lang.Process { + * ... + * @Override + * public void close() throws IOException { + * try { + * super.close(); + * } catch (IOException ex) { + * LOGGER.log(ex); +* } finally { + * LOGGER.log("process closed"); + * } + * } + * ... + * } + * } + * + *

    Subclasses of Process that wrap another Process instance + * should override and delegate the {@link #onExit()} and * {@link #toHandle()} methods to provide a fully functional Process including the * {@linkplain #pid() process id}, * {@linkplain #info() information about the process}, @@ -99,7 +121,9 @@ import java.util.stream.Stream; * process and for the communication streams between them. * The resources to control the process and for communication between the processes are retained * until there are no longer any references to the Process or the input, error, and output streams - * or readers, or they have been closed. + * or readers, or they have been closed. The Process {@linkplain Process#close close} method closes + * all the streams and terminates the process to release the resources. Using try-with-resources + * will ensure the process is terminated when the try-with-resources block exits. * *

    The process is not killed when there are no more references to the {@code Process} object, * but rather the process continues executing asynchronously. @@ -107,15 +131,15 @@ import java.util.stream.Stream; * that are no longer referenced to prevent leaking operating system resources. * Processes that have terminated or been terminated are monitored and their resources released. * - *

    Streams should be {@code closed} when they are no longer needed, to avoid delaying + *

    Streams should be closed when they are no longer needed, to avoid delaying * releasing the operating system resources. * {@code Try-with-resources} can be used to open and close the streams. *

    For example, to capture the output of a program known to produce some output and then exit: * {@snippet lang = "java" : * List capture(List args) throws Exception { * ProcessBuilder pb = new ProcessBuilder(args); - * Process process = pb.start(); - * try (BufferedReader in = process.inputReader()) { + * try (Process process = pb.start(); + * BufferedReader in = process.inputReader()) { * List captured = in.readAllLines(); * int status = process.waitFor(); * if (status != 0) { @@ -139,7 +163,7 @@ import java.util.stream.Stream; * * @since 1.0 */ -public abstract class Process { +public abstract class Process implements Closeable { // Readers and Writers created for this process; so repeated calls return the same object // All updates must be done while synchronized on this Process. @@ -149,12 +173,116 @@ public abstract class Process { private Charset inputCharset; private BufferedReader errorReader; private Charset errorCharset; + private boolean closed; // true if close() has been called /** * Default constructor for Process. */ public Process() {} + /** + * Closes all reader and writer streams and waits for the process to terminate. + * This method is idempotent, if this {@code Process} has already been closed + * invoking this method has no effect. + *

    + * If the data from the process input or error streams is needed, it must be read before + * calling this method. The contents of streams that have not been read to end of stream + * are lost, they are discarded or ignored. + *

    + * If the process exit value is of interest, then the caller must + * {@linkplain #waitFor() wait for} the process to terminate before calling this method. + *

    + * Streams should be closed when no longer needed. + * Closing an already closed stream usually has no effect but is specific to the stream. + * If an {@code IOException} occurs when closing a stream it is thrown + * after the process has terminated. + * Exceptions thrown by closing the streams, if any, are added to the first + * {@code IOException} as {@linkplain IOException#addSuppressed suppressed exceptions}. + *

    + * After the streams are closed this method {@linkplain #waitFor() waits for} the + * process to terminate. If {@linkplain Thread#interrupt interrupted} while waiting + * the process is {@linkplain #destroyForcibly() forcibly destroyed} and + * this method continues to wait for the process to terminate. + * The interrupted status is re-asserted before this method returns or + * any {@code IOExceptions} are thrown. + * @apiNote + * Try-with-resources example to write text to a process, read back the + * response, and close the streams and process: + * {@snippet file="ProcessExamples.java" region=example} + * + * @implNote + * Concrete implementations that override this class are strongly encouraged to + * override this method and invoke the superclass {@code close} method. + * + * @implSpec + * This method closes the process I/O streams and then + * {@linkplain #waitFor() waits for} the process to terminate. + * If {@link #waitFor() waitFor()} is {@linkplain Thread#interrupt() interrupted} + * the process is {@linkplain #destroyForcibly() forcibly destroyed} + * and then {@code close()} waits for the process to terminate. + * @throws IOException if closing any of the streams throws an exception + * @since 26 + */ + @Override + public void close() throws IOException { + synchronized(this) { + if (closed) { + return; + } + closed = true; + // Close each stream + IOException ioe = quietClose(outputWriter != null ? outputWriter : getOutputStream(), null); + ioe = quietClose(inputReader != null ? inputReader : getInputStream(), ioe); + ioe = quietClose(errorReader != null ? errorReader : getErrorStream(), ioe); + + // Wait for the process to terminate + // If waitFor is interrupted, destroy the process + // Continue waiting indefinitely for the process to terminate + if (!tryWait()) { + destroyForcibly(); + while (!tryWait()) { + continue; + } + // Re-assert the interrupted status + Thread.currentThread().interrupt(); + } + if (ioe != null) { + throw ioe; + } + } + } + + // Try to wait for the process to terminate. + // Return true if the process has terminated, false if wait is interrupted. + private boolean tryWait() { + try { + waitFor(); + return true; + } catch (InterruptedException ie) { + return false; + } + } + + // Quietly close. + // If an IOException occurs, and it is the first, return it. + // If there is no first IOException, a first IOException is created with the Throwable. + // Otherwise, add the Throwable as a suppressed exception to the first. + private static IOException quietClose(Closeable c, IOException firstIOE) { + try { + c.close(); + return firstIOE; + } catch (Throwable th) { + if (firstIOE == null && th instanceof IOException ioe) { + return ioe; + } else if (firstIOE == null) { + firstIOE = new IOException(th); + } else { + firstIOE.addSuppressed(th); + } + return firstIOE; + } + } + /** * Returns the output stream connected to the normal input of the * process. Output to the stream is piped into the standard diff --git a/src/java.base/share/classes/java/lang/snippet-files/ProcessExamples.java b/src/java.base/share/classes/java/lang/snippet-files/ProcessExamples.java new file mode 100644 index 00000000000..99ea32afff3 --- /dev/null +++ b/src/java.base/share/classes/java/lang/snippet-files/ProcessExamples.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class ProcessExamples { + // @start region=example + void main() { + try (Process p = new ProcessBuilder("cat").start(); + var writer = p.outputWriter(); + var reader = p.inputReader()) { + writer.write(haiku); + writer.close(); + // Read all lines and print each + reader.readAllLines() + .forEach(IO::println); + var status = p.waitFor(); + if (status != 0) + throw new RuntimeException("unexpected process status: " + status); + } catch (Exception e) { + System.out.println("Process failed: " + e); + } + } + + static final String haiku = """ + Oh, the sunrise glow; + Paddling with the river flow; + Chilling still, go slow. + """; + // @end region=example +} diff --git a/test/jdk/java/lang/Process/ProcessCloseTest.java b/test/jdk/java/lang/Process/ProcessCloseTest.java new file mode 100644 index 00000000000..3e4040b62f1 --- /dev/null +++ b/test/jdk/java/lang/Process/ProcessCloseTest.java @@ -0,0 +1,760 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.java.lang.Process; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.io.FilterInputStream; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintStream; +import java.io.Reader; +import java.io.UncheckedIOException; +import java.io.Writer; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import java.util.stream.Stream; + +/* + * @test + * @bug 8364361 + * @summary Tests for Process.close + * @modules java.base/java.lang:+open java.base/java.io:+open + * @run junit jdk.java.lang.Process.ProcessCloseTest + */ +public class ProcessCloseTest { + + private final static boolean OS_WINDOWS = System.getProperty("os.name").startsWith("Windows"); + private final static String CAT_PROGRAM = "cat"; + public static final String FORCED_CLOSE_MSG = "Forced close"; + private static List JAVA_ARGS; + + private static List setupJavaEXE() { + String JAVA_HOME = System.getProperty("test.jdk"); + if (JAVA_HOME == null) + JAVA_HOME = System.getProperty("JAVA_HOME"); + String classPath = System.getProperty("test.class.path"); + return List.of(JAVA_HOME + "/bin/java", "-cp", classPath, ProcessCloseTest.class.getName()); + } + + private static List javaArgs(ChildCommand... moreArgs) { + + List javaArgs = JAVA_ARGS; + if (javaArgs == null) { + JAVA_ARGS = javaArgs = setupJavaEXE(); + } + List args = new ArrayList<>(javaArgs); + for (ChildCommand arg : moreArgs) { + args.add(arg.toString()); + } + return args; + } + + /** + * {@return A Stream of Arguments} + * Each Argument consists of three lists. + * - A List of command line arguments to start a process. + * `javaArgs can be used to launch a Java child with ChildCommands + * - A List of ProcessCommand actions to be invoked on that process + * - A List of commands to be invoked on the process after the close or T-W-R exit. + */ + static Stream singleThreadTestCases() { + return Stream.of( + Arguments.of(List.of("echo", "xyz0"), + List.of(ProcessCommand.STDOUT_PRINT_ALL_LINES, + ProcessCommand.STDERR_EXPECT_EMPTY, + ExitStatus.NORMAL), + List.of(ExitStatus.NORMAL)), + Arguments.of(List.of("echo", "xyz1"), + List.of(ProcessCommand.STDOUT_PRINT_ALL_LINES), + List.of(ExitStatus.NORMAL)), + Arguments.of(javaArgs(ChildCommand.STDOUT_ECHO), + List.of(ProcessCommand.WRITER_WRITE, + ProcessCommand.WRITER_CLOSE, + ProcessCommand.STDOUT_PRINT_ALL_LINES), + List.of(ExitStatus.NORMAL)), + Arguments.of(javaArgs(ChildCommand.STDOUT_ECHO), + List.of(ProcessCommand.STDOUT_WRITE, + ProcessCommand.STDOUT_CLOSE, + ProcessCommand.STDOUT_PRINT_ALL_LINES), + List.of(ExitStatus.NORMAL)), + Arguments.of(javaArgs(ChildCommand.STDOUT_ECHO), + List.of(ProcessCommand.STDOUT_WRITE, + ProcessCommand.STDOUT_CLOSE, + ExitStatus.NORMAL), + List.of(ExitStatus.NORMAL)), + Arguments.of(List.of(CAT_PROGRAM, "NoSuchFile.txt"), + List.of(ProcessCommand.STDERR_PRINT_ALL_LINES, + ProcessCommand.STDOUT_EXPECT_EMPTY), + List.of(ExitStatus.FAIL)), + Arguments.of(javaArgs(ChildCommand.STDOUT_MARCO), + List.of(ProcessCommand.STDOUT_EXPECT_POLO, + ProcessCommand.STDERR_EXPECT_EMPTY), + List.of(ExitStatus.NORMAL)), + Arguments.of(javaArgs(ChildCommand.STDERR_MARCO), + List.of(ProcessCommand.STDERR_EXPECT_POLO, + ProcessCommand.STDOUT_EXPECT_EMPTY), + List.of(ExitStatus.NORMAL)), + Arguments.of(javaArgs(ChildCommand.PROCESS_EXIT1), + List.of(ExitStatus.FAIL), + List.of(ExitStatus.FAIL)), // Got expected status == 1 + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_INTERRUPT, // schedule an interrupt (in .2 sec) + ProcessCommand.PROCESS_CLOSE, + ProcessCommand.PROCESS_CHECK_INTERRUPTED), // Verify interrupted status + List.of(ExitStatus.KILLED)), // And process was destroyed + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_INTERRUPT), // interrupts the TWR/close + List.of(ProcessCommand.PROCESS_CHECK_INTERRUPTED, ExitStatus.KILLED)), + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ExitStatus.NORMAL), // waitFor before T-W-R exit + List.of(ExitStatus.NORMAL)), + Arguments.of(List.of("echo", "abc"), + List.of(ProcessCommand.PROCESS_CLOSE), + List.of(ExitStatus.RACY)), + Arguments.of(javaArgs(ChildCommand.STDOUT_ECHO), + List.of(ProcessCommand.STDOUT_WRITE, + ProcessCommand.PROCESS_CLOSE), + List.of(ExitStatus.PIPE)), + Arguments.of(List.of("echo", "def"), + List.of(ProcessCommand.PROCESS_DESTROY), + List.of(ExitStatus.RACY)), // Racy, not deterministic + Arguments.of(javaArgs(ChildCommand.STDOUT_ECHO), + List.of(ProcessCommand.STDOUT_WRITE, + ProcessCommand.PROCESS_DESTROY), + List.of(ExitStatus.RACY)), // Racy, not deterministic + Arguments.of(List.of("echo"), + List.of(ExitStatus.NORMAL), + List.of(ExitStatus.NORMAL)) + ); + } + + // Utility to process each command on the process + private static void doCommands(Process proc, List> commands) { + commands.forEach(c -> { + Log.printf(" %s\n", c); + c.accept(proc); + }); + } + + @ParameterizedTest + @MethodSource("singleThreadTestCases") + void simple(List args, List> commands, + List> postCommands) throws IOException { + var log = Log.get(); + try { + ProcessBuilder pb = new ProcessBuilder(args); + Process p = pb.start(); // Buffer any debug output + Log.printf("Program: %s; pid: %d\n", args, p.pid()); + doCommands(p, commands); + p.close(); + doCommands(p, postCommands); + } catch (Throwable ex) { + System.err.print(log); + throw ex; + } + } + + @ParameterizedTest + @MethodSource("singleThreadTestCases") + void autoCloseable(List args, List> commands, + List> postCommands) { + var log = Log.get(); + try { + ProcessBuilder pb = new ProcessBuilder(args); + Process proc = null; + try (Process p = pb.start()) { + proc = p; + Log.printf("Program: %s; pid: %d\n", args, p.pid()); + doCommands(p, commands); + } catch (IOException ioe) { + Assertions.fail(ioe); + } + doCommands(proc, postCommands); + } catch (Throwable ex) { + System.err.println(log); + throw ex; + } + } + + /** + * Test AutoCloseable for the process and out, in, and err streams. + * @param args The command line arguments + * @param commands the commands to the process + * @param postCommands The expected final exit status + */ + @ParameterizedTest + @MethodSource("singleThreadTestCases") + void autoCloseableAll(List args, List> commands, + List> postCommands) { + var log = Log.get(); + try { + ProcessBuilder pb = new ProcessBuilder(args); + Process proc = null; + try (Process p = pb.start(); var out = p.getOutputStream(); + var in = p.getInputStream(); + var err = p.getErrorStream()) { + proc = p; + Log.printf("Program: %s; pid: %d\n", args, p.pid()); + doCommands(p, commands); + } catch (IOException ioe) { + Assertions.fail(ioe); + } + doCommands(proc, postCommands); + } catch (Throwable ex) { + System.err.println(log); + throw ex; + } + } + + /** + * ExitStatus named values and assertions + */ + enum ExitStatus implements Consumer { + NORMAL(0), + FAIL(1), + PIPE(0, 1, 141), // SIGPIPE + KILLED(1, 137), // SIGKILL + TERMINATED(0, 143), // SIGTERM + RACY(0, 1, 137, 143), + ; + private final int[] allowedStatus; + + ExitStatus(int... status) { + this.allowedStatus = status; + } + + // If used as a process command, checks the exit status + public void accept(Process p) { + try { + Instant begin = Instant.now(); + final int exitStatus = p.waitFor(); + Duration latency = begin.until(Instant.now()); + Log.printf(" ExitStatus: %d, sig#: %d, waitFor latency: %s%n", + exitStatus, exitStatus & 0x7f, latency); + assertEquals(exitStatus); + } catch (InterruptedException ie) { + Assertions.fail("Unexpected InterruptedException checking status: " + this); + } + } + + // Check a status matches one of the allowed exit status values + void assertEquals(int actual) { + for (int status : allowedStatus) { + if (status == actual) { + return; // status is expected + } + } + if (this == RACY) { + // Not an error but report the actual status + Log.printf("Racy exit status: %d\n", actual); + } else { + Assertions.fail("Status: " + actual + ", sig#: " + (actual & 0x7f) + + ", expected one of: " + Arrays.toString(allowedStatus)); + } + } + } + + /** + * Commands on a Process that can be sequenced in the parent. + * See ChildCommands for commands that can be sent to the child process. + */ + enum ProcessCommand implements Consumer { + PROCESS_CLOSE(ProcessCommand::processClose), + PROCESS_DESTROY(ProcessCommand::processDestroy), + PROCESS_FORCE_OUT_CLOSE_EXCEPTION(ProcessCommand::processForceOutCloseException), + PROCESS_FORCE_IN_CLOSE_EXCEPTION(ProcessCommand::processForceInCloseException), + PROCESS_FORCE_ERROR_CLOSE_EXCEPTION(ProcessCommand::processForceErrorCloseException), + WRITER_WRITE(ProcessCommand::writerWrite), + WRITER_CLOSE(ProcessCommand::writerClose), + STDOUT_PRINT_ALL_LINES(ProcessCommand::stdoutPrintAllLines), + STDERR_PRINT_ALL_LINES(ProcessCommand::stderrPrintAllLines), + STDOUT_WRITE(ProcessCommand::stdoutWrite), + STDOUT_CLOSE(ProcessCommand::stdoutClose), + STDOUT_EXPECT_POLO(ProcessCommand::stdoutExpectPolo), + STDERR_EXPECT_POLO(ProcessCommand::stderrExpectPolo), + STDOUT_EXPECT_EMPTY(ProcessCommand::stdoutExpectEmpty), + STDERR_EXPECT_EMPTY(ProcessCommand::stderrExpectEmpty), + PROCESS_INTERRUPT(ProcessCommand::processInterruptThread), + PROCESS_CHECK_INTERRUPTED(ProcessCommand::processAssertInterrupted), + ; + private final Consumer command; + + ProcessCommand(Consumer command) { + this.command = command; + } + + public void accept(Process p) { + command.accept(p); + } + + private static void stdoutPrintAllLines(Process p) { + try { + var lines = p.inputReader().readAllLines(); + Assertions.assertNotEquals(0, lines.size(), "stdout should not be empty"); + Log.printf(" %d lines\n", lines.size()); + Log.printf("%s%n", lines.toString().indent(8)); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } + + private static void stderrPrintAllLines(Process p) { + try { + var lines = p.errorReader().readAllLines(); + Assertions.assertNotEquals(0, lines.size(), "stderr should not be empty"); + Log.printf(" %d lines\n", lines.size()); + Log.printf("%s%n", lines.toString().indent(8)); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } + + private static void writerWrite(Process p) { + try { + p.outputWriter().write("Now is the time."); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } + + private static void writerClose(Process p) { + try { + p.outputWriter().close(); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } + + private static void stdoutExpectPolo(Process p) { + String line = readLine(p.getInputStream()); + Assertions.assertEquals("Polo", line, "Stdout Expected Polo"); + } + + private static void stderrExpectPolo(Process p) { + String line = readLine(p.getErrorStream()); + Assertions.assertEquals("Polo", line, "Stderr Expected Polo"); + } + + private static void stdoutExpectEmpty(Process p) { + String line = readLine(p.getInputStream()); + Assertions.assertEquals("", line, "Stdout Expected Empty"); + } + + private static void stderrExpectEmpty(Process p) { + String line = readLine(p.getErrorStream()); + Assertions.assertEquals("", line, "Stderr Expected Empty"); + } + + private static String readLine(InputStream in) { + StringBuilder sb = new StringBuilder(); + try { + int ch; + while ((ch = in.read()) != -1) { + if (ch == '\n') { + // end of line + return sb.toString(); + } + if (ch != '\r') { // ignore cr - Windows defense + sb.append((char) ch); + } + } + // EOF - return string if no LF found + return sb.toString(); + } catch (IOException ioe) { + return ioe.getMessage(); + } + } + + private static void stdoutWrite(Process p) { + try { + var out = p.getOutputStream(); + out.write("stdout-write".getBytes(StandardCharsets.UTF_8)); + out.flush(); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } + + private static void stdoutClose(Process p) { + try { + p.getOutputStream().close(); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } + + private static void processClose(Process p) { + try { + p.close(); + } catch (IOException ioe) { + Assertions.fail(ioe); + } + } + + private static void processDestroy(Process p) { + p.destroy(); + } + + // Interpose an input stream that throws on close() + private static void processForceInCloseException(Process p) { + try { + synchronized (p) { + Field stdinField = p.getClass().getDeclaredField(OS_WINDOWS ? "stdin_stream" : "stdin"); + stdinField.setAccessible(true); + stdinField.set(p, new ThrowingOutputStream((OutputStream) stdinField.get(p))); + } + } catch (Exception ex) { + Assertions.fail("Failed to setup InputStream for throwing close", ex); + } + } + + // Interpose an output stream that throws on close() + private static void processForceOutCloseException(Process p) { + try { + synchronized (p) { + Field stdoutField = p.getClass().getDeclaredField(OS_WINDOWS ? "stdout_stream" : "stdout"); + stdoutField.setAccessible(true); + stdoutField.set(p, new ThrowingInputStream((InputStream) stdoutField.get(p))); + } + } catch (Exception ex) { + Assertions.fail("Failed to setup OutputStream throwing close", ex); + } + } + + // Interpose an error stream that throws on close() + private static void processForceErrorCloseException(Process p) { + try { + synchronized (p) { + Field stderrField = p.getClass().getDeclaredField(OS_WINDOWS ? "stderr_stream" : "stderr"); + stderrField.setAccessible(true); + stderrField.set(p, new ThrowingInputStream((InputStream) stderrField.get(p))); + } + } catch (Exception ex) { + Assertions.fail("Failed to setup OutputStream for throwing close", ex); + } + } + + // Hard coded to interrupt the invoking thread at a fixed rate of .2 second, if process is alive + private static void processInterruptThread(Process p) { + if (p.isAlive()) { + int delay = 200; + final Thread targetThread = Thread.currentThread(); + ForkJoinPool common = ForkJoinPool.commonPool(); + final ThreadInterruptor interrupter = new ThreadInterruptor(p, targetThread); + common.scheduleAtFixedRate(interrupter, delay, delay, TimeUnit.MILLISECONDS); + } + } + + // Verify that an interrupt is pending and reset it + private static void processAssertInterrupted(Process p) { + Assertions.assertTrue(Thread.interrupted(), "Expected an interrupt"); + } + } + + // Runnable scheduled at a fixed rate to interrupt a thread if a process is alive. + private static class ThreadInterruptor implements Runnable { + private final Process process; + private final Thread targetThread; + private int count; + + ThreadInterruptor(Process process, Thread targetThread) { + this.process = process; + this.targetThread = targetThread; + this.count = 0; + } + + public void run() { + if (process.isAlive()) { + count++; + Log.printf("Interrupting thread, count: %d%n", count); + targetThread.interrupt(); + } else { + throw new RuntimeException("process not alive"); + } + } + } + + // Commands to Java child sent as command line arguments + enum ChildCommand { + STDOUT_ECHO(ChildCommand::stdoutEchoBytes), + STDERR_ECHO(ChildCommand::stderrEchoBytes), + SLEEP(ChildCommand::SLEEP), + STDOUT_MARCO(ChildCommand::stdoutMarco), + STDERR_MARCO(ChildCommand::stderrMarco), + PROCESS_EXIT1(ChildCommand::processExit1), + ; + private final Runnable command; + ChildCommand(Runnable cmd) { + this.command = cmd; + } + + // The child sleeps before continuing with next ChildCommand + private static void SLEEP() { + final int sleepMS = 2_000; + try { + Thread.sleep(sleepMS); + } catch (InterruptedException ie) { + // Interrupted sleep, re-assert interrupted status + System.err.println("Sleep interrupted"); // Note the interruption in the log + Thread.currentThread().interrupt(); + } + } + + private static void stdoutEchoBytes() { + echoBytes(System.in, System.out); + } + + private static void stderrEchoBytes() { + echoBytes(System.in, System.err); + } + + private static void echoBytes(InputStream in, PrintStream out) { + try { + byte[] bytes = in.readAllBytes(); + out.write(bytes); + } catch (IOException ioe) { + out.println(ioe); + } + } + + private static void stdoutMarco() { + System.out.println("Polo"); + } + + private static void stderrMarco() { + System.err.println("Polo"); + } + + private static void processExit1() { + System.exit(1); + } + } + + static Stream closeExceptions() { + return Stream.of( + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_FORCE_OUT_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG)), + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_FORCE_IN_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG)), + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_FORCE_ERROR_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG)), + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_FORCE_OUT_CLOSE_EXCEPTION, + ProcessCommand.PROCESS_FORCE_IN_CLOSE_EXCEPTION, + ProcessCommand.PROCESS_FORCE_ERROR_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG, FORCED_CLOSE_MSG, FORCED_CLOSE_MSG)), + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_FORCE_OUT_CLOSE_EXCEPTION, + ProcessCommand.PROCESS_FORCE_IN_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG, FORCED_CLOSE_MSG)), + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_FORCE_OUT_CLOSE_EXCEPTION, + ProcessCommand.PROCESS_FORCE_ERROR_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG, FORCED_CLOSE_MSG)), + Arguments.of(javaArgs(ChildCommand.SLEEP), + List.of(ProcessCommand.PROCESS_FORCE_IN_CLOSE_EXCEPTION, + ProcessCommand.PROCESS_FORCE_ERROR_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG, FORCED_CLOSE_MSG)), + Arguments.of(List.of("echo", "xyz1"), + List.of(ProcessCommand.PROCESS_FORCE_OUT_CLOSE_EXCEPTION), + List.of(ExitStatus.RACY), List.of(FORCED_CLOSE_MSG)) + ); + } + /** + * Test AutoCloseable for cases that are expected to throw exceptions. + * The list of ProcessCommands controls what is sent to the process and closing of streams. + * The command line arguments control the sequence of actions taken by the child. + * @param args The command line arguments for the child process + * @param commands the commands to this process controlling the child + * @param postCommands The expected final exit status + * @param expectedMessages the list of exception messages expected by close() + */ + @ParameterizedTest + @MethodSource("closeExceptions") + void testStreamsCloseThrowing(List args, List> commands, + List> postCommands, List expectedMessages) { + var log = Log.get(); + try { + ProcessBuilder pb = new ProcessBuilder(args); + Process proc = null; + IOException expectedIOE = null; + try (Process p = pb.start()) { + proc = p; + Log.printf("Program: %s; pid: %d\n",args, p.pid()); + doCommands(p, commands); + } catch (IOException ioe) { + expectedIOE = ioe; + } + // Check the exceptions thrown, if any + if (expectedIOE != null) { + // Check each exception that it is expected + Assertions.assertEquals(expectedMessages.getFirst(), expectedIOE.getMessage(), + "Unexpected exception message"); + var suppressedEx = expectedIOE.getSuppressed(); + Assertions.assertEquals(expectedMessages.size() - 1, suppressedEx.length, + "Number of suppressed exceptions"); + for (int i = 1; i < expectedMessages.size(); i++) { + Assertions.assertEquals(expectedMessages.get(i), + suppressedEx[i - 1].getMessage(), + "Unexpected suppressed exception message"); + } + } + Assertions.assertNotNull(proc, "Process is null"); + doCommands(proc, postCommands); + } catch (Exception ex) { + System.err.println(log); + throw ex; + } + } + + /** + * An OutputStream that delegates to another stream and always throws IOException on close(). + */ + private static class ThrowingOutputStream extends FilterOutputStream { + public ThrowingOutputStream(OutputStream out) { + super(out); + } + + @Override + public void close() throws IOException { + try { + out.close(); + } catch (IOException ioe) { + // ignore except to log the exception; may be useful to debug + ioe.printStackTrace(System.err); + } + throw new IOException(FORCED_CLOSE_MSG); + } + } + + /** + * An InputStream that delegates to another stream and always throws IOException on close(). + */ + private static class ThrowingInputStream extends FilterInputStream { + public ThrowingInputStream(InputStream in) { + super(in); + } + + @Override + public void close() throws IOException { + try { + in.close(); + } catch (IOException ioe) { + // ignore except to log the exception; may be useful to debug + ioe.printStackTrace(System.err); + } + throw new IOException(FORCED_CLOSE_MSG); + } + } + + // Copy of ProcessExamples in java/lang/snippet-files/ProcessExamples.java + @Test + void example() { + try (Process p = new ProcessBuilder(CAT_PROGRAM).start(); + Writer writer = p.outputWriter(); + Reader reader = p.inputReader()) { + writer.write(haiku); + writer.close(); + // Read all lines and print each + reader.readAllLines() + .forEach(System.out::println); + var status = p.waitFor(); + if (status != 0) + throw new RuntimeException("unexpected process status: " + status); + } catch (Exception e) { + System.err.println("Process failed: " + e); + } + } + + String haiku = """ + Oh, the sunrise glow; + Paddling with the river flow; + Chilling still, go slow. + """; + + /** + * Child program that executes child actions as named by command line args. + * @param childCommands a sequence of ChildCommand names. + */ + public static void main(String... childCommands) { + List args = List.of(childCommands); + List commands = args.stream().map(ChildCommand::valueOf).toList(); + commands.forEach(c -> c.command.run()); + } + + /** + * Log of output produced on a thread during a test. + * Normally, the output is buffered and only output to stderr if the test fails. + * Set -DDEBUG=true to send all output to stderr as it occurs. + */ + private static class Log { + + private static final boolean DEBUG = Boolean.getBoolean("DEBUG"); + private final static ScopedValue OUT = ScopedValue.newInstance(); + private final static ScopedValue.Carrier LOG = setupLog(); + + private static ScopedValue.Carrier setupLog() { + if (DEBUG) { + return ScopedValue.where(OUT, System.err); + } else { + return ScopedValue.where(OUT, new StringBuffer()); + } + } + + // Return the log for this thread and clear the buffer. + private static Appendable get() { + var log = LOG.get(OUT); + if (log instanceof StringBuffer sb) + sb.setLength(0); + return log; + } + + // Printf to the log for this thread. + private static void printf(String format, Object... args) { + try { + var log = LOG.get(OUT); + log.append(format.formatted(args)); + } catch (IOException ioe) { + throw new UncheckedIOException(ioe); + } + } + } +} From 8585b46c1221f6894f4f1cda34714e7b49a8cccb Mon Sep 17 00:00:00 2001 From: Phil Race Date: Tue, 4 Nov 2025 21:40:50 +0000 Subject: [PATCH 022/512] =?UTF-8?q?8364583:=20ColorConvertOp=20fails=20for?= =?UTF-8?q?=20CMYK=20=E2=86=92=20RGB=20conversion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: serb, psadhukhan, honkar --- .../java/awt/image/ColorConvertOp.java | 2 +- .../ColorConvertOp/ColorConvertOpCMYK.java | 51 ++++++++++++++++++ .../awt/image/ColorConvertOp/black_cmyk.jpg | Bin 0 -> 220 bytes 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 test/jdk/java/awt/image/ColorConvertOp/ColorConvertOpCMYK.java create mode 100644 test/jdk/java/awt/image/ColorConvertOp/black_cmyk.jpg diff --git a/src/java.desktop/share/classes/java/awt/image/ColorConvertOp.java b/src/java.desktop/share/classes/java/awt/image/ColorConvertOp.java index c1c60397198..bf0292ca5c3 100644 --- a/src/java.desktop/share/classes/java/awt/image/ColorConvertOp.java +++ b/src/java.desktop/share/classes/java/awt/image/ColorConvertOp.java @@ -808,7 +808,7 @@ public class ColorConvertOp implements BufferedImageOp, RasterOp { idx = 0; for (int x = 0; x < w; x++) { pixel = srcRas.getDataElements(x, y, pixel); - color = srcCM.getNormalizedComponents(pixel, color, 0); + color = srcCM.getNormalizedComponents(pixel, null, 0); if (needSrcAlpha) { alpha[x] = color[srcNumComp]; } diff --git a/test/jdk/java/awt/image/ColorConvertOp/ColorConvertOpCMYK.java b/test/jdk/java/awt/image/ColorConvertOp/ColorConvertOpCMYK.java new file mode 100644 index 00000000000..9b008c591a8 --- /dev/null +++ b/test/jdk/java/awt/image/ColorConvertOp/ColorConvertOpCMYK.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.io.File; + +import java.awt.color.ColorSpace; +import java.awt.image.BufferedImage; +import java.awt.image.ColorConvertOp; +import java.awt.image.ColorModel; + +import javax.imageio.ImageIO; + +/* + * @test + * @bug 8364583 + * @summary Verify CMYK images work with ColorConvertOp + */ + +public class ColorConvertOpCMYK { + + public static void main(String[] args) throws Exception { + String sep = System.getProperty("file.separator"); + String dir = System.getProperty("test.src", "."); + String prefix = dir + sep; + File file = new File(prefix + "black_cmyk.jpg"); + BufferedImage source = ImageIO.read(file); + ColorModel sourceModel = source.getColorModel(); + ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); + ColorConvertOp convertOp = new ColorConvertOp(cs, null); + BufferedImage rgb = convertOp.filter(source, null); + } +} diff --git a/test/jdk/java/awt/image/ColorConvertOp/black_cmyk.jpg b/test/jdk/java/awt/image/ColorConvertOp/black_cmyk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1446f063bddf0c80a63a4a9da213b5560ad1d236 GIT binary patch literal 220 zcmZ9FO%8%E6odzR@LD?D2_M8A2NOeT35 zzVQoo*LE$UD8kkY{D#>~r^68w0{ldSco7I5dxR7LCFN3*(wY>JPV-bJCLzjPW^!wt z)oD={w)ENZ1(iaLS~L!W!|2dE@D(dR{GFMNd|lc97W{w_4F-(pfi=$E-rxN8oA~|# DH1{1W literal 0 HcmV?d00001 From 245eeb41bc749cba4e44bf3998cf07e7a1b784ed Mon Sep 17 00:00:00 2001 From: Phil Race Date: Tue, 4 Nov 2025 21:47:40 +0000 Subject: [PATCH 023/512] 8357252: sun/awt/font/TestArabicHebrew.java fails in OEL 9 and 10 x64 Reviewed-by: serb, psadhukhan, kizune --- src/java.desktop/unix/native/common/awt/fontpath.c | 10 +--------- test/jdk/sun/awt/font/TestArabicHebrew.java | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/java.desktop/unix/native/common/awt/fontpath.c b/src/java.desktop/unix/native/common/awt/fontpath.c index 95499cfc948..d3821504bfb 100644 --- a/src/java.desktop/unix/native/common/awt/fontpath.c +++ b/src/java.desktop/unix/native/common/awt/fontpath.c @@ -1038,7 +1038,7 @@ Java_sun_font_FontConfigManager_getFontConfig return; } fontCount = 0; - minGlyphs = 20; + minGlyphs = 0; if (debugMinGlyphsStr != NULL) { int val = minGlyphs; sscanf(debugMinGlyphsStr, "%5d", &val); @@ -1086,14 +1086,6 @@ Java_sun_font_FontConfigManager_getFontConfig return; } - /* We don't want 20 or 30 fonts, so once we hit 10 fonts, - * then require that they really be adding value. Too many - * adversely affects load time for minimal value-add. - * This is still likely far more than we've had in the past. - */ - if (j==10) { - minGlyphs = 50; - } if (unionCharset == NULL) { unionCharset = charset; } else { diff --git a/test/jdk/sun/awt/font/TestArabicHebrew.java b/test/jdk/sun/awt/font/TestArabicHebrew.java index 61cbe931c32..356d36a4d21 100644 --- a/test/jdk/sun/awt/font/TestArabicHebrew.java +++ b/test/jdk/sun/awt/font/TestArabicHebrew.java @@ -23,7 +23,7 @@ /* * @test - * @bug 4198081 + * @bug 4198081 8357252 * @key headful * @summary Arabic characters should appear instead of boxes and be correctly shaped. * Hebrew characters should appear instead of boxes. From 984c87cf767a46a2c1000a4030dfd91a62b03b4d Mon Sep 17 00:00:00 2001 From: Phil Race Date: Tue, 4 Nov 2025 21:47:58 +0000 Subject: [PATCH 024/512] 8370719: [Linux] Use /etc/os-release values for font configuration file names Reviewed-by: kizune, psadhukhan --- .../classes/sun/font/FcFontConfiguration.java | 34 ++----------------- .../classes/sun/font/MFontConfiguration.java | 34 ++----------------- 2 files changed, 6 insertions(+), 62 deletions(-) diff --git a/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java b/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java index 328e2454842..27d6773105e 100644 --- a/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java +++ b/src/java.desktop/unix/classes/sun/font/FcFontConfiguration.java @@ -317,42 +317,14 @@ public final class FcFontConfiguration extends FontConfiguration { return; } try { - File f; - if ((f = new File("/etc/lsb-release")).canRead()) { - /* Ubuntu and (perhaps others) use only lsb-release. - * Syntax and encoding is compatible with java properties. - * For Ubuntu the ID is "Ubuntu". - */ - Properties props = new Properties(); - try (FileInputStream fis = new FileInputStream(f)) { - props.load(fis); - } - osName = extractInfo(props.getProperty("DISTRIB_ID")); - osVersion = extractInfo(props.getProperty("DISTRIB_RELEASE")); - } else if ((f = new File("/etc/redhat-release")).canRead()) { - osName = "RedHat"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/SuSE-release")).canRead()) { - osName = "SuSE"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/turbolinux-release")).canRead()) { - osName = "Turbo"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/fedora-release")).canRead()) { - osName = "Fedora"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/os-release")).canRead()) { + File f = new File("/etc/os-release"); + if (f.canRead()) { Properties props = new Properties(); try (FileInputStream fis = new FileInputStream(f)) { props.load(fis); } - osName = extractInfo(props.getProperty("NAME")); + osName = extractInfo(props.getProperty("ID")); osVersion = extractInfo(props.getProperty("VERSION_ID")); - if (osName.equals("SLES")) { - osName = "SuSE"; - } else { - osName = extractInfo(props.getProperty("ID")); - } } } catch (Exception e) { if (FontUtilities.debugFonts()) { diff --git a/src/java.desktop/unix/classes/sun/font/MFontConfiguration.java b/src/java.desktop/unix/classes/sun/font/MFontConfiguration.java index 3d7e68d8dea..f5a8fe8b3c0 100644 --- a/src/java.desktop/unix/classes/sun/font/MFontConfiguration.java +++ b/src/java.desktop/unix/classes/sun/font/MFontConfiguration.java @@ -91,42 +91,14 @@ public final class MFontConfiguration extends FontConfiguration { if (osName.equals("Linux")) { try { - File f; - if ((f = new File("/etc/fedora-release")).canRead()) { - osName = "Fedora"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/redhat-release")).canRead()) { - osName = "RedHat"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/turbolinux-release")).canRead()) { - osName = "Turbo"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/SuSE-release")).canRead()) { - osName = "SuSE"; - osVersion = getVersionString(f); - } else if ((f = new File("/etc/lsb-release")).canRead()) { - /* Ubuntu and (perhaps others) use only lsb-release. - * Syntax and encoding is compatible with java properties. - * For Ubuntu the ID is "Ubuntu". - */ + File f = new File("/etc/os-release"); + if (f.canRead()) { Properties props = new Properties(); try (FileInputStream fis = new FileInputStream(f)) { props.load(fis); } - osName = extractInfo(props.getProperty("DISTRIB_ID")); - osVersion = extractInfo(props.getProperty("DISTRIB_RELEASE")); - } else if ((f = new File("/etc/os-release")).canRead()) { - Properties props = new Properties(); - try (FileInputStream fis = new FileInputStream(f)) { - props.load(fis); - } - osName = extractInfo(props.getProperty("NAME")); + osName = extractInfo(props.getProperty("ID")); osVersion = extractInfo(props.getProperty("VERSION_ID")); - if (osName.equals("SLES")) { - osName = "SuSE"; - } else { - osName = extractInfo(props.getProperty("ID")); - } } } catch (Exception e) { } From 146f8a83f9195ff246e2c3803c79171509df7d24 Mon Sep 17 00:00:00 2001 From: Phil Race Date: Tue, 4 Nov 2025 21:49:41 +0000 Subject: [PATCH 025/512] 4954405: Data buffers created with an offset are unusable Reviewed-by: avu, psadhukhan, jdv --- .../sun/awt/image/ByteInterleavedRaster.java | 4 +- .../ByteInterleavedRasterOffsetsTest.java | 73 +++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java diff --git a/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java b/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java index f0dedd9775a..775e7803c5b 100644 --- a/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java +++ b/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java @@ -206,7 +206,7 @@ public class ByteInterleavedRaster extends ByteComponentRaster { this.pixelStride = csm.getPixelStride(); this.dataOffsets = csm.getBandOffsets(); for (int i = 0; i < getNumDataElements(); i++) { - dataOffsets[i] += xOffset*pixelStride+yOffset*scanlineStride; + dataOffsets[i] += dataBuffer.getOffset() + xOffset*pixelStride+yOffset*scanlineStride; } } else if (sampleModel instanceof SinglePixelPackedSampleModel) { SinglePixelPackedSampleModel sppsm = @@ -227,7 +227,7 @@ public class ByteInterleavedRaster extends ByteComponentRaster { } this.bandOffset = this.dataOffsets[0]; - this.dbOffsetPacked = dataBuffer.getOffset() - + this.dbOffsetPacked = - sampleModelTranslateY*scanlineStride - sampleModelTranslateX*pixelStride; this.dbOffset = dbOffsetPacked - diff --git a/test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java b/test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java new file mode 100644 index 00000000000..ec077c45ff1 --- /dev/null +++ b/test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.color.ColorSpace; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.ComponentColorModel; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.Raster; +import java.awt.image.WritableRaster; + +/* + * @test + * @bug 4954405 + * @summary Verify DataBuffer offsets are handled by ByteInterleavedRaster + */ + +public class ByteInterleavedOffsetsTest { + + public static void main(String[] args) { + byte[] data = { 0, -1, 0, 0 }; // only set the R sample. + int[] bandOffsets = { 0, 1, 2 }; + DataBuffer databuf = new DataBufferByte(data, 3, 1); + WritableRaster raster = + Raster.createInterleavedRaster(databuf, 1, 1, 3, 3, bandOffsets, null); + int[] pixels = raster.getPixels(0, 0, 1, 1, (int[])null); + byte[] elements = (byte[])raster.getDataElements(0, 0, null); + ColorModel colorModel = new ComponentColorModel( + ColorSpace.getInstance(ColorSpace.CS_sRGB), false, false, + ColorModel.OPAQUE, DataBuffer.TYPE_BYTE); + BufferedImage img = new BufferedImage(colorModel, raster, false, null); + int pixel = img.getRGB(0, 0); + + System.out.println("PIXEL0=" + Integer.toHexString(pixels[0])); + System.out.println("PIXEL1=" + Integer.toHexString(pixels[1])); + System.out.println("PIXEL2=" + Integer.toHexString(pixels[2])); + System.out.println("ELEMENT0=" + Integer.toHexString(elements[0] & 0xff)); + System.out.println("ELEMENT1=" + Integer.toHexString(elements[1] & 0xff)); + System.out.println("ELEMENT2=" + Integer.toHexString(elements[2] & 0xff)); + System.out.println("PIXEL=" + Integer.toHexString(pixel)); + + if ((pixels[0] != 0xff) || (pixels[1] != 0) || (pixels[2] != 0)) { + throw new RuntimeException("Unexpected pixels"); + } + if (((elements[0] & 0xff) != 0xff) || (elements[1] != 0) || (elements[2] != 0)) { + throw new RuntimeException("Unexpected elements"); + } + if (pixel != 0xffff0000) { + throw new RuntimeException("Unexpected pixel"); + } + } +} From 463f5dc112386802b9ce0cc985a961ecfd3fbc55 Mon Sep 17 00:00:00 2001 From: Koushik Thirupattur Date: Tue, 4 Nov 2025 22:08:33 +0000 Subject: [PATCH 026/512] 8371296: Refactor tests to use PEM API (Phase 1) - Fix WriteP12Test failure Reviewed-by: ascarpino --- test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java b/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java index 96bbbbcde13..535cb8c8f4c 100644 --- a/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java +++ b/test/jdk/java/security/KeyStore/PKCS12/WriteP12Test.java @@ -133,7 +133,7 @@ public class WriteP12Test { public static void main(String[] args) throws UnrecoverableKeyException, KeyStoreException, NoSuchProviderException, - NoSuchAlgorithmException, IOException { + NoSuchAlgorithmException, IOException, CertificateException { WriteP12Test jstest = new WriteP12Test(); out.println("test WriteP12CertChain"); /* From c8f5fd6ff3808804eda03c9754698a00dd06449c Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Tue, 4 Nov 2025 22:41:17 +0000 Subject: [PATCH 027/512] 8371184: Improve jpackage test coverage for "--app-image" option Reviewed-by: almatvee --- .../jdk/jpackage/test/PackageTestTest.java | 3 +- .../jdk/jpackage/test/AdditionalLauncher.java | 2 +- .../jdk/jpackage/test/ConfigFilesStasher.java | 4 +- .../jdk/jpackage/test/JPackageCommand.java | 173 ++++++++++++++---- .../jdk/jpackage/test/LauncherVerifier.java | 36 +++- .../jdk/jpackage/test/LinuxHelper.java | 10 +- .../helpers/jdk/jpackage/test/MacHelper.java | 45 ++++- .../jdk/jpackage/test/PackageTest.java | 10 + .../jdk/jpackage/test/PropertyFinder.java | 30 ++- .../macosx/SigningPackageTwoStepTest.java | 4 +- .../jpackage/share/AddLShortcutTest.java | 48 ++--- .../tools/jpackage/share/AddLauncherTest.java | 5 +- .../tools/jpackage/share/AppContentTest.java | 4 +- .../jpackage/share/AppImagePackageTest.java | 35 ++-- .../tools/jpackage/share/InstallDirTest.java | 40 ++-- .../share/MultiLauncherTwoPhaseTest.java | 14 +- .../jpackage/share/MultiNameTwoPhaseTest.java | 14 +- .../jpackage/share/PostImageScriptTest.java | 5 +- .../jdk/tools/jpackage/share/ServiceTest.java | 5 +- .../jpackage/windows/Win8282351Test.java | 25 +-- 20 files changed, 331 insertions(+), 181 deletions(-) diff --git a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/PackageTestTest.java b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/PackageTestTest.java index 4cf89fca3cc..4723f4dadbd 100644 --- a/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/PackageTestTest.java +++ b/test/jdk/tools/jpackage/helpers-test/jdk/jpackage/test/PackageTestTest.java @@ -351,7 +351,8 @@ public class PackageTestTest extends JUnitAdapter { } @Override - public void verifyIsOfType(PackageType ... types) { + public JPackageCommand verifyIsOfType(Set types) { + return this; } @Override diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java index a41e2b5043f..4f0e3f4e485 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java @@ -165,7 +165,7 @@ public final class AdditionalLauncher { public void applyTo(JPackageCommand cmd) { cmd.addPrerequisiteAction(this::initialize); - cmd.addVerifyAction(createVerifierAsConsumer()); + cmd.addVerifyAction(createVerifierAsConsumer(), JPackageCommand.ActionRole.LAUNCHER_VERIFIER); } public void applyTo(PackageTest test) { diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/ConfigFilesStasher.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/ConfigFilesStasher.java index 11627ab9125..0b3f5defbac 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/ConfigFilesStasher.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/ConfigFilesStasher.java @@ -192,9 +192,7 @@ final class ConfigFilesStasher { } private static ApplicationLayout appImageAppLayout(JPackageCommand cmd) { - if (cmd.isRuntime()) { - throw new UnsupportedOperationException(); - } + cmd.verifyNotRuntime(); if (cmd.isImagePackageType()) { return platformAppImage(); diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java index 088a9fe3bad..57915b91d8b 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java @@ -28,13 +28,16 @@ import static java.util.stream.Collectors.mapping; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; import static java.util.stream.Collectors.toSet; +import static java.util.stream.Collectors.toCollection; import static jdk.jpackage.test.AdditionalLauncher.forEachAdditionalLauncher; import java.io.FileOutputStream; import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.InvalidPathException; +import java.nio.file.LinkOption; import java.nio.file.Path; import java.security.SecureRandom; import java.util.ArrayList; @@ -48,6 +51,7 @@ import java.util.Objects; import java.util.Optional; import java.util.OptionalInt; import java.util.Set; +import java.util.TreeSet; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; @@ -56,6 +60,7 @@ import java.util.regex.Pattern; import java.util.spi.ToolProvider; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.util.stream.StreamSupport; import jdk.jpackage.internal.util.function.ThrowingConsumer; import jdk.jpackage.internal.util.function.ThrowingFunction; import jdk.jpackage.internal.util.function.ThrowingRunnable; @@ -85,7 +90,6 @@ public class JPackageCommand extends CommandArguments { ignoreDefaultRuntime = cmd.ignoreDefaultRuntime; ignoreDefaultVerbose = cmd.ignoreDefaultVerbose; this.immutable = immutable; - dmgInstallDir = cmd.dmgInstallDir; prerequisiteActions = new Actions(cmd.prerequisiteActions); verifyActions = new Actions(cmd.verifyActions); standardAsserts = cmd.standardAsserts; @@ -165,11 +169,6 @@ public class JPackageCommand extends CommandArguments { return null; } - public String getArgumentValue(String argName, - Function defaultValueSupplier) { - return getArgumentValue(argName, defaultValueSupplier, v -> v); - } - public T getArgumentValue(String argName, Supplier defaultValueSupplier, Function stringConverter) { @@ -332,16 +331,35 @@ public class JPackageCommand extends CommandArguments { return this; } + public JPackageCommand usePredefinedAppImage(Path predefinedAppImagePath) { + return setArgumentValue("--app-image", Objects.requireNonNull(predefinedAppImagePath)) + .removeArgumentWithValue("--input"); + } + JPackageCommand addPrerequisiteAction(ThrowingConsumer action) { prerequisiteActions.add(action); return this; } JPackageCommand addVerifyAction(ThrowingConsumer action) { - verifyActions.add(action); + return addVerifyAction(action, ActionRole.DEFAULT); + } + + enum ActionRole { + DEFAULT, + LAUNCHER_VERIFIER, + ; + } + + JPackageCommand addVerifyAction(ThrowingConsumer action, ActionRole actionRole) { + verifyActions.add(action, actionRole); return this; } + Stream> getVerifyActionsWithRole(ActionRole actionRole) { + return verifyActions.actionsWithRole(actionRole); + } + /** * Shorthand for {@code helloAppImage(null)}. */ @@ -550,11 +568,7 @@ public class JPackageCommand extends CommandArguments { } if (TKit.isOSX()) { - if (packageType() == PackageType.MAC_DMG && dmgInstallDir != null) { - return dmgInstallDir; - } else { - return MacHelper.getInstallationDirectory(this); - } + return MacHelper.getInstallationDirectory(this); } throw TKit.throwUnknownPlatformError(); @@ -676,10 +690,11 @@ public class JPackageCommand extends CommandArguments { return Collections.unmodifiableList(names); } - private void verifyNotRuntime() { + JPackageCommand verifyNotRuntime() { if (isRuntime()) { - throw new IllegalArgumentException("Java runtime packaging"); + throw new UnsupportedOperationException("Java runtime packaging"); } + return this; } /** @@ -1212,6 +1227,52 @@ public class JPackageCommand extends CommandArguments { MacHelper.verifyUnsignedBundleSignature(cmd); } }), + PREDEFINED_APP_IMAGE_COPY(cmd -> { + Optional.ofNullable(cmd.getArgumentValue("--app-image")).filter(_ -> { + return !TKit.isOSX() || !MacHelper.signPredefinedAppImage(cmd); + }).map(Path::of).ifPresent(predefinedAppImage -> { + + TKit.trace(String.format( + "Check contents of the predefined app image [%s] copied verbatim", + predefinedAppImage)); + + var outputAppImageDir = cmd.pathToUnpackedPackageFile(cmd.appInstallationDirectory()); + + try (var walk = Files.walk(predefinedAppImage)) { + var filteredWalk = walk; + if (!cmd.expectAppImageFile()) { + var appImageFile = AppImageFile.getPathInAppImage(predefinedAppImage); + // Exclude ".jpackage.xml" as it should no be in the output bundle. + var pred = Predicate.isEqual(appImageFile).negate(); + if (TKit.isOSX()) { + // On MacOS exclude files that can be signed as their digests change. + pred = pred.and(path -> { + return MacHelper.isVerbatimCopyFromPredefinedAppImage(cmd, path); + }); + } + + filteredWalk = walk.filter(pred); + } + + var verbatimPaths = filteredWalk.collect(toCollection(TreeSet::new)); + + // Remove nonempty directories from the collection of paths copied verbatim. + verbatimPaths.removeAll(verbatimPaths.stream().map(Path::getParent).toList()); + + verbatimPaths.forEach(ThrowingConsumer.toConsumer(p -> { + if (Files.isDirectory(p, LinkOption.NOFOLLOW_LINKS)) { + TKit.assertDirectoryExists(p); + } else { + TKit.assertSameFileContent(p, outputAppImageDir.resolve(predefinedAppImage.relativize(p))); + } + })); + } catch (IOException ex) { + throw new UncheckedIOException(ex); + } + + TKit.trace("Done"); + }); + }) ; StandardAssert(Consumer action) { @@ -1220,9 +1281,7 @@ public class JPackageCommand extends CommandArguments { private static JPackageCommand convertFromRuntime(JPackageCommand cmd) { var copy = cmd.createMutableCopy(); - copy.immutable = false; copy.removeArgumentWithValue("--runtime-image"); - copy.dmgInstallDir = cmd.appInstallationDirectory(); if (!copy.hasArgument("--name")) { copy.addArguments("--name", cmd.nameFromRuntimeImage().orElseThrow()); } @@ -1440,29 +1499,35 @@ public class JPackageCommand extends CommandArguments { return getPrintableCommandLine(); } - public void verifyIsOfType(Collection types) { - verifyIsOfType(types.toArray(PackageType[]::new)); + public final JPackageCommand verifyIsOfType(PackageType ... types) { + return verifyIsOfType(Set.of(types)); } - public void verifyIsOfType(PackageType ... types) { - final var typesSet = Stream.of(types).collect(Collectors.toSet()); + public final JPackageCommand verifyIsOfType(Iterable types) { + return verifyIsOfType(StreamSupport.stream(types.spliterator(), false).collect(toSet())); + } + + public JPackageCommand verifyIsOfType(Set types) { + Objects.requireNonNull(types); if (!hasArgument("--type")) { if (!isImagePackageType()) { - if ((TKit.isLinux() && typesSet.equals(PackageType.LINUX)) || (TKit.isWindows() && typesSet.equals(PackageType.WINDOWS))) { - return; + if ((TKit.isLinux() && types.equals(PackageType.LINUX)) || (TKit.isWindows() && types.equals(PackageType.WINDOWS))) { + return this; } - if (TKit.isOSX() && typesSet.equals(PackageType.MAC)) { - return; + if (TKit.isOSX() && types.equals(PackageType.MAC)) { + return this; } - } else if (typesSet.equals(Set.of(PackageType.IMAGE))) { - return; + } else if (types.equals(Set.of(PackageType.IMAGE))) { + return this; } } - if (!typesSet.contains(packageType())) { - throw new IllegalArgumentException("Unexpected type"); + if (!types.contains(packageType())) { + throw new UnsupportedOperationException(String.format("Unsupported operation for type [%s]", packageType().getType())); } + + return this; } public CfgFile readLauncherCfgFile() { @@ -1558,18 +1623,47 @@ public class JPackageCommand extends CommandArguments { } void add(ThrowingConsumer action) { - Objects.requireNonNull(action); + add(action, ActionRole.DEFAULT); + } + + void add(ThrowingConsumer action, ActionRole role) { verifyMutable(); - actions.add(new Consumer() { - @Override - public void accept(JPackageCommand t) { - if (!executed) { - executed = true; - ThrowingConsumer.toConsumer(action).accept(t); - } + actions.add(new Action(action, role)); + } + + Stream> actionsWithRole(ActionRole role) { + Objects.requireNonNull(role); + return actions.stream().filter(action -> { + return Objects.equals(action.role(), role); + }).map(Action::impl); + } + + private static final class Action implements Consumer { + + Action(ThrowingConsumer impl, ActionRole role) { + this.impl = Objects.requireNonNull(impl); + this.role = Objects.requireNonNull(role); + } + + ActionRole role() { + return role; + } + + ThrowingConsumer impl() { + return impl; + } + + @Override + public void accept(JPackageCommand cmd) { + if (!executed) { + executed = true; + ThrowingConsumer.toConsumer(impl).accept(cmd); } - private boolean executed; - }); + } + + private final ActionRole role; + private final ThrowingConsumer impl; + private boolean executed; } @Override @@ -1578,7 +1672,7 @@ public class JPackageCommand extends CommandArguments { actions.forEach(action -> action.accept(JPackageCommand.this)); } - private final List> actions; + private final List actions; } private Boolean withToolProvider; @@ -1589,7 +1683,6 @@ public class JPackageCommand extends CommandArguments { private boolean ignoreDefaultRuntime; private boolean ignoreDefaultVerbose; private boolean immutable; - private Path dmgInstallDir; private final Actions prerequisiteActions; private final Actions verifyActions; private Path executeInDirectory; diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherVerifier.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherVerifier.java index 489788b565a..da5b8583c72 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherVerifier.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherVerifier.java @@ -24,6 +24,7 @@ package jdk.jpackage.test; import static java.util.stream.Collectors.toMap; import static jdk.jpackage.test.AdditionalLauncher.NO_ICON; +import static jdk.jpackage.test.AdditionalLauncher.getAdditionalLauncherProperties; import static jdk.jpackage.test.LauncherShortcut.LINUX_SHORTCUT; import java.io.IOException; @@ -34,6 +35,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.function.BiConsumer; +import java.util.function.BiFunction; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; @@ -72,6 +74,12 @@ public final class LauncherVerifier { new LauncherVerifier(cmd).verify(cmd, Action.EXECUTE_LAUNCHER); } + static String launcherDescription(JPackageCommand cmd, String launcherName) { + return launcherDescription(cmd, launcherName, (theCmd, theLauncherName) -> { + return getAdditionalLauncherProperties(theCmd, theLauncherName); + }); + } + public enum Action { VERIFY_ICON(LauncherVerifier::verifyIcon), @@ -137,8 +145,8 @@ public final class LauncherVerifier { } private String getDescription(JPackageCommand cmd) { - return findProperty("description").orElseGet(() -> { - return cmd.getArgumentValue("--description", cmd::name); + return launcherDescription(cmd, name, (theCmd, theLauncherName) -> { + return properties.orElseThrow(); }); } @@ -272,7 +280,11 @@ public final class LauncherVerifier { } private void verifyDescription(JPackageCommand cmd) throws IOException { - if (TKit.isWindows()) { + if (TKit.isWindows() && !cmd.hasArgument("--app-image")) { + // On Windows, check the description if the predefined app image is not configured. + // The description and the icon are encoded in the launcher executable, which should be + // copied verbatim from the predefined app image into the output bundle. + // This check is done in the JPackageCommand class, so there is no need to duplicate it here. String expectedDescription = getDescription(cmd); Path launcherPath = cmd.appLauncherPath(name); String actualDescription = @@ -424,6 +436,24 @@ public final class LauncherVerifier { }); } + private static String launcherDescription( + JPackageCommand cmd, + String launcherName, + BiFunction addLauncherPropertyFileGetter) { + + return PropertyFinder.findLauncherProperty(cmd, launcherName, + PropertyFinder.cmdlineOptionWithValue("--description"), + PropertyFinder.launcherPropertyFile("description"), + PropertyFinder.nop() + ).orElseGet(() -> { + if (cmd.isMainLauncher(launcherName)) { + return cmd.mainLauncherName(); + } else { + return launcherDescription(cmd, null, addLauncherPropertyFileGetter); + } + }); + } + private static final class DefaultEntitlements { private static Map loadFromResources(String resourceName) { diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java index c8df0f640d0..25358e8ecdc 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java @@ -26,7 +26,6 @@ import static java.util.Collections.unmodifiableSortedSet; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toMap; import static java.util.stream.Collectors.toSet; -import static jdk.jpackage.test.AdditionalLauncher.getAdditionalLauncherProperties; import java.io.IOException; import java.io.UncheckedIOException; @@ -560,14 +559,7 @@ public final class LinuxHelper { TKit.assertTrue(mandatoryKeys.isEmpty(), String.format( "Check for missing %s keys in the file", mandatoryKeys)); - final String launcherDescription; - if (cmd.name().equals(launcherName) || predefinedAppImage.isPresent()) { - launcherDescription = Optional.ofNullable(cmd.getArgumentValue("--description")).orElseGet(cmd::name); - } else { - launcherDescription = getAdditionalLauncherProperties(cmd, launcherName).findProperty("description").or(() -> { - return Optional.ofNullable(cmd.getArgumentValue("--description")); - }).orElseGet(cmd::name); - } + final var launcherDescription = LauncherVerifier.launcherDescription(cmd, launcherName); for (var e : List.of( Map.entry("Type", "Application"), diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java index 5c0914ed2f4..4e239e16b59 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/MacHelper.java @@ -545,6 +545,43 @@ public final class MacHelper { } } + static boolean isVerbatimCopyFromPredefinedAppImage(JPackageCommand cmd, Path path) { + cmd.verifyIsOfType(PackageType.MAC); + + final var predefinedAppImage = Path.of(cmd.getArgumentValue("--app-image")); + + final var appLayout = ApplicationLayout.macAppImage().resolveAt(predefinedAppImage); + + if (!path.startsWith(predefinedAppImage)) { + throw new IllegalArgumentException( + String.format("Path [%s] is not in directory [%s]", path, predefinedAppImage)); + } + + if (path.startsWith(appLayout.contentDirectory().resolve("_CodeSignature"))) { + // A file in the "Contents/_CodeSignature" directory. + return false; + } + + final var outputAppImageDir = cmd.pathToUnpackedPackageFile(cmd.appInstallationDirectory()); + + final var outputAppImagePath = outputAppImageDir.resolve(predefinedAppImage.relativize(path)); + + if (path.startsWith(appLayout.launchersDirectory()) && + cmd.launcherNames(true).stream().map(cmd::appLauncherPath).collect(toSet()).contains(outputAppImagePath)) { + // The `path` references a launcher. + // It can be signed and its digest may change. + return false; + } + + if (path.startsWith(appLayout.runtimeHomeDirectory().resolve("bin"))) { + // The `path` references an executable native command in JDK's "bin" subdirectory. + // It can be signed and its digest may change. + return false; + } + + return true; + } + static void verifyUnsignedBundleSignature(JPackageCommand cmd) { if (!cmd.isImagePackageType()) { MacSignVerify.assertUnsigned(cmd.outputBundle()); @@ -716,12 +753,8 @@ public final class MacHelper { final var defaultInstallLocation = Path.of( cmd.isRuntime() ? "/Library/Java/JavaVirtualMachines" : "/Applications"); - final Path installLocation; - if (cmd.packageType() == PackageType.MAC_DMG) { - installLocation = defaultInstallLocation; - } else { - installLocation = cmd.getArgumentValue("--install-dir", () -> defaultInstallLocation, Path::of); - } + final Path installLocation = Optional.ofNullable(cmd.getArgumentValue("--install-dir")) + .map(Path::of).orElse(defaultInstallLocation); return installLocation.resolve(cmd.name() + (cmd.isRuntime() ? ".jdk" : ".app")); } diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java index 2e73f43b58d..5b3815510ce 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java @@ -60,6 +60,7 @@ import java.util.stream.StreamSupport; import jdk.jpackage.internal.util.function.ThrowingBiConsumer; import jdk.jpackage.internal.util.function.ThrowingConsumer; import jdk.jpackage.internal.util.function.ThrowingRunnable; +import jdk.jpackage.test.JPackageCommand.ActionRole; /** @@ -233,6 +234,15 @@ public final class PackageTest extends RunnablePackageTest { return this; } + public PackageTest usePredefinedAppImage(JPackageCommand appImageCmd) { + appImageCmd.verifyIsOfType(PackageType.IMAGE); + addInitializer(cmd -> { + cmd.usePredefinedAppImage(appImageCmd.outputBundle()); + }); + appImageCmd.getVerifyActionsWithRole(ActionRole.LAUNCHER_VERIFIER).forEach(this::addInstallVerifier); + return this; + } + public PackageTest disablePackageInstaller() { currentTypes.forEach(disabledInstallers::add); return this; diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PropertyFinder.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PropertyFinder.java index e310de855c6..54e3ef2ec54 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PropertyFinder.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PropertyFinder.java @@ -26,7 +26,9 @@ import static jdk.jpackage.test.AdditionalLauncher.getAdditionalLauncherProperti import java.nio.file.Path; import java.util.Objects; import java.util.Optional; +import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.Supplier; import java.util.function.UnaryOperator; import jdk.jpackage.test.AdditionalLauncher.PropertyFile; @@ -42,6 +44,12 @@ final class PropertyFinder { }; } + default Finder defaultValue(Supplier v) { + return target -> { + return Optional.of(find(target).orElseGet(v)); + }; + } + default Finder map(UnaryOperator v) { Objects.requireNonNull(v); return target -> { @@ -134,7 +142,27 @@ final class PropertyFinder { Finder addLauncherPropertyFileFinder, Finder appImageFileFinder) { + return findLauncherProperty( + cmd, + launcherName, + (theCmd, theLauncherName) -> { + return getAdditionalLauncherProperties(theCmd, theLauncherName); + }, + cmdlineFinder, + addLauncherPropertyFileFinder, + appImageFileFinder); + } + + static Optional findLauncherProperty( + JPackageCommand cmd, + String launcherName, + BiFunction addLauncherPropertyFileGetter, + Finder cmdlineFinder, + Finder addLauncherPropertyFileFinder, + Finder appImageFileFinder) { + Objects.requireNonNull(cmd); + Objects.requireNonNull(addLauncherPropertyFileGetter); Objects.requireNonNull(cmdlineFinder); Objects.requireNonNull(addLauncherPropertyFileFinder); Objects.requireNonNull(appImageFileFinder); @@ -148,7 +176,7 @@ final class PropertyFinder { if (mainLauncher) { reply = cmdlineFinder.find(cmd); } else if (appImageFilePath.isEmpty()) { - var props = getAdditionalLauncherProperties(cmd, launcherName); + var props = addLauncherPropertyFileGetter.apply(cmd, launcherName); reply = addLauncherPropertyFileFinder.find(props); } else { reply = Optional.empty(); diff --git a/test/jdk/tools/jpackage/macosx/SigningPackageTwoStepTest.java b/test/jdk/tools/jpackage/macosx/SigningPackageTwoStepTest.java index 32311fd121e..586d8d68444 100644 --- a/test/jdk/tools/jpackage/macosx/SigningPackageTwoStepTest.java +++ b/test/jdk/tools/jpackage/macosx/SigningPackageTwoStepTest.java @@ -199,10 +199,8 @@ public class SigningPackageTwoStepTest { test.forTypes(signPackage.keySet()).addRunOnceInitializer(() -> { appImageCmd.setArgumentValue("--dest", TKit.createTempDirectory("appimage")).execute(0); - }).addInitializer(cmd -> { + }).usePredefinedAppImage(appImageCmd).addInitializer(cmd -> { MacHelper.useKeychain(cmd, keychain); - cmd.addArguments("--app-image", appImageCmd.outputBundle()); - cmd.removeArgumentWithValue("--input"); Optional.ofNullable(signPackage.get(cmd.packageType())).ifPresent(signOption -> { signOption.setTo(cmd); }); diff --git a/test/jdk/tools/jpackage/share/AddLShortcutTest.java b/test/jdk/tools/jpackage/share/AddLShortcutTest.java index f000e79227e..ef8f277e267 100644 --- a/test/jdk/tools/jpackage/share/AddLShortcutTest.java +++ b/test/jdk/tools/jpackage/share/AddLShortcutTest.java @@ -196,27 +196,22 @@ public class AddLShortcutTest { // and applies shortcut configuration to the main launcher in the native packaging jpackage command. // - Path[] predefinedAppImage = new Path[1]; + var appImageCmd = JPackageCommand.helloAppImage() + .setArgumentValue("--name", "foo") + .setFakeRuntime(); - new PackageTest().addRunOnceInitializer(() -> { - var cmd = JPackageCommand.helloAppImage() - .setArgumentValue("--name", "foo") - .setFakeRuntime(); + for (var i = 1; i != cfgs.length; ++i) { + var al = new AdditionalLauncher("launcher-" + i); + cfgs[i].applyToAdditionalLauncher(al); + al.withoutVerifyActions(Action.EXECUTE_LAUNCHER).applyTo(appImageCmd); + } - for (var i = 1; i != cfgs.length; ++i) { - var al = new AdditionalLauncher("launcher-" + i); - cfgs[i].applyToAdditionalLauncher(al); - al.withoutVerifyActions(Action.EXECUTE_LAUNCHER).applyTo(cmd); - } - - cmd.execute(); - - predefinedAppImage[0] = cmd.outputBundle(); - }).addInitializer(cmd -> { + new PackageTest() + .addRunOnceInitializer(appImageCmd::execute) + .usePredefinedAppImage(appImageCmd) + .addInitializer(cmd -> { cfgs[0].applyToMainLauncher(cmd); - cmd.removeArgumentWithValue("--input"); cmd.setArgumentValue("--name", "AddLShortcutDir2Test"); - cmd.addArguments("--app-image", predefinedAppImage[0]); }).run(RunnablePackageTest.Action.CREATE_AND_UNPACK); } @@ -237,20 +232,15 @@ public class AddLShortcutTest { shortcutArgs.add(startupDirectory.asStringValue()); } - Path[] predefinedAppImage = new Path[1]; + var appImageCmd = JPackageCommand.helloAppImage() + .setArgumentValue("--name", "foo") + .setFakeRuntime(); - new PackageTest().addRunOnceInitializer(() -> { - var cmd = JPackageCommand.helloAppImage() - .setArgumentValue("--name", "foo") - .setFakeRuntime(); - - cmd.execute(); - - predefinedAppImage[0] = cmd.outputBundle(); - }).addInitializer(cmd -> { - cmd.removeArgumentWithValue("--input"); + new PackageTest() + .addRunOnceInitializer(appImageCmd::execute) + .usePredefinedAppImage(appImageCmd) + .addInitializer(cmd -> { cmd.setArgumentValue("--name", "AddLShortcutDir3Test"); - cmd.addArguments("--app-image", predefinedAppImage[0]); cmd.ignoreDefaultVerbose(true); }).addInitializer(cmd -> { cmd.addArguments(shortcutArgs); diff --git a/test/jdk/tools/jpackage/share/AddLauncherTest.java b/test/jdk/tools/jpackage/share/AddLauncherTest.java index 21f475cbd78..2a85de33051 100644 --- a/test/jdk/tools/jpackage/share/AddLauncherTest.java +++ b/test/jdk/tools/jpackage/share/AddLauncherTest.java @@ -275,10 +275,9 @@ public class AddLauncherTest { if (withPredefinedAppImage) { new PackageTest().addInitializer(cmd -> { cmd.setArgumentValue("--name", "Bar"); - // Should not have impact of launcher descriptions, but it does. + // Should not have impact on launcher descriptions, but it does. cmd.setArgumentValue("--description", "Installer"); - cmd.removeArgumentWithValue("--input").setArgumentValue("--app-image", target.cmd().orElseThrow().outputBundle()); - }).mutate(addLinuxShortcuts()).run(Action.CREATE_AND_UNPACK); + }).usePredefinedAppImage(target.cmd().orElseThrow()).mutate(addLinuxShortcuts()).run(Action.CREATE_AND_UNPACK); } } diff --git a/test/jdk/tools/jpackage/share/AppContentTest.java b/test/jdk/tools/jpackage/share/AppContentTest.java index 5b5734df61d..97c83bba57d 100644 --- a/test/jdk/tools/jpackage/share/AppContentTest.java +++ b/test/jdk/tools/jpackage/share/AppContentTest.java @@ -499,11 +499,11 @@ public class AppContentTest { return new FileContentFactory(() -> { var basedir = TKit.createTempDirectory("content").resolve(path); - for (var textFile : Map.ofEntries( + for (var textFile : List.of( entry("woods/moose", "The moose"), entry("woods/bear", "The bear"), entry("woods/trees/jay", "The gray jay") - ).entrySet()) { + )) { var src = basedir.resolve(textFile.getKey()); Files.createDirectories(src.getParent()); TKit.createTextFile(src, Stream.of(textFile.getValue())); diff --git a/test/jdk/tools/jpackage/share/AppImagePackageTest.java b/test/jdk/tools/jpackage/share/AppImagePackageTest.java index aacb76b122b..94eb086e4c6 100644 --- a/test/jdk/tools/jpackage/share/AppImagePackageTest.java +++ b/test/jdk/tools/jpackage/share/AppImagePackageTest.java @@ -62,15 +62,12 @@ public class AppImagePackageTest { @Test public static void test() { - var appImageCmd = JPackageCommand.helloAppImage() - .setArgumentValue("--dest", TKit.createTempDirectory("appimage")); + final var appImageCmd = createAppImageCommand(); new PackageTest() .addRunOnceInitializer(appImageCmd::execute) - .addInitializer(cmd -> { - cmd.addArguments("--app-image", appImageCmd.outputBundle()); - cmd.removeArgumentWithValue("--input"); - }).addBundleDesktopIntegrationVerifier(false).run(); + .usePredefinedAppImage(appImageCmd) + .addBundleDesktopIntegrationVerifier(false).run(); } /** @@ -85,10 +82,7 @@ public class AppImagePackageTest { @Parameter("false") public static void testEmpty(boolean withIcon) throws IOException { - var appImageCmd = JPackageCommand.helloAppImage() - .setFakeRuntime() - .setArgumentValue("--name", "EmptyAppImagePackageTest") - .setArgumentValue("--dest", TKit.createTempDirectory("appimage")); + final var appImageCmd = createAppImageCommand(); new PackageTest() .addRunOnceInitializer(appImageCmd::execute) @@ -116,12 +110,11 @@ public class AppImagePackageTest { TKit.trace("Done"); } }) + .usePredefinedAppImage(appImageCmd) .addInitializer(cmd -> { - cmd.addArguments("--app-image", appImageCmd.outputBundle()); if (withIcon) { - cmd.addArguments("--icon", iconPath("icon")); + cmd.setArgumentValue("--icon", iconPath("icon")); } - cmd.removeArgumentWithValue("--input"); cmd.excludeStandardAsserts( StandardAssert.MAIN_JAR_FILE, @@ -160,10 +153,8 @@ public class AppImagePackageTest { */ @Test public static void testBadAppImage3() { - Path appImageDir = TKit.createTempDirectory("appimage"); - JPackageCommand appImageCmd = JPackageCommand.helloAppImage(). - setFakeRuntime().setArgumentValue("--dest", appImageDir); + final var appImageCmd = createAppImageCommand(); configureBadAppImage(appImageCmd.outputBundle()).addRunOnceInitializer(() -> { appImageCmd.execute(); @@ -176,10 +167,8 @@ public class AppImagePackageTest { */ @Test public static void testBadAppImageFile() { - final var appImageRoot = TKit.createTempDirectory("appimage"); - final var appImageCmd = JPackageCommand.helloAppImage(). - setFakeRuntime().setArgumentValue("--dest", appImageRoot); + final var appImageCmd = createAppImageCommand(); final var appImageDir = appImageCmd.outputBundle(); @@ -202,13 +191,17 @@ public class AppImagePackageTest { private static PackageTest configureBadAppImage(Path appImageDir, CannedFormattedString expectedError) { return new PackageTest().addInitializer(cmd -> { - cmd.addArguments("--app-image", appImageDir); - cmd.removeArgumentWithValue("--input"); + cmd.usePredefinedAppImage(appImageDir); cmd.ignoreDefaultVerbose(true); // no "--verbose" option cmd.validateOutput(expectedError); }).setExpectedExitCode(1); } + private static JPackageCommand createAppImageCommand() { + final var appImageRoot = TKit.createTempDirectory("appimage"); + return JPackageCommand.helloAppImage().setFakeRuntime().setArgumentValue("--dest", appImageRoot); + } + private static Path iconPath(String name) { return TKit.TEST_SRC_ROOT.resolve(Path.of("resources", name + TKit.ICON_SUFFIX)); diff --git a/test/jdk/tools/jpackage/share/InstallDirTest.java b/test/jdk/tools/jpackage/share/InstallDirTest.java index 5106eed3fc6..db22077cd62 100644 --- a/test/jdk/tools/jpackage/share/InstallDirTest.java +++ b/test/jdk/tools/jpackage/share/InstallDirTest.java @@ -34,8 +34,6 @@ import jdk.jpackage.test.JPackageStringBundle; import jdk.jpackage.test.PackageTest; import jdk.jpackage.test.PackageType; import jdk.jpackage.test.RunnablePackageTest.Action; -import jdk.jpackage.test.TKit; -import jdk.jpackage.test.TKit.TextStreamVerifier; /** * Test --install-dir parameter. Output of the test should be @@ -113,9 +111,9 @@ public class InstallDirTest { .run(); } - record DmgTestSpec(Path installDir, boolean runtimeInstaller) { + record TestSpec(Path installDir, boolean runtimeInstaller) { - DmgTestSpec { + TestSpec { Objects.requireNonNull(installDir); } @@ -135,8 +133,8 @@ public class InstallDirTest { return this; } - DmgTestSpec create() { - return new DmgTestSpec(installDir, runtimeInstaller); + TestSpec create() { + return new TestSpec(installDir, runtimeInstaller); } private Path installDir; @@ -154,7 +152,7 @@ public class InstallDirTest { } void run() { - final var test = new PackageTest().forTypes(PackageType.MAC_DMG).ignoreBundleOutputDir(); + final var test = new PackageTest().ignoreBundleOutputDir(); if (runtimeInstaller) { test.addInitializer(cmd -> { cmd.removeArgumentWithValue("--input"); @@ -164,33 +162,33 @@ public class InstallDirTest { } test.addInitializer(JPackageCommand::setFakeRuntime).addInitializer(cmd -> { - cmd.addArguments("--install-dir", installDir); + cmd.setArgumentValue("--install-dir", installDir); }).run(Action.CREATE_AND_UNPACK); } } @Test(ifOS = OperatingSystem.MACOS) @ParameterSupplier - public static void testDmg(DmgTestSpec testSpec) { + public static void testMac(TestSpec testSpec) { testSpec.run(); } - public static List testDmg() { + public static List testMac() { return Stream.of( - DmgTestSpec.build().acceptedInstallDir("/foo"), - DmgTestSpec.build().acceptedInstallDir("/foo/bar"), - DmgTestSpec.build().acceptedInstallDir("/foo").runtimeInstaller(), - DmgTestSpec.build().acceptedInstallDir("/foo/bar").runtimeInstaller(), + TestSpec.build().acceptedInstallDir("/foo"), + TestSpec.build().acceptedInstallDir("/foo/bar"), + TestSpec.build().acceptedInstallDir("/foo").runtimeInstaller(), + TestSpec.build().acceptedInstallDir("/foo/bar").runtimeInstaller(), - DmgTestSpec.build().acceptedInstallDir("/Library/Java/JavaVirtualMachines"), - DmgTestSpec.build().acceptedInstallDir("/Applications").runtimeInstaller(), + TestSpec.build().acceptedInstallDir("/Library/Java/JavaVirtualMachines"), + TestSpec.build().acceptedInstallDir("/Applications").runtimeInstaller(), - DmgTestSpec.build().acceptedInstallDir("/Applications"), - DmgTestSpec.build().acceptedInstallDir("/Applications/foo/bar/buz"), + TestSpec.build().acceptedInstallDir("/Applications"), + TestSpec.build().acceptedInstallDir("/Applications/foo/bar/buz"), - DmgTestSpec.build().runtimeInstaller().acceptedInstallDir("/Library/Java/JavaVirtualMachines"), - DmgTestSpec.build().runtimeInstaller().acceptedInstallDir("/Library/Java/JavaVirtualMachines/foo/bar/buz") - ).map(DmgTestSpec.Builder::create).map(testSpec -> { + TestSpec.build().runtimeInstaller().acceptedInstallDir("/Library/Java/JavaVirtualMachines"), + TestSpec.build().runtimeInstaller().acceptedInstallDir("/Library/Java/JavaVirtualMachines/foo/bar/buz") + ).map(TestSpec.Builder::create).map(testSpec -> { return new Object[] { testSpec }; }).toList(); } diff --git a/test/jdk/tools/jpackage/share/MultiLauncherTwoPhaseTest.java b/test/jdk/tools/jpackage/share/MultiLauncherTwoPhaseTest.java index d348b5c170d..0786255893f 100644 --- a/test/jdk/tools/jpackage/share/MultiLauncherTwoPhaseTest.java +++ b/test/jdk/tools/jpackage/share/MultiLauncherTwoPhaseTest.java @@ -22,13 +22,12 @@ */ import java.nio.file.Path; -import java.io.IOException; import jdk.jpackage.test.AdditionalLauncher; +import jdk.jpackage.test.Annotations.Test; +import jdk.jpackage.test.JPackageCommand; import jdk.jpackage.test.PackageTest; import jdk.jpackage.test.PackageType; import jdk.jpackage.test.TKit; -import jdk.jpackage.test.Annotations.Test; -import jdk.jpackage.test.JPackageCommand; /** * Test multiple launchers in two phases. First test creates app image and then @@ -55,7 +54,7 @@ import jdk.jpackage.test.JPackageCommand; public class MultiLauncherTwoPhaseTest { @Test - public static void test() throws IOException { + public static void test() { Path appimageOutput = TKit.createTempDirectory("appimage"); JPackageCommand appImageCmd = JPackageCommand.helloAppImage() @@ -68,12 +67,9 @@ public class MultiLauncherTwoPhaseTest { launcher2.applyTo(appImageCmd); PackageTest packageTest = new PackageTest() - .addRunOnceInitializer(() -> appImageCmd.execute()) + .addRunOnceInitializer(appImageCmd::execute) .addBundleDesktopIntegrationVerifier(true) - .addInitializer(cmd -> { - cmd.addArguments("--app-image", appImageCmd.outputBundle()); - cmd.removeArgumentWithValue("--input"); - }) + .usePredefinedAppImage(appImageCmd) .forTypes(PackageType.WINDOWS) .addInitializer(cmd -> { cmd.addArguments("--win-shortcut", "--win-menu", diff --git a/test/jdk/tools/jpackage/share/MultiNameTwoPhaseTest.java b/test/jdk/tools/jpackage/share/MultiNameTwoPhaseTest.java index de8412c2839..6d4c597cb51 100644 --- a/test/jdk/tools/jpackage/share/MultiNameTwoPhaseTest.java +++ b/test/jdk/tools/jpackage/share/MultiNameTwoPhaseTest.java @@ -22,13 +22,12 @@ */ import java.nio.file.Path; -import java.io.IOException; +import jdk.jpackage.test.Annotations.Parameter; +import jdk.jpackage.test.Annotations.Test; +import jdk.jpackage.test.JPackageCommand; import jdk.jpackage.test.PackageTest; import jdk.jpackage.test.PackageType; import jdk.jpackage.test.TKit; -import jdk.jpackage.test.Annotations.Test; -import jdk.jpackage.test.Annotations.Parameter; -import jdk.jpackage.test.JPackageCommand; /** * Test creation of packages in tho phases with different names. @@ -58,9 +57,7 @@ public class MultiNameTwoPhaseTest { @Parameter({"MultiNameTest", ""}) @Parameter({"", "MultiNameTestInstaller"}) @Parameter({"", ""}) - public static void test(String... testArgs) throws IOException { - String appName = testArgs[0]; - String installName = testArgs[1]; + public static void test(String appName, String installName) { Path appimageOutput = TKit.createTempDirectory("appimage"); @@ -74,9 +71,8 @@ public class MultiNameTwoPhaseTest { PackageTest packageTest = new PackageTest() .addRunOnceInitializer(() -> appImageCmd.execute()) .addBundleDesktopIntegrationVerifier(true) + .usePredefinedAppImage(appImageCmd) .addInitializer(cmd -> { - cmd.addArguments("--app-image", appImageCmd.outputBundle()); - cmd.removeArgumentWithValue("--input"); cmd.removeArgumentWithValue("--name"); if (!installName.isEmpty()) { cmd.addArguments("--name", installName); diff --git a/test/jdk/tools/jpackage/share/PostImageScriptTest.java b/test/jdk/tools/jpackage/share/PostImageScriptTest.java index 68ded999e4a..5e9127d8fa8 100644 --- a/test/jdk/tools/jpackage/share/PostImageScriptTest.java +++ b/test/jdk/tools/jpackage/share/PostImageScriptTest.java @@ -107,10 +107,7 @@ public class PostImageScriptTest { }); } case EXTERNAL_APP_IMAGE -> { - test.addInitializer(cmd -> { - cmd.removeArgumentWithValue("--input"); - cmd.addArguments("--app-image", appImageCmd.outputBundle()); - }); + test.usePredefinedAppImage(appImageCmd); } } diff --git a/test/jdk/tools/jpackage/share/ServiceTest.java b/test/jdk/tools/jpackage/share/ServiceTest.java index 56e003f508c..226f8f16bdc 100644 --- a/test/jdk/tools/jpackage/share/ServiceTest.java +++ b/test/jdk/tools/jpackage/share/ServiceTest.java @@ -243,10 +243,7 @@ public class ServiceTest { new PackageTest().excludeTypes(MAC_DMG) .addRunOnceInitializer(appImageCmd.cmd().orElseThrow()::execute) - .addInitializer(cmd -> { - cmd.removeArgumentWithValue("--input"); - cmd.addArguments("--app-image", appImageCmd.cmd().orElseThrow().outputBundle()); - }) + .usePredefinedAppImage(appImageCmd.cmd().orElseThrow()) .addInitializer(cmd -> { if (mainLauncherAsService) { cmd.addArgument("--launcher-as-service"); diff --git a/test/jdk/tools/jpackage/windows/Win8282351Test.java b/test/jdk/tools/jpackage/windows/Win8282351Test.java index 55357437762..93731c7cfc6 100644 --- a/test/jdk/tools/jpackage/windows/Win8282351Test.java +++ b/test/jdk/tools/jpackage/windows/Win8282351Test.java @@ -24,9 +24,11 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import jdk.jpackage.test.PackageTest; -import jdk.jpackage.test.JPackageCommand; +import java.util.List; +import java.util.stream.Stream; import jdk.jpackage.test.Annotations.Test; +import jdk.jpackage.test.JPackageCommand; +import jdk.jpackage.test.PackageTest; import jdk.jpackage.test.RunnablePackageTest.Action; import jdk.jpackage.test.TKit; @@ -48,13 +50,13 @@ import jdk.jpackage.test.TKit; public class Win8282351Test { @Test - public void test() throws IOException { + public void test() { Path appimageOutput = TKit.createTempDirectory("appimage"); JPackageCommand appImageCmd = JPackageCommand.helloAppImage() .setFakeRuntime().setArgumentValue("--dest", appimageOutput); - String[] filesWithDollarCharsInNames = new String[]{ + var filesWithDollarCharsInNames = Stream.of( "Pane$$anon$$greater$1.class", "$", "$$", @@ -63,11 +65,11 @@ public class Win8282351Test { "$$$$$", "foo$.class", "1$b$$a$$$r$$$$.class" - }; + ).map(Path::of).toList(); - String[] dirsWithDollarCharsInNames = new String[]{ - Path.of("foo", String.join("/", filesWithDollarCharsInNames)).toString() - }; + var dirsWithDollarCharsInNames = List.of( + filesWithDollarCharsInNames.stream().reduce(Path.of("foo"), Path::resolve) + ); String name = appImageCmd.name() + "$-$$-$$$"; @@ -75,7 +77,7 @@ public class Win8282351Test { .addRunOnceInitializer(() -> { appImageCmd.execute(); for (var path : filesWithDollarCharsInNames) { - createImageFile(appImageCmd, Path.of(path)); + createImageFile(appImageCmd, path); } for (var path : dirsWithDollarCharsInNames) { @@ -83,16 +85,15 @@ public class Win8282351Test { appImageCmd.outputBundle().resolve(path)); } }) + .usePredefinedAppImage(appImageCmd) .addInitializer(cmd -> { cmd.setArgumentValue("--name", name); - cmd.addArguments("--app-image", appImageCmd.outputBundle()); - cmd.removeArgumentWithValue("--input"); cmd.addArgument("--win-menu"); cmd.addArgument("--win-shortcut"); }) .addInstallVerifier(cmd -> { for (var path : filesWithDollarCharsInNames) { - verifyImageFile(appImageCmd, Path.of(path)); + verifyImageFile(appImageCmd, path); } for (var path : dirsWithDollarCharsInNames) { From c6a88155b519a5d0b22f6009e75a0e6388601756 Mon Sep 17 00:00:00 2001 From: Patricio Chilano Mateo Date: Tue, 4 Nov 2025 23:32:41 +0000 Subject: [PATCH 028/512] 8369238: Allow virtual thread preemption on some common class initialization paths Co-authored-by: Alan Bateman Co-authored-by: Fei Yang Co-authored-by: Richard Reingruber Reviewed-by: sspitsyn, dholmes, coleenp, fbredberg --- .../continuationFreezeThaw_aarch64.inline.hpp | 46 +- .../continuationHelper_aarch64.inline.hpp | 3 + .../cpu/aarch64/interp_masm_aarch64.cpp | 99 +++- .../cpu/aarch64/interp_masm_aarch64.hpp | 16 +- .../cpu/aarch64/macroAssembler_aarch64.cpp | 16 +- .../cpu/aarch64/macroAssembler_aarch64.hpp | 1 + .../smallRegisterMap_aarch64.inline.hpp | 23 +- .../stackChunkFrameStream_aarch64.inline.hpp | 13 +- .../cpu/aarch64/templateTable_aarch64.cpp | 6 +- .../arm/continuationFreezeThaw_arm.inline.hpp | 14 + .../cpu/arm/smallRegisterMap_arm.inline.hpp | 23 +- .../arm/stackChunkFrameStream_arm.inline.hpp | 3 +- .../ppc/continuationFreezeThaw_ppc.inline.hpp | 35 +- .../cpu/ppc/continuationHelper_ppc.inline.hpp | 3 + src/hotspot/cpu/ppc/frame_ppc.hpp | 2 +- src/hotspot/cpu/ppc/interp_masm_ppc.hpp | 4 +- src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp | 65 ++- src/hotspot/cpu/ppc/macroAssembler_ppc.cpp | 35 +- src/hotspot/cpu/ppc/macroAssembler_ppc.hpp | 22 +- .../cpu/ppc/macroAssembler_ppc.inline.hpp | 3 +- .../cpu/ppc/smallRegisterMap_ppc.inline.hpp | 24 +- .../ppc/stackChunkFrameStream_ppc.inline.hpp | 13 +- .../ppc/templateInterpreterGenerator_ppc.cpp | 7 +- src/hotspot/cpu/ppc/templateTable_ppc_64.cpp | 6 +- .../continuationFreezeThaw_riscv.inline.hpp | 46 +- .../riscv/continuationHelper_riscv.inline.hpp | 3 + src/hotspot/cpu/riscv/interp_masm_riscv.cpp | 100 +++- src/hotspot/cpu/riscv/interp_masm_riscv.hpp | 19 +- .../cpu/riscv/macroAssembler_riscv.cpp | 17 +- .../cpu/riscv/macroAssembler_riscv.hpp | 1 + .../riscv/smallRegisterMap_riscv.inline.hpp | 24 +- .../stackChunkFrameStream_riscv.inline.hpp | 13 +- src/hotspot/cpu/riscv/templateTable_riscv.cpp | 6 +- .../continuationFreezeThaw_s390.inline.hpp | 14 + .../cpu/s390/smallRegisterMap_s390.inline.hpp | 23 +- .../stackChunkFrameStream_s390.inline.hpp | 3 +- .../x86/continuationFreezeThaw_x86.inline.hpp | 46 +- .../cpu/x86/continuationHelper_x86.inline.hpp | 3 + src/hotspot/cpu/x86/interp_masm_x86.cpp | 94 +++- src/hotspot/cpu/x86/interp_masm_x86.hpp | 15 +- .../cpu/x86/smallRegisterMap_x86.inline.hpp | 20 +- .../x86/stackChunkFrameStream_x86.inline.hpp | 13 +- src/hotspot/cpu/x86/templateTable_x86.cpp | 8 +- .../continuationFreezeThaw_zero.inline.hpp | 14 + .../cpu/zero/smallRegisterMap_zero.inline.hpp | 23 +- .../stackChunkFrameStream_zero.inline.hpp | 3 +- .../share/cds/aotConstantPoolResolver.cpp | 4 +- src/hotspot/share/cds/heapShared.cpp | 3 +- src/hotspot/share/ci/ciField.cpp | 2 +- src/hotspot/share/classfile/javaClasses.cpp | 6 + src/hotspot/share/classfile/javaClasses.hpp | 2 + src/hotspot/share/classfile/vmClassMacros.hpp | 1 + src/hotspot/share/classfile/vmSymbols.hpp | 3 + .../share/interpreter/interpreterRuntime.cpp | 40 +- .../share/interpreter/interpreterRuntime.hpp | 13 +- .../share/interpreter/linkResolver.cpp | 50 +- .../share/interpreter/linkResolver.hpp | 24 +- src/hotspot/share/jvmci/jvmciCompilerToVM.cpp | 2 +- src/hotspot/share/memory/universe.cpp | 6 + src/hotspot/share/memory/universe.hpp | 1 + src/hotspot/share/oops/instanceKlass.cpp | 59 ++- src/hotspot/share/oops/instanceKlass.hpp | 1 + .../share/oops/instanceStackChunkKlass.cpp | 3 +- src/hotspot/share/oops/klass.cpp | 4 + src/hotspot/share/oops/klass.hpp | 1 + src/hotspot/share/oops/stackChunkOop.cpp | 19 +- src/hotspot/share/oops/stackChunkOop.hpp | 6 + .../share/oops/stackChunkOop.inline.hpp | 17 +- src/hotspot/share/prims/jvmtiExport.cpp | 14 +- src/hotspot/share/prims/jvmtiExport.hpp | 17 +- src/hotspot/share/prims/methodHandles.cpp | 4 +- src/hotspot/share/runtime/continuation.hpp | 5 +- .../share/runtime/continuationFreezeThaw.cpp | 361 +++++++++++-- .../share/runtime/continuationJavaClasses.cpp | 2 + .../share/runtime/continuationJavaClasses.hpp | 10 + .../continuationJavaClasses.inline.hpp | 16 + src/hotspot/share/runtime/frame.cpp | 36 +- src/hotspot/share/runtime/frame.hpp | 3 +- src/hotspot/share/runtime/javaCalls.cpp | 3 +- src/hotspot/share/runtime/javaThread.cpp | 4 + src/hotspot/share/runtime/javaThread.hpp | 47 +- src/hotspot/share/runtime/objectMonitor.cpp | 28 +- src/hotspot/share/runtime/objectMonitor.hpp | 6 +- .../share/runtime/smallRegisterMap.inline.hpp | 15 + .../share/runtime/stackChunkFrameStream.hpp | 16 +- .../runtime/stackChunkFrameStream.inline.hpp | 7 +- src/hotspot/share/runtime/stackValue.cpp | 4 +- src/hotspot/share/runtime/synchronizer.cpp | 35 +- src/hotspot/share/runtime/synchronizer.hpp | 7 +- .../share/runtime/synchronizer.inline.hpp | 4 + src/hotspot/share/runtime/threads.cpp | 1 + src/hotspot/share/utilities/exceptions.cpp | 31 ++ src/hotspot/share/utilities/exceptions.hpp | 10 + .../classes/java/lang/VirtualThread.java | 6 +- .../jdk/internal/vm/PreemptedException.java | 41 ++ test/hotspot/gtest/oops/test_markWord.cpp | 2 +- .../SingleStepKlassInit.java | 90 ++++ .../libSingleStepKlassInit.cpp | 86 +++ .../java/lang/Thread/virtual/JfrEvents.java | 10 +- .../java/lang/Thread/virtual/KlassInit.java | 490 ++++++++++++++++++ .../lang/Thread/virtual/YieldQueuing.java | 8 + .../stress/LotsOfContendedMonitorEnter.java | 25 +- 102 files changed, 2252 insertions(+), 449 deletions(-) create mode 100644 src/java.base/share/classes/jdk/internal/vm/PreemptedException.java create mode 100644 test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/SingleStepKlassInit.java create mode 100644 test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/libSingleStepKlassInit.cpp create mode 100644 test/jdk/java/lang/Thread/virtual/KlassInit.java diff --git a/src/hotspot/cpu/aarch64/continuationFreezeThaw_aarch64.inline.hpp b/src/hotspot/cpu/aarch64/continuationFreezeThaw_aarch64.inline.hpp index 1fd59b81d9e..a1a5209de7a 100644 --- a/src/hotspot/cpu/aarch64/continuationFreezeThaw_aarch64.inline.hpp +++ b/src/hotspot/cpu/aarch64/continuationFreezeThaw_aarch64.inline.hpp @@ -200,6 +200,41 @@ inline void FreezeBase::patch_pd_unused(intptr_t* sp) { *fp_addr = badAddressVal; } +inline intptr_t* AnchorMark::anchor_mark_set_pd() { + intptr_t* sp = _top_frame.sp(); + if (_top_frame.is_interpreted_frame()) { + // In case the top frame is interpreted we need to set up the anchor using + // the last_sp saved in the frame (remove possible alignment added while + // thawing, see ThawBase::finish_thaw()). We also clear last_sp to match + // the behavior when calling the VM from the interpreter (we check for this + // in FreezeBase::prepare_freeze_interpreted_top_frame, which can be reached + // if preempting again at redo_vmcall()). + _last_sp_from_frame = _top_frame.interpreter_frame_last_sp(); + assert(_last_sp_from_frame != nullptr, ""); + _top_frame.interpreter_frame_set_last_sp(nullptr); + if (sp != _last_sp_from_frame) { + // We need to move up return pc and fp. They will be read next in + // set_anchor() and set as _last_Java_pc and _last_Java_fp respectively. + _last_sp_from_frame[-1] = (intptr_t)_top_frame.pc(); + _last_sp_from_frame[-2] = (intptr_t)_top_frame.fp(); + } + _is_interpreted = true; + sp = _last_sp_from_frame; + } + return sp; +} + +inline void AnchorMark::anchor_mark_clear_pd() { + if (_is_interpreted) { + // Restore last_sp_from_frame and possibly overwritten pc. + _top_frame.interpreter_frame_set_last_sp(_last_sp_from_frame); + intptr_t* sp = _top_frame.sp(); + if (sp != _last_sp_from_frame) { + sp[-1] = (intptr_t)_top_frame.pc(); + } + } +} + //////// Thaw // Fast path @@ -304,10 +339,17 @@ inline intptr_t* ThawBase::push_cleanup_continuation() { frame enterSpecial = new_entry_frame(); intptr_t* sp = enterSpecial.sp(); + // We only need to set the return pc. rfp will be restored back in gen_continuation_enter(). sp[-1] = (intptr_t)ContinuationEntry::cleanup_pc(); - sp[-2] = (intptr_t)enterSpecial.fp(); + return sp; +} - log_develop_trace(continuations, preempt)("push_cleanup_continuation initial sp: " INTPTR_FORMAT " final sp: " INTPTR_FORMAT, p2i(sp + 2 * frame::metadata_words), p2i(sp)); +inline intptr_t* ThawBase::push_preempt_adapter() { + frame enterSpecial = new_entry_frame(); + intptr_t* sp = enterSpecial.sp(); + + // We only need to set the return pc. rfp will be restored back in generate_cont_preempt_stub(). + sp[-1] = (intptr_t)StubRoutines::cont_preempt_stub(); return sp; } diff --git a/src/hotspot/cpu/aarch64/continuationHelper_aarch64.inline.hpp b/src/hotspot/cpu/aarch64/continuationHelper_aarch64.inline.hpp index e39580369db..19a892f5ff8 100644 --- a/src/hotspot/cpu/aarch64/continuationHelper_aarch64.inline.hpp +++ b/src/hotspot/cpu/aarch64/continuationHelper_aarch64.inline.hpp @@ -52,6 +52,9 @@ static inline void patch_return_pc_with_preempt_stub(frame& f) { // The target will check for preemption once it returns to the interpreter // or the native wrapper code and will manually jump to the preempt stub. JavaThread *thread = JavaThread::current(); + DEBUG_ONLY(Method* m = f.is_interpreted_frame() ? f.interpreter_frame_method() : f.cb()->as_nmethod()->method();) + assert(m->is_object_wait0() || thread->interp_at_preemptable_vmcall_cnt() > 0, + "preemptable VM call not using call_VM_preemptable"); thread->set_preempt_alternate_return(StubRoutines::cont_preempt_stub()); } } diff --git a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp index 6f8795494a2..cf4d5a63496 100644 --- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp @@ -479,6 +479,14 @@ void InterpreterMacroAssembler::remove_activation(TosState state, // result check if synchronized method Label unlocked, unlock, no_unlock; +#ifdef ASSERT + Label not_preempted; + ldr(rscratch1, Address(rthread, JavaThread::preempt_alternate_return_offset())); + cbz(rscratch1, not_preempted); + stop("remove_activation: should not have alternate return address set"); + bind(not_preempted); +#endif /* ASSERT */ + // get the value of _do_not_unlock_if_synchronized into r3 const Address do_not_unlock_if_synchronized(rthread, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset())); @@ -1371,6 +1379,7 @@ void InterpreterMacroAssembler::call_VM_leaf_base(address entry_point, void InterpreterMacroAssembler::call_VM_base(Register oop_result, Register java_thread, Register last_java_sp, + Label* return_pc, address entry_point, int number_of_arguments, bool check_exceptions) { @@ -1394,26 +1403,34 @@ void InterpreterMacroAssembler::call_VM_base(Register oop_result, #endif /* ASSERT */ // super call MacroAssembler::call_VM_base(oop_result, noreg, last_java_sp, - entry_point, number_of_arguments, - check_exceptions); + return_pc, entry_point, + number_of_arguments, check_exceptions); // interpreter specific restore_bcp(); restore_locals(); } -void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, - address entry_point, - Register arg_1) { - assert(arg_1 == c_rarg1, ""); +void InterpreterMacroAssembler::call_VM_preemptable_helper(Register oop_result, + address entry_point, + int number_of_arguments, + bool check_exceptions) { + assert(InterpreterRuntime::is_preemptable_call(entry_point), "VM call not preemptable, should use call_VM()"); Label resume_pc, not_preempted; #ifdef ASSERT { - Label L; + Label L1, L2; ldr(rscratch1, Address(rthread, JavaThread::preempt_alternate_return_offset())); - cbz(rscratch1, L); - stop("Should not have alternate return address set"); - bind(L); + cbz(rscratch1, L1); + stop("call_VM_preemptable_helper: Should not have alternate return address set"); + bind(L1); + // We check this counter in patch_return_pc_with_preempt_stub() during freeze. + incrementw(Address(rthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + ldrw(rscratch1, Address(rthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + cmpw(rscratch1, 0); + br(Assembler::GT, L2); + stop("call_VM_preemptable_helper: should be > 0"); + bind(L2); } #endif /* ASSERT */ @@ -1421,12 +1438,23 @@ void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, push_cont_fastpath(); // Make VM call. In case of preemption set last_pc to the one we want to resume to. - adr(rscratch1, resume_pc); - str(rscratch1, Address(rthread, JavaThread::last_Java_pc_offset())); - call_VM_base(oop_result, noreg, noreg, entry_point, 1, false /*check_exceptions*/); + // Note: call_VM_base will use resume_pc label to set last_Java_pc. + call_VM_base(noreg, noreg, noreg, &resume_pc, entry_point, number_of_arguments, false /*check_exceptions*/); pop_cont_fastpath(); +#ifdef ASSERT + { + Label L; + decrementw(Address(rthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + ldrw(rscratch1, Address(rthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + cmpw(rscratch1, 0); + br(Assembler::GE, L); + stop("call_VM_preemptable_helper: should be >= 0"); + bind(L); + } +#endif /* ASSERT */ + // Check if preempted. ldr(rscratch1, Address(rthread, JavaThread::preempt_alternate_return_offset())); cbz(rscratch1, not_preempted); @@ -1438,6 +1466,51 @@ void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, restore_after_resume(false /* is_native */); bind(not_preempted); + if (check_exceptions) { + // check for pending exceptions + ldr(rscratch1, Address(rthread, in_bytes(Thread::pending_exception_offset()))); + Label ok; + cbz(rscratch1, ok); + lea(rscratch1, RuntimeAddress(StubRoutines::forward_exception_entry())); + br(rscratch1); + bind(ok); + } + + // get oop result if there is one and reset the value in the thread + if (oop_result->is_valid()) { + get_vm_result_oop(oop_result, rthread); + } +} + +static void pass_arg1(MacroAssembler* masm, Register arg) { + if (c_rarg1 != arg ) { + masm->mov(c_rarg1, arg); + } +} + +static void pass_arg2(MacroAssembler* masm, Register arg) { + if (c_rarg2 != arg ) { + masm->mov(c_rarg2, arg); + } +} + +void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + bool check_exceptions) { + pass_arg1(this, arg_1); + call_VM_preemptable_helper(oop_result, entry_point, 1, check_exceptions); +} + +void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + Register arg_2, + bool check_exceptions) { + LP64_ONLY(assert_different_registers(arg_1, c_rarg2)); + pass_arg2(this, arg_2); + pass_arg1(this, arg_1); + call_VM_preemptable_helper(oop_result, entry_point, 2, check_exceptions); } void InterpreterMacroAssembler::restore_after_resume(bool is_native) { diff --git a/src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp b/src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp index e07e6e49f53..2b230a3b73e 100644 --- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp @@ -45,6 +45,7 @@ class InterpreterMacroAssembler: public MacroAssembler { virtual void call_VM_base(Register oop_result, Register java_thread, Register last_java_sp, + Label* return_pc, address entry_point, int number_of_arguments, bool check_exceptions); @@ -58,11 +59,24 @@ class InterpreterMacroAssembler: public MacroAssembler { void load_earlyret_value(TosState state); + // Use for vthread preemption void call_VM_preemptable(Register oop_result, address entry_point, - Register arg_1); + Register arg_1, + bool check_exceptions = true); + void call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + Register arg_2, + bool check_exceptions = true); void restore_after_resume(bool is_native); + private: + void call_VM_preemptable_helper(Register oop_result, + address entry_point, + int number_of_arguments, + bool check_exceptions); + public: void jump_to_entry(address entry); virtual void check_and_handle_popframe(Register java_thread); diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp index 14009789319..e6dd29f105a 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp @@ -743,13 +743,10 @@ static void pass_arg3(MacroAssembler* masm, Register arg) { } } -static bool is_preemptable(address entry_point) { - return entry_point == CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter); -} - void MacroAssembler::call_VM_base(Register oop_result, Register java_thread, Register last_java_sp, + Label* return_pc, address entry_point, int number_of_arguments, bool check_exceptions) { @@ -782,12 +779,7 @@ void MacroAssembler::call_VM_base(Register oop_result, assert(last_java_sp != rfp, "can't use rfp"); Label l; - if (is_preemptable(entry_point)) { - // skip setting last_pc since we already set it to desired value. - set_last_Java_frame(last_java_sp, rfp, noreg, rscratch1); - } else { - set_last_Java_frame(last_java_sp, rfp, l, rscratch1); - } + set_last_Java_frame(last_java_sp, rfp, return_pc != nullptr ? *return_pc : l, rscratch1); // do the call, remove parameters MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments, &l); @@ -822,7 +814,7 @@ void MacroAssembler::call_VM_base(Register oop_result, } void MacroAssembler::call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions) { - call_VM_base(oop_result, noreg, noreg, entry_point, number_of_arguments, check_exceptions); + call_VM_base(oop_result, noreg, noreg, nullptr, entry_point, number_of_arguments, check_exceptions); } // Check the entry target is always reachable from any branch. @@ -1080,7 +1072,7 @@ void MacroAssembler::call_VM(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions) { - call_VM_base(oop_result, rthread, last_java_sp, entry_point, number_of_arguments, check_exceptions); + call_VM_base(oop_result, rthread, last_java_sp, nullptr, entry_point, number_of_arguments, check_exceptions); } void MacroAssembler::call_VM(Register oop_result, diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp index d5a16e424e4..7bfc6c562e3 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp @@ -81,6 +81,7 @@ class MacroAssembler: public Assembler { Register oop_result, // where an oop-result ends up if any; use noreg otherwise Register java_thread, // the thread if computed before ; use noreg otherwise Register last_java_sp, // to set up last_Java_frame in stubs; use noreg otherwise + Label* return_pc, // to set up last_Java_frame; use nullptr otherwise address entry_point, // the entry point int number_of_arguments, // the number of arguments (w/o thread) to pop after the call bool check_exceptions // whether to check for pending exceptions after return diff --git a/src/hotspot/cpu/aarch64/smallRegisterMap_aarch64.inline.hpp b/src/hotspot/cpu/aarch64/smallRegisterMap_aarch64.inline.hpp index 45e8f2f4202..dd00e765eea 100644 --- a/src/hotspot/cpu/aarch64/smallRegisterMap_aarch64.inline.hpp +++ b/src/hotspot/cpu/aarch64/smallRegisterMap_aarch64.inline.hpp @@ -28,18 +28,17 @@ #include "runtime/frame.inline.hpp" #include "runtime/registerMap.hpp" -// Java frames don't have callee saved registers (except for rfp), so we can use a smaller RegisterMap -class SmallRegisterMap { - constexpr SmallRegisterMap() = default; - ~SmallRegisterMap() = default; - NONCOPYABLE(SmallRegisterMap); +class SmallRegisterMap; + +// Java frames don't have callee saved registers (except for rfp), so we can use a smaller RegisterMap +template +class SmallRegisterMapType { + friend SmallRegisterMap; + + constexpr SmallRegisterMapType() = default; + ~SmallRegisterMapType() = default; + NONCOPYABLE(SmallRegisterMapType); -public: - static const SmallRegisterMap* instance() { - static constexpr SmallRegisterMap the_instance{}; - return &the_instance; - } -private: static void assert_is_rfp(VMReg r) NOT_DEBUG_RETURN DEBUG_ONLY({ assert (r == rfp->as_VMReg() || r == rfp->as_VMReg()->next(), "Reg: %s", r->name()); }) public: @@ -71,7 +70,7 @@ public: bool update_map() const { return false; } bool walk_cont() const { return false; } - bool include_argument_oops() const { return false; } + bool include_argument_oops() const { return IncludeArgs; } void set_include_argument_oops(bool f) {} bool in_cont() const { return false; } stackChunkHandle stack_chunk() const { return stackChunkHandle(); } diff --git a/src/hotspot/cpu/aarch64/stackChunkFrameStream_aarch64.inline.hpp b/src/hotspot/cpu/aarch64/stackChunkFrameStream_aarch64.inline.hpp index 8a221f13772..8d2f013e116 100644 --- a/src/hotspot/cpu/aarch64/stackChunkFrameStream_aarch64.inline.hpp +++ b/src/hotspot/cpu/aarch64/stackChunkFrameStream_aarch64.inline.hpp @@ -108,17 +108,14 @@ inline int StackChunkFrameStream::interpreter_frame_stack_argsize() } template -inline int StackChunkFrameStream::interpreter_frame_num_oops() const { +template +inline int StackChunkFrameStream::interpreter_frame_num_oops(RegisterMapT* map) const { assert_is_interpreted_and_frame_type_mixed(); ResourceMark rm; - InterpreterOopMap mask; frame f = to_frame(); - f.interpreted_frame_oop_map(&mask); - return mask.num_oops() - + 1 // for the mirror oop - + (f.interpreter_frame_method()->is_native() ? 1 : 0) // temp oop slot - + pointer_delta_as_int((intptr_t*)f.interpreter_frame_monitor_begin(), - (intptr_t*)f.interpreter_frame_monitor_end())/BasicObjectLock::size(); + InterpreterOopCount closure; + f.oops_interpreted_do(&closure, map); + return closure.count(); } template<> diff --git a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp index f4774f31bbd..cde142b39ac 100644 --- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp @@ -2304,7 +2304,7 @@ void TemplateTable::resolve_cache_and_index_for_method(int byte_no, // Class initialization barrier slow path lands here as well. address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ mov(temp, (int) code); - __ call_VM(noreg, entry, temp); + __ call_VM_preemptable(noreg, entry, temp); // Update registers with resolved info __ load_method_entry(Rcache, index); @@ -2356,7 +2356,7 @@ void TemplateTable::resolve_cache_and_index_for_field(int byte_no, // Class initialization barrier slow path lands here as well. address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ mov(temp, (int) code); - __ call_VM(noreg, entry, temp); + __ call_VM_preemptable(noreg, entry, temp); // Update registers with resolved info __ load_field_entry(Rcache, index); @@ -3700,7 +3700,7 @@ void TemplateTable::_new() { __ bind(slow_case); __ get_constant_pool(c_rarg1); __ get_unsigned_2_byte_index_at_bcp(c_rarg2, 1); - call_VM(r0, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2); + __ call_VM_preemptable(r0, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2); __ verify_oop(r0); // continue diff --git a/src/hotspot/cpu/arm/continuationFreezeThaw_arm.inline.hpp b/src/hotspot/cpu/arm/continuationFreezeThaw_arm.inline.hpp index 389cf4dc936..05172ffeba3 100644 --- a/src/hotspot/cpu/arm/continuationFreezeThaw_arm.inline.hpp +++ b/src/hotspot/cpu/arm/continuationFreezeThaw_arm.inline.hpp @@ -68,6 +68,15 @@ inline void FreezeBase::patch_stack_pd(intptr_t* frame_sp, intptr_t* heap_sp) { Unimplemented(); } +inline intptr_t* AnchorMark::anchor_mark_set_pd() { + Unimplemented(); + return nullptr; +} + +inline void AnchorMark::anchor_mark_clear_pd() { + Unimplemented(); +} + inline frame ThawBase::new_entry_frame() { Unimplemented(); return frame(); @@ -100,6 +109,11 @@ inline intptr_t* ThawBase::push_cleanup_continuation() { return nullptr; } +inline intptr_t* ThawBase::push_preempt_adapter() { + Unimplemented(); + return nullptr; +} + template inline void Thaw::patch_caller_links(intptr_t* sp, intptr_t* bottom) { Unimplemented(); diff --git a/src/hotspot/cpu/arm/smallRegisterMap_arm.inline.hpp b/src/hotspot/cpu/arm/smallRegisterMap_arm.inline.hpp index 903a71aab53..1223384d3b7 100644 --- a/src/hotspot/cpu/arm/smallRegisterMap_arm.inline.hpp +++ b/src/hotspot/cpu/arm/smallRegisterMap_arm.inline.hpp @@ -28,18 +28,17 @@ #include "runtime/frame.inline.hpp" #include "runtime/registerMap.hpp" -// Java frames don't have callee saved registers (except for rfp), so we can use a smaller RegisterMap -class SmallRegisterMap { - constexpr SmallRegisterMap() = default; - ~SmallRegisterMap() = default; - NONCOPYABLE(SmallRegisterMap); +class SmallRegisterMap; + +// Java frames don't have callee saved registers (except for rfp), so we can use a smaller RegisterMap +template +class SmallRegisterMapType { + friend SmallRegisterMap; + + constexpr SmallRegisterMapType() = default; + ~SmallRegisterMapType() = default; + NONCOPYABLE(SmallRegisterMapType); -public: - static const SmallRegisterMap* instance() { - static constexpr SmallRegisterMap the_instance{}; - return &the_instance; - } -private: static void assert_is_rfp(VMReg r) NOT_DEBUG_RETURN DEBUG_ONLY({ Unimplemented(); }) public: @@ -69,7 +68,7 @@ public: bool update_map() const { return false; } bool walk_cont() const { return false; } - bool include_argument_oops() const { return false; } + bool include_argument_oops() const { return IncludeArgs; } void set_include_argument_oops(bool f) {} bool in_cont() const { return false; } stackChunkHandle stack_chunk() const { return stackChunkHandle(); } diff --git a/src/hotspot/cpu/arm/stackChunkFrameStream_arm.inline.hpp b/src/hotspot/cpu/arm/stackChunkFrameStream_arm.inline.hpp index ae97ec60f32..2da68d6d5ee 100644 --- a/src/hotspot/cpu/arm/stackChunkFrameStream_arm.inline.hpp +++ b/src/hotspot/cpu/arm/stackChunkFrameStream_arm.inline.hpp @@ -85,7 +85,8 @@ inline int StackChunkFrameStream::interpreter_frame_stack_argsize() } template -inline int StackChunkFrameStream::interpreter_frame_num_oops() const { +template +inline int StackChunkFrameStream::interpreter_frame_num_oops(RegisterMapT* map) const { Unimplemented(); return 0; } diff --git a/src/hotspot/cpu/ppc/continuationFreezeThaw_ppc.inline.hpp b/src/hotspot/cpu/ppc/continuationFreezeThaw_ppc.inline.hpp index fa878b07d43..e35bdae70d6 100644 --- a/src/hotspot/cpu/ppc/continuationFreezeThaw_ppc.inline.hpp +++ b/src/hotspot/cpu/ppc/continuationFreezeThaw_ppc.inline.hpp @@ -72,9 +72,16 @@ void FreezeBase::adjust_interpreted_frame_unextended_sp(frame& f) { } inline void FreezeBase::prepare_freeze_interpreted_top_frame(frame& f) { - // nothing to do - DEBUG_ONLY( intptr_t* lspp = (intptr_t*) &(f.get_ijava_state()->top_frame_sp); ) - assert(*lspp == f.unextended_sp() - f.fp(), "should be " INTPTR_FORMAT " usp:" INTPTR_FORMAT " fp:" INTPTR_FORMAT, *lspp, p2i(f.unextended_sp()), p2i(f.fp())); + // Nothing to do. We don't save a last sp since we cannot use sp as esp. + // Instead the top frame is trimmed when making an i2i call. The original + // top_frame_sp is set when the frame is pushed (see generate_fixed_frame()). + // An interpreter top frame that was just thawed is resized to top_frame_sp by the + // resume adapter (see generate_cont_resume_interpreter_adapter()). So the assertion is + // false, if we freeze again right after thawing as we do when redoing a vm call wasn't + // successful. + assert(_thread->interp_redoing_vm_call() || + ((intptr_t*)f.at_relative(ijava_idx(top_frame_sp)) == f.unextended_sp()), + "top_frame_sp:" PTR_FORMAT " usp:" PTR_FORMAT, f.at_relative(ijava_idx(top_frame_sp)), p2i(f.unextended_sp())); } inline void FreezeBase::relativize_interpreted_frame_metadata(const frame& f, const frame& hf) { @@ -337,6 +344,15 @@ inline void FreezeBase::patch_pd(frame& hf, const frame& caller) { inline void FreezeBase::patch_pd_unused(intptr_t* sp) { } +inline intptr_t* AnchorMark::anchor_mark_set_pd() { + // Nothing to do on PPC because the interpreter does not use SP as expression stack pointer. + // Instead there is a dedicated register R15_esp which is not affected by VM calls. + return _top_frame.sp(); +} + +inline void AnchorMark::anchor_mark_clear_pd() { +} + //////// Thaw // Fast path @@ -566,6 +582,19 @@ inline intptr_t* ThawBase::push_cleanup_continuation() { return enterSpecial.sp(); } +inline intptr_t* ThawBase::push_preempt_adapter() { + frame enterSpecial = new_entry_frame(); + frame::common_abi* enterSpecial_abi = (frame::common_abi*)enterSpecial.sp(); + + enterSpecial_abi->lr = (intptr_t)StubRoutines::cont_preempt_stub(); + + log_develop_trace(continuations, preempt)("push_preempt_adapter enterSpecial sp: " INTPTR_FORMAT " adapter pc: " INTPTR_FORMAT, + p2i(enterSpecial_abi), + p2i(StubRoutines::cont_preempt_stub())); + + return enterSpecial.sp(); +} + inline void ThawBase::patch_pd(frame& f, const frame& caller) { patch_callee_link(caller, caller.fp()); // Prevent assertion if f gets deoptimized right away before it's fully initialized diff --git a/src/hotspot/cpu/ppc/continuationHelper_ppc.inline.hpp b/src/hotspot/cpu/ppc/continuationHelper_ppc.inline.hpp index d55bf0da3e3..7c6d19d442b 100644 --- a/src/hotspot/cpu/ppc/continuationHelper_ppc.inline.hpp +++ b/src/hotspot/cpu/ppc/continuationHelper_ppc.inline.hpp @@ -37,6 +37,9 @@ static inline void patch_return_pc_with_preempt_stub(frame& f) { // The target will check for preemption once it returns to the interpreter // or the native wrapper code and will manually jump to the preempt stub. JavaThread *thread = JavaThread::current(); + DEBUG_ONLY(Method* m = f.is_interpreted_frame() ? f.interpreter_frame_method() : f.cb()->as_nmethod()->method();) + assert(m->is_object_wait0() || thread->interp_at_preemptable_vmcall_cnt() > 0, + "preemptable VM call not using call_VM_preemptable"); thread->set_preempt_alternate_return(StubRoutines::cont_preempt_stub()); } } diff --git a/src/hotspot/cpu/ppc/frame_ppc.hpp b/src/hotspot/cpu/ppc/frame_ppc.hpp index 188015f5cd9..ebe5d24c072 100644 --- a/src/hotspot/cpu/ppc/frame_ppc.hpp +++ b/src/hotspot/cpu/ppc/frame_ppc.hpp @@ -215,7 +215,7 @@ uint64_t bcp; uint64_t esp; uint64_t mdx; - uint64_t top_frame_sp; // Maybe define parent_frame_abi and move there. + uint64_t top_frame_sp; // Original sp to be restored when returning from an i2i call uint64_t sender_sp; // Slots only needed for native calls. Maybe better to move elsewhere. uint64_t oop_tmp; diff --git a/src/hotspot/cpu/ppc/interp_masm_ppc.hpp b/src/hotspot/cpu/ppc/interp_masm_ppc.hpp index 9140dd7ca4e..4ea33ebaf63 100644 --- a/src/hotspot/cpu/ppc/interp_masm_ppc.hpp +++ b/src/hotspot/cpu/ppc/interp_masm_ppc.hpp @@ -49,12 +49,14 @@ class InterpreterMacroAssembler: public MacroAssembler { virtual void check_and_handle_popframe(Register scratch_reg); virtual void check_and_handle_earlyret(Register scratch_reg); + // Use for vthread preemption void call_VM_preemptable(Register oop_result, address entry_point, Register arg_1, bool check_exceptions = true); + void call_VM_preemptable(Register oop_result, address entry_point, Register arg_1, Register arg_2, bool check_exceptions = true); void restore_after_resume(Register fp); // R22 and R31 are preserved when a vthread gets preempted in the interpreter. // The interpreter already assumes that these registers are nonvolatile across native calls. bool nonvolatile_accross_vthread_preemtion(Register r) const { - return r->is_nonvolatile() && ((r == R22) || (r == R31)); + return r->is_nonvolatile() && ((r == R24) || (r == R31)); } // Base routine for all dispatches. diff --git a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp index 503cc259432..0d32ea8003e 100644 --- a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp @@ -108,6 +108,8 @@ void InterpreterMacroAssembler::dispatch_prolog(TosState state, int bcp_incr) { // own dispatch. The dispatch address in R24_dispatch_addr is used for the // dispatch. void InterpreterMacroAssembler::dispatch_epilog(TosState state, int bcp_incr) { + assert(nonvolatile_accross_vthread_preemtion(R24_dispatch_addr), + "Requirement of field accesses (e.g. putstatic)"); if (bcp_incr) { addi(R14_bcp, R14_bcp, bcp_incr); } mtctr(R24_dispatch_addr); bcctr(bcondAlways, 0, bhintbhBCCTRisNotPredictable); @@ -862,6 +864,9 @@ void InterpreterMacroAssembler::remove_activation(TosState state, bool install_monitor_exception) { BLOCK_COMMENT("remove_activation {"); + asm_assert_mem8_is_zero(in_bytes(JavaThread::preempt_alternate_return_offset()), R16_thread, + "remove_activation: should not have alternate return address set"); + unlock_if_synchronized_method(state, throw_monitor_exception, install_monitor_exception); // The below poll is for the stack watermark barrier. It allows fixing up frames lazily, @@ -2014,35 +2019,67 @@ void InterpreterMacroAssembler::call_VM(Register oop_result, address entry_point } void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, address entry_point, - Register arg_1, bool check_exceptions) { + Register arg_1, + bool check_exceptions) { if (!Continuations::enabled()) { call_VM(oop_result, entry_point, arg_1, check_exceptions); return; } + call_VM_preemptable(oop_result, entry_point, arg_1, noreg /* arg_2 */, check_exceptions); +} + +void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, address entry_point, + Register arg_1, Register arg_2, + bool check_exceptions) { + if (!Continuations::enabled()) { + call_VM(oop_result, entry_point, arg_1, arg_2, check_exceptions); + return; + } Label resume_pc, not_preempted; + Register tmp = R11_scratch1; + assert_different_registers(arg_1, tmp); + assert_different_registers(arg_2, tmp); - DEBUG_ONLY(ld(R0, in_bytes(JavaThread::preempt_alternate_return_offset()), R16_thread)); - DEBUG_ONLY(cmpdi(CR0, R0, 0)); - asm_assert_eq("Should not have alternate return address set"); +#ifdef ASSERT + asm_assert_mem8_is_zero(in_bytes(JavaThread::preempt_alternate_return_offset()), R16_thread, + "Should not have alternate return address set"); + // We check this counter in patch_return_pc_with_preempt_stub() during freeze. + lwa(tmp, in_bytes(JavaThread::interp_at_preemptable_vmcall_cnt_offset()), R16_thread); + addi(tmp, tmp, 1); + cmpwi(CR0, tmp, 0); + stw(tmp, in_bytes(JavaThread::interp_at_preemptable_vmcall_cnt_offset()), R16_thread); + asm_assert(gt, "call_VM_preemptable: should be > 0"); +#endif // ASSERT // Preserve 2 registers - assert(nonvolatile_accross_vthread_preemtion(R31) && nonvolatile_accross_vthread_preemtion(R22), ""); + assert(nonvolatile_accross_vthread_preemtion(R31) && nonvolatile_accross_vthread_preemtion(R24), ""); ld(R3_ARG1, _abi0(callers_sp), R1_SP); // load FP std(R31, _ijava_state_neg(lresult), R3_ARG1); - std(R22, _ijava_state_neg(fresult), R3_ARG1); + std(R24, _ijava_state_neg(fresult), R3_ARG1); // We set resume_pc as last java pc. It will be saved if the vthread gets preempted. // Later execution will continue right there. mr_if_needed(R4_ARG2, arg_1); + assert(arg_2 != R4_ARG2, "smashed argument"); + mr_if_needed(R5_ARG3, arg_2, true /* allow_noreg */); push_cont_fastpath(); - call_VM(oop_result, entry_point, false /*check_exceptions*/, &resume_pc /* last_java_pc */); + call_VM(noreg /* oop_result */, entry_point, false /*check_exceptions*/, &resume_pc /* last_java_pc */); pop_cont_fastpath(); +#ifdef ASSERT + lwa(tmp, in_bytes(JavaThread::interp_at_preemptable_vmcall_cnt_offset()), R16_thread); + addi(tmp, tmp, -1); + cmpwi(CR0, tmp, 0); + stw(tmp, in_bytes(JavaThread::interp_at_preemptable_vmcall_cnt_offset()), R16_thread); + asm_assert(ge, "call_VM_preemptable: should be >= 0"); +#endif // ASSERT + // Jump to handler if the call was preempted ld(R0, in_bytes(JavaThread::preempt_alternate_return_offset()), R16_thread); cmpdi(CR0, R0, 0); beq(CR0, not_preempted); + // Preempted. Frames are already frozen on heap. mtlr(R0); li(R0, 0); std(R0, in_bytes(JavaThread::preempt_alternate_return_offset()), R16_thread); @@ -2050,21 +2087,21 @@ void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, address bind(resume_pc); // Location to resume execution restore_after_resume(noreg /* fp */); + bind(not_preempted); + if (check_exceptions) { + check_and_forward_exception(R11_scratch1, R12_scratch2); + } + if (oop_result->is_valid()) { + get_vm_result_oop(oop_result); + } } void InterpreterMacroAssembler::restore_after_resume(Register fp) { - if (!Continuations::enabled()) return; - const address resume_adapter = TemplateInterpreter::cont_resume_interpreter_adapter(); add_const_optimized(R31, R29_TOC, MacroAssembler::offset_to_global_toc(resume_adapter)); mtctr(R31); bctrl(); - // Restore registers that are preserved across vthread preemption - assert(nonvolatile_accross_vthread_preemtion(R31) && nonvolatile_accross_vthread_preemtion(R22), ""); - ld(R3_ARG1, _abi0(callers_sp), R1_SP); // load FP - ld(R31, _ijava_state_neg(lresult), R3_ARG1); - ld(R22, _ijava_state_neg(fresult), R3_ARG1); #ifdef ASSERT // Assert FP is in R11_scratch1 (see generate_cont_resume_interpreter_adapter()) { diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp index 00a46504e14..5a7e2172b29 100644 --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp @@ -757,9 +757,9 @@ void MacroAssembler::clobber_nonvolatile_registers() { R31 }; Register bad = regs[0]; - load_const_optimized(bad, 0xbad0101babe11111); - for (uint32_t i = 1; i < (sizeof(regs) / sizeof(Register)); i++) { - mr(regs[i], bad); + load_const_optimized(bad, 0xbad0101babe00000); + for (int i = (sizeof(regs) / sizeof(Register)) - 1; i >= 0; i--) { + addi(regs[i], bad, regs[i]->encoding()); } BLOCK_COMMENT("} clobber nonvolatile registers"); } @@ -4341,21 +4341,36 @@ void MacroAssembler::multiply_to_len(Register x, Register xlen, bind(L_done); } // multiply_to_len -void MacroAssembler::asm_assert(bool check_equal, const char *msg) { #ifdef ASSERT +void MacroAssembler::asm_assert(AsmAssertCond cond, const char *msg) { Label ok; - if (check_equal) { + switch (cond) { + case eq: beq(CR0, ok); - } else { + break; + case ne: bne(CR0, ok); + break; + case ge: + bge(CR0, ok); + break; + case gt: + bgt(CR0, ok); + break; + case lt: + blt(CR0, ok); + break; + case le: + ble(CR0, ok); + break; + default: + assert(false, "unknown cond:%d", cond); } stop(msg); bind(ok); -#endif } -#ifdef ASSERT -void MacroAssembler::asm_assert_mems_zero(bool check_equal, int size, int mem_offset, +void MacroAssembler::asm_assert_mems_zero(AsmAssertCond cond, int size, int mem_offset, Register mem_base, const char* msg) { switch (size) { case 4: @@ -4369,7 +4384,7 @@ void MacroAssembler::asm_assert_mems_zero(bool check_equal, int size, int mem_of default: ShouldNotReachHere(); } - asm_assert(check_equal, msg); + asm_assert(cond, msg); } #endif // ASSERT diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp index 63be608094f..61e6a173823 100644 --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp @@ -68,7 +68,7 @@ class MacroAssembler: public Assembler { void store_sized_value(Register dst, RegisterOrConstant offs, Register base, size_t size_in_bytes); // Move register if destination register and target register are different - inline void mr_if_needed(Register rd, Register rs); + inline void mr_if_needed(Register rd, Register rs, bool allow_invalid = false); inline void fmr_if_needed(FloatRegister rd, FloatRegister rs); // This is dedicated for emitting scheduled mach nodes. For better // readability of the ad file I put it here. @@ -942,21 +942,29 @@ class MacroAssembler: public Assembler { // // assert on cr0 - void asm_assert(bool check_equal, const char* msg); - void asm_assert_eq(const char* msg) { asm_assert(true, msg); } - void asm_assert_ne(const char* msg) { asm_assert(false, msg); } + enum AsmAssertCond { + eq, + ne, + ge, + gt, + lt, + le + }; + void asm_assert(AsmAssertCond cond, const char* msg) PRODUCT_RETURN; + void asm_assert_eq(const char* msg) { asm_assert(eq, msg); } + void asm_assert_ne(const char* msg) { asm_assert(ne, msg); } private: - void asm_assert_mems_zero(bool check_equal, int size, int mem_offset, Register mem_base, + void asm_assert_mems_zero(AsmAssertCond cond, int size, int mem_offset, Register mem_base, const char* msg) NOT_DEBUG_RETURN; public: void asm_assert_mem8_is_zero(int mem_offset, Register mem_base, const char* msg) { - asm_assert_mems_zero(true, 8, mem_offset, mem_base, msg); + asm_assert_mems_zero(eq, 8, mem_offset, mem_base, msg); } void asm_assert_mem8_isnot_zero(int mem_offset, Register mem_base, const char* msg) { - asm_assert_mems_zero(false, 8, mem_offset, mem_base, msg); + asm_assert_mems_zero(ne, 8, mem_offset, mem_base, msg); } // Calls verify_oop. If UseCompressedOops is on, decodes the oop. diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp index d27011112e2..2b19d84c69c 100644 --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.inline.hpp @@ -65,7 +65,8 @@ inline void MacroAssembler::round_to(Register r, int modulus) { } // Move register if destination register and target register are different. -inline void MacroAssembler::mr_if_needed(Register rd, Register rs) { +inline void MacroAssembler::mr_if_needed(Register rd, Register rs, bool allow_noreg) { + if (allow_noreg && (rs == noreg)) return; if (rs != rd) mr(rd, rs); } inline void MacroAssembler::fmr_if_needed(FloatRegister rd, FloatRegister rs) { diff --git a/src/hotspot/cpu/ppc/smallRegisterMap_ppc.inline.hpp b/src/hotspot/cpu/ppc/smallRegisterMap_ppc.inline.hpp index fd352a53716..221a3c01341 100644 --- a/src/hotspot/cpu/ppc/smallRegisterMap_ppc.inline.hpp +++ b/src/hotspot/cpu/ppc/smallRegisterMap_ppc.inline.hpp @@ -28,18 +28,18 @@ #include "runtime/frame.inline.hpp" #include "runtime/registerMap.hpp" +class SmallRegisterMap; + // Java frames don't have callee saved registers, so we can use a smaller RegisterMap -class SmallRegisterMap { - constexpr SmallRegisterMap() = default; - ~SmallRegisterMap() = default; - NONCOPYABLE(SmallRegisterMap); +template +class SmallRegisterMapType { + friend SmallRegisterMap; -public: - static const SmallRegisterMap* instance() { - static constexpr SmallRegisterMap the_instance{}; - return &the_instance; - } + constexpr SmallRegisterMapType() = default; + ~SmallRegisterMapType() = default; + NONCOPYABLE(SmallRegisterMapType); + public: // as_RegisterMap is used when we didn't want to templatize and abstract over RegisterMap type to support SmallRegisterMap // Consider enhancing SmallRegisterMap to support those cases const RegisterMap* as_RegisterMap() const { return nullptr; } @@ -61,14 +61,14 @@ public: JavaThread* thread() const { #ifndef ASSERT - guarantee (false, ""); + guarantee (false, "unreachable"); #endif return nullptr; } bool update_map() const { return false; } bool walk_cont() const { return false; } - bool include_argument_oops() const { return false; } + bool include_argument_oops() const { return IncludeArgs; } void set_include_argument_oops(bool f) {} bool in_cont() const { return false; } stackChunkHandle stack_chunk() const { return stackChunkHandle(); } @@ -76,7 +76,7 @@ public: #ifdef ASSERT bool should_skip_missing() const { return false; } VMReg find_register_spilled_here(void* p, intptr_t* sp) { - Unimplemented(); + assert(false, "Shouldn't reach here! p:" PTR_FORMAT " sp:" PTR_FORMAT, p2i(p), p2i(p)); return nullptr; } void print() const { print_on(tty); } diff --git a/src/hotspot/cpu/ppc/stackChunkFrameStream_ppc.inline.hpp b/src/hotspot/cpu/ppc/stackChunkFrameStream_ppc.inline.hpp index 07f1c9c1c6f..a14ec9303f6 100644 --- a/src/hotspot/cpu/ppc/stackChunkFrameStream_ppc.inline.hpp +++ b/src/hotspot/cpu/ppc/stackChunkFrameStream_ppc.inline.hpp @@ -176,17 +176,14 @@ inline int StackChunkFrameStream::interpreter_frame_stack_argsize() } template -inline int StackChunkFrameStream::interpreter_frame_num_oops() const { +template +inline int StackChunkFrameStream::interpreter_frame_num_oops(RegisterMapT* map) const { assert_is_interpreted_and_frame_type_mixed(); ResourceMark rm; - InterpreterOopMap mask; frame f = to_frame(); - f.interpreted_frame_oop_map(&mask); - return mask.num_oops() - + 1 // for the mirror oop - + (f.interpreter_frame_method()->is_native() ? 1 : 0) // temp oop slot - + pointer_delta_as_int((intptr_t*)f.interpreter_frame_monitor_begin(), - (intptr_t*)f.interpreter_frame_monitor_end())/BasicObjectLock::size(); + InterpreterOopCount closure; + f.oops_interpreted_do(&closure, map); + return closure.count(); } template<> diff --git a/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp b/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp index 199b578a36f..3fe7d353962 100644 --- a/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp +++ b/src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp @@ -702,6 +702,11 @@ address TemplateInterpreterGenerator::generate_cont_resume_interpreter_adapter() __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R12_scratch2); __ restore_interpreter_state(R11_scratch1, false, true /*restore_top_frame_sp*/); + // Restore registers that are preserved across vthread preemption + assert(__ nonvolatile_accross_vthread_preemtion(R31) && __ nonvolatile_accross_vthread_preemtion(R24), ""); + __ ld(R3_ARG1, _abi0(callers_sp), R1_SP); // load FP + __ ld(R31, _ijava_state_neg(lresult), R3_ARG1); + __ ld(R24, _ijava_state_neg(fresult), R3_ARG1); __ blr(); return start; @@ -1249,7 +1254,7 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) { const Register pending_exception = R0; const Register result_handler_addr = R31; const Register native_method_fd = R12_scratch2; // preferred in MacroAssembler::branch_to - const Register access_flags = R22_tmp2; + const Register access_flags = R24_tmp4; const Register active_handles = R11_scratch1; // R26_monitor saved to state. const Register sync_state = R12_scratch2; const Register sync_state_addr = sync_state; // Address is dead after use. diff --git a/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp b/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp index 09acd1c067d..8d61ba1b2d7 100644 --- a/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp @@ -2214,7 +2214,7 @@ void TemplateTable::resolve_cache_and_index_for_method(int byte_no, Register Rca __ bind(L_clinit_barrier_slow); address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ li(R4_ARG2, code); - __ call_VM(noreg, entry, R4_ARG2); + __ call_VM_preemptable(noreg, entry, R4_ARG2); // Update registers with resolved info. __ load_method_entry(Rcache, Rindex); @@ -2262,7 +2262,7 @@ void TemplateTable::resolve_cache_and_index_for_field(int byte_no, Register Rcac __ bind(L_clinit_barrier_slow); address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ li(R4_ARG2, code); - __ call_VM(noreg, entry, R4_ARG2); + __ call_VM_preemptable(noreg, entry, R4_ARG2); // Update registers with resolved info __ load_field_entry(Rcache, index); @@ -3864,7 +3864,7 @@ void TemplateTable::_new() { // -------------------------------------------------------------------------- // slow case __ bind(Lslow_case); - call_VM(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), Rcpool, Rindex); + __ call_VM_preemptable(R17_tos, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), Rcpool, Rindex); // continue __ bind(Ldone); diff --git a/src/hotspot/cpu/riscv/continuationFreezeThaw_riscv.inline.hpp b/src/hotspot/cpu/riscv/continuationFreezeThaw_riscv.inline.hpp index 461dc19f383..d6586617a63 100644 --- a/src/hotspot/cpu/riscv/continuationFreezeThaw_riscv.inline.hpp +++ b/src/hotspot/cpu/riscv/continuationFreezeThaw_riscv.inline.hpp @@ -207,6 +207,41 @@ inline void ThawBase::prefetch_chunk_pd(void* start, int size) { Prefetch::read(start, size - 64); } +inline intptr_t* AnchorMark::anchor_mark_set_pd() { + intptr_t* sp = _top_frame.sp(); + if (_top_frame.is_interpreted_frame()) { + // In case the top frame is interpreted we need to set up the anchor using + // the last_sp saved in the frame (remove possible alignment added while + // thawing, see ThawBase::finish_thaw()). We also clear last_sp to match + // the behavior when calling the VM from the interpreter (we check for this + // in FreezeBase::prepare_freeze_interpreted_top_frame, which can be reached + // if preempting again at redo_vmcall()). + _last_sp_from_frame = _top_frame.interpreter_frame_last_sp(); + assert(_last_sp_from_frame != nullptr, ""); + _top_frame.interpreter_frame_set_last_sp(nullptr); + if (sp != _last_sp_from_frame) { + // We need to move up return pc and fp. They will be read next in + // set_anchor() and set as _last_Java_pc and _last_Java_fp respectively. + _last_sp_from_frame[-1] = (intptr_t)_top_frame.pc(); + _last_sp_from_frame[-2] = (intptr_t)_top_frame.fp(); + } + _is_interpreted = true; + sp = _last_sp_from_frame; + } + return sp; +} + +inline void AnchorMark::anchor_mark_clear_pd() { + if (_is_interpreted) { + // Restore last_sp_from_frame and possibly overwritten pc. + _top_frame.interpreter_frame_set_last_sp(_last_sp_from_frame); + intptr_t* sp = _top_frame.sp(); + if (sp != _last_sp_from_frame) { + sp[-1] = (intptr_t)_top_frame.pc(); + } + } +} + template inline void Thaw::patch_caller_links(intptr_t* sp, intptr_t* bottom) { // Fast path depends on !PreserveFramePointer. See can_thaw_fast(). @@ -305,10 +340,17 @@ inline intptr_t* ThawBase::push_cleanup_continuation() { frame enterSpecial = new_entry_frame(); intptr_t* sp = enterSpecial.sp(); + // We only need to set the return pc. fp will be restored back in gen_continuation_enter(). sp[-1] = (intptr_t)ContinuationEntry::cleanup_pc(); - sp[-2] = (intptr_t)enterSpecial.fp(); + return sp; +} - log_develop_trace(continuations, preempt)("push_cleanup_continuation initial sp: " INTPTR_FORMAT " final sp: " INTPTR_FORMAT, p2i(sp + 2 * frame::metadata_words), p2i(sp)); +inline intptr_t* ThawBase::push_preempt_adapter() { + frame enterSpecial = new_entry_frame(); + intptr_t* sp = enterSpecial.sp(); + + // We only need to set the return pc. fp will be restored back in generate_cont_preempt_stub(). + sp[-1] = (intptr_t)StubRoutines::cont_preempt_stub(); return sp; } diff --git a/src/hotspot/cpu/riscv/continuationHelper_riscv.inline.hpp b/src/hotspot/cpu/riscv/continuationHelper_riscv.inline.hpp index 424d56edf5a..918bf3db8cc 100644 --- a/src/hotspot/cpu/riscv/continuationHelper_riscv.inline.hpp +++ b/src/hotspot/cpu/riscv/continuationHelper_riscv.inline.hpp @@ -52,6 +52,9 @@ static inline void patch_return_pc_with_preempt_stub(frame& f) { // The target will check for preemption once it returns to the interpreter // or the native wrapper code and will manually jump to the preempt stub. JavaThread *thread = JavaThread::current(); + DEBUG_ONLY(Method* m = f.is_interpreted_frame() ? f.interpreter_frame_method() : f.cb()->as_nmethod()->method();) + assert(m->is_object_wait0() || thread->interp_at_preemptable_vmcall_cnt() > 0, + "preemptable VM call not using call_VM_preemptable"); thread->set_preempt_alternate_return(StubRoutines::cont_preempt_stub()); } } diff --git a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp index 549c9cda7b6..5af8ea1da37 100644 --- a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp +++ b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp @@ -518,6 +518,14 @@ void InterpreterMacroAssembler::remove_activation(TosState state, // result check if synchronized method Label unlocked, unlock, no_unlock; +#ifdef ASSERT + Label not_preempted; + ld(t0, Address(xthread, JavaThread::preempt_alternate_return_offset())); + beqz(t0, not_preempted); + stop("remove_activation: should not have alternate return address set"); + bind(not_preempted); +#endif /* ASSERT */ + // get the value of _do_not_unlock_if_synchronized into x13 const Address do_not_unlock_if_synchronized(xthread, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset())); @@ -1441,6 +1449,7 @@ void InterpreterMacroAssembler::call_VM_leaf_base(address entry_point, void InterpreterMacroAssembler::call_VM_base(Register oop_result, Register java_thread, Register last_java_sp, + Label* return_pc, address entry_point, int number_of_arguments, bool check_exceptions) { @@ -1463,26 +1472,34 @@ void InterpreterMacroAssembler::call_VM_base(Register oop_result, #endif /* ASSERT */ // super call MacroAssembler::call_VM_base(oop_result, noreg, last_java_sp, - entry_point, number_of_arguments, - check_exceptions); -// interpreter specific + return_pc, entry_point, + number_of_arguments, check_exceptions); + // interpreter specific restore_bcp(); restore_locals(); } -void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, - address entry_point, - Register arg_1) { - assert(arg_1 == c_rarg1, ""); +void InterpreterMacroAssembler::call_VM_preemptable_helper(Register oop_result, + address entry_point, + int number_of_arguments, + bool check_exceptions) { + assert(InterpreterRuntime::is_preemptable_call(entry_point), + "VM call not preemptable, should use call_VM()"); Label resume_pc, not_preempted; #ifdef ASSERT { - Label L; + Label L1, L2; ld(t0, Address(xthread, JavaThread::preempt_alternate_return_offset())); - beqz(t0, L); - stop("Should not have alternate return address set"); - bind(L); + beqz(t0, L1); + stop("call_VM_preemptable_helper: Should not have alternate return address set"); + bind(L1); + // We check this counter in patch_return_pc_with_preempt_stub() during freeze. + incrementw(Address(xthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + lw(t0, Address(xthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + bgtz(t0, L2); + stop("call_VM_preemptable_helper: should be > 0"); + bind(L2); } #endif /* ASSERT */ @@ -1490,12 +1507,22 @@ void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, push_cont_fastpath(); // Make VM call. In case of preemption set last_pc to the one we want to resume to. - la(t0, resume_pc); - sd(t0, Address(xthread, JavaThread::last_Java_pc_offset())); - call_VM_base(oop_result, noreg, noreg, entry_point, 1, false /*check_exceptions*/); + // Note: call_VM_base will use resume_pc label to set last_Java_pc. + call_VM_base(noreg, noreg, noreg, &resume_pc, entry_point, number_of_arguments, false /*check_exceptions*/); pop_cont_fastpath(); +#ifdef ASSERT + { + Label L; + decrementw(Address(xthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + lw(t0, Address(xthread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + bgez(t0, L); + stop("call_VM_preemptable_helper: should be >= 0"); + bind(L); + } +#endif /* ASSERT */ + // Check if preempted. ld(t1, Address(xthread, JavaThread::preempt_alternate_return_offset())); beqz(t1, not_preempted); @@ -1507,6 +1534,51 @@ void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, restore_after_resume(false /* is_native */); bind(not_preempted); + if (check_exceptions) { + // check for pending exceptions + ld(t0, Address(xthread, in_bytes(Thread::pending_exception_offset()))); + Label ok; + beqz(t0, ok); + la(t1, RuntimeAddress(StubRoutines::forward_exception_entry())); + jr(t1); + bind(ok); + } + + // get oop result if there is one and reset the value in the thread + if (oop_result->is_valid()) { + get_vm_result_oop(oop_result, xthread); + } +} + +static void pass_arg1(MacroAssembler* masm, Register arg) { + if (c_rarg1 != arg) { + masm->mv(c_rarg1, arg); + } +} + +static void pass_arg2(MacroAssembler* masm, Register arg) { + if (c_rarg2 != arg) { + masm->mv(c_rarg2, arg); + } +} + +void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + bool check_exceptions) { + pass_arg1(this, arg_1); + call_VM_preemptable_helper(oop_result, entry_point, 1, check_exceptions); +} + +void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + Register arg_2, + bool check_exceptions) { + LP64_ONLY(assert_different_registers(arg_1, c_rarg2)); + pass_arg2(this, arg_2); + pass_arg1(this, arg_1); + call_VM_preemptable_helper(oop_result, entry_point, 2, check_exceptions); } void InterpreterMacroAssembler::restore_after_resume(bool is_native) { diff --git a/src/hotspot/cpu/riscv/interp_masm_riscv.hpp b/src/hotspot/cpu/riscv/interp_masm_riscv.hpp index 295f1b22191..89b2ed17291 100644 --- a/src/hotspot/cpu/riscv/interp_masm_riscv.hpp +++ b/src/hotspot/cpu/riscv/interp_masm_riscv.hpp @@ -46,6 +46,7 @@ class InterpreterMacroAssembler: public MacroAssembler { virtual void call_VM_base(Register oop_result, Register java_thread, Register last_java_sp, + Label* return_pc, address entry_point, int number_of_arguments, bool check_exceptions); @@ -59,11 +60,27 @@ class InterpreterMacroAssembler: public MacroAssembler { void load_earlyret_value(TosState state); + // Use for vthread preemption void call_VM_preemptable(Register oop_result, address entry_point, - Register arg_1); + Register arg_1, + bool check_exceptions = true); + + void call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + Register arg_2, + bool check_exceptions = true); + void restore_after_resume(bool is_native); + private: + void call_VM_preemptable_helper(Register oop_result, + address entry_point, + int number_of_arguments, + bool check_exceptions); + + public: void jump_to_entry(address entry); virtual void check_and_handle_popframe(Register java_thread); diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 700e42e6194..54304ec648d 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -233,7 +233,7 @@ int MacroAssembler::align(int modulus, int extra_offset) { } void MacroAssembler::call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions) { - call_VM_base(oop_result, noreg, noreg, entry_point, number_of_arguments, check_exceptions); + call_VM_base(oop_result, noreg, noreg, nullptr, entry_point, number_of_arguments, check_exceptions); } // Implementation of call_VM versions @@ -284,7 +284,7 @@ void MacroAssembler::call_VM(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions) { - call_VM_base(oop_result, xthread, last_java_sp, entry_point, number_of_arguments, check_exceptions); + call_VM_base(oop_result, xthread, last_java_sp, nullptr, entry_point, number_of_arguments, check_exceptions); } void MacroAssembler::call_VM(Register oop_result, @@ -409,13 +409,10 @@ void MacroAssembler::reset_last_Java_frame(bool clear_fp) { sd(zr, Address(xthread, JavaThread::last_Java_pc_offset())); } -static bool is_preemptable(address entry_point) { - return entry_point == CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter); -} - void MacroAssembler::call_VM_base(Register oop_result, Register java_thread, Register last_java_sp, + Label* return_pc, address entry_point, int number_of_arguments, bool check_exceptions) { @@ -423,6 +420,7 @@ void MacroAssembler::call_VM_base(Register oop_result, if (!java_thread->is_valid()) { java_thread = xthread; } + // determine last_java_sp register if (!last_java_sp->is_valid()) { last_java_sp = esp; @@ -442,12 +440,7 @@ void MacroAssembler::call_VM_base(Register oop_result, assert(last_java_sp != fp, "can't use fp"); Label l; - if (is_preemptable(entry_point)) { - // skip setting last_pc since we already set it to desired value. - set_last_Java_frame(last_java_sp, fp, noreg); - } else { - set_last_Java_frame(last_java_sp, fp, l, t0); - } + set_last_Java_frame(last_java_sp, fp, return_pc != nullptr ? *return_pc : l, t0); // do the call, remove parameters MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments, &l); diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index 9e713e90270..e0e610ff49a 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -168,6 +168,7 @@ class MacroAssembler: public Assembler { Register oop_result, // where an oop-result ends up if any; use noreg otherwise Register java_thread, // the thread if computed before ; use noreg otherwise Register last_java_sp, // to set up last_Java_frame in stubs; use noreg otherwise + Label* return_pc, // to set up last_Java_frame; use nullptr otherwise address entry_point, // the entry point int number_of_arguments, // the number of arguments (w/o thread) to pop after the call bool check_exceptions // whether to check for pending exceptions after return diff --git a/src/hotspot/cpu/riscv/smallRegisterMap_riscv.inline.hpp b/src/hotspot/cpu/riscv/smallRegisterMap_riscv.inline.hpp index 541cb0cbcb5..ea5aef14ae1 100644 --- a/src/hotspot/cpu/riscv/smallRegisterMap_riscv.inline.hpp +++ b/src/hotspot/cpu/riscv/smallRegisterMap_riscv.inline.hpp @@ -28,20 +28,20 @@ #include "runtime/frame.inline.hpp" #include "runtime/registerMap.hpp" -// Java frames don't have callee saved registers (except for fp), so we can use a smaller RegisterMap -class SmallRegisterMap { - constexpr SmallRegisterMap() = default; - ~SmallRegisterMap() = default; - NONCOPYABLE(SmallRegisterMap); +class SmallRegisterMap; + +// Java frames don't have callee saved registers (except for fp), so we can use a smaller RegisterMap +template +class SmallRegisterMapType { + friend SmallRegisterMap; + + constexpr SmallRegisterMapType() = default; + ~SmallRegisterMapType() = default; + NONCOPYABLE(SmallRegisterMapType); -public: - static const SmallRegisterMap* instance() { - static constexpr SmallRegisterMap the_instance{}; - return &the_instance; - } -private: static void assert_is_fp(VMReg r) NOT_DEBUG_RETURN DEBUG_ONLY({ assert (r == fp->as_VMReg() || r == fp->as_VMReg()->next(), "Reg: %s", r->name()); }) + public: // as_RegisterMap is used when we didn't want to templatize and abstract over RegisterMap type to support SmallRegisterMap // Consider enhancing SmallRegisterMap to support those cases @@ -71,7 +71,7 @@ public: bool update_map() const { return false; } bool walk_cont() const { return false; } - bool include_argument_oops() const { return false; } + bool include_argument_oops() const { return IncludeArgs; } void set_include_argument_oops(bool f) {} bool in_cont() const { return false; } stackChunkHandle stack_chunk() const { return stackChunkHandle(); } diff --git a/src/hotspot/cpu/riscv/stackChunkFrameStream_riscv.inline.hpp b/src/hotspot/cpu/riscv/stackChunkFrameStream_riscv.inline.hpp index fa8a8fb47f0..9e2b8003dc4 100644 --- a/src/hotspot/cpu/riscv/stackChunkFrameStream_riscv.inline.hpp +++ b/src/hotspot/cpu/riscv/stackChunkFrameStream_riscv.inline.hpp @@ -106,17 +106,14 @@ inline int StackChunkFrameStream::interpreter_frame_stack_argsize() } template -inline int StackChunkFrameStream::interpreter_frame_num_oops() const { +template +inline int StackChunkFrameStream::interpreter_frame_num_oops(RegisterMapT* map) const { assert_is_interpreted_and_frame_type_mixed(); ResourceMark rm; - InterpreterOopMap mask; frame f = to_frame(); - f.interpreted_frame_oop_map(&mask); - return mask.num_oops() - + 1 // for the mirror oop - + (f.interpreter_frame_method()->is_native() ? 1 : 0) // temp oop slot - + pointer_delta_as_int((intptr_t*)f.interpreter_frame_monitor_begin(), - (intptr_t*)f.interpreter_frame_monitor_end()) / BasicObjectLock::size(); + InterpreterOopCount closure; + f.oops_interpreted_do(&closure, map); + return closure.count(); } template<> diff --git a/src/hotspot/cpu/riscv/templateTable_riscv.cpp b/src/hotspot/cpu/riscv/templateTable_riscv.cpp index bd4a89d8199..ca41583e4bc 100644 --- a/src/hotspot/cpu/riscv/templateTable_riscv.cpp +++ b/src/hotspot/cpu/riscv/templateTable_riscv.cpp @@ -2206,7 +2206,7 @@ void TemplateTable::resolve_cache_and_index_for_method(int byte_no, // Class initialization barrier slow path lands here as well. address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ mv(temp, (int) code); - __ call_VM(noreg, entry, temp); + __ call_VM_preemptable(noreg, entry, temp); // Update registers with resolved info __ load_method_entry(Rcache, index); @@ -2259,7 +2259,7 @@ void TemplateTable::resolve_cache_and_index_for_field(int byte_no, // Class initialization barrier slow path lands here as well. address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ mv(temp, (int) code); - __ call_VM(noreg, entry, temp); + __ call_VM_preemptable(noreg, entry, temp); // Update registers with resolved info __ load_field_entry(Rcache, index); @@ -3612,7 +3612,7 @@ void TemplateTable::_new() { __ bind(slow_case); __ get_constant_pool(c_rarg1); __ get_unsigned_2_byte_index_at_bcp(c_rarg2, 1); - call_VM(x10, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2); + __ call_VM_preemptable(x10, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2); __ verify_oop(x10); // continue diff --git a/src/hotspot/cpu/s390/continuationFreezeThaw_s390.inline.hpp b/src/hotspot/cpu/s390/continuationFreezeThaw_s390.inline.hpp index d39821bd034..33ac17effa7 100644 --- a/src/hotspot/cpu/s390/continuationFreezeThaw_s390.inline.hpp +++ b/src/hotspot/cpu/s390/continuationFreezeThaw_s390.inline.hpp @@ -68,6 +68,15 @@ inline void FreezeBase::patch_stack_pd(intptr_t* frame_sp, intptr_t* heap_sp) { Unimplemented(); } +inline intptr_t* AnchorMark::anchor_mark_set_pd() { + Unimplemented(); + return nullptr; +} + +inline void AnchorMark::anchor_mark_clear_pd() { + Unimplemented(); +} + inline frame ThawBase::new_entry_frame() { Unimplemented(); return frame(); @@ -100,6 +109,11 @@ inline intptr_t* ThawBase::push_cleanup_continuation() { return nullptr; } +inline intptr_t* ThawBase::push_preempt_adapter() { + Unimplemented(); + return nullptr; +} + template inline void Thaw::patch_caller_links(intptr_t* sp, intptr_t* bottom) { Unimplemented(); diff --git a/src/hotspot/cpu/s390/smallRegisterMap_s390.inline.hpp b/src/hotspot/cpu/s390/smallRegisterMap_s390.inline.hpp index 3a0afb27260..43363ccd933 100644 --- a/src/hotspot/cpu/s390/smallRegisterMap_s390.inline.hpp +++ b/src/hotspot/cpu/s390/smallRegisterMap_s390.inline.hpp @@ -28,18 +28,17 @@ #include "runtime/frame.inline.hpp" #include "runtime/registerMap.hpp" -// Java frames don't have callee saved registers (except for rfp), so we can use a smaller RegisterMap -class SmallRegisterMap { - constexpr SmallRegisterMap() = default; - ~SmallRegisterMap() = default; - NONCOPYABLE(SmallRegisterMap); +class SmallRegisterMap; + +// Java frames don't have callee saved registers (except for rfp), so we can use a smaller SmallRegisterMapType +template +class SmallRegisterMapType { + friend SmallRegisterMap; + + constexpr SmallRegisterMapType() = default; + ~SmallRegisterMapType() = default; + NONCOPYABLE(SmallRegisterMapType); -public: - static const SmallRegisterMap* instance() { - static constexpr SmallRegisterMap the_instance{}; - return &the_instance; - } -private: static void assert_is_rfp(VMReg r) NOT_DEBUG_RETURN DEBUG_ONLY({ Unimplemented(); }) public: @@ -69,7 +68,7 @@ public: bool update_map() const { return false; } bool walk_cont() const { return false; } - bool include_argument_oops() const { return false; } + bool include_argument_oops() const { return IncludeArgs; } void set_include_argument_oops(bool f) {} bool in_cont() const { return false; } stackChunkHandle stack_chunk() const { return stackChunkHandle(); } diff --git a/src/hotspot/cpu/s390/stackChunkFrameStream_s390.inline.hpp b/src/hotspot/cpu/s390/stackChunkFrameStream_s390.inline.hpp index d94dea33e55..4fff0846a80 100644 --- a/src/hotspot/cpu/s390/stackChunkFrameStream_s390.inline.hpp +++ b/src/hotspot/cpu/s390/stackChunkFrameStream_s390.inline.hpp @@ -85,7 +85,8 @@ inline int StackChunkFrameStream::interpreter_frame_stack_argsize() } template -inline int StackChunkFrameStream::interpreter_frame_num_oops() const { +template +inline int StackChunkFrameStream::interpreter_frame_num_oops(RegisterMapT* map) const { Unimplemented(); return 0; } diff --git a/src/hotspot/cpu/x86/continuationFreezeThaw_x86.inline.hpp b/src/hotspot/cpu/x86/continuationFreezeThaw_x86.inline.hpp index 126f4043cad..7691a84a9fe 100644 --- a/src/hotspot/cpu/x86/continuationFreezeThaw_x86.inline.hpp +++ b/src/hotspot/cpu/x86/continuationFreezeThaw_x86.inline.hpp @@ -191,6 +191,41 @@ inline void FreezeBase::patch_pd_unused(intptr_t* sp) { *fp_addr = badAddressVal; } +inline intptr_t* AnchorMark::anchor_mark_set_pd() { + intptr_t* sp = _top_frame.sp(); + if (_top_frame.is_interpreted_frame()) { + // In case the top frame is interpreted we need to set up the anchor using + // the last_sp saved in the frame (remove possible alignment added while + // thawing, see ThawBase::finish_thaw()). We also clear last_sp to match + // the behavior when calling the VM from the interpreter (we check for this + // in FreezeBase::prepare_freeze_interpreted_top_frame, which can be reached + // if preempting again at redo_vmcall()). + _last_sp_from_frame = _top_frame.interpreter_frame_last_sp(); + assert(_last_sp_from_frame != nullptr, ""); + _top_frame.interpreter_frame_set_last_sp(nullptr); + if (sp != _last_sp_from_frame) { + // We need to move up return pc and fp. They will be read next in + // set_anchor() and set as _last_Java_pc and _last_Java_fp respectively. + _last_sp_from_frame[-1] = (intptr_t)_top_frame.pc(); + _last_sp_from_frame[-2] = (intptr_t)_top_frame.fp(); + } + _is_interpreted = true; + sp = _last_sp_from_frame; + } + return sp; +} + +inline void AnchorMark::anchor_mark_clear_pd() { + if (_is_interpreted) { + // Restore last_sp_from_frame and possibly overwritten pc. + _top_frame.interpreter_frame_set_last_sp(_last_sp_from_frame); + intptr_t* sp = _top_frame.sp(); + if (sp != _last_sp_from_frame) { + sp[-1] = (intptr_t)_top_frame.pc(); + } + } +} + //////// Thaw // Fast path @@ -291,10 +326,17 @@ inline intptr_t* ThawBase::push_cleanup_continuation() { frame enterSpecial = new_entry_frame(); intptr_t* sp = enterSpecial.sp(); + // We only need to set the return pc. rbp will be restored back in gen_continuation_enter(). sp[-1] = (intptr_t)ContinuationEntry::cleanup_pc(); - sp[-2] = (intptr_t)enterSpecial.fp(); + return sp; +} - log_develop_trace(continuations, preempt)("push_cleanup_continuation initial sp: " INTPTR_FORMAT " final sp: " INTPTR_FORMAT, p2i(sp + 2 * frame::metadata_words), p2i(sp)); +inline intptr_t* ThawBase::push_preempt_adapter() { + frame enterSpecial = new_entry_frame(); + intptr_t* sp = enterSpecial.sp(); + + // We only need to set the return pc. rbp will be restored back in generate_cont_preempt_stub(). + sp[-1] = (intptr_t)StubRoutines::cont_preempt_stub(); return sp; } diff --git a/src/hotspot/cpu/x86/continuationHelper_x86.inline.hpp b/src/hotspot/cpu/x86/continuationHelper_x86.inline.hpp index 6d72e1b80e8..bb32e55db75 100644 --- a/src/hotspot/cpu/x86/continuationHelper_x86.inline.hpp +++ b/src/hotspot/cpu/x86/continuationHelper_x86.inline.hpp @@ -50,6 +50,9 @@ static inline void patch_return_pc_with_preempt_stub(frame& f) { // The target will check for preemption once it returns to the interpreter // or the native wrapper code and will manually jump to the preempt stub. JavaThread *thread = JavaThread::current(); + DEBUG_ONLY(Method* m = f.is_interpreted_frame() ? f.interpreter_frame_method() : f.cb()->as_nmethod()->method();) + assert(m->is_object_wait0() || thread->interp_at_preemptable_vmcall_cnt() > 0, + "preemptable VM call not using call_VM_preemptable"); thread->set_preempt_alternate_return(StubRoutines::cont_preempt_stub()); } } diff --git a/src/hotspot/cpu/x86/interp_masm_x86.cpp b/src/hotspot/cpu/x86/interp_masm_x86.cpp index 9720be17892..110dfab5808 100644 --- a/src/hotspot/cpu/x86/interp_masm_x86.cpp +++ b/src/hotspot/cpu/x86/interp_masm_x86.cpp @@ -326,19 +326,26 @@ void InterpreterMacroAssembler::call_VM_base(Register oop_result, restore_locals(); } -void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, - address entry_point, - Register arg_1) { - assert(arg_1 == c_rarg1, ""); +void InterpreterMacroAssembler::call_VM_preemptable_helper(Register oop_result, + address entry_point, + int number_of_arguments, + bool check_exceptions) { + assert(InterpreterRuntime::is_preemptable_call(entry_point), "VM call not preemptable, should use call_VM()"); Label resume_pc, not_preempted; #ifdef ASSERT { - Label L; + Label L1, L2; cmpptr(Address(r15_thread, JavaThread::preempt_alternate_return_offset()), NULL_WORD); - jcc(Assembler::equal, L); - stop("Should not have alternate return address set"); - bind(L); + jcc(Assembler::equal, L1); + stop("call_VM_preemptable_helper: should not have alternate return address set"); + bind(L1); + // We check this counter in patch_return_pc_with_preempt_stub() during freeze. + incrementl(Address(r15_thread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + cmpl(Address(r15_thread, JavaThread::interp_at_preemptable_vmcall_cnt_offset()), 0); + jcc(Assembler::greater, L2); + stop("call_VM_preemptable_helper: should be > 0"); + bind(L2); } #endif /* ASSERT */ @@ -346,14 +353,25 @@ void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, push_cont_fastpath(); // Make VM call. In case of preemption set last_pc to the one we want to resume to. - // Note: call_VM_helper requires last_Java_pc for anchor to be at the top of the stack. lea(rscratch1, resume_pc); push(rscratch1); - MacroAssembler::call_VM_helper(oop_result, entry_point, 1, false /*check_exceptions*/); + lea(rax, Address(rsp, wordSize)); + call_VM_base(noreg, rax, entry_point, number_of_arguments, false); pop(rscratch1); pop_cont_fastpath(); +#ifdef ASSERT + { + Label L; + decrementl(Address(r15_thread, JavaThread::interp_at_preemptable_vmcall_cnt_offset())); + cmpl(Address(r15_thread, JavaThread::interp_at_preemptable_vmcall_cnt_offset()), 0); + jcc(Assembler::greaterEqual, L); + stop("call_VM_preemptable_helper: should be >= 0"); + bind(L); + } +#endif /* ASSERT */ + // Check if preempted. movptr(rscratch1, Address(r15_thread, JavaThread::preempt_alternate_return_offset())); cmpptr(rscratch1, NULL_WORD); @@ -366,6 +384,54 @@ void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, restore_after_resume(false /* is_native */); bind(not_preempted); + if (check_exceptions) { + // check for pending exceptions + cmpptr(Address(r15_thread, Thread::pending_exception_offset()), NULL_WORD); + Label ok; + jcc(Assembler::equal, ok); + // Exception stub expects return pc to be at top of stack. We only need + // it to check Interpreter::contains(return_address) so anything will do. + lea(rscratch1, resume_pc); + push(rscratch1); + jump(RuntimeAddress(StubRoutines::forward_exception_entry())); + bind(ok); + } + + // get oop result if there is one and reset the value in the thread + if (oop_result->is_valid()) { + get_vm_result_oop(oop_result); + } +} + +static void pass_arg1(MacroAssembler* masm, Register arg) { + if (c_rarg1 != arg ) { + masm->mov(c_rarg1, arg); + } +} + +static void pass_arg2(MacroAssembler* masm, Register arg) { + if (c_rarg2 != arg ) { + masm->mov(c_rarg2, arg); + } +} + +void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + bool check_exceptions) { + pass_arg1(this, arg_1); + call_VM_preemptable_helper(oop_result, entry_point, 1, check_exceptions); +} + +void InterpreterMacroAssembler::call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + Register arg_2, + bool check_exceptions) { + LP64_ONLY(assert_different_registers(arg_1, c_rarg2)); + pass_arg2(this, arg_2); + pass_arg1(this, arg_1); + call_VM_preemptable_helper(oop_result, entry_point, 2, check_exceptions); } void InterpreterMacroAssembler::restore_after_resume(bool is_native) { @@ -800,6 +866,14 @@ void InterpreterMacroAssembler::remove_activation(TosState state, // result check if synchronized method Label unlocked, unlock, no_unlock; +#ifdef ASSERT + Label not_preempted; + cmpptr(Address(r15_thread, JavaThread::preempt_alternate_return_offset()), NULL_WORD); + jcc(Assembler::equal, not_preempted); + stop("remove_activation: should not have alternate return address set"); + bind(not_preempted); +#endif /* ASSERT */ + const Register rthread = r15_thread; const Register robj = c_rarg1; const Register rmon = c_rarg1; diff --git a/src/hotspot/cpu/x86/interp_masm_x86.hpp b/src/hotspot/cpu/x86/interp_masm_x86.hpp index a36a697eebf..1d2080cd542 100644 --- a/src/hotspot/cpu/x86/interp_masm_x86.hpp +++ b/src/hotspot/cpu/x86/interp_masm_x86.hpp @@ -62,11 +62,24 @@ class InterpreterMacroAssembler: public MacroAssembler { void load_earlyret_value(TosState state); + // Use for vthread preemption void call_VM_preemptable(Register oop_result, address entry_point, - Register arg_1); + Register arg_1, + bool check_exceptions = true); + void call_VM_preemptable(Register oop_result, + address entry_point, + Register arg_1, + Register arg_2, + bool check_exceptions = true); void restore_after_resume(bool is_native); + private: + void call_VM_preemptable_helper(Register oop_result, + address entry_point, + int number_of_arguments, + bool check_exceptions); + public: // Interpreter-specific registers void save_bcp() { movptr(Address(rbp, frame::interpreter_frame_bcp_offset * wordSize), _bcp_register); diff --git a/src/hotspot/cpu/x86/smallRegisterMap_x86.inline.hpp b/src/hotspot/cpu/x86/smallRegisterMap_x86.inline.hpp index 930a8af0794..78b604c16fc 100644 --- a/src/hotspot/cpu/x86/smallRegisterMap_x86.inline.hpp +++ b/src/hotspot/cpu/x86/smallRegisterMap_x86.inline.hpp @@ -28,19 +28,17 @@ #include "runtime/frame.inline.hpp" #include "runtime/registerMap.hpp" +class SmallRegisterMap; + // Java frames don't have callee saved registers (except for rbp), so we can use a smaller RegisterMap -class SmallRegisterMap { - constexpr SmallRegisterMap() = default; - ~SmallRegisterMap() = default; - NONCOPYABLE(SmallRegisterMap); +template +class SmallRegisterMapType { + friend SmallRegisterMap; -public: - static const SmallRegisterMap* instance() { - static constexpr SmallRegisterMap the_instance{}; - return &the_instance; - } + constexpr SmallRegisterMapType() = default; + ~SmallRegisterMapType() = default; + NONCOPYABLE(SmallRegisterMapType); -private: static void assert_is_rbp(VMReg r) NOT_DEBUG_RETURN DEBUG_ONLY({ assert(r == rbp->as_VMReg() || r == rbp->as_VMReg()->next(), "Reg: %s", r->name()); }) public: @@ -72,7 +70,7 @@ public: bool update_map() const { return false; } bool walk_cont() const { return false; } - bool include_argument_oops() const { return false; } + bool include_argument_oops() const { return IncludeArgs; } void set_include_argument_oops(bool f) {} bool in_cont() const { return false; } stackChunkHandle stack_chunk() const { return stackChunkHandle(); } diff --git a/src/hotspot/cpu/x86/stackChunkFrameStream_x86.inline.hpp b/src/hotspot/cpu/x86/stackChunkFrameStream_x86.inline.hpp index 6289b903ab1..ebdae8a7eac 100644 --- a/src/hotspot/cpu/x86/stackChunkFrameStream_x86.inline.hpp +++ b/src/hotspot/cpu/x86/stackChunkFrameStream_x86.inline.hpp @@ -106,17 +106,14 @@ inline int StackChunkFrameStream::interpreter_frame_stack_argsize() } template -inline int StackChunkFrameStream::interpreter_frame_num_oops() const { +template +inline int StackChunkFrameStream::interpreter_frame_num_oops(RegisterMapT* map) const { assert_is_interpreted_and_frame_type_mixed(); ResourceMark rm; - InterpreterOopMap mask; frame f = to_frame(); - f.interpreted_frame_oop_map(&mask); - return mask.num_oops() - + 1 // for the mirror oop - + (f.interpreter_frame_method()->is_native() ? 1 : 0) // temp oop slot - + pointer_delta_as_int((intptr_t*)f.interpreter_frame_monitor_begin(), - (intptr_t*)f.interpreter_frame_monitor_end())/BasicObjectLock::size(); + InterpreterOopCount closure; + f.oops_interpreted_do(&closure, map); + return closure.count(); } template<> diff --git a/src/hotspot/cpu/x86/templateTable_x86.cpp b/src/hotspot/cpu/x86/templateTable_x86.cpp index c8dafb2d023..7065f653e19 100644 --- a/src/hotspot/cpu/x86/templateTable_x86.cpp +++ b/src/hotspot/cpu/x86/templateTable_x86.cpp @@ -2233,7 +2233,7 @@ void TemplateTable::resolve_cache_and_index_for_method(int byte_no, // Class initialization barrier slow path lands here as well. address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ movl(temp, code); - __ call_VM(noreg, entry, temp); + __ call_VM_preemptable(noreg, entry, temp); // Update registers with resolved info __ load_method_entry(cache, index); __ bind(L_done); @@ -2280,7 +2280,7 @@ void TemplateTable::resolve_cache_and_index_for_field(int byte_no, // Class initialization barrier slow path lands here as well. address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache); __ movl(temp, code); - __ call_VM(noreg, entry, temp); + __ call_VM_preemptable(noreg, entry, temp); // Update registers with resolved info __ load_field_entry(cache, index); __ bind(L_done); @@ -3644,8 +3644,8 @@ void TemplateTable::_new() { __ get_constant_pool(c_rarg1); __ get_unsigned_2_byte_index_at_bcp(c_rarg2, 1); - call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2); - __ verify_oop(rax); + __ call_VM_preemptable(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::_new), c_rarg1, c_rarg2); + __ verify_oop(rax); // continue __ bind(done); diff --git a/src/hotspot/cpu/zero/continuationFreezeThaw_zero.inline.hpp b/src/hotspot/cpu/zero/continuationFreezeThaw_zero.inline.hpp index eb6be8772f9..22f596b161a 100644 --- a/src/hotspot/cpu/zero/continuationFreezeThaw_zero.inline.hpp +++ b/src/hotspot/cpu/zero/continuationFreezeThaw_zero.inline.hpp @@ -68,6 +68,15 @@ inline void FreezeBase::patch_stack_pd(intptr_t* frame_sp, intptr_t* heap_sp) { Unimplemented(); } +inline intptr_t* AnchorMark::anchor_mark_set_pd() { + Unimplemented(); + return nullptr; +} + +inline void AnchorMark::anchor_mark_clear_pd() { + Unimplemented(); +} + inline frame ThawBase::new_entry_frame() { Unimplemented(); return frame(); @@ -100,6 +109,11 @@ inline intptr_t* ThawBase::push_cleanup_continuation() { return nullptr; } +inline intptr_t* ThawBase::push_preempt_adapter() { + Unimplemented(); + return nullptr; +} + template inline void Thaw::patch_caller_links(intptr_t* sp, intptr_t* bottom) { Unimplemented(); diff --git a/src/hotspot/cpu/zero/smallRegisterMap_zero.inline.hpp b/src/hotspot/cpu/zero/smallRegisterMap_zero.inline.hpp index bbb70fa2065..906575ab669 100644 --- a/src/hotspot/cpu/zero/smallRegisterMap_zero.inline.hpp +++ b/src/hotspot/cpu/zero/smallRegisterMap_zero.inline.hpp @@ -28,18 +28,17 @@ #include "runtime/frame.inline.hpp" #include "runtime/registerMap.hpp" -// Java frames don't have callee saved registers (except for rfp), so we can use a smaller RegisterMap -class SmallRegisterMap { - constexpr SmallRegisterMap() = default; - ~SmallRegisterMap() = default; - NONCOPYABLE(SmallRegisterMap); +class SmallRegisterMap; + +// Java frames don't have callee saved registers (except for rfp), so we can use a smaller RegisterMap +template +class SmallRegisterMapType { + friend SmallRegisterMap; + + constexpr SmallRegisterMapType() = default; + ~SmallRegisterMapType() = default; + NONCOPYABLE(SmallRegisterMapType); -public: - static const SmallRegisterMap* instance() { - static constexpr SmallRegisterMap the_instance{}; - return &the_instance; - } -private: static void assert_is_rfp(VMReg r) NOT_DEBUG_RETURN DEBUG_ONLY({ Unimplemented(); }) public: @@ -69,7 +68,7 @@ public: bool update_map() const { return false; } bool walk_cont() const { return false; } - bool include_argument_oops() const { return false; } + bool include_argument_oops() const { return IncludeArgs; } void set_include_argument_oops(bool f) {} bool in_cont() const { return false; } stackChunkHandle stack_chunk() const { return stackChunkHandle(); } diff --git a/src/hotspot/cpu/zero/stackChunkFrameStream_zero.inline.hpp b/src/hotspot/cpu/zero/stackChunkFrameStream_zero.inline.hpp index 84d6dee9149..3b9643fb3f4 100644 --- a/src/hotspot/cpu/zero/stackChunkFrameStream_zero.inline.hpp +++ b/src/hotspot/cpu/zero/stackChunkFrameStream_zero.inline.hpp @@ -85,7 +85,8 @@ inline int StackChunkFrameStream::interpreter_frame_stack_argsize() } template -inline int StackChunkFrameStream::interpreter_frame_num_oops() const { +template +inline int StackChunkFrameStream::interpreter_frame_num_oops(RegisterMapT* map) const { Unimplemented(); return 0; } diff --git a/src/hotspot/share/cds/aotConstantPoolResolver.cpp b/src/hotspot/share/cds/aotConstantPoolResolver.cpp index ff47d00c484..ddf7d32ed70 100644 --- a/src/hotspot/share/cds/aotConstantPoolResolver.cpp +++ b/src/hotspot/share/cds/aotConstantPoolResolver.cpp @@ -318,13 +318,13 @@ void AOTConstantPoolResolver::maybe_resolve_fmi_ref(InstanceKlass* ik, Method* m if (!VM_Version::supports_fast_class_init_checks()) { return; // Do not resolve since interpreter lacks fast clinit barriers support } - InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, false /*initialize_holder*/, CHECK); + InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, ClassInitMode::dont_init, CHECK); is_static = " *** static"; break; case Bytecodes::_getfield: case Bytecodes::_putfield: - InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, false /*initialize_holder*/, CHECK); + InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, ClassInitMode::dont_init, CHECK); break; case Bytecodes::_invokestatic: diff --git a/src/hotspot/share/cds/heapShared.cpp b/src/hotspot/share/cds/heapShared.cpp index de4d1c8a729..146ee4af1e0 100644 --- a/src/hotspot/share/cds/heapShared.cpp +++ b/src/hotspot/share/cds/heapShared.cpp @@ -1809,7 +1809,8 @@ void HeapShared::check_special_subgraph_classes() { name != vmSymbols::java_lang_ArrayStoreException() && name != vmSymbols::java_lang_ClassCastException() && name != vmSymbols::java_lang_InternalError() && - name != vmSymbols::java_lang_NullPointerException()) { + name != vmSymbols::java_lang_NullPointerException() && + name != vmSymbols::jdk_internal_vm_PreemptedException()) { ResourceMark rm; fatal("special subgraph cannot have objects of type %s", subgraph_k->external_name()); } diff --git a/src/hotspot/share/ci/ciField.cpp b/src/hotspot/share/ci/ciField.cpp index cbe0cadbc93..d47c4c508d7 100644 --- a/src/hotspot/share/ci/ciField.cpp +++ b/src/hotspot/share/ci/ciField.cpp @@ -400,7 +400,7 @@ bool ciField::will_link(ciMethod* accessing_method, _name->get_symbol(), _signature->get_symbol(), methodHandle(THREAD, accessing_method->get_Method())); fieldDescriptor result; - LinkResolver::resolve_field(result, link_info, bc, false, CHECK_AND_CLEAR_(false)); + LinkResolver::resolve_field(result, link_info, bc, ClassInitMode::dont_init, CHECK_AND_CLEAR_(false)); // update the hit-cache, unless there is a problem with memory scoping: if (accessing_method->holder()->is_shared() || !is_shared()) { diff --git a/src/hotspot/share/classfile/javaClasses.cpp b/src/hotspot/share/classfile/javaClasses.cpp index cfe55bf7f76..ac701e8364f 100644 --- a/src/hotspot/share/classfile/javaClasses.cpp +++ b/src/hotspot/share/classfile/javaClasses.cpp @@ -2115,6 +2115,7 @@ int java_lang_VirtualThread::_state_offset; int java_lang_VirtualThread::_next_offset; int java_lang_VirtualThread::_onWaitingList_offset; int java_lang_VirtualThread::_notified_offset; +int java_lang_VirtualThread::_interruptible_wait_offset; int java_lang_VirtualThread::_timeout_offset; int java_lang_VirtualThread::_objectWaiter_offset; @@ -2126,6 +2127,7 @@ int java_lang_VirtualThread::_objectWaiter_offset; macro(_next_offset, k, "next", vthread_signature, false); \ macro(_onWaitingList_offset, k, "onWaitingList", bool_signature, false); \ macro(_notified_offset, k, "notified", bool_signature, false); \ + macro(_interruptible_wait_offset, k, "interruptibleWait", bool_signature, false); \ macro(_timeout_offset, k, "timeout", long_signature, false); @@ -2195,6 +2197,10 @@ void java_lang_VirtualThread::set_notified(oop vthread, jboolean value) { vthread->bool_field_put_volatile(_notified_offset, value); } +void java_lang_VirtualThread::set_interruptible_wait(oop vthread, jboolean value) { + vthread->bool_field_put_volatile(_interruptible_wait_offset, value); +} + jlong java_lang_VirtualThread::timeout(oop vthread) { return vthread->long_field(_timeout_offset); } diff --git a/src/hotspot/share/classfile/javaClasses.hpp b/src/hotspot/share/classfile/javaClasses.hpp index 750f27fcf47..28f8c0a3b8c 100644 --- a/src/hotspot/share/classfile/javaClasses.hpp +++ b/src/hotspot/share/classfile/javaClasses.hpp @@ -563,6 +563,7 @@ class java_lang_VirtualThread : AllStatic { static int _next_offset; static int _onWaitingList_offset; static int _notified_offset; + static int _interruptible_wait_offset; static int _recheckInterval_offset; static int _timeout_offset; static int _objectWaiter_offset; @@ -615,6 +616,7 @@ class java_lang_VirtualThread : AllStatic { static jlong timeout(oop vthread); static void set_timeout(oop vthread, jlong value); static void set_notified(oop vthread, jboolean value); + static void set_interruptible_wait(oop vthread, jboolean value); static bool is_preempted(oop vthread); static JavaThreadStatus map_state_to_thread_status(int state); diff --git a/src/hotspot/share/classfile/vmClassMacros.hpp b/src/hotspot/share/classfile/vmClassMacros.hpp index 1edc13054d4..04f0aaaaa44 100644 --- a/src/hotspot/share/classfile/vmClassMacros.hpp +++ b/src/hotspot/share/classfile/vmClassMacros.hpp @@ -75,6 +75,7 @@ do_klass(IllegalMonitorStateException_klass, java_lang_IllegalMonitorStateException ) \ do_klass(Reference_klass, java_lang_ref_Reference ) \ do_klass(IllegalCallerException_klass, java_lang_IllegalCallerException ) \ + do_klass(PreemptedException_klass, jdk_internal_vm_PreemptedException ) \ \ /* ref klasses and set reference types */ \ do_klass(SoftReference_klass, java_lang_ref_SoftReference ) \ diff --git a/src/hotspot/share/classfile/vmSymbols.hpp b/src/hotspot/share/classfile/vmSymbols.hpp index 06f27f09c5c..d22700b8d1f 100644 --- a/src/hotspot/share/classfile/vmSymbols.hpp +++ b/src/hotspot/share/classfile/vmSymbols.hpp @@ -220,6 +220,7 @@ class SerializeClosure; template(java_lang_Exception, "java/lang/Exception") \ template(java_lang_RuntimeException, "java/lang/RuntimeException") \ template(java_io_IOException, "java/io/IOException") \ + template(jdk_internal_vm_PreemptedException, "jdk/internal/vm/PreemptedException") \ \ /* error klasses: at least all errors thrown by the VM have entries here */ \ template(java_lang_AbstractMethodError, "java/lang/AbstractMethodError") \ @@ -512,6 +513,8 @@ class SerializeClosure; template(maxThawingSize_name, "maxThawingSize") \ template(lockStackSize_name, "lockStackSize") \ template(objectWaiter_name, "objectWaiter") \ + template(atKlassInit_name, "atKlassInit") \ + template(hasArgsAtTop_name, "hasArgsAtTop") \ \ /* name symbols needed by intrinsics */ \ VM_INTRINSICS_DO(VM_INTRINSIC_IGNORE, VM_SYMBOL_IGNORE, template, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) \ diff --git a/src/hotspot/share/interpreter/interpreterRuntime.cpp b/src/hotspot/share/interpreter/interpreterRuntime.cpp index 6e067c77287..5f4cc6c450d 100644 --- a/src/hotspot/share/interpreter/interpreterRuntime.cpp +++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp @@ -219,7 +219,7 @@ JRT_ENTRY(void, InterpreterRuntime::_new(JavaThread* current, ConstantPool* pool klass->check_valid_for_instantiation(true, CHECK); // Make sure klass is initialized - klass->initialize(CHECK); + klass->initialize_preemptable(CHECK_AND_CLEAR_PREEMPTED); oop obj = klass->allocate_instance(CHECK); current->set_vm_result_oop(obj); @@ -646,18 +646,19 @@ JRT_END // Fields // -void InterpreterRuntime::resolve_get_put(JavaThread* current, Bytecodes::Code bytecode) { +void InterpreterRuntime::resolve_get_put(Bytecodes::Code bytecode, TRAPS) { + JavaThread* current = THREAD; LastFrameAccessor last_frame(current); constantPoolHandle pool(current, last_frame.method()->constants()); methodHandle m(current, last_frame.method()); - resolve_get_put(bytecode, last_frame.get_index_u2(bytecode), m, pool, true /*initialize_holder*/, current); + resolve_get_put(bytecode, last_frame.get_index_u2(bytecode), m, pool, ClassInitMode::init_preemptable, THREAD); } void InterpreterRuntime::resolve_get_put(Bytecodes::Code bytecode, int field_index, methodHandle& m, constantPoolHandle& pool, - bool initialize_holder, TRAPS) { + ClassInitMode init_mode, TRAPS) { fieldDescriptor info; bool is_put = (bytecode == Bytecodes::_putfield || bytecode == Bytecodes::_nofast_putfield || bytecode == Bytecodes::_putstatic); @@ -665,8 +666,7 @@ void InterpreterRuntime::resolve_get_put(Bytecodes::Code bytecode, int field_ind { JvmtiHideSingleStepping jhss(THREAD); - LinkResolver::resolve_field_access(info, pool, field_index, - m, bytecode, initialize_holder, CHECK); + LinkResolver::resolve_field_access(info, pool, field_index, m, bytecode, init_mode, CHECK); } // end JvmtiHideSingleStepping // check if link resolution caused cpCache to be updated @@ -794,7 +794,8 @@ JRT_ENTRY(void, InterpreterRuntime::_breakpoint(JavaThread* current, Method* met JvmtiExport::post_raw_breakpoint(current, method, bcp); JRT_END -void InterpreterRuntime::resolve_invoke(JavaThread* current, Bytecodes::Code bytecode) { +void InterpreterRuntime::resolve_invoke(Bytecodes::Code bytecode, TRAPS) { + JavaThread* current = THREAD; LastFrameAccessor last_frame(current); // extract receiver from the outgoing argument list if necessary Handle receiver(current, nullptr); @@ -822,10 +823,9 @@ void InterpreterRuntime::resolve_invoke(JavaThread* current, Bytecodes::Code byt int method_index = last_frame.get_index_u2(bytecode); { JvmtiHideSingleStepping jhss(current); - JavaThread* THREAD = current; // For exception macros. LinkResolver::resolve_invoke(info, receiver, pool, method_index, bytecode, - THREAD); + ClassInitMode::init_preemptable, THREAD); if (HAS_PENDING_EXCEPTION) { if (ProfileTraps && PENDING_EXCEPTION->klass()->name() == vmSymbols::java_lang_NullPointerException()) { @@ -933,7 +933,8 @@ void InterpreterRuntime::cds_resolve_invoke(Bytecodes::Code bytecode, int method } // First time execution: Resolve symbols, create a permanent MethodType object. -void InterpreterRuntime::resolve_invokehandle(JavaThread* current) { +void InterpreterRuntime::resolve_invokehandle(TRAPS) { + JavaThread* current = THREAD; const Bytecodes::Code bytecode = Bytecodes::_invokehandle; LastFrameAccessor last_frame(current); @@ -962,7 +963,8 @@ void InterpreterRuntime::cds_resolve_invokehandle(int raw_index, } // First time execution: Resolve symbols, create a permanent CallSite object. -void InterpreterRuntime::resolve_invokedynamic(JavaThread* current) { +void InterpreterRuntime::resolve_invokedynamic(TRAPS) { + JavaThread* current = THREAD; LastFrameAccessor last_frame(current); const Bytecodes::Code bytecode = Bytecodes::_invokedynamic; @@ -997,19 +999,19 @@ JRT_ENTRY(void, InterpreterRuntime::resolve_from_cache(JavaThread* current, Byte case Bytecodes::_putstatic: case Bytecodes::_getfield: case Bytecodes::_putfield: - resolve_get_put(current, bytecode); + resolve_get_put(bytecode, CHECK_AND_CLEAR_PREEMPTED); break; case Bytecodes::_invokevirtual: case Bytecodes::_invokespecial: case Bytecodes::_invokestatic: case Bytecodes::_invokeinterface: - resolve_invoke(current, bytecode); + resolve_invoke(bytecode, CHECK_AND_CLEAR_PREEMPTED); break; case Bytecodes::_invokehandle: - resolve_invokehandle(current); + resolve_invokehandle(THREAD); break; case Bytecodes::_invokedynamic: - resolve_invokedynamic(current); + resolve_invokedynamic(THREAD); break; default: fatal("unexpected bytecode: %s", Bytecodes::name(bytecode)); @@ -1524,3 +1526,11 @@ JRT_LEAF(intptr_t, InterpreterRuntime::trace_bytecode(JavaThread* current, intpt return preserve_this_value; JRT_END #endif // !PRODUCT + +#ifdef ASSERT +bool InterpreterRuntime::is_preemptable_call(address entry_point) { + return entry_point == CAST_FROM_FN_PTR(address, InterpreterRuntime::monitorenter) || + entry_point == CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_from_cache) || + entry_point == CAST_FROM_FN_PTR(address, InterpreterRuntime::_new); +} +#endif // ASSERT diff --git a/src/hotspot/share/interpreter/interpreterRuntime.hpp b/src/hotspot/share/interpreter/interpreterRuntime.hpp index cdee0c9daa7..f553debcd75 100644 --- a/src/hotspot/share/interpreter/interpreterRuntime.hpp +++ b/src/hotspot/share/interpreter/interpreterRuntime.hpp @@ -94,7 +94,7 @@ class InterpreterRuntime: AllStatic { // Used by AOTConstantPoolResolver static void resolve_get_put(Bytecodes::Code bytecode, int field_index, - methodHandle& m, constantPoolHandle& pool, bool initialize_holder, TRAPS); + methodHandle& m, constantPoolHandle& pool, ClassInitMode init_mode, TRAPS); static void cds_resolve_invoke(Bytecodes::Code bytecode, int method_index, constantPoolHandle& pool, TRAPS); static void cds_resolve_invokehandle(int raw_index, @@ -103,12 +103,12 @@ class InterpreterRuntime: AllStatic { constantPoolHandle& pool, TRAPS); private: // Statics & fields - static void resolve_get_put(JavaThread* current, Bytecodes::Code bytecode); + static void resolve_get_put(Bytecodes::Code bytecode, TRAPS); // Calls - static void resolve_invoke(JavaThread* current, Bytecodes::Code bytecode); - static void resolve_invokehandle (JavaThread* current); - static void resolve_invokedynamic(JavaThread* current); + static void resolve_invoke(Bytecodes::Code bytecode, TRAPS); + static void resolve_invokehandle (TRAPS); + static void resolve_invokedynamic(TRAPS); static void update_invoke_cp_cache_entry(CallInfo& info, Bytecodes::Code bytecode, methodHandle& resolved_method, @@ -170,6 +170,9 @@ private: static void verify_mdp(Method* method, address bcp, address mdp); #endif // ASSERT static MethodCounters* build_method_counters(JavaThread* current, Method* m); + + // Virtual Thread Preemption + DEBUG_ONLY(static bool is_preemptable_call(address entry_point);) }; diff --git a/src/hotspot/share/interpreter/linkResolver.cpp b/src/hotspot/share/interpreter/linkResolver.cpp index d46ccdb4d1c..c82398b654c 100644 --- a/src/hotspot/share/interpreter/linkResolver.cpp +++ b/src/hotspot/share/interpreter/linkResolver.cpp @@ -986,14 +986,14 @@ void LinkResolver::resolve_field_access(fieldDescriptor& fd, int index, const methodHandle& method, Bytecodes::Code byte, - bool initialize_class, TRAPS) { + ClassInitMode init_mode, TRAPS) { LinkInfo link_info(pool, index, method, byte, CHECK); - resolve_field(fd, link_info, byte, initialize_class, CHECK); + resolve_field(fd, link_info, byte, init_mode, CHECK); } void LinkResolver::resolve_field(fieldDescriptor& fd, const LinkInfo& link_info, - Bytecodes::Code byte, bool initialize_class, + Bytecodes::Code byte, ClassInitMode init_mode, TRAPS) { assert(byte == Bytecodes::_getstatic || byte == Bytecodes::_putstatic || byte == Bytecodes::_getfield || byte == Bytecodes::_putfield || @@ -1077,8 +1077,12 @@ void LinkResolver::resolve_field(fieldDescriptor& fd, // // note 2: we don't want to force initialization if we are just checking // if the field access is legal; e.g., during compilation - if (is_static && initialize_class) { - sel_klass->initialize(CHECK); + if (is_static) { + if (init_mode == ClassInitMode::init) { + sel_klass->initialize(CHECK); + } else if (init_mode == ClassInitMode::init_preemptable) { + sel_klass->initialize_preemptable(CHECK); + } } } @@ -1104,15 +1108,19 @@ void LinkResolver::resolve_field(fieldDescriptor& fd, void LinkResolver::resolve_static_call(CallInfo& result, const LinkInfo& link_info, - bool initialize_class, TRAPS) { + ClassInitMode init_mode, TRAPS) { Method* resolved_method = linktime_resolve_static_method(link_info, CHECK); // The resolved class can change as a result of this resolution. Klass* resolved_klass = resolved_method->method_holder(); // Initialize klass (this should only happen if everything is ok) - if (initialize_class && resolved_klass->should_be_initialized()) { - resolved_klass->initialize(CHECK); + if (init_mode != ClassInitMode::dont_init && resolved_klass->should_be_initialized()) { + if (init_mode == ClassInitMode::init) { + resolved_klass->initialize(CHECK); + } else if (init_mode == ClassInitMode::init_preemptable) { + resolved_klass->initialize_preemptable(CHECK); + } // Use updated LinkInfo to reresolve with resolved method holder LinkInfo new_info(resolved_klass, link_info.name(), link_info.signature(), link_info.current_klass(), @@ -1127,7 +1135,7 @@ void LinkResolver::resolve_static_call(CallInfo& result, } void LinkResolver::cds_resolve_static_call(CallInfo& result, const LinkInfo& link_info, TRAPS) { - resolve_static_call(result, link_info, /*initialize_class*/false, CHECK); + resolve_static_call(result, link_info, ClassInitMode::dont_init, CHECK); } // throws linktime exceptions @@ -1678,7 +1686,7 @@ int LinkResolver::resolve_virtual_vtable_index(Klass* receiver_klass, Method* LinkResolver::resolve_static_call_or_null(const LinkInfo& link_info) { EXCEPTION_MARK; CallInfo info; - resolve_static_call(info, link_info, /*initialize_class*/false, THREAD); + resolve_static_call(info, link_info, ClassInitMode::dont_init, THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return nullptr; @@ -1702,15 +1710,15 @@ Method* LinkResolver::resolve_special_call_or_null(const LinkInfo& link_info) { //------------------------------------------------------------------------------------------------------------------------ // ConstantPool entries -void LinkResolver::resolve_invoke(CallInfo& result, Handle recv, const constantPoolHandle& pool, int index, Bytecodes::Code byte, TRAPS) { +void LinkResolver::resolve_invoke(CallInfo& result, Handle recv, const constantPoolHandle& pool, int index, Bytecodes::Code byte, ClassInitMode init_mode, TRAPS) { switch (byte) { - case Bytecodes::_invokestatic : resolve_invokestatic (result, pool, index, CHECK); break; - case Bytecodes::_invokespecial : resolve_invokespecial (result, recv, pool, index, CHECK); break; - case Bytecodes::_invokevirtual : resolve_invokevirtual (result, recv, pool, index, CHECK); break; - case Bytecodes::_invokehandle : resolve_invokehandle (result, pool, index, CHECK); break; - case Bytecodes::_invokedynamic : resolve_invokedynamic (result, pool, index, CHECK); break; - case Bytecodes::_invokeinterface: resolve_invokeinterface(result, recv, pool, index, CHECK); break; - default : break; + case Bytecodes::_invokestatic : resolve_invokestatic (result, pool, index, init_mode, CHECK); break; + case Bytecodes::_invokespecial : resolve_invokespecial (result, recv, pool, index, CHECK); break; + case Bytecodes::_invokevirtual : resolve_invokevirtual (result, recv, pool, index, CHECK); break; + case Bytecodes::_invokehandle : resolve_invokehandle (result, pool, index, CHECK); break; + case Bytecodes::_invokedynamic : resolve_invokedynamic (result, pool, index, CHECK); break; + case Bytecodes::_invokeinterface: resolve_invokeinterface(result, recv, pool, index, CHECK); break; + default : break; } return; } @@ -1732,7 +1740,7 @@ void LinkResolver::resolve_invoke(CallInfo& result, Handle& recv, /*check_null_and_abstract=*/true, CHECK); break; case Bytecodes::_invokestatic: - resolve_static_call(result, link_info, /*initialize_class=*/false, CHECK); + resolve_static_call(result, link_info, ClassInitMode::dont_init, CHECK); break; case Bytecodes::_invokespecial: resolve_special_call(result, recv, link_info, CHECK); @@ -1743,9 +1751,9 @@ void LinkResolver::resolve_invoke(CallInfo& result, Handle& recv, } } -void LinkResolver::resolve_invokestatic(CallInfo& result, const constantPoolHandle& pool, int index, TRAPS) { +void LinkResolver::resolve_invokestatic(CallInfo& result, const constantPoolHandle& pool, int index, ClassInitMode init_mode, TRAPS) { LinkInfo link_info(pool, index, Bytecodes::_invokestatic, CHECK); - resolve_static_call(result, link_info, /*initialize_class*/true, CHECK); + resolve_static_call(result, link_info, init_mode, CHECK); } diff --git a/src/hotspot/share/interpreter/linkResolver.hpp b/src/hotspot/share/interpreter/linkResolver.hpp index 18fb4ee6ccb..4d28e712c5f 100644 --- a/src/hotspot/share/interpreter/linkResolver.hpp +++ b/src/hotspot/share/interpreter/linkResolver.hpp @@ -189,6 +189,12 @@ class LinkInfo : public StackObj { void print() PRODUCT_RETURN; }; +enum class ClassInitMode { + dont_init, + init, + init_preemptable +}; + // Link information for getfield/putfield & getstatic/putstatic bytecodes // is represented using a fieldDescriptor. @@ -267,7 +273,7 @@ class LinkResolver: AllStatic { // runtime resolving from constant pool static void resolve_invokestatic (CallInfo& result, - const constantPoolHandle& pool, int index, TRAPS); + const constantPoolHandle& pool, int index, ClassInitMode mode, TRAPS); static void resolve_invokespecial (CallInfo& result, Handle recv, const constantPoolHandle& pool, int index, TRAPS); static void resolve_invokevirtual (CallInfo& result, Handle recv, @@ -295,22 +301,21 @@ class LinkResolver: AllStatic { int index, const methodHandle& method, Bytecodes::Code byte, - bool initialize_class, TRAPS); + ClassInitMode mode, TRAPS); static void resolve_field_access(fieldDescriptor& result, const constantPoolHandle& pool, int index, const methodHandle& method, Bytecodes::Code byte, TRAPS) { - resolve_field_access(result, pool, index, method, byte, - /* initialize_class*/true, THREAD); + resolve_field_access(result, pool, index, method, byte, ClassInitMode::init, THREAD); } static void resolve_field(fieldDescriptor& result, const LinkInfo& link_info, Bytecodes::Code access_kind, - bool initialize_class, TRAPS); + ClassInitMode mode, TRAPS); static void resolve_static_call (CallInfo& result, const LinkInfo& link_info, - bool initialize_klass, TRAPS); + ClassInitMode mode, TRAPS); static void resolve_special_call (CallInfo& result, Handle recv, const LinkInfo& link_info, @@ -353,7 +358,12 @@ class LinkResolver: AllStatic { // runtime resolving from constant pool static void resolve_invoke(CallInfo& result, Handle recv, const constantPoolHandle& pool, int index, - Bytecodes::Code byte, TRAPS); + Bytecodes::Code byte, ClassInitMode static_mode, TRAPS); + static void resolve_invoke(CallInfo& result, Handle recv, + const constantPoolHandle& pool, int index, + Bytecodes::Code byte, TRAPS) { + resolve_invoke(result, recv, pool, index, byte, ClassInitMode::init, THREAD); + } // runtime resolving from attached method static void resolve_invoke(CallInfo& result, Handle& recv, diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp index 36a6fae794a..5891bec9c8a 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp @@ -1008,7 +1008,7 @@ C2V_VMENTRY_NULL(jobject, resolveFieldInPool, (JNIEnv* env, jobject, ARGUMENT_PA } LinkInfo link_info(cp, index, mh, code, CHECK_NULL); - LinkResolver::resolve_field(fd, link_info, Bytecodes::java_code(code), false, CHECK_NULL); + LinkResolver::resolve_field(fd, link_info, Bytecodes::java_code(code), ClassInitMode::dont_init, CHECK_NULL); JVMCIPrimitiveArray info = JVMCIENV->wrap(info_handle); if (info.is_null() || JVMCIENV->get_length(info) != 4) { JVMCI_ERROR_NULL("info must not be null and have a length of 4"); diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp index 756619bff33..69afe5c6450 100644 --- a/src/hotspot/share/memory/universe.cpp +++ b/src/hotspot/share/memory/universe.cpp @@ -238,6 +238,7 @@ static BuiltinException _internal_error; static BuiltinException _array_index_out_of_bounds_exception; static BuiltinException _array_store_exception; static BuiltinException _class_cast_exception; +static BuiltinException _preempted_exception; objArrayOop Universe::the_empty_class_array () { return (objArrayOop)_the_empty_class_array.resolve(); @@ -258,6 +259,7 @@ oop Universe::internal_error_instance() { return _internal_error.insta oop Universe::array_index_out_of_bounds_exception_instance() { return _array_index_out_of_bounds_exception.instance(); } oop Universe::array_store_exception_instance() { return _array_store_exception.instance(); } oop Universe::class_cast_exception_instance() { return _class_cast_exception.instance(); } +oop Universe::preempted_exception_instance() { return _preempted_exception.instance(); } oop Universe::the_null_sentinel() { return _the_null_sentinel.resolve(); } @@ -317,6 +319,7 @@ void Universe::archive_exception_instances() { _array_index_out_of_bounds_exception.store_in_cds(); _array_store_exception.store_in_cds(); _class_cast_exception.store_in_cds(); + _preempted_exception.store_in_cds(); } void Universe::load_archived_object_instances() { @@ -336,6 +339,7 @@ void Universe::load_archived_object_instances() { _array_index_out_of_bounds_exception.load_from_cds(); _array_store_exception.load_from_cds(); _class_cast_exception.load_from_cds(); + _preempted_exception.load_from_cds(); } } #endif @@ -355,6 +359,7 @@ void Universe::serialize(SerializeClosure* f) { _array_index_out_of_bounds_exception.serialize(f); _array_store_exception.serialize(f); _class_cast_exception.serialize(f); + _preempted_exception.serialize(f); #endif f->do_ptr(&_fillerArrayKlass); @@ -1139,6 +1144,7 @@ bool universe_post_init() { _array_index_out_of_bounds_exception.init_if_empty(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), CHECK_false); _array_store_exception.init_if_empty(vmSymbols::java_lang_ArrayStoreException(), CHECK_false); _class_cast_exception.init_if_empty(vmSymbols::java_lang_ClassCastException(), CHECK_false); + _preempted_exception.init_if_empty(vmSymbols::jdk_internal_vm_PreemptedException(), CHECK_false); // Virtual Machine Error for when we get into a situation we can't resolve Klass* k = vmClasses::InternalError_klass(); diff --git a/src/hotspot/share/memory/universe.hpp b/src/hotspot/share/memory/universe.hpp index 37ca965062e..df2c1d66d3c 100644 --- a/src/hotspot/share/memory/universe.hpp +++ b/src/hotspot/share/memory/universe.hpp @@ -244,6 +244,7 @@ class Universe: AllStatic { static oop array_index_out_of_bounds_exception_instance(); static oop array_store_exception_instance(); static oop class_cast_exception_instance(); + static oop preempted_exception_instance(); static oop vm_exception() { return internal_error_instance(); } static Array* the_array_interfaces_array() { return _the_array_interfaces_array; } diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp index e13f4849454..2d03b69ee92 100644 --- a/src/hotspot/share/oops/instanceKlass.cpp +++ b/src/hotspot/share/oops/instanceKlass.cpp @@ -793,10 +793,11 @@ oop InstanceKlass::init_lock() const { return lock; } -// Set the initialization lock to null so the object can be GC'ed. Any racing +// Set the initialization lock to null so the object can be GC'ed. Any racing // threads to get this lock will see a null lock and will not lock. // That's okay because they all check for initialized state after getting -// the lock and return. +// the lock and return. For preempted vthreads we keep the oop protected +// in the ObjectMonitor (see ObjectMonitor::set_object_strong()). void InstanceKlass::fence_and_clear_init_lock() { // make sure previous stores are all done, notably the init_state. OrderAccess::storestore(); @@ -804,6 +805,31 @@ void InstanceKlass::fence_and_clear_init_lock() { assert(!is_not_initialized(), "class must be initialized now"); } +class PreemptableInitCall { + JavaThread* _thread; + bool _previous; + DEBUG_ONLY(InstanceKlass* _previous_klass;) + public: + PreemptableInitCall(JavaThread* thread, InstanceKlass* ik) : _thread(thread) { + _previous = thread->at_preemptable_init(); + _thread->set_at_preemptable_init(true); + DEBUG_ONLY(_previous_klass = _thread->preempt_init_klass();) + DEBUG_ONLY(_thread->set_preempt_init_klass(ik)); + } + ~PreemptableInitCall() { + _thread->set_at_preemptable_init(_previous); + DEBUG_ONLY(_thread->set_preempt_init_klass(_previous_klass)); + } +}; + +void InstanceKlass::initialize_preemptable(TRAPS) { + if (this->should_be_initialized()) { + PreemptableInitCall pic(THREAD, this); + initialize_impl(THREAD); + } else { + assert(is_initialized(), "sanity check"); + } +} // See "The Virtual Machine Specification" section 2.16.5 for a detailed explanation of the class initialization // process. The step comments refers to the procedure described in that section. @@ -980,7 +1006,12 @@ bool InstanceKlass::link_class_impl(TRAPS) { { HandleMark hm(THREAD); Handle h_init_lock(THREAD, init_lock()); - ObjectLocker ol(h_init_lock, jt); + ObjectLocker ol(h_init_lock, CHECK_PREEMPTABLE_false); + // Don't allow preemption if we link/initialize classes below, + // since that would release this monitor while we are in the + // middle of linking this class. + NoPreemptMark npm(THREAD); + // rewritten will have been set if loader constraint error found // on an earlier link attempt // don't verify or rewrite if already rewritten @@ -1174,6 +1205,17 @@ void InstanceKlass::clean_initialization_error_table() { } } +class ThreadWaitingForClassInit : public StackObj { + JavaThread* _thread; + public: + ThreadWaitingForClassInit(JavaThread* thread, InstanceKlass* ik) : _thread(thread) { + _thread->set_class_to_be_initialized(ik); + } + ~ThreadWaitingForClassInit() { + _thread->set_class_to_be_initialized(nullptr); + } +}; + void InstanceKlass::initialize_impl(TRAPS) { HandleMark hm(THREAD); @@ -1193,7 +1235,7 @@ void InstanceKlass::initialize_impl(TRAPS) { // Step 1 { Handle h_init_lock(THREAD, init_lock()); - ObjectLocker ol(h_init_lock, jt); + ObjectLocker ol(h_init_lock, CHECK_PREEMPTABLE); // Step 2 // If we were to use wait() instead of waitInterruptibly() then @@ -1206,9 +1248,8 @@ void InstanceKlass::initialize_impl(TRAPS) { jt->name(), external_name(), init_thread_name()); } wait = true; - jt->set_class_to_be_initialized(this); - ol.wait_uninterruptibly(jt); - jt->set_class_to_be_initialized(nullptr); + ThreadWaitingForClassInit twcl(THREAD, this); + ol.wait_uninterruptibly(CHECK_PREEMPTABLE); } // Step 3 @@ -1266,6 +1307,10 @@ void InstanceKlass::initialize_impl(TRAPS) { } } + // Block preemption once we are the initializer thread. Unmounting now + // would complicate the reentrant case (identity is platform thread). + NoPreemptMark npm(THREAD); + // Step 7 // Next, if C is a class rather than an interface, initialize it's super class and super // interfaces. diff --git a/src/hotspot/share/oops/instanceKlass.hpp b/src/hotspot/share/oops/instanceKlass.hpp index 82c82714f9b..8bb9741af9f 100644 --- a/src/hotspot/share/oops/instanceKlass.hpp +++ b/src/hotspot/share/oops/instanceKlass.hpp @@ -538,6 +538,7 @@ public: void initialize_with_aot_initialized_mirror(TRAPS); void assert_no_clinit_will_run_for_aot_initialized_class() const NOT_DEBUG_RETURN; void initialize(TRAPS); + void initialize_preemptable(TRAPS); void link_class(TRAPS); bool link_class_or_fail(TRAPS); // returns false on failure void rewrite_class(TRAPS); diff --git a/src/hotspot/share/oops/instanceStackChunkKlass.cpp b/src/hotspot/share/oops/instanceStackChunkKlass.cpp index db60e74013f..aaa3eaa4f6b 100644 --- a/src/hotspot/share/oops/instanceStackChunkKlass.cpp +++ b/src/hotspot/share/oops/instanceStackChunkKlass.cpp @@ -195,7 +195,8 @@ public: } const RegisterMap* get_map(const RegisterMap* map, intptr_t* sp) { return map; } - const RegisterMap* get_map(const SmallRegisterMap* map, intptr_t* sp) { return map->copy_to_RegisterMap(&_map, sp); } + template + const RegisterMap* get_map(const SmallRegisterMapT map, intptr_t* sp) { return map->copy_to_RegisterMap(&_map, sp); } template bool do_frame(const StackChunkFrameStream& f, const RegisterMapT* map) { diff --git a/src/hotspot/share/oops/klass.cpp b/src/hotspot/share/oops/klass.cpp index 208a274d766..d9041cc54f4 100644 --- a/src/hotspot/share/oops/klass.cpp +++ b/src/hotspot/share/oops/klass.cpp @@ -252,6 +252,10 @@ void Klass::initialize(TRAPS) { ShouldNotReachHere(); } +void Klass::initialize_preemptable(TRAPS) { + ShouldNotReachHere(); +} + Klass* Klass::find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { #ifdef ASSERT tty->print_cr("Error: find_field called on a klass oop." diff --git a/src/hotspot/share/oops/klass.hpp b/src/hotspot/share/oops/klass.hpp index db3360b080e..5ac393d7614 100644 --- a/src/hotspot/share/oops/klass.hpp +++ b/src/hotspot/share/oops/klass.hpp @@ -580,6 +580,7 @@ public: virtual bool should_be_initialized() const { return false; } // initializes the klass virtual void initialize(TRAPS); + virtual void initialize_preemptable(TRAPS); virtual Klass* find_field(Symbol* name, Symbol* signature, fieldDescriptor* fd) const; virtual Method* uncached_lookup_method(const Symbol* name, const Symbol* signature, OverpassLookupMode overpass_mode, diff --git a/src/hotspot/share/oops/stackChunkOop.cpp b/src/hotspot/share/oops/stackChunkOop.cpp index 13a94d65f8e..67e5e474cce 100644 --- a/src/hotspot/share/oops/stackChunkOop.cpp +++ b/src/hotspot/share/oops/stackChunkOop.cpp @@ -56,7 +56,7 @@ public: virtual void oops_do(OopClosure* cl) override { if (_f.is_interpreted_frame()) { - _f.oops_interpreted_do(cl, nullptr); + _f.oops_interpreted_do(cl, _map); } else { OopMapDo visitor(cl, nullptr); visitor.oops_do(&_f, _map, _f.oop_map()); @@ -139,7 +139,7 @@ static int num_java_frames(const StackChunkFrameStream& f) { int stackChunkOopDesc::num_java_frames() const { int n = 0; for (StackChunkFrameStream f(const_cast(this)); !f.is_done(); - f.next(SmallRegisterMap::instance())) { + f.next(SmallRegisterMap::instance_no_args())) { if (!f.is_stub()) { n += ::num_java_frames(f); } @@ -415,10 +415,12 @@ template void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream& f, const RegisterMap* map); template void stackChunkOopDesc::do_barriers0 (const StackChunkFrameStream& f, const RegisterMap* map); template void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream& f, const RegisterMap* map); -template void stackChunkOopDesc::do_barriers0 (const StackChunkFrameStream& f, const SmallRegisterMap* map); -template void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream& f, const SmallRegisterMap* map); -template void stackChunkOopDesc::do_barriers0 (const StackChunkFrameStream& f, const SmallRegisterMap* map); -template void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream& f, const SmallRegisterMap* map); +template void stackChunkOopDesc::do_barriers0 (const StackChunkFrameStream& f, const SmallRegisterMapNoArgs* map); +template void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream& f, const SmallRegisterMapNoArgs* map); +template void stackChunkOopDesc::do_barriers0 (const StackChunkFrameStream& f, const SmallRegisterMapNoArgs* map); +template void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream& f, const SmallRegisterMapNoArgs* map); +template void stackChunkOopDesc::do_barriers0 (const StackChunkFrameStream& f, const SmallRegisterMapWithArgs* map); +template void stackChunkOopDesc::do_barriers0(const StackChunkFrameStream& f, const SmallRegisterMapWithArgs* map); template void stackChunkOopDesc::fix_thawed_frame(const frame& f, const RegisterMapT* map) { @@ -438,7 +440,8 @@ void stackChunkOopDesc::fix_thawed_frame(const frame& f, const RegisterMapT* map } template void stackChunkOopDesc::fix_thawed_frame(const frame& f, const RegisterMap* map); -template void stackChunkOopDesc::fix_thawed_frame(const frame& f, const SmallRegisterMap* map); +template void stackChunkOopDesc::fix_thawed_frame(const frame& f, const SmallRegisterMapNoArgs* map); +template void stackChunkOopDesc::fix_thawed_frame(const frame& f, const SmallRegisterMapWithArgs* map); void stackChunkOopDesc::transfer_lockstack(oop* dst, bool requires_barriers) { const bool requires_gc_barriers = is_gc_mode() || requires_barriers; @@ -527,7 +530,7 @@ public: _cb = f.cb(); int fsize = f.frame_size() - ((f.is_interpreted() == _callee_interpreted) ? _argsize : 0); - int num_oops = f.num_oops(); + int num_oops = f.num_oops(map); assert(num_oops >= 0, ""); _argsize = f.stack_argsize() + frame::metadata_words_at_top; diff --git a/src/hotspot/share/oops/stackChunkOop.hpp b/src/hotspot/share/oops/stackChunkOop.hpp index 57ab6316c2a..79944f0326e 100644 --- a/src/hotspot/share/oops/stackChunkOop.hpp +++ b/src/hotspot/share/oops/stackChunkOop.hpp @@ -137,6 +137,12 @@ public: inline bool preempted() const; inline void set_preempted(bool value); + inline bool at_klass_init() const; + inline void set_at_klass_init(bool value); + + inline bool has_args_at_top() const; + inline void set_has_args_at_top(bool value); + inline bool has_lockstack() const; inline void set_has_lockstack(bool value); diff --git a/src/hotspot/share/oops/stackChunkOop.inline.hpp b/src/hotspot/share/oops/stackChunkOop.inline.hpp index 9c91e934328..4fe5b913ade 100644 --- a/src/hotspot/share/oops/stackChunkOop.inline.hpp +++ b/src/hotspot/share/oops/stackChunkOop.inline.hpp @@ -168,6 +168,18 @@ inline void stackChunkOopDesc::set_preempted(bool value) { set_flag(FLAG_PREEMPTED, value); } +inline bool stackChunkOopDesc::at_klass_init() const { return jdk_internal_vm_StackChunk::atKlassInit(as_oop()); } +inline void stackChunkOopDesc::set_at_klass_init(bool value) { + assert(at_klass_init() != value, ""); + jdk_internal_vm_StackChunk::set_atKlassInit(this, value); +} + +inline bool stackChunkOopDesc::has_args_at_top() const { return jdk_internal_vm_StackChunk::hasArgsAtTop(as_oop()); } +inline void stackChunkOopDesc::set_has_args_at_top(bool value) { + assert(has_args_at_top() != value, ""); + jdk_internal_vm_StackChunk::set_hasArgsAtTop(this, value); +} + inline bool stackChunkOopDesc::has_lockstack() const { return is_flag(FLAG_HAS_LOCKSTACK); } inline void stackChunkOopDesc::set_has_lockstack(bool value) { set_flag(FLAG_HAS_LOCKSTACK, value); } @@ -210,7 +222,7 @@ inline void stackChunkOopDesc::iterate_stack(StackChunkFrameClosureType* closure template inline void stackChunkOopDesc::iterate_stack(StackChunkFrameClosureType* closure) { - const SmallRegisterMap* map = SmallRegisterMap::instance(); + const auto* map = SmallRegisterMap::instance_no_args(); assert(!map->in_cont(), ""); StackChunkFrameStream f(this); @@ -230,6 +242,9 @@ inline void stackChunkOopDesc::iterate_stack(StackChunkFrameClosureType* closure should_continue = closure->do_frame(f, &full_map); f.next(map); + } else if (frame_kind == ChunkFrames::Mixed && f.is_interpreted() && has_args_at_top()) { + should_continue = closure->do_frame(f, SmallRegisterMap::instance_with_args()); + f.next(map); } assert(!f.is_stub(), ""); diff --git a/src/hotspot/share/prims/jvmtiExport.cpp b/src/hotspot/share/prims/jvmtiExport.cpp index 4c3dc9ebf03..d241ca6110a 100644 --- a/src/hotspot/share/prims/jvmtiExport.cpp +++ b/src/hotspot/share/prims/jvmtiExport.cpp @@ -1337,21 +1337,19 @@ void JvmtiExport::at_single_stepping_point(JavaThread *thread, Method* method, a } -void JvmtiExport::expose_single_stepping(JavaThread *thread) { - JvmtiThreadState *state = get_jvmti_thread_state(thread); - if (state != nullptr) { - state->clear_hide_single_stepping(); - } +void JvmtiExport::expose_single_stepping(JvmtiThreadState* state) { + assert(state != nullptr, "must be non-null"); + state->clear_hide_single_stepping(); } -bool JvmtiExport::hide_single_stepping(JavaThread *thread) { +JvmtiThreadState* JvmtiExport::hide_single_stepping(JavaThread *thread) { JvmtiThreadState *state = get_jvmti_thread_state(thread); if (state != nullptr && state->is_enabled(JVMTI_EVENT_SINGLE_STEP)) { state->set_hide_single_stepping(); - return true; + return state; } else { - return false; + return nullptr; } } diff --git a/src/hotspot/share/prims/jvmtiExport.hpp b/src/hotspot/share/prims/jvmtiExport.hpp index 8906d6b81df..66f5413c8f6 100644 --- a/src/hotspot/share/prims/jvmtiExport.hpp +++ b/src/hotspot/share/prims/jvmtiExport.hpp @@ -317,8 +317,8 @@ class JvmtiExport : public AllStatic { // single stepping management methods static void at_single_stepping_point(JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN; - static void expose_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN; - static bool hide_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN_(false); + static void expose_single_stepping(JvmtiThreadState* state) NOT_JVMTI_RETURN; + static JvmtiThreadState* hide_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN_(nullptr); // Methods that notify the debugger that something interesting has happened in the VM. static void post_early_vm_start () NOT_JVMTI_RETURN; @@ -622,23 +622,20 @@ class JvmtiGCMarker : public StackObj { // internal single step events. class JvmtiHideSingleStepping : public StackObj { private: - bool _single_step_hidden; - JavaThread * _thread; + JvmtiThreadState* _state; public: - JvmtiHideSingleStepping(JavaThread * thread) { + JvmtiHideSingleStepping(JavaThread * thread) : _state(nullptr) { assert(thread != nullptr, "sanity check"); - _single_step_hidden = false; - _thread = thread; if (JvmtiExport::should_post_single_step()) { - _single_step_hidden = JvmtiExport::hide_single_stepping(_thread); + _state = JvmtiExport::hide_single_stepping(thread); } } ~JvmtiHideSingleStepping() { - if (_single_step_hidden) { - JvmtiExport::expose_single_stepping(_thread); + if (_state != nullptr) { + JvmtiExport::expose_single_stepping(_state); } } }; diff --git a/src/hotspot/share/prims/methodHandles.cpp b/src/hotspot/share/prims/methodHandles.cpp index b13bd392eaa..c243cae20ab 100644 --- a/src/hotspot/share/prims/methodHandles.cpp +++ b/src/hotspot/share/prims/methodHandles.cpp @@ -771,7 +771,7 @@ Handle MethodHandles::resolve_MemberName(Handle mname, Klass* caller, int lookup assert(!HAS_PENDING_EXCEPTION, ""); if (ref_kind == JVM_REF_invokeStatic) { LinkResolver::resolve_static_call(result, - link_info, false, THREAD); + link_info, ClassInitMode::dont_init, THREAD); } else if (ref_kind == JVM_REF_invokeInterface) { LinkResolver::resolve_interface_call(result, Handle(), defc, link_info, false, THREAD); @@ -833,7 +833,7 @@ Handle MethodHandles::resolve_MemberName(Handle mname, Klass* caller, int lookup { assert(!HAS_PENDING_EXCEPTION, ""); LinkInfo link_info(defc, name, type, caller, LinkInfo::AccessCheck::skip, loader_constraint_check); - LinkResolver::resolve_field(result, link_info, Bytecodes::_nop, false, THREAD); + LinkResolver::resolve_field(result, link_info, Bytecodes::_nop, ClassInitMode::dont_init, THREAD); if (HAS_PENDING_EXCEPTION) { if (speculative_resolve) { CLEAR_PENDING_EXCEPTION; diff --git a/src/hotspot/share/runtime/continuation.hpp b/src/hotspot/share/runtime/continuation.hpp index 0cfd484361d..c54a56ce7eb 100644 --- a/src/hotspot/share/runtime/continuation.hpp +++ b/src/hotspot/share/runtime/continuation.hpp @@ -62,8 +62,9 @@ class Continuation : AllStatic { public: enum preempt_kind { - freeze_on_monitorenter, - freeze_on_wait + monitorenter, + object_wait, + object_locker }; enum thaw_kind { diff --git a/src/hotspot/share/runtime/continuationFreezeThaw.cpp b/src/hotspot/share/runtime/continuationFreezeThaw.cpp index 6ede40c22e0..2a31e5fb5b2 100644 --- a/src/hotspot/share/runtime/continuationFreezeThaw.cpp +++ b/src/hotspot/share/runtime/continuationFreezeThaw.cpp @@ -34,11 +34,14 @@ #include "gc/shared/gc_globals.hpp" #include "gc/shared/memAllocator.hpp" #include "gc/shared/threadLocalAllocBuffer.inline.hpp" +#include "interpreter/bytecodeStream.hpp" #include "interpreter/interpreter.hpp" +#include "interpreter/interpreterRuntime.hpp" #include "jfr/jfrEvents.hpp" #include "logging/log.hpp" #include "logging/logStream.hpp" #include "oops/access.inline.hpp" +#include "oops/constantPool.inline.hpp" #include "oops/method.inline.hpp" #include "oops/objArrayOop.inline.hpp" #include "oops/oopsHierarchy.hpp" @@ -64,6 +67,8 @@ #include "runtime/stackFrameStream.inline.hpp" #include "runtime/stackOverflow.hpp" #include "runtime/stackWatermarkSet.inline.hpp" +#include "runtime/vframe.inline.hpp" +#include "runtime/vframe_hp.hpp" #include "utilities/debug.hpp" #include "utilities/exceptions.hpp" #include "utilities/macros.hpp" @@ -74,6 +79,12 @@ #if INCLUDE_JFR #include "jfr/jfr.inline.hpp" #endif +#ifdef COMPILER1 +#include "c1/c1_Runtime1.hpp" +#endif +#ifdef COMPILER2 +#include "opto/runtime.hpp" +#endif /* * This file contains the implementation of continuation freezing (yield) and thawing (run). @@ -182,8 +193,9 @@ static void verify_continuation(oop continuation) { Continuation::debug_verify_c static void do_deopt_after_thaw(JavaThread* thread); static bool do_verify_after_thaw(JavaThread* thread, stackChunkOop chunk, outputStream* st); static void log_frames(JavaThread* thread); -static void log_frames_after_thaw(JavaThread* thread, ContinuationWrapper& cont, intptr_t* sp, bool preempted); +static void log_frames_after_thaw(JavaThread* thread, ContinuationWrapper& cont, intptr_t* sp); static void print_frame_layout(const frame& f, bool callee_complete, outputStream* st = tty); +static void verify_frame_kind(frame& top, Continuation::preempt_kind preempt_kind, Method** m_ptr = nullptr, const char** code_name_ptr = nullptr, int* bci_ptr = nullptr, stackChunkOop chunk = nullptr); #define assert_pfl(p, ...) \ do { \ @@ -461,7 +473,7 @@ private: inline void patch_pd(frame& callee, const frame& caller); inline void patch_pd_unused(intptr_t* sp); void adjust_interpreted_frame_unextended_sp(frame& f); - static inline void prepare_freeze_interpreted_top_frame(frame& f); + inline void prepare_freeze_interpreted_top_frame(frame& f); static inline void relativize_interpreted_frame_metadata(const frame& f, const frame& hf); protected: @@ -1089,13 +1101,27 @@ freeze_result FreezeBase::finalize_freeze(const frame& callee, frame& caller, in assert(!chunk->is_empty() || StackChunkFrameStream(chunk).to_frame().is_empty(), ""); if (_preempt) { - frame f = _thread->last_frame(); - if (f.is_interpreted_frame()) { + frame top_frame = _thread->last_frame(); + if (top_frame.is_interpreted_frame()) { // Some platforms do not save the last_sp in the top interpreter frame on VM calls. // We need it so that on resume we can restore the sp to the right place, since // thawing might add an alignment word to the expression stack (see finish_thaw()). // We do it now that we know freezing will be successful. - prepare_freeze_interpreted_top_frame(f); + prepare_freeze_interpreted_top_frame(top_frame); + } + + // Do this now so should_process_args_at_top() is set before calling finish_freeze + // in case we might need to apply GC barriers to frames in this stackChunk. + if (_thread->at_preemptable_init()) { + assert(top_frame.is_interpreted_frame(), "only InterpreterRuntime::_new/resolve_from_cache allowed"); + chunk->set_at_klass_init(true); + methodHandle m(_thread, top_frame.interpreter_frame_method()); + Bytecode_invoke call = Bytecode_invoke_check(m, top_frame.interpreter_frame_bci()); + assert(!call.is_valid() || call.is_invokestatic(), "only invokestatic allowed"); + if (call.is_invokestatic() && call.size_of_parameters() > 0) { + assert(top_frame.interpreter_frame_expression_stack_size() > 0, "should have parameters in exp stack"); + chunk->set_has_args_at_top(true); + } } } @@ -1607,6 +1633,25 @@ void FreezeBase::throw_stack_overflow_on_humongous_chunk() { Exceptions::_throw_msg(_thread, __FILE__, __LINE__, vmSymbols::java_lang_StackOverflowError(), "Humongous stack chunk"); } +class AnchorMark : public StackObj { + JavaThread* _current; + frame& _top_frame; + intptr_t* _last_sp_from_frame; + bool _is_interpreted; + + public: + AnchorMark(JavaThread* current, frame& f) : _current(current), _top_frame(f), _is_interpreted(false) { + intptr_t* sp = anchor_mark_set_pd(); + set_anchor(_current, sp); + } + ~AnchorMark() { + clear_anchor(_current); + anchor_mark_clear_pd(); + } + inline intptr_t* anchor_mark_set_pd(); + inline void anchor_mark_clear_pd(); +}; + #if INCLUDE_JVMTI static int num_java_frames(ContinuationWrapper& cont) { ResourceMark rm; // used for scope traversal in num_java_frames(nmethod*, address) @@ -1636,27 +1681,25 @@ static void jvmti_yield_cleanup(JavaThread* thread, ContinuationWrapper& cont) { } } -static void jvmti_mount_end(JavaThread* current, ContinuationWrapper& cont, frame top) { +static void jvmti_mount_end(JavaThread* current, ContinuationWrapper& cont, frame top, Continuation::preempt_kind pk) { assert(current->vthread() != nullptr, "must be"); - HandleMarkCleaner hm(current); + HandleMarkCleaner hm(current); // Cleanup all handles (including so._conth) before returning to Java. Handle vth(current, current->vthread()); - ContinuationWrapper::SafepointOp so(current, cont); - - // Since we might safepoint set the anchor so that the stack can be walked. - set_anchor(current, top.sp()); + AnchorMark am(current, top); // Set anchor so that the stack is walkable. JRT_BLOCK JvmtiVTMSTransitionDisabler::VTMS_vthread_mount((jthread)vth.raw_value(), false); if (current->pending_contended_entered_event()) { - JvmtiExport::post_monitor_contended_entered(current, current->contended_entered_monitor()); + // No monitor JVMTI events for ObjectLocker case. + if (pk != Continuation::object_locker) { + JvmtiExport::post_monitor_contended_entered(current, current->contended_entered_monitor()); + } current->set_contended_entered_monitor(nullptr); } JRT_BLOCK_END - - clear_anchor(current); } #endif // INCLUDE_JVMTI @@ -1679,6 +1722,109 @@ bool FreezeBase::check_valid_fast_path() { } return true; } + +static void verify_frame_kind(frame& top, Continuation::preempt_kind preempt_kind, Method** m_ptr, const char** code_name_ptr, int* bci_ptr, stackChunkOop chunk) { + Method* m; + const char* code_name; + int bci; + if (preempt_kind == Continuation::monitorenter) { + assert(top.is_interpreted_frame() || top.is_runtime_frame(), "unexpected %sframe", + top.is_compiled_frame() ? "compiled " : top.is_native_frame() ? "native " : ""); + bool at_sync_method; + if (top.is_interpreted_frame()) { + m = top.interpreter_frame_method(); + assert(!m->is_native() || m->is_synchronized(), "invalid method %s", m->external_name()); + address bcp = top.interpreter_frame_bcp(); + assert(bcp != 0 || m->is_native(), ""); + at_sync_method = m->is_synchronized() && (bcp == 0 || bcp == m->code_base()); + // bcp is advanced on monitorenter before making the VM call, adjust for that. + bool at_sync_bytecode = bcp > m->code_base() && Bytecode(m, bcp - 1).code() == Bytecodes::Code::_monitorenter; + assert(at_sync_method || at_sync_bytecode, ""); + bci = at_sync_method ? -1 : top.interpreter_frame_bci(); + } else { + JavaThread* current = JavaThread::current(); + ResourceMark rm(current); + CodeBlob* cb = top.cb(); + RegisterMap reg_map(current, + RegisterMap::UpdateMap::skip, + RegisterMap::ProcessFrames::skip, + RegisterMap::WalkContinuation::include); + if (top.is_heap_frame()) { + assert(chunk != nullptr, ""); + reg_map.set_stack_chunk(chunk); + top = chunk->relativize(top); + top.set_frame_index(0); + } + frame fr = top.sender(®_map); + vframe* vf = vframe::new_vframe(&fr, ®_map, current); + compiledVFrame* cvf = compiledVFrame::cast(vf); + m = cvf->method(); + bci = cvf->scope()->bci(); + at_sync_method = bci == SynchronizationEntryBCI; + assert(!at_sync_method || m->is_synchronized(), "bci is %d but method %s is not synchronized", bci, m->external_name()); + bool is_c1_monitorenter = false, is_c2_monitorenter = false; + COMPILER1_PRESENT(is_c1_monitorenter = cb == Runtime1::blob_for(StubId::c1_monitorenter_id) || + cb == Runtime1::blob_for(StubId::c1_monitorenter_nofpu_id);) + COMPILER2_PRESENT(is_c2_monitorenter = cb == CodeCache::find_blob(OptoRuntime::complete_monitor_locking_Java());) + assert(is_c1_monitorenter || is_c2_monitorenter, "wrong runtime stub frame"); + } + code_name = at_sync_method ? "synchronized method" : "monitorenter"; + } else if (preempt_kind == Continuation::object_wait) { + assert(top.is_interpreted_frame() || top.is_native_frame(), ""); + m = top.is_interpreted_frame() ? top.interpreter_frame_method() : top.cb()->as_nmethod()->method(); + assert(m->is_object_wait0(), ""); + bci = 0; + code_name = ""; + } else { + assert(preempt_kind == Continuation::object_locker, "invalid preempt kind"); + assert(top.is_interpreted_frame(), ""); + m = top.interpreter_frame_method(); + Bytecode current_bytecode = Bytecode(m, top.interpreter_frame_bcp()); + Bytecodes::Code code = current_bytecode.code(); + assert(code == Bytecodes::Code::_new || code == Bytecodes::Code::_invokestatic || + (code == Bytecodes::Code::_getstatic || code == Bytecodes::Code::_putstatic), "invalid bytecode"); + bci = top.interpreter_frame_bci(); + code_name = Bytecodes::name(current_bytecode.code()); + } + assert(bci >= 0 || m->is_synchronized(), "invalid bci:%d at method %s", bci, m->external_name()); + + if (m_ptr != nullptr) { + *m_ptr = m; + *code_name_ptr = code_name; + *bci_ptr = bci; + } +} + +static void log_preempt_after_freeze(const ContinuationWrapper& cont) { + JavaThread* current = cont.thread(); + int64_t tid = current->monitor_owner_id(); + + StackChunkFrameStream sfs(cont.tail()); + frame top_frame = sfs.to_frame(); + bool at_init = current->at_preemptable_init(); + bool at_enter = current->current_pending_monitor() != nullptr; + bool at_wait = current->current_waiting_monitor() != nullptr; + assert((at_enter && !at_wait) || (!at_enter && at_wait), ""); + Continuation::preempt_kind pk = at_init ? Continuation::object_locker : at_enter ? Continuation::monitorenter : Continuation::object_wait; + + Method* m = nullptr; + const char* code_name = nullptr; + int bci = InvalidFrameStateBci; + verify_frame_kind(top_frame, pk, &m, &code_name, &bci, cont.tail()); + assert(m != nullptr && code_name != nullptr && bci != InvalidFrameStateBci, "should be set"); + + ResourceMark rm(current); + if (bci < 0) { + log_trace(continuations, preempt)("Preempted " INT64_FORMAT " while synchronizing on %smethod %s", tid, m->is_native() ? "native " : "", m->external_name()); + } else if (m->is_object_wait0()) { + log_trace(continuations, preempt)("Preempted " INT64_FORMAT " at native method %s", tid, m->external_name()); + } else { + Klass* k = current->preempt_init_klass(); + assert(k != nullptr || !at_init, ""); + log_trace(continuations, preempt)("Preempted " INT64_FORMAT " at %s(bci:%d) in method %s %s%s", tid, code_name, bci, + m->external_name(), at_init ? "trying to initialize klass " : "", at_init ? k->external_name() : ""); + } +} #endif // ASSERT static inline freeze_result freeze_epilog(ContinuationWrapper& cont) { @@ -1708,9 +1854,10 @@ static freeze_result preempt_epilog(ContinuationWrapper& cont, freeze_result res return res; } + // Set up things so that on return to Java we jump to preempt stub. patch_return_pc_with_preempt_stub(old_last_frame); cont.tail()->set_preempted(true); - + DEBUG_ONLY(log_preempt_after_freeze(cont);) return freeze_epilog(cont); } @@ -1906,10 +2053,14 @@ protected: intptr_t* _fastpath; bool _barriers; bool _preempted_case; + bool _process_args_at_top; intptr_t* _top_unextended_sp_before_thaw; int _align_size; DEBUG_ONLY(intptr_t* _top_stack_address); + // Only used for preemption on ObjectLocker + ObjectMonitor* _init_lock; + StackChunkFrameStream _stream; NOT_PRODUCT(int _frames;) @@ -1936,6 +2087,8 @@ protected: intptr_t* handle_preempted_continuation(intptr_t* sp, Continuation::preempt_kind preempt_kind, bool fast_case); inline intptr_t* push_cleanup_continuation(); + inline intptr_t* push_preempt_adapter(); + intptr_t* redo_vmcall(JavaThread* current, frame& top); void throw_interrupted_exception(JavaThread* current, frame& top); void recurse_thaw(const frame& heap_frame, frame& caller, int num_frames, bool top_on_preempt_case); @@ -1952,12 +2105,12 @@ private: inline void patch(frame& f, const frame& caller, bool bottom); void clear_bitmap_bits(address start, address end); - NOINLINE void recurse_thaw_interpreted_frame(const frame& hf, frame& caller, int num_frames); + NOINLINE void recurse_thaw_interpreted_frame(const frame& hf, frame& caller, int num_frames, bool is_top); void recurse_thaw_compiled_frame(const frame& hf, frame& caller, int num_frames, bool stub_caller); void recurse_thaw_stub_frame(const frame& hf, frame& caller, int num_frames); void recurse_thaw_native_frame(const frame& hf, frame& caller, int num_frames); - void push_return_frame(frame& f); + void push_return_frame(const frame& f); inline frame new_entry_frame(); template frame new_stack_frame(const frame& hf, frame& caller, bool bottom); inline void patch_pd(frame& f, const frame& sender); @@ -2052,7 +2205,7 @@ int ThawBase::remove_top_compiled_frame_from_chunk(stackChunkOop chunk, int &arg // If we don't thaw the top compiled frame too, after restoring the saved // registers back in Java, we would hit the return barrier to thaw one more // frame effectively overwriting the restored registers during that call. - f.next(SmallRegisterMap::instance(), true /* stop */); + f.next(SmallRegisterMap::instance_no_args(), true /* stop */); assert(!f.is_done(), ""); f.get_cb(); @@ -2068,7 +2221,7 @@ int ThawBase::remove_top_compiled_frame_from_chunk(stackChunkOop chunk, int &arg } } - f.next(SmallRegisterMap::instance(), true /* stop */); + f.next(SmallRegisterMap::instance_no_args(), true /* stop */); empty = f.is_done(); assert(!empty || argsize == chunk->argsize(), ""); @@ -2200,12 +2353,12 @@ NOINLINE intptr_t* Thaw::thaw_fast(stackChunkOop chunk) { #endif #ifdef ASSERT - set_anchor(_thread, rs.sp()); - log_frames(_thread); if (LoomDeoptAfterThaw) { + frame top(rs.sp()); + AnchorMark am(_thread, top); + log_frames(_thread); do_deopt_after_thaw(_thread); } - clear_anchor(_thread); #endif return rs.sp(); @@ -2228,29 +2381,49 @@ NOINLINE intptr_t* Thaw::thaw_slow(stackChunkOop chunk, Continuation::t Continuation::preempt_kind preempt_kind; bool retry_fast_path = false; + _process_args_at_top = false; _preempted_case = chunk->preempted(); if (_preempted_case) { + ObjectMonitor* mon = nullptr; ObjectWaiter* waiter = java_lang_VirtualThread::objectWaiter(_thread->vthread()); if (waiter != nullptr) { // Mounted again after preemption. Resume the pending monitor operation, // which will be either a monitorenter or Object.wait() call. - ObjectMonitor* mon = waiter->monitor(); - preempt_kind = waiter->is_wait() ? Continuation::freeze_on_wait : Continuation::freeze_on_monitorenter; + mon = waiter->monitor(); + preempt_kind = waiter->is_wait() ? Continuation::object_wait : Continuation::monitorenter; bool mon_acquired = mon->resume_operation(_thread, waiter, _cont); assert(!mon_acquired || mon->has_owner(_thread), "invariant"); if (!mon_acquired) { // Failed to acquire monitor. Return to enterSpecial to unmount again. + log_develop_trace(continuations, preempt)("Failed to acquire monitor, unmounting again"); return push_cleanup_continuation(); } chunk = _cont.tail(); // reload oop in case of safepoint in resume_operation (if posting JVMTI events). + JVMTI_ONLY(assert(_thread->contended_entered_monitor() == nullptr || _thread->contended_entered_monitor() == mon, "")); } else { - // Preemption cancelled in moniterenter case. We actually acquired - // the monitor after freezing all frames so nothing to do. - preempt_kind = Continuation::freeze_on_monitorenter; + // Preemption cancelled on moniterenter or ObjectLocker case. We + // actually acquired the monitor after freezing all frames so no + // need to call resume_operation. If this is the ObjectLocker case + // we released the monitor already at ~ObjectLocker, so _init_lock + // will be set to nullptr below since there is no monitor to release. + preempt_kind = Continuation::monitorenter; } + // Call this first to avoid racing with GC threads later when modifying the chunk flags. relativize_chunk_concurrently(chunk); + + if (chunk->at_klass_init()) { + preempt_kind = Continuation::object_locker; + chunk->set_at_klass_init(false); + _process_args_at_top = chunk->has_args_at_top(); + if (_process_args_at_top) { + // Only needed for the top frame which will be thawed. + chunk->set_has_args_at_top(false); + } + assert(waiter == nullptr || mon != nullptr, "should have a monitor"); + _init_lock = mon; // remember monitor since we will need it on handle_preempted_continuation() + } chunk->set_preempted(false); retry_fast_path = true; } else { @@ -2334,7 +2507,7 @@ void ThawBase::recurse_thaw(const frame& heap_frame, frame& caller, int num_fram } else if (!heap_frame.is_interpreted_frame()) { recurse_thaw_compiled_frame(heap_frame, caller, num_frames, false); } else { - recurse_thaw_interpreted_frame(heap_frame, caller, num_frames); + recurse_thaw_interpreted_frame(heap_frame, caller, num_frames, top_on_preempt_case); } } @@ -2346,7 +2519,7 @@ bool ThawBase::recurse_thaw_java_frame(frame& caller, int num_frames) { int argsize = _stream.stack_argsize(); - _stream.next(SmallRegisterMap::instance()); + _stream.next(SmallRegisterMap::instance_no_args()); assert(_stream.to_frame().is_empty() == _stream.is_done(), ""); // we never leave a compiled caller of an interpreted frame as the top frame in the chunk @@ -2451,9 +2624,10 @@ void ThawBase::clear_bitmap_bits(address start, address end) { } intptr_t* ThawBase::handle_preempted_continuation(intptr_t* sp, Continuation::preempt_kind preempt_kind, bool fast_case) { - assert(preempt_kind == Continuation::freeze_on_wait || preempt_kind == Continuation::freeze_on_monitorenter, ""); frame top(sp); assert(top.pc() == *(address*)(sp - frame::sender_sp_ret_address_offset()), ""); + DEBUG_ONLY(verify_frame_kind(top, preempt_kind);) + NOT_PRODUCT(int64_t tid = _thread->monitor_owner_id();) #if INCLUDE_JVMTI // Finish the VTMS transition. @@ -2461,7 +2635,7 @@ intptr_t* ThawBase::handle_preempted_continuation(intptr_t* sp, Continuation::pr bool is_vthread = Continuation::continuation_scope(_cont.continuation()) == java_lang_VirtualThread::vthread_scope(); if (is_vthread) { if (JvmtiVTMSTransitionDisabler::VTMS_notify_jvmti_events()) { - jvmti_mount_end(_thread, _cont, top); + jvmti_mount_end(_thread, _cont, top, preempt_kind); } else { _thread->set_is_in_VTMS_transition(false); java_lang_Thread::set_is_in_VTMS_transition(_thread->vthread(), false); @@ -2478,36 +2652,103 @@ intptr_t* ThawBase::handle_preempted_continuation(intptr_t* sp, Continuation::pr patch_pd(top, sp + fsize); } - if (preempt_kind == Continuation::freeze_on_wait) { + if (preempt_kind == Continuation::object_wait) { // Check now if we need to throw IE exception. - if (_thread->pending_interrupted_exception()) { + bool throw_ie = _thread->pending_interrupted_exception(); + if (throw_ie) { throw_interrupted_exception(_thread, top); _thread->set_pending_interrupted_exception(false); } - } else if (top.is_runtime_frame()) { - // The continuation might now run on a different platform thread than the previous time so - // we need to adjust the current thread saved in the stub frame before restoring registers. - JavaThread** thread_addr = frame::saved_thread_address(top); - if (thread_addr != nullptr) *thread_addr = _thread; + log_develop_trace(continuations, preempt)("Resuming " INT64_FORMAT" after preemption on Object.wait%s", tid, throw_ie ? "(throwing IE)" : ""); + } else if (preempt_kind == Continuation::monitorenter) { + if (top.is_runtime_frame()) { + // The continuation might now run on a different platform thread than the previous time so + // we need to adjust the current thread saved in the stub frame before restoring registers. + JavaThread** thread_addr = frame::saved_thread_address(top); + if (thread_addr != nullptr) *thread_addr = _thread; + } + log_develop_trace(continuations, preempt)("Resuming " INT64_FORMAT " after preemption on monitorenter", tid); + } else { + // We need to redo the original call into the VM. First though, we need + // to exit the monitor we just acquired (except on preemption cancelled + // case where it was already released). + assert(preempt_kind == Continuation::object_locker, ""); + if (_init_lock != nullptr) _init_lock->exit(_thread); + sp = redo_vmcall(_thread, top); + } + return sp; +} + +intptr_t* ThawBase::redo_vmcall(JavaThread* current, frame& top) { + assert(!current->preempting(), ""); + NOT_PRODUCT(int64_t tid = current->monitor_owner_id();) + intptr_t* sp = top.sp(); + + { + HandleMarkCleaner hmc(current); // Cleanup all handles (including so._conth) before returning to Java. + ContinuationWrapper::SafepointOp so(current, _cont); + AnchorMark am(current, top); // Set the anchor so that the stack is walkable. + + Method* m = top.interpreter_frame_method(); + Bytecode current_bytecode = Bytecode(m, top.interpreter_frame_bcp()); + Bytecodes::Code code = current_bytecode.code(); + log_develop_trace(continuations, preempt)("Redoing InterpreterRuntime::%s for " INT64_FORMAT, code == Bytecodes::Code::_new ? "_new" : "resolve_from_cache", tid); + + // These InterpreterRuntime entry points use JRT_ENTRY which uses a HandleMarkCleaner. + // Create a HandeMark to avoid destroying so._conth. + HandleMark hm(current); + DEBUG_ONLY(JavaThread::AtRedoVMCall apvmc(current);) + if (code == Bytecodes::Code::_new) { + InterpreterRuntime::_new(current, m->constants(), current_bytecode.get_index_u2(code)); + } else { + InterpreterRuntime::resolve_from_cache(current, code); + } + } + + if (current->preempting()) { + // Preempted again so we just arrange to return to preempt stub to unmount. + sp = push_preempt_adapter(); + current->set_preempt_alternate_return(nullptr); + bool cancelled = current->preemption_cancelled(); + if (cancelled) { + // Since preemption was cancelled, the thread will call thaw again from the preempt + // stub. These retries could happen several times due to contention on the init_lock, + // so just let the vthread umount to give a chance for other vthreads to run. + current->set_preemption_cancelled(false); + oop vthread = current->vthread(); + assert(java_lang_VirtualThread::state(vthread) == java_lang_VirtualThread::RUNNING, "wrong state for vthread"); + java_lang_VirtualThread::set_state(vthread, java_lang_VirtualThread::YIELDING); +#if INCLUDE_JVMTI + if (current->contended_entered_monitor() != nullptr) { + current->set_contended_entered_monitor(nullptr); + } +#endif + } + log_develop_trace(continuations, preempt)("Preempted " INT64_FORMAT " again%s", tid, cancelled ? "(preemption cancelled, setting state to YIELDING)" : ""); + } else { + log_develop_trace(continuations, preempt)("Call succesful, resuming " INT64_FORMAT, tid); } return sp; } void ThawBase::throw_interrupted_exception(JavaThread* current, frame& top) { + HandleMarkCleaner hm(current); // Cleanup all handles (including so._conth) before returning to Java. ContinuationWrapper::SafepointOp so(current, _cont); - // Since we might safepoint set the anchor so that the stack can be walked. - set_anchor(current, top.sp()); + AnchorMark am(current, top); // Set the anchor so that the stack is walkable. JRT_BLOCK THROW(vmSymbols::java_lang_InterruptedException()); JRT_BLOCK_END - clear_anchor(current); } -NOINLINE void ThawBase::recurse_thaw_interpreted_frame(const frame& hf, frame& caller, int num_frames) { +NOINLINE void ThawBase::recurse_thaw_interpreted_frame(const frame& hf, frame& caller, int num_frames, bool is_top) { assert(hf.is_interpreted_frame(), ""); if (UNLIKELY(seen_by_gc())) { - _cont.tail()->do_barriers(_stream, SmallRegisterMap::instance()); + if (is_top && _process_args_at_top) { + _cont.tail()->do_barriers(_stream, SmallRegisterMap::instance_with_args()); + } else { + _cont.tail()->do_barriers(_stream, SmallRegisterMap::instance_no_args()); + } } const bool is_bottom_frame = recurse_thaw_java_frame(caller, num_frames); @@ -2552,7 +2793,7 @@ NOINLINE void ThawBase::recurse_thaw_interpreted_frame(const frame& hf, frame& c if (!is_bottom_frame) { // can only fix caller once this frame is thawed (due to callee saved regs) - _cont.tail()->fix_thawed_frame(caller, SmallRegisterMap::instance()); + _cont.tail()->fix_thawed_frame(caller, SmallRegisterMap::instance_no_args()); } else if (_cont.tail()->has_bitmap() && locals > 0) { assert(hf.is_heap_frame(), "should be"); address start = (address)(heap_frame_bottom - locals); @@ -2569,7 +2810,7 @@ void ThawBase::recurse_thaw_compiled_frame(const frame& hf, frame& caller, int n assert(_preempted_case || !stub_caller, "stub caller not at preemption"); if (!stub_caller && UNLIKELY(seen_by_gc())) { // recurse_thaw_stub_frame already invoked our barriers with a full regmap - _cont.tail()->do_barriers(_stream, SmallRegisterMap::instance()); + _cont.tail()->do_barriers(_stream, SmallRegisterMap::instance_no_args()); } const bool is_bottom_frame = recurse_thaw_java_frame(caller, num_frames); @@ -2628,7 +2869,7 @@ void ThawBase::recurse_thaw_compiled_frame(const frame& hf, frame& caller, int n if (!is_bottom_frame) { // can only fix caller once this frame is thawed (due to callee saved regs); this happens on the stack - _cont.tail()->fix_thawed_frame(caller, SmallRegisterMap::instance()); + _cont.tail()->fix_thawed_frame(caller, SmallRegisterMap::instance_no_args()); } else if (_cont.tail()->has_bitmap() && added_argsize > 0) { address start = (address)(heap_frame_top + ContinuationHelper::CompiledFrame::size(hf) + frame::metadata_words_at_top); int stack_args_slots = f.cb()->as_nmethod()->num_stack_arg_slots(false /* rounded */); @@ -2654,7 +2895,7 @@ void ThawBase::recurse_thaw_stub_frame(const frame& hf, frame& caller, int num_f assert(!_stream.is_done(), ""); _cont.tail()->do_barriers(_stream, &map); } else { - _stream.next(SmallRegisterMap::instance()); + _stream.next(SmallRegisterMap::instance_no_args()); assert(!_stream.is_done(), ""); } @@ -2694,7 +2935,7 @@ void ThawBase::recurse_thaw_native_frame(const frame& hf, frame& caller, int num assert(_preempted_case && hf.cb()->as_nmethod()->method()->is_object_wait0(), ""); if (UNLIKELY(seen_by_gc())) { // recurse_thaw_stub_frame already invoked our barriers with a full regmap - _cont.tail()->do_barriers(_stream, SmallRegisterMap::instance()); + _cont.tail()->do_barriers(_stream, SmallRegisterMap::instance_no_args()); } const bool is_bottom_frame = recurse_thaw_java_frame(caller, num_frames); @@ -2732,7 +2973,7 @@ void ThawBase::recurse_thaw_native_frame(const frame& hf, frame& caller, int num assert(!f.cb()->as_nmethod()->is_marked_for_deoptimization(), ""); // can only fix caller once this frame is thawed (due to callee saved regs); this happens on the stack - _cont.tail()->fix_thawed_frame(caller, SmallRegisterMap::instance()); + _cont.tail()->fix_thawed_frame(caller, SmallRegisterMap::instance_no_args()); DEBUG_ONLY(after_thaw_java_frame(f, false /* bottom */);) caller = f; @@ -2759,7 +3000,12 @@ void ThawBase::finish_thaw(frame& f) { f.set_sp(align_down(f.sp(), frame::frame_alignment)); } push_return_frame(f); - chunk->fix_thawed_frame(f, SmallRegisterMap::instance()); // can only fix caller after push_return_frame (due to callee saved regs) + // can only fix caller after push_return_frame (due to callee saved regs) + if (_process_args_at_top) { + chunk->fix_thawed_frame(f, SmallRegisterMap::instance_with_args()); + } else { + chunk->fix_thawed_frame(f, SmallRegisterMap::instance_no_args()); + } assert(_cont.is_empty() == _cont.last_frame().is_empty(), ""); @@ -2773,7 +3019,7 @@ void ThawBase::finish_thaw(frame& f) { } } -void ThawBase::push_return_frame(frame& f) { // see generate_cont_thaw +void ThawBase::push_return_frame(const frame& f) { // see generate_cont_thaw assert(!f.is_compiled_frame() || f.is_deoptimized_frame() == f.cb()->as_nmethod()->is_deopt_pc(f.raw_pc()), ""); assert(!f.is_compiled_frame() || f.is_deoptimized_frame() == (f.pc() != f.raw_pc()), ""); @@ -2821,11 +3067,10 @@ static inline intptr_t* thaw_internal(JavaThread* thread, const Continuation::th clear_anchor(thread); #endif - DEBUG_ONLY(bool preempted = cont.tail()->preempted();) Thaw thw(thread, cont); intptr_t* const sp = thw.thaw(kind); assert(is_aligned(sp, frame::frame_alignment), ""); - DEBUG_ONLY(log_frames_after_thaw(thread, cont, sp, preempted);) + DEBUG_ONLY(log_frames_after_thaw(thread, cont, sp);) CONT_JFR_ONLY(thw.jfr_info().post_jfr_event(&event, cont.continuation(), thread);) @@ -2967,14 +3212,16 @@ static void log_frames(JavaThread* thread) { ls.print_cr("======= end frames ========="); } -static void log_frames_after_thaw(JavaThread* thread, ContinuationWrapper& cont, intptr_t* sp, bool preempted) { +static void log_frames_after_thaw(JavaThread* thread, ContinuationWrapper& cont, intptr_t* sp) { intptr_t* sp0 = sp; address pc0 = *(address*)(sp - frame::sender_sp_ret_address_offset()); - if (preempted && sp0 == cont.entrySP()) { + bool preempted = false; + stackChunkOop tail = cont.tail(); + if (tail != nullptr && tail->preempted()) { // Still preempted (monitor not acquired) so no frames were thawed. - assert(cont.tail()->preempted(), ""); set_anchor(thread, cont.entrySP(), cont.entryPC()); + preempted = true; } else { set_anchor(thread, sp0); } @@ -2983,7 +3230,7 @@ static void log_frames_after_thaw(JavaThread* thread, ContinuationWrapper& cont, if (LoomVerifyAfterThaw) { assert(do_verify_after_thaw(thread, cont.tail(), tty), ""); } - assert(ContinuationEntry::assert_entry_frame_laid_out(thread), ""); + assert(preempted || ContinuationEntry::assert_entry_frame_laid_out(thread), ""); clear_anchor(thread); LogTarget(Trace, continuations) lt; diff --git a/src/hotspot/share/runtime/continuationJavaClasses.cpp b/src/hotspot/share/runtime/continuationJavaClasses.cpp index a5b7ea4ad93..6e4e52e0107 100644 --- a/src/hotspot/share/runtime/continuationJavaClasses.cpp +++ b/src/hotspot/share/runtime/continuationJavaClasses.cpp @@ -87,6 +87,8 @@ int jdk_internal_vm_StackChunk::_bottom_offset; int jdk_internal_vm_StackChunk::_flags_offset; int jdk_internal_vm_StackChunk::_maxThawingSize_offset; int jdk_internal_vm_StackChunk::_lockStackSize_offset; +int jdk_internal_vm_StackChunk::_atKlassInit_offset; +int jdk_internal_vm_StackChunk::_hasArgsAtTop_offset; int jdk_internal_vm_StackChunk::_cont_offset; #define STACKCHUNK_FIELDS_DO(macro) \ diff --git a/src/hotspot/share/runtime/continuationJavaClasses.hpp b/src/hotspot/share/runtime/continuationJavaClasses.hpp index f9cd53ff9f0..91224b94e1e 100644 --- a/src/hotspot/share/runtime/continuationJavaClasses.hpp +++ b/src/hotspot/share/runtime/continuationJavaClasses.hpp @@ -76,6 +76,8 @@ class jdk_internal_vm_Continuation: AllStatic { macro(jdk_internal_vm_StackChunk, pc, intptr_signature, false) \ macro(jdk_internal_vm_StackChunk, maxThawingSize, int_signature, false) \ macro(jdk_internal_vm_StackChunk, lockStackSize, byte_signature, false) \ + macro(jdk_internal_vm_StackChunk, atKlassInit, bool_signature, false) \ + macro(jdk_internal_vm_StackChunk, hasArgsAtTop, bool_signature, false) \ class jdk_internal_vm_StackChunk: AllStatic { friend class JavaClasses; @@ -88,6 +90,8 @@ class jdk_internal_vm_StackChunk: AllStatic { static int _flags_offset; static int _maxThawingSize_offset; static int _lockStackSize_offset; + static int _atKlassInit_offset; + static int _hasArgsAtTop_offset; static int _cont_offset; @@ -129,6 +133,12 @@ class jdk_internal_vm_StackChunk: AllStatic { static inline uint8_t lockStackSize(oop chunk); static inline void set_lockStackSize(oop chunk, uint8_t value); + static inline bool atKlassInit(oop chunk); + static inline void set_atKlassInit(oop chunk, bool value); + + static inline bool hasArgsAtTop(oop chunk); + static inline void set_hasArgsAtTop(oop chunk, bool value); + // cont oop's processing is essential for the chunk's GC protocol static inline oop cont(oop chunk); template diff --git a/src/hotspot/share/runtime/continuationJavaClasses.inline.hpp b/src/hotspot/share/runtime/continuationJavaClasses.inline.hpp index f464648cdc3..c6d80652180 100644 --- a/src/hotspot/share/runtime/continuationJavaClasses.inline.hpp +++ b/src/hotspot/share/runtime/continuationJavaClasses.inline.hpp @@ -194,4 +194,20 @@ inline void jdk_internal_vm_StackChunk::set_lockStackSize(oop chunk, uint8_t val AtomicAccess::store(chunk->field_addr(_lockStackSize_offset), value); } +inline bool jdk_internal_vm_StackChunk::atKlassInit(oop chunk) { + return chunk->bool_field(_atKlassInit_offset); +} + +inline void jdk_internal_vm_StackChunk::set_atKlassInit(oop chunk, bool value) { + chunk->bool_field_put(_atKlassInit_offset, (jboolean)value); +} + +inline bool jdk_internal_vm_StackChunk::hasArgsAtTop(oop chunk) { + return chunk->bool_field(_hasArgsAtTop_offset); +} + +inline void jdk_internal_vm_StackChunk::set_hasArgsAtTop(oop chunk, bool value) { + chunk->bool_field_put(_hasArgsAtTop_offset, (jboolean)value); +} + #endif // SHARE_RUNTIME_CONTINUATIONJAVACLASSES_INLINE_HPP diff --git a/src/hotspot/share/runtime/frame.cpp b/src/hotspot/share/runtime/frame.cpp index e578e614440..b5cd4acc75d 100644 --- a/src/hotspot/share/runtime/frame.cpp +++ b/src/hotspot/share/runtime/frame.cpp @@ -891,7 +891,8 @@ oop frame::interpreter_callee_receiver(Symbol* signature) { return *interpreter_callee_receiver_addr(signature); } -void frame::oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache) const { +template +void frame::oops_interpreted_do(OopClosure* f, const RegisterMapT* map, bool query_oop_map_cache) const { assert(is_interpreted_frame(), "Not an interpreted frame"); Thread *thread = Thread::current(); methodHandle m (thread, interpreter_frame_method()); @@ -928,33 +929,19 @@ void frame::oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool quer int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals(); - Symbol* signature = nullptr; - bool has_receiver = false; - // Process a callee's arguments if we are at a call site // (i.e., if we are at an invoke bytecode) // This is used sometimes for calling into the VM, not for another // interpreted or compiled frame. - if (!m->is_native()) { + if (!m->is_native() && map != nullptr && map->include_argument_oops()) { Bytecode_invoke call = Bytecode_invoke_check(m, bci); - if (map != nullptr && call.is_valid()) { - signature = call.signature(); - has_receiver = call.has_receiver(); - if (map->include_argument_oops() && - interpreter_frame_expression_stack_size() > 0) { - ResourceMark rm(thread); // is this right ??? - // we are at a call site & the expression stack is not empty - // => process callee's arguments - // - // Note: The expression stack can be empty if an exception - // occurred during method resolution/execution. In all - // cases we empty the expression stack completely be- - // fore handling the exception (the exception handling - // code in the interpreter calls a blocking runtime - // routine which can cause this code to be executed). - // (was bug gri 7/27/98) - oops_interpreted_arguments_do(signature, has_receiver, f); - } + if (call.is_valid() && interpreter_frame_expression_stack_size() > 0) { + ResourceMark rm(thread); // is this right ??? + Symbol* signature = call.signature(); + bool has_receiver = call.has_receiver(); + // We are at a call site & the expression stack is not empty + // so we might have callee arguments we need to process. + oops_interpreted_arguments_do(signature, has_receiver, f); } } @@ -970,6 +957,9 @@ void frame::oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool quer mask.iterate_oop(&blk); } +template void frame::oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache) const; +template void frame::oops_interpreted_do(OopClosure* f, const SmallRegisterMapNoArgs* map, bool query_oop_map_cache) const; +template void frame::oops_interpreted_do(OopClosure* f, const SmallRegisterMapWithArgs* map, bool query_oop_map_cache) const; void frame::oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f) const { InterpretedArgumentOopFinder finder(signature, has_receiver, this, f); diff --git a/src/hotspot/share/runtime/frame.hpp b/src/hotspot/share/runtime/frame.hpp index fbe7310f3ae..f54553086f6 100644 --- a/src/hotspot/share/runtime/frame.hpp +++ b/src/hotspot/share/runtime/frame.hpp @@ -456,7 +456,8 @@ class frame { // Oops-do's void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, bool has_appendix, const RegisterMap* reg_map, OopClosure* f) const; - void oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache = true) const; + template + void oops_interpreted_do(OopClosure* f, const RegisterMapT* map, bool query_oop_map_cache = true) const; private: void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f) const; diff --git a/src/hotspot/share/runtime/javaCalls.cpp b/src/hotspot/share/runtime/javaCalls.cpp index ec3132220d9..3ed678284e4 100644 --- a/src/hotspot/share/runtime/javaCalls.cpp +++ b/src/hotspot/share/runtime/javaCalls.cpp @@ -58,6 +58,7 @@ JavaCallWrapper::JavaCallWrapper(const methodHandle& callee_method, Handle recei guarantee(thread->is_Java_thread(), "crucial check - the VM thread cannot and must not escape to Java code"); assert(!thread->owns_locks(), "must release all locks when leaving VM"); guarantee(thread->can_call_java(), "cannot make java calls from the native compiler"); + assert(!thread->preempting(), "Unexpected Java upcall whilst processing preemption"); _result = result; // Allocate handle block for Java code. This must be done before we change thread_state to _thread_in_Java_or_stub, @@ -242,7 +243,7 @@ void JavaCalls::call_special(JavaValue* result, Handle receiver, Klass* klass, S void JavaCalls::call_static(JavaValue* result, Klass* klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) { CallInfo callinfo; LinkInfo link_info(klass, name, signature); - LinkResolver::resolve_static_call(callinfo, link_info, true, CHECK); + LinkResolver::resolve_static_call(callinfo, link_info, ClassInitMode::init, CHECK); methodHandle method(THREAD, callinfo.selected_method()); assert(method.not_null(), "should have thrown exception"); diff --git a/src/hotspot/share/runtime/javaThread.cpp b/src/hotspot/share/runtime/javaThread.cpp index b9b4237e7ee..838f8e4c581 100644 --- a/src/hotspot/share/runtime/javaThread.cpp +++ b/src/hotspot/share/runtime/javaThread.cpp @@ -494,6 +494,10 @@ JavaThread::JavaThread(MemTag mem_tag) : _preempt_alternate_return(nullptr), _preemption_cancelled(false), _pending_interrupted_exception(false), + _at_preemptable_init(false), + DEBUG_ONLY(_preempt_init_klass(nullptr) COMMA) + DEBUG_ONLY(_interp_at_preemptable_vmcall_cnt(0) COMMA) + DEBUG_ONLY(_interp_redoing_vm_call(false) COMMA) _handshake(this), _suspend_resume_manager(this, &_handshake._lock), diff --git a/src/hotspot/share/runtime/javaThread.hpp b/src/hotspot/share/runtime/javaThread.hpp index c0b25384fac..b0cd6fb3e4f 100644 --- a/src/hotspot/share/runtime/javaThread.hpp +++ b/src/hotspot/share/runtime/javaThread.hpp @@ -485,6 +485,9 @@ class JavaThread: public Thread { // For Object.wait() we set this field to know if we need to // throw IE at the end of thawing before returning to Java. bool _pending_interrupted_exception; + // We allow preemption on some klass initialization calls. + // We use this boolean to mark such calls. + bool _at_preemptable_init; public: bool preemption_cancelled() { return _preemption_cancelled; } @@ -493,11 +496,46 @@ class JavaThread: public Thread { bool pending_interrupted_exception() { return _pending_interrupted_exception; } void set_pending_interrupted_exception(bool b) { _pending_interrupted_exception = b; } - bool preempting() { return _preempt_alternate_return != nullptr; } + bool preempting() { return _preempt_alternate_return != nullptr; } void set_preempt_alternate_return(address val) { _preempt_alternate_return = val; } -private: + bool at_preemptable_init() { return _at_preemptable_init; } + void set_at_preemptable_init(bool b) { _at_preemptable_init = b; } +#ifdef ASSERT + // Used for extra logging with -Xlog:continuation+preempt + InstanceKlass* _preempt_init_klass; + + InstanceKlass* preempt_init_klass() { return _preempt_init_klass; } + void set_preempt_init_klass(InstanceKlass* ik) { _preempt_init_klass = ik; } + + int _interp_at_preemptable_vmcall_cnt; + int interp_at_preemptable_vmcall_cnt() { return _interp_at_preemptable_vmcall_cnt; } + + bool _interp_redoing_vm_call; + bool interp_redoing_vm_call() const { return _interp_redoing_vm_call; }; + + class AtRedoVMCall : public StackObj { + JavaThread* _thread; + public: + AtRedoVMCall(JavaThread* t) : _thread(t) { + assert(!_thread->_interp_redoing_vm_call, ""); + _thread->_interp_redoing_vm_call = true; + _thread->_interp_at_preemptable_vmcall_cnt++; + assert(_thread->_interp_at_preemptable_vmcall_cnt > 0, "Unexpected count: %d", + _thread->_interp_at_preemptable_vmcall_cnt); + } + ~AtRedoVMCall() { + assert(_thread->_interp_redoing_vm_call, ""); + _thread->_interp_redoing_vm_call = false; + _thread->_interp_at_preemptable_vmcall_cnt--; + assert(_thread->_interp_at_preemptable_vmcall_cnt >= 0, "Unexpected count: %d", + _thread->_interp_at_preemptable_vmcall_cnt); + } + }; +#endif // ASSERT + +private: friend class VMThread; friend class ThreadWaitTransition; friend class VM_Exit; @@ -885,6 +923,7 @@ public: static ByteSize cont_fastpath_offset() { return byte_offset_of(JavaThread, _cont_fastpath); } static ByteSize preemption_cancelled_offset() { return byte_offset_of(JavaThread, _preemption_cancelled); } static ByteSize preempt_alternate_return_offset() { return byte_offset_of(JavaThread, _preempt_alternate_return); } + DEBUG_ONLY(static ByteSize interp_at_preemptable_vmcall_cnt_offset() { return byte_offset_of(JavaThread, _interp_at_preemptable_vmcall_cnt); }) static ByteSize unlocked_inflated_monitor_offset() { return byte_offset_of(JavaThread, _unlocked_inflated_monitor); } #if INCLUDE_JVMTI @@ -1330,8 +1369,8 @@ class NoPreemptMark { ContinuationEntry* _ce; bool _unpin; public: - NoPreemptMark(JavaThread* thread) : _ce(thread->last_continuation()), _unpin(false) { - if (_ce != nullptr) _unpin = _ce->pin(); + NoPreemptMark(JavaThread* thread, bool ignore_mark = false) : _ce(thread->last_continuation()), _unpin(false) { + if (_ce != nullptr && !ignore_mark) _unpin = _ce->pin(); } ~NoPreemptMark() { if (_unpin) _ce->unpin(); } }; diff --git a/src/hotspot/share/runtime/objectMonitor.cpp b/src/hotspot/share/runtime/objectMonitor.cpp index f6d569b1b7a..6a99568ba44 100644 --- a/src/hotspot/share/runtime/objectMonitor.cpp +++ b/src/hotspot/share/runtime/objectMonitor.cpp @@ -304,6 +304,7 @@ ObjectMonitor::ObjectMonitor(oop object) : ObjectMonitor::~ObjectMonitor() { _object.release(_oop_storage); + _object_strong.release(JavaThread::thread_oop_storage()); } oop ObjectMonitor::object() const { @@ -311,6 +312,20 @@ oop ObjectMonitor::object() const { return _object.resolve(); } +// Keep object protected during ObjectLocker preemption. +void ObjectMonitor::set_object_strong() { + check_object_context(); + if (_object_strong.is_empty()) { + if (AtomicAccess::cmpxchg(&_object_strong_lock, 0, 1) == 0) { + if (_object_strong.is_empty()) { + assert(_object.resolve() != nullptr, ""); + _object_strong = OopHandle(JavaThread::thread_oop_storage(), _object.resolve()); + } + AtomicAccess::release_store(&_object_strong_lock, 0); + } + } +} + void ObjectMonitor::ExitOnSuspend::operator()(JavaThread* current) { if (current->is_suspended()) { _om->_recursions = 0; @@ -1813,7 +1828,7 @@ void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) { current->set_current_waiting_monitor(this); result = Continuation::try_preempt(current, ce->cont_oop(current)); if (result == freeze_ok) { - vthread_wait(current, millis); + vthread_wait(current, millis, interruptible); current->set_current_waiting_monitor(nullptr); return; } @@ -2167,12 +2182,14 @@ void ObjectMonitor::quick_notifyAll(JavaThread* current) { } } -void ObjectMonitor::vthread_wait(JavaThread* current, jlong millis) { +void ObjectMonitor::vthread_wait(JavaThread* current, jlong millis, bool interruptible) { oop vthread = current->vthread(); ObjectWaiter* node = new ObjectWaiter(vthread, this); node->_is_wait = true; + node->_interruptible = interruptible; node->TState = ObjectWaiter::TS_WAIT; java_lang_VirtualThread::set_notified(vthread, false); // Reset notified flag + java_lang_VirtualThread::set_interruptible_wait(vthread, interruptible); // Enter the waiting queue, which is a circular doubly linked list in this case // but it could be a priority queue or any data structure. @@ -2217,11 +2234,12 @@ bool ObjectMonitor::vthread_wait_reenter(JavaThread* current, ObjectWaiter* node ObjectWaiter::TStates state = node->TState; bool was_notified = state == ObjectWaiter::TS_ENTER; assert(was_notified || state == ObjectWaiter::TS_RUN, ""); - node->_interrupted = !was_notified && current->is_interrupted(false); + node->_interrupted = node->_interruptible && !was_notified && current->is_interrupted(false); - // Post JFR and JVMTI events. + // Post JFR and JVMTI events. If non-interruptible we are in + // ObjectLocker case so we don't post anything. EventJavaMonitorWait wait_event; - if (wait_event.should_commit() || JvmtiExport::should_post_monitor_waited()) { + if (node->_interruptible && (wait_event.should_commit() || JvmtiExport::should_post_monitor_waited())) { vthread_monitor_waited_event(current, node, cont, &wait_event, !was_notified && !node->_interrupted); } diff --git a/src/hotspot/share/runtime/objectMonitor.hpp b/src/hotspot/share/runtime/objectMonitor.hpp index 77919d99955..2da41786309 100644 --- a/src/hotspot/share/runtime/objectMonitor.hpp +++ b/src/hotspot/share/runtime/objectMonitor.hpp @@ -55,6 +55,7 @@ class ObjectWaiter : public CHeapObj { bool _is_wait; bool _at_reenter; bool _interrupted; + bool _interruptible; bool _do_timed_park; bool _active; // Contention monitoring is enabled public: @@ -200,10 +201,12 @@ class ObjectMonitor : public CHeapObj { // ObjectMonitor::deflate_monitor(). int64_t _unmounted_vthreads; // Number of nodes in the _entry_list associated with unmounted vthreads. // It might be temporarily more than the actual number but never less. + OopHandle _object_strong; // Used to protect object during preemption on class initialization ObjectWaiter* volatile _wait_set; // LL of threads waiting on the monitor - wait() volatile int _waiters; // number of waiting threads volatile int _wait_set_lock; // protects wait set queue - simple spinlock + volatile int _object_strong_lock; // protects setting of _object_strong public: @@ -343,6 +346,7 @@ class ObjectMonitor : public CHeapObj { oop object_peek() const; bool object_is_dead() const; bool object_refers_to(oop obj) const; + void set_object_strong(); // Returns true if the specified thread owns the ObjectMonitor. Otherwise // returns false and throws IllegalMonitorStateException (IMSE). @@ -405,7 +409,7 @@ class ObjectMonitor : public CHeapObj { ObjectWaiter* entry_list_tail(JavaThread* current); bool vthread_monitor_enter(JavaThread* current, ObjectWaiter* node = nullptr); - void vthread_wait(JavaThread* current, jlong millis); + void vthread_wait(JavaThread* current, jlong millis, bool interruptible); bool vthread_wait_reenter(JavaThread* current, ObjectWaiter* node, ContinuationWrapper& cont); void vthread_epilog(JavaThread* current, ObjectWaiter* node); diff --git a/src/hotspot/share/runtime/smallRegisterMap.inline.hpp b/src/hotspot/share/runtime/smallRegisterMap.inline.hpp index e0de6acbd6d..09febdaf450 100644 --- a/src/hotspot/share/runtime/smallRegisterMap.inline.hpp +++ b/src/hotspot/share/runtime/smallRegisterMap.inline.hpp @@ -29,4 +29,19 @@ #include CPU_HEADER_INLINE(smallRegisterMap) +typedef SmallRegisterMapType SmallRegisterMapNoArgs; +typedef SmallRegisterMapType SmallRegisterMapWithArgs; + +class SmallRegisterMap : AllStatic { +public: + static const SmallRegisterMapNoArgs* instance_no_args() { + static constexpr SmallRegisterMapNoArgs the_instance{}; + return &the_instance; + } + static const SmallRegisterMapWithArgs* instance_with_args() { + static constexpr SmallRegisterMapWithArgs the_instance_with_args{}; + return &the_instance_with_args; + } +}; + #endif // SHARE_RUNTIME_SMALLREGISTERMAP_HPP diff --git a/src/hotspot/share/runtime/stackChunkFrameStream.hpp b/src/hotspot/share/runtime/stackChunkFrameStream.hpp index 207203dbb35..cb46254d125 100644 --- a/src/hotspot/share/runtime/stackChunkFrameStream.hpp +++ b/src/hotspot/share/runtime/stackChunkFrameStream.hpp @@ -26,6 +26,7 @@ #define SHARE_RUNTIME_STACKCHUNKFRAMESTREAM_HPP #include "memory/allocation.hpp" +#include "memory/iterator.hpp" #include "oops/oopsHierarchy.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" @@ -79,7 +80,8 @@ public: const ImmutableOopMap* oopmap() const { if (_oopmap == nullptr) get_oopmap(); return _oopmap; } inline int frame_size() const; inline int stack_argsize() const; - inline int num_oops() const; + template + inline int num_oops(RegisterMapT* map) const; inline void initialize_register_map(RegisterMap* map); template inline void next(RegisterMapT* map, bool stop = false); @@ -101,7 +103,8 @@ public: inline address get_pc() const; inline int interpreter_frame_size() const; - inline int interpreter_frame_num_oops() const; + template + inline int interpreter_frame_num_oops(RegisterMapT* map) const; inline int interpreter_frame_stack_argsize() const; inline void next_for_interpreter_frame(); inline intptr_t* unextended_sp_for_interpreter_frame() const; @@ -123,4 +126,13 @@ public: inline void iterate_derived_pointers(DerivedOopClosureType* closure, const RegisterMapT* map) const; }; +class InterpreterOopCount : public OopClosure { + int _count; +public: + InterpreterOopCount() : _count(0) {} + void do_oop(oop* p) override { _count++; } + void do_oop(narrowOop* p) override { _count++; } + int count() { return _count; } +}; + #endif // SHARE_RUNTIME_STACKCHUNKFRAMESTREAM_HPP diff --git a/src/hotspot/share/runtime/stackChunkFrameStream.inline.hpp b/src/hotspot/share/runtime/stackChunkFrameStream.inline.hpp index 09c267b408b..97166950752 100644 --- a/src/hotspot/share/runtime/stackChunkFrameStream.inline.hpp +++ b/src/hotspot/share/runtime/stackChunkFrameStream.inline.hpp @@ -195,9 +195,10 @@ inline int StackChunkFrameStream::stack_argsize() const { } template -inline int StackChunkFrameStream::num_oops() const { +template +inline int StackChunkFrameStream::num_oops(RegisterMapT* map) const { if (is_interpreted()) { - return interpreter_frame_num_oops(); + return interpreter_frame_num_oops(map); } else if (is_compiled()) { return oopmap()->num_oops(); } else { @@ -365,7 +366,7 @@ template inline void StackChunkFrameStream::iterate_oops(OopClosureType* closure, const RegisterMapT* map) const { if (is_interpreted()) { frame f = to_frame(); - f.oops_interpreted_do(closure, nullptr, true); + f.oops_interpreted_do(closure, map, true); } else { DEBUG_ONLY(int oops = 0;) for (OopMapStream oms(oopmap()); !oms.is_done(); oms.next()) { diff --git a/src/hotspot/share/runtime/stackValue.cpp b/src/hotspot/share/runtime/stackValue.cpp index 52d2631f3c9..fc810a1fa80 100644 --- a/src/hotspot/share/runtime/stackValue.cpp +++ b/src/hotspot/share/runtime/stackValue.cpp @@ -38,7 +38,7 @@ class RegisterMap; class SmallRegisterMap; template StackValue* StackValue::create_stack_value(const frame* fr, const RegisterMap* reg_map, ScopeValue* sv); -template StackValue* StackValue::create_stack_value(const frame* fr, const SmallRegisterMap* reg_map, ScopeValue* sv); +template StackValue* StackValue::create_stack_value(const frame* fr, const SmallRegisterMapNoArgs* reg_map, ScopeValue* sv); template StackValue* StackValue::create_stack_value(const frame* fr, const RegisterMapT* reg_map, ScopeValue* sv) { @@ -257,7 +257,7 @@ StackValue* StackValue::create_stack_value(ScopeValue* sv, address value_addr, c } template address StackValue::stack_value_address(const frame* fr, const RegisterMap* reg_map, ScopeValue* sv); -template address StackValue::stack_value_address(const frame* fr, const SmallRegisterMap* reg_map, ScopeValue* sv); +template address StackValue::stack_value_address(const frame* fr, const SmallRegisterMapNoArgs* reg_map, ScopeValue* sv); template address StackValue::stack_value_address(const frame* fr, const RegisterMapT* reg_map, ScopeValue* sv) { diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp index e513c57fe06..36e38b4dd35 100644 --- a/src/hotspot/share/runtime/synchronizer.cpp +++ b/src/hotspot/share/runtime/synchronizer.cpp @@ -475,22 +475,45 @@ void ObjectSynchronizer::jni_exit(oop obj, TRAPS) { // ----------------------------------------------------------------------------- // Internal VM locks on java objects // standard constructor, allows locking failures -ObjectLocker::ObjectLocker(Handle obj, JavaThread* thread) : _npm(thread) { - _thread = thread; +ObjectLocker::ObjectLocker(Handle obj, TRAPS) : _thread(THREAD), _obj(obj), + _npm(_thread, _thread->at_preemptable_init() /* ignore_mark */), _skip_exit(false) { + assert(!_thread->preempting(), ""); + _thread->check_for_valid_safepoint_state(); - _obj = obj; if (_obj() != nullptr) { ObjectSynchronizer::enter(_obj, &_lock, _thread); + + if (_thread->preempting()) { + // If preemption was cancelled we acquired the monitor after freezing + // the frames. Redoing the vm call later in thaw will require us to + // release it since the call should look like the original one. We + // do it in ~ObjectLocker to reduce the window of time we hold the + // monitor since we can't do anything useful with it now, and would + // otherwise just force other vthreads to preempt in case they try + // to acquire this monitor. + _skip_exit = !_thread->preemption_cancelled(); + ObjectSynchronizer::read_monitor(_thread, _obj())->set_object_strong(); + _thread->set_pending_preempted_exception(); + + } } } ObjectLocker::~ObjectLocker() { - if (_obj() != nullptr) { + if (_obj() != nullptr && !_skip_exit) { ObjectSynchronizer::exit(_obj(), &_lock, _thread); } } +void ObjectLocker::wait_uninterruptibly(TRAPS) { + ObjectSynchronizer::waitUninterruptibly(_obj, 0, _thread); + if (_thread->preempting()) { + _skip_exit = true; + ObjectSynchronizer::read_monitor(_thread, _obj())->set_object_strong(); + _thread->set_pending_preempted_exception(); + } +} // ----------------------------------------------------------------------------- // Wait/Notify/NotifyAll @@ -517,9 +540,7 @@ int ObjectSynchronizer::wait(Handle obj, jlong millis, TRAPS) { } void ObjectSynchronizer::waitUninterruptibly(Handle obj, jlong millis, TRAPS) { - if (millis < 0) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "timeout value is negative"); - } + assert(millis >= 0, "timeout value is negative"); ObjectMonitor* monitor; monitor = LightweightSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_wait, CHECK); diff --git a/src/hotspot/share/runtime/synchronizer.hpp b/src/hotspot/share/runtime/synchronizer.hpp index 419cf2bf5bb..2337569176e 100644 --- a/src/hotspot/share/runtime/synchronizer.hpp +++ b/src/hotspot/share/runtime/synchronizer.hpp @@ -126,6 +126,7 @@ public: static const char* inflate_cause_name(const InflateCause cause); inline static ObjectMonitor* read_monitor(markWord mark); + inline static ObjectMonitor* read_monitor(Thread* current, oop obj); inline static ObjectMonitor* read_monitor(Thread* current, oop obj, markWord mark); // Returns the identity hash value for an oop @@ -224,13 +225,13 @@ class ObjectLocker : public StackObj { Handle _obj; BasicLock _lock; NoPreemptMark _npm; + bool _skip_exit; public: - ObjectLocker(Handle obj, JavaThread* current); + ObjectLocker(Handle obj, TRAPS); ~ObjectLocker(); // Monitor behavior - void wait(TRAPS) { ObjectSynchronizer::wait(_obj, 0, CHECK); } // wait forever - void wait_uninterruptibly(TRAPS) { ObjectSynchronizer::waitUninterruptibly(_obj, 0, CHECK); } // wait forever + void wait_uninterruptibly(TRAPS); void notify_all(TRAPS) { ObjectSynchronizer::notifyall(_obj, CHECK); } }; diff --git a/src/hotspot/share/runtime/synchronizer.inline.hpp b/src/hotspot/share/runtime/synchronizer.inline.hpp index cdbeb1daf5b..7bcbd91eda7 100644 --- a/src/hotspot/share/runtime/synchronizer.inline.hpp +++ b/src/hotspot/share/runtime/synchronizer.inline.hpp @@ -34,6 +34,10 @@ inline ObjectMonitor* ObjectSynchronizer::read_monitor(markWord mark) { return mark.monitor(); } +inline ObjectMonitor* ObjectSynchronizer::read_monitor(Thread* current, oop obj) { + return ObjectSynchronizer::read_monitor(current, obj, obj->mark()); +} + inline ObjectMonitor* ObjectSynchronizer::read_monitor(Thread* current, oop obj, markWord mark) { if (!UseObjectMonitorTable) { return read_monitor(mark); diff --git a/src/hotspot/share/runtime/threads.cpp b/src/hotspot/share/runtime/threads.cpp index 299905ff0a2..10c3636273d 100644 --- a/src/hotspot/share/runtime/threads.cpp +++ b/src/hotspot/share/runtime/threads.cpp @@ -410,6 +410,7 @@ void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) { initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK); initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK); initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK); + initialize_class(vmSymbols::jdk_internal_vm_PreemptedException(), CHECK); initialize_class(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), CHECK); initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK); initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK); diff --git a/src/hotspot/share/utilities/exceptions.cpp b/src/hotspot/share/utilities/exceptions.cpp index e7acb4387ed..22a8cd6e0ef 100644 --- a/src/hotspot/share/utilities/exceptions.cpp +++ b/src/hotspot/share/utilities/exceptions.cpp @@ -62,6 +62,8 @@ void ThreadShadow::set_pending_exception(oop exception, const char* file, int li } void ThreadShadow::clear_pending_exception() { + assert(_pending_exception == nullptr || !_pending_exception->is_a(vmClasses::PreemptedException_klass()), + "unexpected PreemptedException, missing NoPreemptMark?"); LogTarget(Debug, exceptions) lt; if (_pending_exception != nullptr && lt.is_enabled()) { ResourceMark rm; @@ -82,6 +84,30 @@ void ThreadShadow::clear_pending_nonasync_exception() { } } +void ThreadShadow::set_pending_preempted_exception() { + assert(!has_pending_exception(), ""); + // We always install the same pre-allocated exception since we only + // want to use the TRAPS mechanism to bail out from all methods until + // reaching the one using the CHECK_AND_CLEAR_PREEMPTED macro. + set_pending_exception(Universe::preempted_exception_instance(), __FILE__, __LINE__); +} + +void ThreadShadow::clear_pending_preempted_exception() { + assert(has_pending_exception(), ""); + if (pending_exception()->is_a(vmClasses::PreemptedException_klass())) { + _pending_exception = nullptr; + _exception_file = nullptr; + _exception_line = 0; + } +} + +#ifdef ASSERT +void ThreadShadow::check_preempted_exception() { + assert(has_pending_exception(), ""); + assert(pending_exception()->is_a(vmClasses::PreemptedException_klass()), "should only be PreemptedException"); +} +#endif + // Implementation of Exceptions bool Exceptions::special_exception(JavaThread* thread, const char* file, int line, Handle h_exception, Symbol* h_name, const char* message) { @@ -317,6 +343,11 @@ Handle Exceptions::new_exception(JavaThread* thread, Symbol* name, if (!thread->has_pending_exception()) { assert(klass != nullptr, "klass must exist"); + // We could get here while linking or initializing a klass + // from a preemptable call. Don't preempt here since before + // the PreemptedException is propagated we might make an upcall + // to Java to initialize the object with the cause of exception. + NoPreemptMark npm(thread); h_exception = JavaCalls::construct_new_instance(InstanceKlass::cast(klass), signature, args, diff --git a/src/hotspot/share/utilities/exceptions.hpp b/src/hotspot/share/utilities/exceptions.hpp index 94f4a04546d..e76a0041d20 100644 --- a/src/hotspot/share/utilities/exceptions.hpp +++ b/src/hotspot/share/utilities/exceptions.hpp @@ -94,6 +94,10 @@ class ThreadShadow: public CHeapObj { // use CLEAR_PENDING_NONASYNC_EXCEPTION to clear probable nonasync exception. void clear_pending_nonasync_exception(); + void set_pending_preempted_exception(); + void clear_pending_preempted_exception(); + void check_preempted_exception() NOT_DEBUG_RETURN; + ThreadShadow() : _pending_exception(nullptr), _exception_file(nullptr), _exception_line(0) {} }; @@ -230,6 +234,8 @@ class Exceptions { #define CHECK_NULL CHECK_(nullptr) #define CHECK_false CHECK_(false) #define CHECK_JNI_ERR CHECK_(JNI_ERR) +#define CHECK_PREEMPTABLE THREAD); if (HAS_PENDING_EXCEPTION) { THREAD->check_preempted_exception(); return; } (void)(0 +#define CHECK_PREEMPTABLE_false THREAD); if (HAS_PENDING_EXCEPTION) { THREAD->check_preempted_exception(); return false; } (void)(0 // CAUTION: These macros clears all exceptions including async exceptions, use it with caution. #define CHECK_AND_CLEAR THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return; } (void)(0 @@ -249,6 +255,10 @@ class Exceptions { #define CHECK_AND_CLEAR_NONASYNC_NULL CHECK_AND_CLEAR_NONASYNC_(nullptr) #define CHECK_AND_CLEAR_NONASYNC_false CHECK_AND_CLEAR_NONASYNC_(false) +#define CLEAR_PENDING_PREEMPTED_EXCEPTION (((ThreadShadow*)THREAD)->clear_pending_preempted_exception()) +#define CHECK_AND_CLEAR_PREEMPTED THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_PREEMPTED_EXCEPTION; return; } (void)(0 + + // The THROW... macros should be used to throw an exception. They require a THREAD variable to be // visible within the scope containing the THROW. Usually this is achieved by declaring the function // with a TRAPS argument. diff --git a/src/java.base/share/classes/java/lang/VirtualThread.java b/src/java.base/share/classes/java/lang/VirtualThread.java index a23cbb72a6c..6064b46d50a 100644 --- a/src/java.base/share/classes/java/lang/VirtualThread.java +++ b/src/java.base/share/classes/java/lang/VirtualThread.java @@ -168,6 +168,9 @@ final class VirtualThread extends BaseVirtualThread { // notified by Object.notify/notifyAll while waiting in Object.wait private volatile boolean notified; + // true when waiting in Object.wait, false for VM internal uninterruptible Object.wait + private volatile boolean interruptibleWait; + // timed-wait support private byte timedWaitSeqNo; @@ -599,6 +602,7 @@ final class VirtualThread extends BaseVirtualThread { // Object.wait if (s == WAITING || s == TIMED_WAITING) { int newState; + boolean interruptible = interruptibleWait; if (s == WAITING) { setState(newState = WAIT); } else { @@ -628,7 +632,7 @@ final class VirtualThread extends BaseVirtualThread { } // may have been interrupted while in transition to wait state - if (interrupted && compareAndSetState(newState, UNBLOCKED)) { + if (interruptible && interrupted && compareAndSetState(newState, UNBLOCKED)) { submitRunContinuation(); return; } diff --git a/src/java.base/share/classes/jdk/internal/vm/PreemptedException.java b/src/java.base/share/classes/jdk/internal/vm/PreemptedException.java new file mode 100644 index 00000000000..56b3764f2fd --- /dev/null +++ b/src/java.base/share/classes/jdk/internal/vm/PreemptedException.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.internal.vm; + +/** + * Internal exception used only by the VM. + */ +public class PreemptedException extends RuntimeException { + @java.io.Serial + private static final long serialVersionUID = 6700691236100628123L; + + /** + * Constructs an {@code PreemptedException} with no detail message. + */ + public PreemptedException() { + super(); + } +} diff --git a/test/hotspot/gtest/oops/test_markWord.cpp b/test/hotspot/gtest/oops/test_markWord.cpp index 226d5a2dd74..f894acb5d1b 100644 --- a/test/hotspot/gtest/oops/test_markWord.cpp +++ b/test/hotspot/gtest/oops/test_markWord.cpp @@ -102,7 +102,7 @@ TEST_VM(markWord, printing) { st = new LockerThread(&done, h_obj()); st->doit(); - ol.wait(THREAD); + ol.wait_uninterruptibly(THREAD); assert_test_pattern(h_obj, "monitor"); done.wait_with_safepoint_check(THREAD); // wait till the thread is done. } diff --git a/test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/SingleStepKlassInit.java b/test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/SingleStepKlassInit.java new file mode 100644 index 00000000000..457c4b345c7 --- /dev/null +++ b/test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/SingleStepKlassInit.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test id=default + * @library /test/lib + * @requires vm.continuations + * @run main/othervm/native -agentlib:SingleStepKlassInit -XX:CompileCommand=exclude,SingleStepKlassInit::lambda$main* + * -XX:CompileCommand=exclude,SingleStepKlassInit$$Lambda*::run SingleStepKlassInit + */ + +import java.util.concurrent.CountDownLatch; + +public class SingleStepKlassInit { + private static final int MAX_VTHREAD_COUNT = 8 * Runtime.getRuntime().availableProcessors(); + private static final CountDownLatch finishInvokeStatic = new CountDownLatch(1); + + private static native void setSingleSteppingMode(boolean enable); + private static native boolean didSingleStep(); + + public static void main(String args[]) throws Exception { + class TestClass { + static { + try { + finishInvokeStatic.await(); + } catch (InterruptedException e) {} + } + static void m() { + } + } + + setSingleSteppingMode(true); + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + TestClass.m(); + }); + } + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + finishInvokeStatic.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + } + setSingleSteppingMode(false); + + if (!didSingleStep()) { + throw new RuntimeException("No SingleStep events"); + } + } + + /** + * Waits for the given thread to reach a given state. + */ + private static void await(Thread thread, Thread.State expectedState) throws InterruptedException { + Thread.State state = thread.getState(); + while (state != expectedState) { + assert state != Thread.State.TERMINATED : "Thread has terminated"; + Thread.sleep(10); + state = thread.getState(); + } + } +} diff --git a/test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/libSingleStepKlassInit.cpp b/test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/libSingleStepKlassInit.cpp new file mode 100644 index 00000000000..8acecd952e3 --- /dev/null +++ b/test/hotspot/jtreg/serviceability/jvmti/vthread/SingleStepKlassInit/libSingleStepKlassInit.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include +#include "jvmti_common.hpp" + +// set by Agent_OnLoad +static jvmtiEnv* jvmti = nullptr; +static jboolean did_single_step = false; + +extern "C" { + +static void JNICALL +SingleStep(jvmtiEnv *jvmti, JNIEnv* jni, jthread thread, + jmethodID method, jlocation location) { + did_single_step = true; +} + +JNIEXPORT jboolean JNICALL +Java_SingleStepKlassInit_didSingleStep(JNIEnv* jni, jclass klass) { + return did_single_step; +} + +JNIEXPORT void JNICALL +Java_SingleStepKlassInit_setSingleSteppingMode(JNIEnv* jni, jclass klass, jboolean enable) { + jvmtiError err = jvmti->SetEventNotificationMode(enable ? JVMTI_ENABLE : JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, nullptr); + check_jvmti_status(jni, err, "setSingleSteppingMode: error in JVMTI SetEventNotificationMode for JVMTI_EVENT_SINGLE_STEP"); +} + +JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM* jvm, char* options, void* reserved) { + jvmtiEventCallbacks callbacks; + jvmtiCapabilities caps; + jvmtiError err; + + LOG("Agent_OnLoad: started\n"); + if (jvm->GetEnv((void **) (&jvmti), JVMTI_VERSION) != JNI_OK) { + LOG("Agent init: Failed in GetEnv\n"); + return JNI_ERR; + } + + memset(&caps, 0, sizeof(caps)); + caps.can_generate_single_step_events = 1; + caps.can_support_virtual_threads = 1; + + err = jvmti->AddCapabilities(&caps); + if (err != JVMTI_ERROR_NONE) { + LOG("Agent init: Failed in AddCapabilities: %s (%d)\n", TranslateError(err), err); + return JNI_ERR; + } + + memset(&callbacks, 0, sizeof(callbacks)); + callbacks.SingleStep = &SingleStep; + err = jvmti->SetEventCallbacks(&callbacks, sizeof(jvmtiEventCallbacks)); + if (err != JVMTI_ERROR_NONE) { + LOG("Agent init: Failed in SetEventCallbacks: %s (%d)\n", TranslateError(err), err); + return JNI_ERR; + } + + LOG("Agent_OnLoad: finished\n"); + return 0; +} + +} // extern "C" diff --git a/test/jdk/java/lang/Thread/virtual/JfrEvents.java b/test/jdk/java/lang/Thread/virtual/JfrEvents.java index 0c967811481..a0b2077a2aa 100644 --- a/test/jdk/java/lang/Thread/virtual/JfrEvents.java +++ b/test/jdk/java/lang/Thread/virtual/JfrEvents.java @@ -302,10 +302,10 @@ class JfrEvents { } /** - * Test jdk.VirtualThreadPinned event when waiting for a class initializer. + * Test jdk.VirtualThreadPinned event when waiting for a class initializer while pinned. */ @Test - void testWaitingForClassInitializer() throws Exception { + void testWaitingForClassInitializerWhenPinned() throws Exception { class TestClass { static { LockSupport.park(); @@ -328,7 +328,9 @@ class JfrEvents { }); Thread vthread2 = Thread.ofVirtual().unstarted(() -> { started2.set(true); - TestClass.m(); + VThreadPinner.runPinned(() -> { + TestClass.m(); + }); }); try { @@ -341,7 +343,7 @@ class JfrEvents { vthread2.start(); awaitTrue(started2); - // give time for second virtual thread to wait on the MutexLocker + // give time for second virtual thread to wait in VM Thread.sleep(3000); } finally { diff --git a/test/jdk/java/lang/Thread/virtual/KlassInit.java b/test/jdk/java/lang/Thread/virtual/KlassInit.java new file mode 100644 index 00000000000..4f11d667a2b --- /dev/null +++ b/test/jdk/java/lang/Thread/virtual/KlassInit.java @@ -0,0 +1,490 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test id=default + * @library /test/lib + * @requires vm.continuations + * @run junit/othervm/timeout=480 -XX:CompileCommand=exclude,KlassInit::lambda$testReleaseAtKlassInit* + * -XX:CompileCommand=exclude,KlassInit$$Lambda*::run -XX:CompileCommand=exclude,KlassInit$1Driver::foo KlassInit + */ + +/* + * @test id=Xint + * @library /test/lib + * @requires vm.continuations + * @run junit/othervm/timeout=480 -Xint -XX:CompileCommand=exclude,KlassInit::lambda$testReleaseAtKlassInit* + * -XX:CompileCommand=exclude,KlassInit$$Lambda*::run -XX:CompileCommand=exclude,KlassInit$1Driver::foo KlassInit + */ + +/* + * @test id=Xcomp + * @library /test/lib + * @requires vm.continuations + * @run junit/othervm/timeout=480 -Xcomp -XX:CompileCommand=exclude,KlassInit::lambda$testReleaseAtKlassInit* + * -XX:CompileCommand=exclude,KlassInit$$Lambda*::run -XX:CompileCommand=exclude,KlassInit$1Driver::foo KlassInit + */ + +/* + * @test id=Xcomp-TieredStopAtLevel1 + * @library /test/lib + * @requires vm.continuations + * @run junit/othervm/timeout=480 -Xcomp -XX:TieredStopAtLevel=1 -XX:CompileCommand=exclude,KlassInit::lambda$testReleaseAtKlassInit* + * -XX:CompileCommand=exclude,KlassInit$$Lambda*::run -XX:CompileCommand=exclude,KlassInit$1Driver::foo KlassInit + */ + +/* + * @test id=Xcomp-noTieredCompilation + * @library /test/lib + * @requires vm.continuations + * @run junit/othervm/timeout=480 -Xcomp -XX:-TieredCompilation -XX:CompileCommand=exclude,KlassInit::lambda$testReleaseAtKlassInit* + * -XX:CompileCommand=exclude,KlassInit$$Lambda*::run -XX:CompileCommand=exclude,KlassInit$1Driver::foo KlassInit + */ + +/* + * @test id=gc + * @library /test/lib + * @requires vm.debug == true & vm.continuations + * @run junit/othervm/timeout=480 -XX:+UnlockDiagnosticVMOptions -XX:+FullGCALot -XX:FullGCALotInterval=1000 + * -XX:CompileCommand=exclude,KlassInit::lambda$testReleaseAtKlassInit* -XX:CompileCommand=exclude,KlassInit$$Lambda*::run + * -XX:CompileCommand=exclude,KlassInit$1Driver::foo KlassInit + */ + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.CountDownLatch; +import java.util.stream.Stream; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.Arguments; +import static org.junit.jupiter.api.Assertions.*; + +class KlassInit { + private static final int MAX_VTHREAD_COUNT = 8 * Runtime.getRuntime().availableProcessors(); + + private static final CountDownLatch finishInvokeStatic1 = new CountDownLatch(1); + private static final CountDownLatch finishInvokeStatic2 = new CountDownLatch(1); + private static final CountDownLatch finishInvokeStatic3 = new CountDownLatch(1); + private static final CountDownLatch finishNew = new CountDownLatch(1); + private static final CountDownLatch finishGetStatic = new CountDownLatch(1); + private static final CountDownLatch finishPutStatic = new CountDownLatch(1); + private static final CountDownLatch finishFailedInit = new CountDownLatch(1); + + /** + * Test that threads blocked waiting for klass to be initialized + * on invokestatic bytecode release the carrier. + */ + @Test + void testReleaseAtKlassInitInvokeStatic1() throws Exception { + class TestClass { + static { + try { + finishInvokeStatic1.await(); + } catch (InterruptedException e) {} + } + static void m() { + } + } + + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + TestClass.m(); + }); + } + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + finishInvokeStatic1.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + } + } + + /** + * Test with static method that takes arguments. + */ + @Test + void testReleaseAtKlassInitInvokeStatic2() throws Exception { + class TestClass { + static { + try { + finishInvokeStatic2.await(); + } catch (InterruptedException e) {} + } + static void m(ArrayList list, int id) { + String str = list.get(0); + if (str != null && str.equals("VThread#" + id)) { + list.add("Success"); + } + } + } + + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + ArrayList[] lists = new ArrayList[MAX_VTHREAD_COUNT]; + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + lists[i] = new ArrayList<>(List.of("VThread#" + i)); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + TestClass.m(lists[id], id); + }); + } + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + System.gc(); + finishInvokeStatic2.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + assertEquals(lists[i].get(1), "Success"); + } + } + + /** + * Test invokestatic as first bytecode in method. + */ + @Test + void testReleaseAtKlassInitInvokeStatic3() throws Exception { + class TestClass { + static { + try { + finishInvokeStatic3.await(); + } catch (InterruptedException e) {} + } + static void m() { + } + } + class Driver { + static void foo() { + TestClass.m(); + } + } + + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + started[0] = new CountDownLatch(1); + vthreads[0] = Thread.ofVirtual().start(() -> { + started[0].countDown(); + TestClass.m(); + }); + started[0].await(); + await(vthreads[0], Thread.State.WAITING); + + for (int i = 1; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + Driver.foo(); + }); + } + for (int i = 1; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + finishInvokeStatic3.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + } + } + + /** + * Test that threads blocked waiting for klass to be initialized + * on new bytecode release the carrier. + */ + @Test + void testReleaseAtKlassInitNew() throws Exception { + class TestClass { + static { + try { + finishNew.await(); + } catch (InterruptedException e) {} + } + void m() { + } + } + + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + TestClass x = new TestClass(); + x.m(); + }); + } + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + finishNew.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + } + } + + /** + * Test that threads blocked waiting for klass to be initialized + * on getstatic bytecode release the carrier. + */ + @Test + void testReleaseAtKlassInitGetStatic() throws Exception { + class TestClass { + static { + try { + finishGetStatic.await(); + } catch (InterruptedException e) {} + } + public static int NUMBER = 150; + } + + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + AtomicInteger[] result = new AtomicInteger[MAX_VTHREAD_COUNT]; + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + result[i] = new AtomicInteger(); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + result[id].set(TestClass.NUMBER); + }); + } + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + finishGetStatic.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + assertEquals(result[i].get(), TestClass.NUMBER); + } + } + + /** + * Test that threads blocked waiting for klass to be initialized + * on putstatic release the carrier. + */ + @Test + void testReleaseAtKlassInitPutStatic() throws Exception { + class TestClass { + static { + try { + finishPutStatic.await(); + } catch (InterruptedException e) {} + } + public static int NUMBER; + } + + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + TestClass.NUMBER = id; + }); + } + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + finishPutStatic.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + } + } + + /** + * Test that interruptions during preemption on klass init + * are preserved. + */ + @ParameterizedTest + @MethodSource("interruptTestCases") + void testReleaseAtKlassInitPreserverInterrupt(int timeout, Runnable m, CountDownLatch finish) throws Exception { + // Start vthread1 and wait until it blocks in TestClassX initializer + var vthread1_started = new CountDownLatch(1); + var vthread1 = Thread.ofVirtual().start(() -> { + vthread1_started.countDown(); + m.run(); + }); + vthread1_started.await(); + await(vthread1, Thread.State.WAITING); + + // Start vthread2 and wait until it gets preempted on TestClassX initialization + var lock = new Object(); + var interruptedException = new AtomicBoolean(); + var vthread2_started = new CountDownLatch(1); + var vthread2 = Thread.ofVirtual().start(() -> { + vthread2_started.countDown(); + m.run(); + synchronized (lock) { + try { + if (timeout > 0) { + lock.wait(timeout); + } else { + lock.wait(); + } + } catch (InterruptedException e) { + // check stack trace has the expected frames + Set expected = Set.of("wait0", "wait", "run"); + Set methods = Stream.of(e.getStackTrace()) + .map(StackTraceElement::getMethodName) + .collect(Collectors.toSet()); + assertTrue(methods.containsAll(expected)); + interruptedException.set(true); + } + } + }); + vthread2_started.await(); + await(vthread2, Thread.State.WAITING); + + // Interrupt vthread2 and let initialization of TestClassX finish + vthread2.interrupt(); + finish.countDown(); + vthread1.join(); + vthread2.join(); + assertTrue(interruptedException.get()); + } + + static CountDownLatch finishInterrupt0 = new CountDownLatch(1); + class TestClass0 { + static { + try { + finishInterrupt0.await(); + } catch (InterruptedException e) {} + } + static void m() {} + } + + static CountDownLatch finishInterrupt30000 = new CountDownLatch(1); + class TestClass30000 { + static { + try { + finishInterrupt30000.await(); + } catch (InterruptedException e) {} + } + static void m() {} + } + + static CountDownLatch finishInterruptMax = new CountDownLatch(1); + class TestClassMax { + static { + try { + finishInterruptMax.await(); + } catch (InterruptedException e) {} + } + static void m() {} + } + + static Stream interruptTestCases() { + return Stream.of( + Arguments.of(0, (Runnable) TestClass0::m, finishInterrupt0), + Arguments.of(30000, (Runnable) TestClass30000::m, finishInterrupt30000), + Arguments.of(Integer.MAX_VALUE, (Runnable) TestClassMax::m, finishInterruptMax) + ); + } + + /** + * Test case of threads blocked waiting for klass to be initialized + * when the klass initialization fails. + */ + @Test + void testReleaseAtKlassInitFailedInit() throws Exception { + class TestClass { + static int[] a = {1, 2, 3}; + static { + try { + finishFailedInit.await(); + a[3] = 4; + } catch (InterruptedException e) {} + } + static void m() { + } + } + + Thread[] vthreads = new Thread[MAX_VTHREAD_COUNT]; + CountDownLatch[] started = new CountDownLatch[MAX_VTHREAD_COUNT]; + AtomicInteger failedCount = new AtomicInteger(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + final int id = i; + started[i] = new CountDownLatch(1); + vthreads[i] = Thread.ofVirtual().start(() -> { + started[id].countDown(); + try { + TestClass.m(); + } catch (NoClassDefFoundError e) { + failedCount.getAndIncrement(); + } catch (ExceptionInInitializerError e) { + failedCount.getAndIncrement(); + } + }); + } + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + started[i].await(); + await(vthreads[i], Thread.State.WAITING); + } + + finishFailedInit.countDown(); + for (int i = 0; i < MAX_VTHREAD_COUNT; i++) { + vthreads[i].join(); + } + assertEquals(MAX_VTHREAD_COUNT, failedCount.get()); + } + + /** + * Waits for the given thread to reach a given state. + */ + private void await(Thread thread, Thread.State expectedState) throws InterruptedException { + Thread.State state = thread.getState(); + while (state != expectedState) { + assertTrue(state != Thread.State.TERMINATED, "Thread has terminated"); + Thread.sleep(10); + state = thread.getState(); + } + } +} diff --git a/test/jdk/java/lang/Thread/virtual/YieldQueuing.java b/test/jdk/java/lang/Thread/virtual/YieldQueuing.java index edb0b6e9f74..7bd2320e2ab 100644 --- a/test/jdk/java/lang/Thread/virtual/YieldQueuing.java +++ b/test/jdk/java/lang/Thread/virtual/YieldQueuing.java @@ -28,16 +28,24 @@ * @run junit/othervm -Djdk.virtualThreadScheduler.maxPoolSize=1 YieldQueuing */ +import java.lang.invoke.MethodHandles; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.LockSupport; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeAll; import static org.junit.jupiter.api.Assertions.*; class YieldQueuing { + @BeforeAll + static void setup() throws Exception { + // waiting for LockSupport to be initialized can change the scheduling + MethodHandles.lookup().ensureInitialized(LockSupport.class); + } + /** * Test Thread.yield submits the task for the current virtual thread to a scheduler * submission queue when there are no tasks in the local queue. diff --git a/test/jdk/java/lang/Thread/virtual/stress/LotsOfContendedMonitorEnter.java b/test/jdk/java/lang/Thread/virtual/stress/LotsOfContendedMonitorEnter.java index da45c610e82..32d4e1b39d9 100644 --- a/test/jdk/java/lang/Thread/virtual/stress/LotsOfContendedMonitorEnter.java +++ b/test/jdk/java/lang/Thread/virtual/stress/LotsOfContendedMonitorEnter.java @@ -25,22 +25,34 @@ * @test id=default * @summary Test virtual threads entering a lot of monitors with contention * @library /test/lib - * @run main LotsOfContendedMonitorEnter + * @run main/timeout=480 LotsOfContendedMonitorEnter */ +import java.time.Instant; +import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.CountDownLatch; import jdk.test.lib.thread.VThreadRunner; public class LotsOfContendedMonitorEnter { + static int depth; public static void main(String[] args) throws Exception { - int depth; if (args.length > 0) { depth = Integer.parseInt(args[0]); } else { depth = 1024; } - VThreadRunner.run(() -> testContendedEnter(depth)); + + var exRef = new AtomicReference(); + var thread = Thread.ofVirtual().start(() -> { + try { + testContendedEnter(depth); + } catch (Exception e) { + exRef.set(e); + } + }); + thread.join(); + assert exRef.get() == null; } /** @@ -48,6 +60,7 @@ public class LotsOfContendedMonitorEnter { * attempts to enter around the same time, then repeat to the given depth. */ private static void testContendedEnter(int depthRemaining) throws Exception { + boolean doLog = depthRemaining % 10 == 0; if (depthRemaining > 0) { var lock = new Object(); @@ -81,12 +94,18 @@ public class LotsOfContendedMonitorEnter { // signal thread to enter monitor again, it should block signal.countDown(); await(thread, Thread.State.BLOCKED); + if (doLog) { + System.out.println(Instant.now() + " => at depth: " + (depth - depthRemaining)); + } testContendedEnter(depthRemaining - 1); } } finally { thread.join(); } } + if (doLog) { + System.out.println(Instant.now() + " => returning from depth: " + (depth - depthRemaining)); + } } /** From 87c2091cd08e58304d0909ffaf9402ca2f0c3b7f Mon Sep 17 00:00:00 2001 From: Kelvin Nilsen Date: Wed, 5 Nov 2025 00:25:16 +0000 Subject: [PATCH 029/512] 8371141: Shenandoah: Many test timeouts with -XX:-UseTLAB Reviewed-by: xpeng, ysr, wkemper --- test/hotspot/jtreg/ProblemList.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 2065737c2a1..0b9630e9434 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -94,6 +94,9 @@ gc/TestAllocHumongousFragment.java#g1 8298781 generic-all gc/TestAllocHumongousFragment.java#static 8298781 generic-all gc/shenandoah/oom/TestAllocOutOfMemory.java#large 8344312 linux-ppc64le gc/shenandoah/TestEvilSyncBug.java#generational 8345501 generic-all +gc/shenandoah/TestRetainObjects.java#no-tlab 8361099 generic-all +gc/shenandoah/TestSieveObjects.java#no-tlab 8361099 generic-all +gc/shenandoah/TestSieveObjects.java#no-tlab-genshen 8361099 generic-all ############################################################################# From 4e6cadf4550c58b3ff97dfa0cead4b5b1399324c Mon Sep 17 00:00:00 2001 From: erifan Date: Wed, 5 Nov 2025 02:19:29 +0000 Subject: [PATCH 030/512] 8369456: [TESTBUG] Fix the test failure of TestSelectFromTwoVectorOp.java on sve2 platforms Reviewed-by: epeter, bkilambi, xgong, haosun --- .../cpu/aarch64/c2_MacroAssembler_aarch64.cpp | 5 +- src/hotspot/cpu/x86/x86.ad | 2 +- .../vectorapi/TestSelectFromTwoVectorOp.java | 130 +++++++++++++++--- 3 files changed, 115 insertions(+), 22 deletions(-) diff --git a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp index 328ef0c53e6..5f71222ed88 100644 --- a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp @@ -2722,9 +2722,8 @@ void C2_MacroAssembler::select_from_two_vectors(FloatRegister dst, FloatRegister assert_different_registers(dst, src1, src2, index, tmp); // The cases that can reach this method are - - // - UseSVE = 0, vector_length_in_bytes = 8 or 16 - // - UseSVE = 1, vector_length_in_bytes = 8 or 16 - // - UseSVE = 2, vector_length_in_bytes >= 8 + // - UseSVE = 0/1, vector_length_in_bytes = 8 or 16, excluding double and long types + // - UseSVE = 2, vector_length_in_bytes >= 8, for all types // // SVE/SVE2 tbl instructions are generated when UseSVE = 1 with vector_length_in_bytes = 8 // and UseSVE = 2 with vector_length_in_bytes >= 8 diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 2f19e76baf2..064c52e658b 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -3467,7 +3467,7 @@ bool Matcher::match_rule_supported_vector(int opcode, int vlen, BasicType bt) { if (size_in_bits < 128) { return false; } - if ((size_in_bits < 512 && !VM_Version::supports_avx512vl())) { + if (size_in_bits < 512 && !VM_Version::supports_avx512vl()) { return false; } if (bt == T_SHORT && !VM_Version::supports_avx512bw()) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/TestSelectFromTwoVectorOp.java b/test/hotspot/jtreg/compiler/vectorapi/TestSelectFromTwoVectorOp.java index 3746578266c..1320b888ee6 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/TestSelectFromTwoVectorOp.java +++ b/test/hotspot/jtreg/compiler/vectorapi/TestSelectFromTwoVectorOp.java @@ -1,5 +1,6 @@ /* * Copyright (c) 2025, Arm Limited. All rights reserved. + * Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -185,8 +186,14 @@ public class TestSelectFromTwoVectorOp { @Test @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_16, ">0"}, - applyIfCPUFeature = {"asimd", "true"}, + applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_16, ">0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_16, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">16"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_16, ">0"}, applyIfCPUFeatureAnd = {"avx512_vbmi", "true", "avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=16"}) @@ -200,7 +207,10 @@ public class TestSelectFromTwoVectorOp { applyIf = {"MaxVectorSize", ">=32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_32, ">0"}, applyIfCPUFeature = {"sve2", "true"}, - applyIf = {"MaxVectorSize", ">=32"}) + applyIf = {"MaxVectorSize", "32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_32, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_32, ">0"}, applyIfCPUFeatureAnd = {"avx512_vbmi", "true", "avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=32"}) @@ -214,7 +224,10 @@ public class TestSelectFromTwoVectorOp { applyIf = {"MaxVectorSize", ">=64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_64, ">0"}, applyIfCPUFeature = {"sve2", "true"}, - applyIf = {"MaxVectorSize", ">=64"}) + applyIf = {"MaxVectorSize", "64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_64, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VB, IRNode.VECTOR_SIZE_64, ">0"}, applyIfCPUFeatureAnd = {"avx512_vbmi", "true", "avx512f", "true"}, applyIf = {"MaxVectorSize", ">=64"}) @@ -248,7 +261,10 @@ public class TestSelectFromTwoVectorOp { applyIf = {"MaxVectorSize", ">=16"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_8, ">0"}, applyIfCPUFeature = {"sve2", "true"}, - applyIf = {"MaxVectorSize", ">=16"}) + applyIf = {"MaxVectorSize", "16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_8, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">16"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_8, ">0"}, applyIfCPUFeatureAnd = {"avx512bw", "true", "avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=16"}) @@ -262,7 +278,10 @@ public class TestSelectFromTwoVectorOp { applyIf = {"MaxVectorSize", ">=32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_16, ">0"}, applyIfCPUFeature = {"sve2", "true"}, - applyIf = {"MaxVectorSize", ">=32"}) + applyIf = {"MaxVectorSize", "32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_16, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_16, ">0"}, applyIfCPUFeatureAnd = {"avx512bw", "true", "avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=32"}) @@ -276,7 +295,10 @@ public class TestSelectFromTwoVectorOp { applyIf = {"MaxVectorSize", ">=64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_32, ">0"}, applyIfCPUFeature = {"sve2", "true"}, - applyIf = {"MaxVectorSize", ">=64"}) + applyIf = {"MaxVectorSize", "64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_32, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VS, IRNode.VECTOR_SIZE_32, ">0"}, applyIfCPUFeatureAnd = {"avx512bw", "true", "avx512f", "true"}, applyIf = {"MaxVectorSize", ">=64"}) @@ -309,7 +331,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=16"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_4, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_4, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_4, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=16"}) public static void selectFromTwoVector_Int128() { IntSelectFromTwoVectorKernel(IntVector.SPECIES_128, ia, ib, iindex[1]); @@ -320,7 +348,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_8, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_8, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_8, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=32"}) public static void selectFromTwoVector_Int256() { IntSelectFromTwoVectorKernel(IntVector.SPECIES_256, ia, ib, iindex[2]); @@ -331,7 +365,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_16, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512f", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_16, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VI, IRNode.VECTOR_SIZE_16, ">0"}, + applyIfCPUFeature = {"avx512f", "true"}, applyIf = {"MaxVectorSize", ">=64"}) public static void selectFromTwoVector_Int512() { IntSelectFromTwoVectorKernel(IntVector.SPECIES_512, ia, ib, iindex[3]); @@ -362,7 +402,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=16"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_4, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_4, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_4, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=16"}) public static void selectFromTwoVector_Float128() { FloatSelectFromTwoVectorKernel(FloatVector.SPECIES_128, fa, fb, findex[1]); @@ -373,7 +419,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_8, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_8, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_8, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=32"}) public static void selectFromTwoVector_Float256() { FloatSelectFromTwoVectorKernel(FloatVector.SPECIES_256, fa, fb, findex[2]); @@ -384,7 +436,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_16, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512f", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_16, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VF, IRNode.VECTOR_SIZE_16, ">0"}, + applyIfCPUFeature = {"avx512f", "true"}, applyIf = {"MaxVectorSize", ">=64"}) public static void selectFromTwoVector_Float512() { FloatSelectFromTwoVectorKernel(FloatVector.SPECIES_512, fa, fb, findex[3]); @@ -407,7 +465,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=16"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_2, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_2, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_2, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=16"}) public static void selectFromTwoVector_Double128() { DoubleSelectFromTwoVectorKernel(DoubleVector.SPECIES_128, da, db, dindex[0]); @@ -418,7 +482,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_4, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_4, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_4, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=32"}) public static void selectFromTwoVector_Double256() { DoubleSelectFromTwoVectorKernel(DoubleVector.SPECIES_256, da, db, dindex[1]); @@ -429,7 +499,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_8, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512f", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_8, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VD, IRNode.VECTOR_SIZE_8, ">0"}, + applyIfCPUFeature = {"avx512f", "true"}, applyIf = {"MaxVectorSize", ">=64"}) public static void selectFromTwoVector_Double512() { DoubleSelectFromTwoVectorKernel(DoubleVector.SPECIES_512, da, db, dindex[2]); @@ -452,7 +528,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=16"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_2, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_2, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">16"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_2, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=16"}) public static void selectFromTwoVector_Long128() { LongSelectFromTwoVectorKernel(LongVector.SPECIES_128, la, lb, lindex[0]); @@ -463,7 +545,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=32"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_4, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512vl", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_4, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">32"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_4, ">0"}, + applyIfCPUFeature = {"avx512vl", "true"}, applyIf = {"MaxVectorSize", ">=32"}) public static void selectFromTwoVector_Long256() { LongSelectFromTwoVectorKernel(LongVector.SPECIES_256, la, lb, lindex[1]); @@ -474,7 +562,13 @@ public class TestSelectFromTwoVectorOp { applyIfCPUFeatureAnd = {"asimd", "true", "sve2", "false"}, applyIf = {"MaxVectorSize", ">=64"}) @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_8, ">0"}, - applyIfCPUFeatureOr = {"sve2", "true", "avx512f", "true"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", "64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_8, "0"}, + applyIfCPUFeature = {"sve2", "true"}, + applyIf = {"MaxVectorSize", ">64"}) + @IR(counts = {IRNode.SELECT_FROM_TWO_VECTOR_VL, IRNode.VECTOR_SIZE_8, ">0"}, + applyIfCPUFeature = {"avx512f", "true"}, applyIf = {"MaxVectorSize", ">=64"}) public static void selectFromTwoVector_Long512() { LongSelectFromTwoVectorKernel(LongVector.SPECIES_512, la, lb, lindex[2]); From d89c6a77f2bf3e0f820f8f631d82d5bec1b02399 Mon Sep 17 00:00:00 2001 From: Phil Race Date: Wed, 5 Nov 2025 03:25:40 +0000 Subject: [PATCH 031/512] 8371304: mismatch in file name and class name for ByteInterleavedRasterOffsetsTest.java Reviewed-by: psadhukhan --- test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java b/test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java index ec077c45ff1..59bc20789b6 100644 --- a/test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java +++ b/test/jdk/java/awt/image/ByteInterleavedRasterOffsetsTest.java @@ -36,7 +36,7 @@ import java.awt.image.WritableRaster; * @summary Verify DataBuffer offsets are handled by ByteInterleavedRaster */ -public class ByteInterleavedOffsetsTest { +public class ByteInterleavedRasterOffsetsTest { public static void main(String[] args) { byte[] data = { 0, -1, 0, 0 }; // only set the R sample. From 8b536b5428d5bf087dc71f3559c3978b13acad16 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Wed, 5 Nov 2025 05:44:09 +0000 Subject: [PATCH 032/512] 8369489: Marker annotation on inner class access crashes javac compiler Reviewed-by: vromero --- .../sun/tools/javac/parser/JavacParser.java | 12 +- .../com/sun/tools/javac/tree/TreeInfo.java | 22 +- .../TypeAnnosOnMemberReferenceTest.java | 190 ++++++++++++++++++ .../tools/javac/parser/JavacParserTest.java | 29 ++- 4 files changed, 244 insertions(+), 9 deletions(-) create mode 100644 test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnMemberReferenceTest.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index 098fbaf59f5..d3539b53541 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -1542,7 +1542,17 @@ public class JavacParser implements Parser { switch (expr.getTag()) { case REFERENCE: { JCMemberReference mref = (JCMemberReference) expr; - mref.expr = toP(F.at(pos).AnnotatedType(typeAnnos, mref.expr)); + if (TreeInfo.isType(mref.expr, names)) { + mref.expr = insertAnnotationsToMostInner(mref.expr, typeAnnos, false); + } else { + //the selector is not a type, error recovery: + JCAnnotatedType annotatedType = + toP(F.at(pos).AnnotatedType(typeAnnos, mref.expr)); + int termStart = getStartPos(mref.expr); + mref.expr = syntaxError(termStart, List.of(annotatedType), + Errors.IllegalStartOfType); + } + mref.pos = getStartPos(mref.expr); t = mref; break; } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java index a66dcaad851..af823024fab 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java @@ -437,6 +437,19 @@ public class TreeInfo { * Return true if the AST corresponds to a static select of the kind A.B */ public static boolean isStaticSelector(JCTree base, Names names) { + return isTypeSelector(base, names, TreeInfo::isStaticSym); + } + //where + private static boolean isStaticSym(JCTree tree) { + Symbol sym = symbol(tree); + return (sym.kind == TYP || sym.kind == PCK); + } + + public static boolean isType(JCTree base, Names names) { + return isTypeSelector(base, names, _ -> true); + } + + private static boolean isTypeSelector(JCTree base, Names names, Predicate checkStaticSym) { if (base == null) return false; switch (base.getTag()) { @@ -444,9 +457,9 @@ public class TreeInfo { JCIdent id = (JCIdent)base; return id.name != names._this && id.name != names._super && - isStaticSym(base); + checkStaticSym.test(base); case SELECT: - return isStaticSym(base) && + return checkStaticSym.test(base) && isStaticSelector(((JCFieldAccess)base).selected, names); case TYPEAPPLY: case TYPEARRAY: @@ -457,11 +470,6 @@ public class TreeInfo { return false; } } - //where - private static boolean isStaticSym(JCTree tree) { - Symbol sym = symbol(tree); - return (sym.kind == TYP || sym.kind == PCK); - } /** Return true if a tree represents the null literal. */ public static boolean isNull(JCTree tree) { diff --git a/test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnMemberReferenceTest.java b/test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnMemberReferenceTest.java new file mode 100644 index 00000000000..002b8d5bcb1 --- /dev/null +++ b/test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnMemberReferenceTest.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8369489 + * @summary Verify annotations on member references work reasonably. + * @library /tools/lib /tools/javac/lib + * @modules + * jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * @build toolbox.ToolBox toolbox.JavacTask + * @run junit TypeAnnosOnMemberReferenceTest + */ + +import com.sun.source.tree.IdentifierTree; +import com.sun.source.tree.Tree; +import com.sun.source.tree.VariableTree; +import com.sun.source.util.TreePath; +import com.sun.source.util.TreeScanner; +import com.sun.source.util.Trees; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.util.ElementFilter; + +import org.junit.jupiter.api.Test; + +import toolbox.JavacTask; +import toolbox.Task; +import toolbox.ToolBox; + +public class TypeAnnosOnMemberReferenceTest { + private ToolBox tb = new ToolBox(); + + @Test + public void testAnnoOnMemberRef() throws Exception { + Path base = Paths.get("."); + Path src = base.resolve("src"); + Path classes = base.resolve("classes"); + + Files.createDirectories(classes); + + tb.writeJavaFiles(src, + """ + import java.lang.annotation.Target; + import java.lang.annotation.ElementType; + import java.lang.annotation.Retention; + import java.lang.annotation.RetentionPolicy; + + public class Test { + interface I { + void foo(int i); + } + + @Target(ElementType.TYPE_USE) + @interface Ann1 {} + @Target(ElementType.TYPE_USE) + @interface Ann2 {} + I i = @Ann1 Test @Ann2 []::new; + } + """); + + Path classDir = getClassDir(); + new JavacTask(tb) + .classpath(classDir) + .outdir(classes) + .options("-processor", VerifyAnnotations.class.getName()) + .files(tb.findJavaFiles(src)) + .outdir(classes) + .run(Task.Expect.SUCCESS); + } + + public Path getClassDir() { + String classes = ToolBox.testClasses; + if (classes == null) { + return Paths.get("build"); + } else { + return Paths.get(classes); + } + } + + @SupportedAnnotationTypes("*") + public static final class VerifyAnnotations extends AbstractProcessor { + @Override + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latestSupported(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + TypeElement testElement = processingEnv.getElementUtils().getTypeElement("Test"); + VariableElement iElement = ElementFilter.fieldsIn(testElement.getEnclosedElements()).getFirst(); + Trees trees = Trees.instance(processingEnv); + TreePath iPath = trees.getPath(iElement); + StringBuilder text = new StringBuilder(); + new TreeScanner<>() { + int ident = 0; + @Override + public Object scan(Tree tree, Object p) { + if (tree != null) { + String indent = + Stream.generate(() -> " ") + .limit(ident) + .collect(Collectors.joining()); + + text.append("\n") + .append(indent) + .append("(") + .append(tree.getKind()); + ident += 4; + super.scan(tree, p); + ident -= 4; + text.append("\n") + .append(indent) + .append(")"); + } + return null; + } + + @Override + public Object visitIdentifier(IdentifierTree node, Object p) { + text.append(" ").append(node.getName()); + return super.visitIdentifier(node, p); + } + }.scan(((VariableTree) iPath.getLeaf()).getInitializer(), null); + String expected = + """ + + (MEMBER_REFERENCE + (ANNOTATED_TYPE + (TYPE_ANNOTATION + (IDENTIFIER Ann2 + ) + ) + (ARRAY_TYPE + (ANNOTATED_TYPE + (TYPE_ANNOTATION + (IDENTIFIER Ann1 + ) + ) + (IDENTIFIER Test + ) + ) + ) + ) + )"""; + + String actual = text.toString(); + + if (!expected.equals(actual)) { + throw new AssertionError("Expected: " + expected + "," + + "got: " + actual); + } + + return false; + } + } +} diff --git a/test/langtools/tools/javac/parser/JavacParserTest.java b/test/langtools/tools/javac/parser/JavacParserTest.java index 58d60d80ca9..25aeb19f1bb 100644 --- a/test/langtools/tools/javac/parser/JavacParserTest.java +++ b/test/langtools/tools/javac/parser/JavacParserTest.java @@ -23,7 +23,7 @@ /* * @test - * @bug 7073631 7159445 7156633 8028235 8065753 8205418 8205913 8228451 8237041 8253584 8246774 8256411 8256149 8259050 8266436 8267221 8271928 8275097 8293897 8295401 8304671 8310326 8312093 8312204 8315452 8337976 8324859 8344706 8351260 8370865 + * @bug 7073631 7159445 7156633 8028235 8065753 8205418 8205913 8228451 8237041 8253584 8246774 8256411 8256149 8259050 8266436 8267221 8271928 8275097 8293897 8295401 8304671 8310326 8312093 8312204 8315452 8337976 8324859 8344706 8351260 8370865 8369489 * @summary tests error and diagnostics positions * @author Jan Lahoda * @modules jdk.compiler/com.sun.tools.javac.api @@ -3124,6 +3124,33 @@ public class JavacParserTest extends TestCase { codes); } + @Test //JDK-8369489 + void testTypeAnnotationBrokenMethodRef() throws IOException { + String code = """ + public class Test { + Object o1 = @Ann any()::test; + Object o2 = @Ann any().field::test; + } + """; + DiagnosticCollector coll = + new DiagnosticCollector<>(); + JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, fm, coll, + null, + null, Arrays.asList(new MyFileObject(code))); + //no exceptions: + ct.parse().iterator().next(); + List codes = new LinkedList<>(); + + for (Diagnostic d : coll.getDiagnostics()) { + codes.add(d.getLineNumber() + ":" + d.getColumnNumber() + ":" + d.getCode()); + } + + assertEquals("testTypeAnnotationBrokenMethodRef: " + codes, + List.of("2:22:compiler.err.illegal.start.of.type", + "3:22:compiler.err.illegal.start.of.type"), + codes); + } + void run(String[] args) throws Exception { int passed = 0, failed = 0; final Pattern p = (args != null && args.length > 0) From a0e70c4e9489fc3d8f35c3aec9423fe0839ed0bd Mon Sep 17 00:00:00 2001 From: Christian Stein Date: Wed, 5 Nov 2025 06:23:26 +0000 Subject: [PATCH 033/512] 8370175: State engine terminates when throwing self-caused exception Reviewed-by: jlahoda, fandreuzzi --- .../execution/DirectExecutionControl.java | 23 +++++++++++++++---- test/langtools/jdk/jshell/ExceptionsTest.java | 12 +++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java index 1c40aa03e5f..b9424f762a5 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,9 @@ import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Collections; +import java.util.IdentityHashMap; +import java.util.Set; import java.util.stream.IntStream; import jdk.jshell.spi.ExecutionControl; import jdk.jshell.spi.SPIResolutionException; @@ -335,10 +338,15 @@ public class DirectExecutionControl implements ExecutionControl { * @throws ExecutionControl.InternalException for internal problems */ protected String throwConvertedInvocationException(Throwable cause) throws RunException, InternalException { - throw asRunException(cause); + // Guard against recursive cause chains by + // using a Set with identity equality semantics. + Set dejaVu = Collections.newSetFromMap(new IdentityHashMap<>()); + dejaVu.add(cause); + + throw asRunException(cause, dejaVu); } - private RunException asRunException(Throwable ex) { + private RunException asRunException(Throwable ex, Set dejaVu) { if (ex instanceof SPIResolutionException) { SPIResolutionException spire = (SPIResolutionException) ex; return new ResolutionException(spire.id(), spire.getStackTrace()); @@ -347,7 +355,14 @@ public class DirectExecutionControl implements ExecutionControl { ex.getClass().getName(), ex.getStackTrace()); Throwable cause = ex.getCause(); - ue.initCause(cause == null ? null : asRunException(cause)); + if (cause != null) { + Throwable throwable = dejaVu.add(cause) + ? asRunException(cause, dejaVu) + : new UserException("CIRCULAR REFERENCE!", + cause.getClass().getName(), + cause.getStackTrace()); + ue.initCause(throwable); + } return ue; } } diff --git a/test/langtools/jdk/jshell/ExceptionsTest.java b/test/langtools/jdk/jshell/ExceptionsTest.java index f7273b2a6fc..6cca962acde 100644 --- a/test/langtools/jdk/jshell/ExceptionsTest.java +++ b/test/langtools/jdk/jshell/ExceptionsTest.java @@ -24,7 +24,7 @@ /* * @test * @summary Tests for exceptions - * @bug 8198801 8212167 8210527 + * @bug 8198801 8212167 8210527 8370175 * @modules jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main * jdk.jdeps/com.sun.tools.javap @@ -320,6 +320,16 @@ public class ExceptionsTest extends KullaTesting { assertExecuteException("f();", StackOverflowError.class); } + @Test + public void recursiveCauses() { + assertEval("var one = new Throwable();"); + assertEval("var two = new Error();"); + assertEval("one.initCause(two);"); + assertEval("two.initCause(one);"); + assertExecuteException("throw one;", Throwable.class); + assertExecuteException("throw two;", Error.class); + } + private StackTraceElement newStackTraceElement(String className, String methodName, Snippet key, int lineNumber) { return new StackTraceElement(className, methodName, "#" + key.id(), lineNumber); } From dddfcd03aa30514d63eceff707d48bff35e93c56 Mon Sep 17 00:00:00 2001 From: Kerem Kat Date: Wed, 5 Nov 2025 08:33:14 +0000 Subject: [PATCH 034/512] 8334866: Improve Speed of ElfDecoder source search Reviewed-by: shade, chagedorn --- src/hotspot/share/utilities/elfFile.cpp | 148 +++++++++++++++++++++++- src/hotspot/share/utilities/elfFile.hpp | 90 ++++++++++++-- 2 files changed, 225 insertions(+), 13 deletions(-) diff --git a/src/hotspot/share/utilities/elfFile.cpp b/src/hotspot/share/utilities/elfFile.cpp index e3cbb5ac18e..9ea19b38276 100644 --- a/src/hotspot/share/utilities/elfFile.cpp +++ b/src/hotspot/share/utilities/elfFile.cpp @@ -684,9 +684,8 @@ bool ElfFile::create_new_dwarf_file(const char* filepath) { // Starting point of reading line number and filename information from the DWARF file. bool DwarfFile::get_filename_and_line_number(const uint32_t offset_in_library, char* filename, const size_t filename_len, int* line, const bool is_pc_after_call) { - DebugAranges debug_aranges(this); uint32_t compilation_unit_offset = 0; // 4-bytes for 32-bit DWARF - if (!debug_aranges.find_compilation_unit_offset(offset_in_library, &compilation_unit_offset)) { + if (!_debug_aranges.find_compilation_unit_offset(offset_in_library, &compilation_unit_offset)) { DWARF_LOG_ERROR("Failed to find .debug_info offset for the compilation unit."); return false; } @@ -708,11 +707,87 @@ bool DwarfFile::get_filename_and_line_number(const uint32_t offset_in_library, c return true; } +// Build sorted cache of all address ranges for binary search. +DwarfFile::DebugAranges::CacheHint DwarfFile::DebugAranges::ensure_cached() { + if (_cache._failed) { + return CacheHint::FAILED; + } + if (_cache._initialized) { + return CacheHint::VALID; + } + + assert(_cache._capacity == 0, "need fresh cache"); + assert(_cache._count == 0, "need fresh cache"); + const long pos = _reader.get_position(); + if (!read_section_header()) { + _cache.destroy(true); + return CacheHint::FAILED; + } + + // Start with reasonable initial capacity to minimize number of grow/realloc calls. + // Assume ~3% of the .debug_aranges is DebugArangesSetHeader and the rest is made up of AddressDescriptors. + const uintptr_t estimated_set_header_size = _size_bytes / 32; + const size_t initial_capacity = (_size_bytes - estimated_set_header_size) / sizeof(AddressDescriptor); + _cache._entries = NEW_C_HEAP_ARRAY_RETURN_NULL(ArangesEntry, initial_capacity, mtInternal); + if (_cache._entries == nullptr) { + _cache.destroy(true); + _reader.set_position(pos); + return CacheHint::TRY_LINEAR_SCAN; + } + _cache._capacity = initial_capacity; + _cache._count = 0; + + // Read all sets and their descriptors + while (_reader.has_bytes_left()) { + DebugArangesSetHeader set_header; + if (!read_set_header(set_header)) { + break; + } + + // Read all address descriptors for this set into the cache. + AddressDescriptor descriptor; + do { + if (!read_address_descriptor(descriptor)) { + _cache.destroy(true); + return CacheHint::FAILED; + } + if (!is_terminating_entry(set_header, descriptor) && descriptor.range_length > 0 && + !_cache.add_entry(descriptor, set_header._debug_info_offset)) { + _cache.destroy(true); + _reader.set_position(pos); + return CacheHint::TRY_LINEAR_SCAN; + } + } while (!is_terminating_entry(set_header, descriptor) && _reader.has_bytes_left()); + } + + if (_cache._count == 0) { + _cache.destroy(false); + // No entries found, unusual but still valid. + return CacheHint::VALID; + } + _cache.sort(); + _cache._initialized = true; + DWARF_LOG_INFO("Built .debug_aranges cache for '%s' with %zu entries", this->_dwarf_file->filepath(), _cache._count); + return CacheHint::VALID; +} + // (2) The .debug_aranges section contains a number of entries/sets. Each set contains one or multiple address range descriptors of the // form [beginning_address, beginning_address+length). Start reading these sets and their descriptors until we find one that contains // 'offset_in_library'. Read the debug_info_offset field from the header of this set which defines the offset for the compilation unit. // This process is described in section 6.1.2 of the DWARF 4 spec. bool DwarfFile::DebugAranges::find_compilation_unit_offset(const uint32_t offset_in_library, uint32_t* compilation_unit_offset) { + switch (ensure_cached()) { + case CacheHint::VALID: + return _cache.find_compilation_unit_offset(offset_in_library, compilation_unit_offset); + case CacheHint::TRY_LINEAR_SCAN: + break; + case CacheHint::FAILED: + return false; + } + + // Fall back to linear scan if building of the cache failed, which can happen + // if there are C heap allocation errors. + DWARF_LOG_INFO("Falling back to linear scan of .debug_aranges for '%s'", _dwarf_file->filepath()); if (!read_section_header()) { DWARF_LOG_ERROR("Failed to read a .debug_aranges header."); return false; @@ -750,6 +825,7 @@ bool DwarfFile::DebugAranges::read_section_header() { } _section_start_address = shdr.sh_offset; + _size_bytes = shdr.sh_size; _reader.set_max_pos(shdr.sh_offset + shdr.sh_size); return _reader.set_position(shdr.sh_offset); } @@ -829,6 +905,74 @@ bool DwarfFile::DebugAranges::is_terminating_entry(const DwarfFile::DebugAranges return is_terminating; } +// Sort entries by beginning_address, when same then sort longest range first. +int DwarfFile::ArangesCache::compare_aranges_entries(const ArangesEntry& a, const ArangesEntry& b) { + if (a.beginning_address < b.beginning_address) { + return -1; + } else if (a.beginning_address > b.beginning_address) { + return 1; + } + + uintptr_t len_a = a.end_address - a.beginning_address; + uintptr_t len_b = b.end_address - b.beginning_address; + if (len_a < len_b) { + return 1; + } else if (len_a > len_b) { + return -1; + } + return 0; +} + +void DwarfFile::ArangesCache::sort() { + QuickSort::sort(_entries, _count, compare_aranges_entries); +} + +bool DwarfFile::ArangesCache::add_entry(const AddressDescriptor& descriptor, uint32_t debug_info_offset) { + if (_count >= _capacity && !grow()) { + return false; + } + _entries[_count] = ArangesEntry( + descriptor.beginning_address, + descriptor.beginning_address + descriptor.range_length, + debug_info_offset + ); + _count++; + return true; +} + +bool DwarfFile::ArangesCache::grow() { + size_t new_capacity = _capacity == 0 ? 128 : _capacity * 1.5; + ArangesEntry* new_entries = REALLOC_C_HEAP_ARRAY_RETURN_NULL(ArangesEntry, _entries, new_capacity, mtInternal); + if (new_entries == nullptr) { + return false; + } + _entries = new_entries; + _capacity = new_capacity; + return true; +} + +bool DwarfFile::ArangesCache::find_compilation_unit_offset(uint32_t offset_in_library, uint32_t* compilation_unit_offset) const { + if (!_initialized || _entries == nullptr || _count == 0) { + return false; + } + + size_t left = 0; + size_t right = _count; + while (left < right) { + size_t mid = left + (right - left) / 2; + const ArangesEntry& entry = _entries[mid]; + if (offset_in_library < entry.beginning_address) { + right = mid; + } else if (offset_in_library >= entry.end_address) { + left = mid + 1; + } else { + *compilation_unit_offset = entry.debug_info_offset; + return true; + } + } + return false; +} + // Find the .debug_line offset for the line number program by reading from the .debug_abbrev and .debug_info section. bool DwarfFile::CompilationUnit::find_debug_line_offset(uint32_t* debug_line_offset) { // (3a,b) diff --git a/src/hotspot/share/utilities/elfFile.hpp b/src/hotspot/share/utilities/elfFile.hpp index 979fac5edfc..1298892533e 100644 --- a/src/hotspot/share/utilities/elfFile.hpp +++ b/src/hotspot/share/utilities/elfFile.hpp @@ -72,6 +72,7 @@ typedef Elf32_Sym Elf_Sym; #include "memory/allocation.hpp" #include "utilities/checkedCast.hpp" #include "utilities/decoder.hpp" +#include "utilities/quickSort.hpp" #ifdef ASSERT // Helper macros to print different log levels during DWARF parsing @@ -94,10 +95,10 @@ typedef Elf32_Sym Elf_Sym; #define DWARF_LOG_TRACE(format, ...) #endif +class DwarfFile; +class ElfFuncDescTable; class ElfStringTable; class ElfSymbolTable; -class ElfFuncDescTable; -class DwarfFile; // ELF section, may or may not have cached data class ElfSection { @@ -201,6 +202,7 @@ class ElfFile: public CHeapObj { bool get_source_info(uint32_t offset_in_library, char* filename, size_t filename_len, int* line, bool is_pc_after_call); + DEBUG_ONLY(const char* filepath() const { return _filepath; }) private: // sanity check, if the file is a real elf file static bool is_elf_file(Elf_Ehdr&); @@ -397,7 +399,6 @@ class ElfFile: public CHeapObj { * - Complete information about intermediate states/results when parsing the DWARF file. */ class DwarfFile : public ElfFile { - static constexpr uint8_t ADDRESS_SIZE = NOT_LP64(4) LP64_ONLY(8); // We only support 32-bit DWARF (emitted by GCC) which uses 32-bit values for DWARF section lengths and offsets // relative to the beginning of a section. @@ -435,6 +436,63 @@ class DwarfFile : public ElfFile { bool read_non_null_char(char* result); }; + // Address descriptor defining a range that is covered by a compilation unit. It is defined in section 6.1.2 after + // the set header in the DWARF 4 spec. + struct AddressDescriptor { + uintptr_t beginning_address = 0; + uintptr_t range_length = 0; + }; + + // Entry in ArangesCache, corresponding to an entry in .debug_aranges section. + struct ArangesEntry { + uintptr_t beginning_address; + uintptr_t end_address; + uint32_t debug_info_offset; + + ArangesEntry() : beginning_address(0), end_address(0), debug_info_offset(0) {} + ArangesEntry(uintptr_t begin, uintptr_t end, uint32_t offset) + : beginning_address(begin), end_address(end), debug_info_offset(offset) {} + }; + + // Cache for .debug_aranges to enable binary search for address lookup. + // DebugAranges uses this cache to resolve the compilation_unit_offset, rather than doing a linear scan on the files + // in each invocation of DebugAranges::find_compilation_unit_offset. + struct ArangesCache { + ArangesEntry* _entries; + size_t _count; + size_t _capacity; + bool _initialized; + bool _failed; + + ArangesCache() : _entries(nullptr), _count(0), _capacity(0), _initialized(false), _failed(false) {} + ArangesCache(const ArangesCache&) = delete; + ArangesCache& operator=(const ArangesCache&) = delete; + ~ArangesCache() { + this->free(); + } + + void destroy(bool failed) { + this->free(); + _count = 0; + _capacity = 0; + _failed = failed; + } + bool find_compilation_unit_offset(uint32_t offset_in_library, uint32_t* compilation_unit_offset) const; + bool valid() const { return _initialized && !_failed; } + bool add_entry(const AddressDescriptor& descriptor, uint32_t debug_info_offset); + void sort(); + + private: + static int compare_aranges_entries(const ArangesEntry& a, const ArangesEntry& b); + bool grow(); + void free() { + if (_entries != nullptr) { + FREE_C_HEAP_ARRAY(ArangesEntry, _entries); + _entries = nullptr; + } + } + }; + // (2) Processing the .debug_aranges section to find the compilation unit which covers offset_in_library. // This is specified in section 6.1.2 of the DWARF 4 spec. // @@ -475,16 +533,22 @@ class DwarfFile : public ElfFile { uint8_t _segment_size; }; - // Address descriptor defining a range that is covered by a compilation unit. It is defined in section 6.1.2 after - // the set header in the DWARF 4 spec. - struct AddressDescriptor { - uintptr_t beginning_address = 0; - uintptr_t range_length = 0; + enum class CacheHint { + // Do not retry as linear scan won't be able to read this either. + FAILED, + + // Cache is usable, no need to fall back to linear scan. + VALID, + + // Cache is unusable, possible reasons are C heap allocation failures. Fall back to linear scan. + TRY_LINEAR_SCAN, }; DwarfFile* _dwarf_file; + ArangesCache _cache; MarkedDwarfFileReader _reader; uintptr_t _section_start_address; + uintptr_t _size_bytes; // a calculated end position long _entry_end; @@ -499,9 +563,9 @@ class DwarfFile : public ElfFile { const AddressDescriptor& descriptor); public: DebugAranges(DwarfFile* dwarf_file) : _dwarf_file(dwarf_file), _reader(dwarf_file->fd()), - _section_start_address(0), _entry_end(0) {} + _section_start_address(0), _size_bytes(0), _entry_end(0) {} bool find_compilation_unit_offset(uint32_t offset_in_library, uint32_t* compilation_unit_offset); - + CacheHint ensure_cached(); }; // (3a-c,e) The compilation unit is read from the .debug_info section. The structure of .debug_info is shown in the @@ -884,7 +948,8 @@ class DwarfFile : public ElfFile { }; public: - DwarfFile(const char* filepath) : ElfFile(filepath) {} + DwarfFile(const char* filepath) : ElfFile(filepath), _debug_aranges(this) { + } /* * Starting point of reading line number and filename information from the DWARF file. @@ -897,6 +962,9 @@ class DwarfFile : public ElfFile { * More details about the different phases can be found at the associated methods. */ bool get_filename_and_line_number(uint32_t offset_in_library, char* filename, size_t filename_len, int* line, bool is_pc_after_call); + + private: + DebugAranges _debug_aranges; }; #endif // !_WINDOWS && !__APPLE__ From f5d8bd0dd50bcd963b4062997aecb4e15249e30d Mon Sep 17 00:00:00 2001 From: Afshin Zafari Date: Wed, 5 Nov 2025 08:57:02 +0000 Subject: [PATCH 035/512] 8370874: [asan] ASAN build fails after JDK-8368365 Reviewed-by: haosun, dholmes, syan, stuefe --- src/hotspot/share/sanitizers/address.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/sanitizers/address.cpp b/src/hotspot/share/sanitizers/address.cpp index b050039b1b8..7d129feab0a 100644 --- a/src/hotspot/share/sanitizers/address.cpp +++ b/src/hotspot/share/sanitizers/address.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ #ifdef ADDRESS_SANITIZER #include "logging/log.hpp" +#include "runtime/globals_extension.hpp" #include "sanitizers/address.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/vmError.hpp" From 0737a5625269773dcf70b95f8b8ac90b3b6cc444 Mon Sep 17 00:00:00 2001 From: Robbin Ehn Date: Wed, 5 Nov 2025 09:21:57 +0000 Subject: [PATCH 036/512] 8370708: RISC-V: Add VerifyStackAtCalls Reviewed-by: fyang, fjiang --- src/hotspot/cpu/riscv/riscv.ad | 30 ++++++++++++++----- src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp | 2 +- src/hotspot/share/opto/chaitin.cpp | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index 83c59af9113..4be408f6ca5 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -1184,6 +1184,8 @@ bool is_CAS(int opcode, bool maybe_volatile) } } +constexpr uint64_t MAJIK_DWORD = 0xabbaabbaabbaabbaull; + // predicate controlling translation of CAS // // returns true if CAS needs to use an acquiring load otherwise false @@ -1363,10 +1365,15 @@ void MachPrologNode::format(PhaseRegAlloc *ra_, outputStream *st) const { st->print("# stack bang size=%d\n\t", framesize); } - st->print("sd fp, [sp, #%d]\n\t", - 2 * wordSize); - st->print("sd ra, [sp, #%d]\n\t", - wordSize); - if (PreserveFramePointer) { st->print("sub fp, sp, #%d\n\t", 2 * wordSize); } st->print("sub sp, sp, #%d\n\t", framesize); + st->print("sd fp, [sp, #%d]\n\t", framesize - 2 * wordSize); + st->print("sd ra, [sp, #%d]\n\t", framesize - wordSize); + if (PreserveFramePointer) { st->print("add fp, sp, #%d\n\t", framesize); } + + if (VerifyStackAtCalls) { + st->print("mv t2, %ld\n\t", MAJIK_DWORD); + st->print("sd t2, [sp, #%d]\n\t", framesize - 3 * wordSize); + } if (C->stub_function() == nullptr) { st->print("ld t0, [guard]\n\t"); @@ -1408,6 +1415,11 @@ void MachPrologNode::emit(C2_MacroAssembler *masm, PhaseRegAlloc *ra_) const { __ build_frame(framesize); + if (VerifyStackAtCalls) { + __ mv(t2, MAJIK_DWORD); + __ sd(t2, Address(sp, framesize - 3 * wordSize)); + } + if (C->stub_function() == nullptr) { BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); // Dummy labels for just measuring the code size @@ -1429,10 +1441,6 @@ void MachPrologNode::emit(C2_MacroAssembler *masm, PhaseRegAlloc *ra_) const { bs->nmethod_entry_barrier(masm, slow_path, continuation, guard); } - if (VerifyStackAtCalls) { - Unimplemented(); - } - C->output()->set_frame_complete(__ offset()); if (C->has_mach_constant_base_node()) { @@ -2431,7 +2439,13 @@ encode %{ enc_class riscv_enc_call_epilog() %{ if (VerifyStackAtCalls) { // Check that stack depth is unchanged: find majik cookie on stack - __ call_Unimplemented(); + int framesize = ra_->reg2offset_unchecked(OptoReg::add(ra_->_matcher._old_SP, -3 * VMRegImpl::slots_per_word)); + Label stack_ok; + __ ld(t1, Address(sp, framesize)); + __ mv(t2, MAJIK_DWORD); + __ beq(t2, t1, stack_ok); + __ stop("MAJIK_DWORD not found"); + __ bind(stack_ok); } %} diff --git a/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp b/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp index b303178a666..e64fc2ffc80 100644 --- a/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp +++ b/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp @@ -2368,7 +2368,7 @@ void SharedRuntime::generate_deopt_blob() { // EPILOG must remove this many slots. // RISCV needs two words for RA (return address) and FP (frame pointer). uint SharedRuntime::in_preserve_stack_slots() { - return 2 * VMRegImpl::slots_per_word; + return 2 * VMRegImpl::slots_per_word + (VerifyStackAtCalls ? 0 : 2) ; } uint SharedRuntime::out_preserve_stack_slots() { diff --git a/src/hotspot/share/opto/chaitin.cpp b/src/hotspot/share/opto/chaitin.cpp index 8c8c2b0ed4e..524dee6e06a 100644 --- a/src/hotspot/share/opto/chaitin.cpp +++ b/src/hotspot/share/opto/chaitin.cpp @@ -2408,7 +2408,7 @@ void PhaseChaitin::dump_frame() const { tty->print_cr("saved fp register"); else if (return_addr == OptoReg::add(reg, 2*VMRegImpl::slots_per_word) && VerifyStackAtCalls) - tty->print_cr("0xBADB100D +VerifyStackAtCalls"); + tty->print_cr(" +VerifyStackAtCalls"); else tty->print_cr("in_preserve"); } else if ((int)OptoReg::reg2stack(reg) < fixed_slots) { From 6a51b51ba13167a15a637507a7fa5d6f988a39e7 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Wed, 5 Nov 2025 10:12:47 +0000 Subject: [PATCH 037/512] 8371197: G1: Use void for return type of G1RegionsOnNodes::add Reviewed-by: tschatzl, iwalulya, fandreuzzi --- src/hotspot/share/gc/g1/g1EdenRegions.hpp | 4 ++-- src/hotspot/share/gc/g1/g1RegionsOnNodes.cpp | 5 +---- src/hotspot/share/gc/g1/g1RegionsOnNodes.hpp | 4 ++-- src/hotspot/share/gc/g1/g1SurvivorRegions.cpp | 4 ++-- src/hotspot/share/gc/g1/g1SurvivorRegions.hpp | 2 +- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1EdenRegions.hpp b/src/hotspot/share/gc/g1/g1EdenRegions.hpp index c7ed9008ee7..a08cda97d4c 100644 --- a/src/hotspot/share/gc/g1/g1EdenRegions.hpp +++ b/src/hotspot/share/gc/g1/g1EdenRegions.hpp @@ -41,10 +41,10 @@ private: public: G1EdenRegions() : _length(0), _used_bytes(0), _regions_on_node() { } - uint add(G1HeapRegion* hr) { + void add(G1HeapRegion* hr) { assert(hr->is_eden(), "must be"); _length++; - return _regions_on_node.add(hr); + _regions_on_node.add(hr); } void clear() { diff --git a/src/hotspot/share/gc/g1/g1RegionsOnNodes.cpp b/src/hotspot/share/gc/g1/g1RegionsOnNodes.cpp index 91f6ee49095..c1c0d471796 100644 --- a/src/hotspot/share/gc/g1/g1RegionsOnNodes.cpp +++ b/src/hotspot/share/gc/g1/g1RegionsOnNodes.cpp @@ -35,16 +35,13 @@ G1RegionsOnNodes::~G1RegionsOnNodes() { FREE_C_HEAP_ARRAY(uint, _count_per_node); } -uint G1RegionsOnNodes::add(G1HeapRegion* hr) { +void G1RegionsOnNodes::add(G1HeapRegion* hr) { uint node_index = hr->node_index(); // Update only if the node index is valid. if (node_index < _numa->num_active_nodes()) { *(_count_per_node + node_index) += 1; - return node_index; } - - return G1NUMA::UnknownNodeIndex; } void G1RegionsOnNodes::clear() { diff --git a/src/hotspot/share/gc/g1/g1RegionsOnNodes.hpp b/src/hotspot/share/gc/g1/g1RegionsOnNodes.hpp index d5318343399..5b8d6479833 100644 --- a/src/hotspot/share/gc/g1/g1RegionsOnNodes.hpp +++ b/src/hotspot/share/gc/g1/g1RegionsOnNodes.hpp @@ -40,8 +40,8 @@ public: ~G1RegionsOnNodes(); - // Increase _count_per_node for the node of given heap region and returns node index. - uint add(G1HeapRegion* hr); + // Increase _count_per_node for the node of given heap region. + void add(G1HeapRegion* hr); void clear(); diff --git a/src/hotspot/share/gc/g1/g1SurvivorRegions.cpp b/src/hotspot/share/gc/g1/g1SurvivorRegions.cpp index 4aa752e5823..84609df4fc9 100644 --- a/src/hotspot/share/gc/g1/g1SurvivorRegions.cpp +++ b/src/hotspot/share/gc/g1/g1SurvivorRegions.cpp @@ -32,10 +32,10 @@ G1SurvivorRegions::G1SurvivorRegions() : _used_bytes(0), _regions_on_node() {} -uint G1SurvivorRegions::add(G1HeapRegion* hr) { +void G1SurvivorRegions::add(G1HeapRegion* hr) { assert(hr->is_survivor(), "should be flagged as survivor region"); _regions.append(hr); - return _regions_on_node.add(hr); + _regions_on_node.add(hr); } uint G1SurvivorRegions::length() const { diff --git a/src/hotspot/share/gc/g1/g1SurvivorRegions.hpp b/src/hotspot/share/gc/g1/g1SurvivorRegions.hpp index 0532ee12162..65c20dfbf45 100644 --- a/src/hotspot/share/gc/g1/g1SurvivorRegions.hpp +++ b/src/hotspot/share/gc/g1/g1SurvivorRegions.hpp @@ -42,7 +42,7 @@ class G1SurvivorRegions { public: G1SurvivorRegions(); - uint add(G1HeapRegion* hr); + void add(G1HeapRegion* hr); void convert_to_eden(); From 3e3822ad7eadbb3d86a3b94a6bd858f8c8ef9364 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Wed, 5 Nov 2025 11:55:02 +0000 Subject: [PATCH 038/512] 8365047: Remove exception handler stub code in C2 Co-authored-by: Martin Doerr Reviewed-by: mdoerr, dlong, dfenacci, adinn, fyang, aph --- src/hotspot/cpu/aarch64/aarch64.ad | 39 ++--- .../cpu/aarch64/c1_LIRAssembler_aarch64.cpp | 12 +- .../cpu/aarch64/c1_LIRAssembler_aarch64.hpp | 2 +- .../cpu/aarch64/nativeInst_aarch64.cpp | 6 - .../cpu/aarch64/nativeInst_aarch64.hpp | 22 ++- src/hotspot/cpu/aarch64/runtime_aarch64.cpp | 2 - src/hotspot/cpu/arm/arm.ad | 47 ++---- src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp | 10 +- src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp | 2 +- src/hotspot/cpu/arm/runtime_arm.cpp | 2 - src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp | 7 +- src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp | 2 +- src/hotspot/cpu/ppc/ppc.ad | 35 ++-- src/hotspot/cpu/ppc/runtime_ppc.cpp | 1 - src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp | 19 +-- .../cpu/riscv/c1_LIRAssembler_riscv.cpp | 12 +- .../cpu/riscv/c1_LIRAssembler_riscv.hpp | 2 +- src/hotspot/cpu/riscv/riscv.ad | 37 +--- src/hotspot/cpu/riscv/runtime_riscv.cpp | 2 - src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp | 15 +- src/hotspot/cpu/s390/runtime_s390.cpp | 2 - src/hotspot/cpu/s390/s390.ad | 54 ++---- src/hotspot/cpu/s390/sharedRuntime_s390.cpp | 6 +- src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp | 14 +- src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp | 2 +- src/hotspot/cpu/x86/runtime_x86_64.cpp | 2 - src/hotspot/cpu/x86/x86.ad | 51 ++---- src/hotspot/os/posix/signals_posix.cpp | 2 +- src/hotspot/os/windows/os_windows.cpp | 2 +- src/hotspot/share/ci/ciEnv.cpp | 4 +- src/hotspot/share/code/nmethod.cpp | 23 ++- src/hotspot/share/code/nmethod.hpp | 4 +- src/hotspot/share/code/nmethod.inline.hpp | 2 +- src/hotspot/share/opto/output.cpp | 6 +- src/hotspot/share/runtime/deoptimization.cpp | 3 + src/hotspot/share/runtime/frame.cpp | 4 +- src/hotspot/share/runtime/sharedRuntime.cpp | 8 + src/hotspot/share/runtime/vmStructs.cpp | 2 +- .../classes/sun/jvm/hotspot/code/NMethod.java | 28 +-- .../sun/jvm/hotspot/runtime/Frame.java | 2 +- .../jtreg/runtime/vthread/Deoptimization.java | 159 ++++++++++++++++++ 41 files changed, 354 insertions(+), 302 deletions(-) create mode 100644 test/hotspot/jtreg/runtime/vthread/Deoptimization.java diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad index 5734519301e..1e506edb634 100644 --- a/src/hotspot/cpu/aarch64/aarch64.ad +++ b/src/hotspot/cpu/aarch64/aarch64.ad @@ -1,6 +1,7 @@ // // Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. // Copyright (c) 2014, 2024, Red Hat, Inc. All rights reserved. +// Copyright 2025 Arm Limited and/or its affiliates. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // // This code is free software; you can redistribute it and/or modify it @@ -1194,15 +1195,10 @@ class HandlerImpl { public: - static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); - static uint size_exception_handler() { - return MacroAssembler::far_codestub_branch_size(); - } - static uint size_deopt_handler() { - // count one adr and one far branch instruction + // count one branch instruction and one far call instruction sequence return NativeInstruction::instruction_size + MacroAssembler::far_codestub_branch_size(); } }; @@ -2261,25 +2257,6 @@ uint MachUEPNode::size(PhaseRegAlloc* ra_) const //============================================================================= -// Emit exception handler code. -int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) -{ - // mov rscratch1 #exception_blob_entry_point - // br rscratch1 - // Note that the code buffer's insts_mark is always relative to insts. - // That's why we must use the macroassembler to generate a handler. - address base = __ start_a_stub(size_exception_handler()); - if (base == nullptr) { - ciEnv::current()->record_failure("CodeCache is full"); - return 0; // CodeBuffer::expand failed - } - int offset = __ offset(); - __ far_jump(RuntimeAddress(OptoRuntime::exception_blob()->entry_point())); - assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); - __ end_a_stub(); - return offset; -} - // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -2290,14 +2267,18 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) ciEnv::current()->record_failure("CodeCache is full"); return 0; // CodeBuffer::expand failed } - int offset = __ offset(); - __ adr(lr, __ pc()); - __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + int offset = __ offset(); + Label start; + __ bind(start); + __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + + int entry_offset = __ offset(); + __ b(start); assert(__ offset() - offset == (int) size_deopt_handler(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } // REQUIRED MATCHER CODE diff --git a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp index 9ab463125fe..2498a646e31 100644 --- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp @@ -449,12 +449,18 @@ int LIR_Assembler::emit_deopt_handler() { int offset = code_offset(); - __ adr(lr, pc()); - __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + Label start; + __ bind(start); + + __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + + int entry_offset = __ offset(); + __ b(start); + guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } void LIR_Assembler::add_debug_info_for_branch(address adr, CodeEmitInfo* info) { diff --git a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp index 12b941fc4f7..729cd2827b7 100644 --- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp @@ -71,7 +71,7 @@ friend class ArrayCopyStub; // CompiledDirectCall::to_trampoline_stub_size() _call_stub_size = 13 * NativeInstruction::instruction_size, _exception_handler_size = DEBUG_ONLY(1*K) NOT_DEBUG(175), - _deopt_handler_size = 7 * NativeInstruction::instruction_size + _deopt_handler_size = 4 * NativeInstruction::instruction_size }; public: diff --git a/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp b/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp index 5a7fececafa..f2003dd9b55 100644 --- a/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp @@ -394,12 +394,6 @@ void NativePostCallNop::make_deopt() { NativeDeoptInstruction::insert(addr_at(0)); } -#ifdef ASSERT -static bool is_movk_to_zr(uint32_t insn) { - return ((insn & 0xffe0001f) == 0xf280001f); -} -#endif - bool NativePostCallNop::patch(int32_t oopmap_slot, int32_t cb_offset) { if (((oopmap_slot & 0xff) != oopmap_slot) || ((cb_offset & 0xffffff) != cb_offset)) { return false; // cannot encode diff --git a/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp b/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp index df5d97c2376..b7444347bf1 100644 --- a/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp @@ -526,14 +526,24 @@ inline NativeLdSt* NativeLdSt_at(address addr) { // can store an offset from the initial nop to the nmethod. class NativePostCallNop: public NativeInstruction { +private: + static bool is_movk_to_zr(uint32_t insn) { + return ((insn & 0xffe0001f) == 0xf280001f); + } + public: bool check() const { - uint64_t insns = *(uint64_t*)addr_at(0); - // Check for two instructions: nop; movk zr, xx - // These instructions only ever appear together in a post-call - // NOP, so it's unnecessary to check that the third instruction is - // a MOVK as well. - return (insns & 0xffe0001fffffffff) == 0xf280001fd503201f; + // Check the first instruction is NOP. + if (is_nop()) { + uint32_t insn = *(uint32_t*)addr_at(4); + // Check next instruction is MOVK zr, xx. + // These instructions only ever appear together in a post-call + // NOP, so it's unnecessary to check that the third instruction is + // a MOVK as well. + return is_movk_to_zr(insn); + } + + return false; } bool decode(int32_t& oopmap_slot, int32_t& cb_offset) const { diff --git a/src/hotspot/cpu/aarch64/runtime_aarch64.cpp b/src/hotspot/cpu/aarch64/runtime_aarch64.cpp index d45f9865bd2..e36aa21b567 100644 --- a/src/hotspot/cpu/aarch64/runtime_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/runtime_aarch64.cpp @@ -260,8 +260,6 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end -// Using exception blob, this code is jumped from a compiled method. -// (see emit_exception_handler in aarch64.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/arm/arm.ad b/src/hotspot/cpu/arm/arm.ad index 31a442be624..eb9b0ed8fba 100644 --- a/src/hotspot/cpu/arm/arm.ad +++ b/src/hotspot/cpu/arm/arm.ad @@ -105,14 +105,8 @@ class HandlerImpl { public: - static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); - static uint size_exception_handler() { - return ( 3 * 4 ); - } - - static uint size_deopt_handler() { return ( 9 * 4 ); } @@ -876,26 +870,6 @@ uint MachUEPNode::size(PhaseRegAlloc *ra_) const { //============================================================================= -// Emit exception handler code. -int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) { - address base = __ start_a_stub(size_exception_handler()); - if (base == nullptr) { - ciEnv::current()->record_failure("CodeCache is full"); - return 0; // CodeBuffer::expand failed - } - - int offset = __ offset(); - - // OK to trash LR, because exception blob will kill it - __ jump(OptoRuntime::exception_blob()->entry_point(), relocInfo::runtime_call_type, LR_tmp); - - assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); - - __ end_a_stub(); - - return offset; -} - int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { // Can't use any of the current frame's registers as we may have deopted // at a poll and everything can be live. @@ -906,19 +880,26 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { } int offset = __ offset(); - address deopt_pc = __ pc(); - __ sub(SP, SP, wordSize); // make room for saved PC - __ push(LR); // save LR that may be live when we get here - __ mov_relative_address(LR, deopt_pc); - __ str(LR, Address(SP, wordSize)); // save deopt PC - __ pop(LR); // restore LR + Label start; + __ bind(start); + __ jump(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type, noreg); + int entry_offset = __ offset(); + address deopt_pc = __ pc(); + // Preserve R0 and reserve space for the address of the entry point + __ push(RegisterSet(R0) | RegisterSet(R1)); + // Store the entry point address + __ mov_relative_address(R0, deopt_pc); + __ str(R0, Address(SP, wordSize)); + __ pop(R0); // restore R0 + __ b(start); + assert(__ offset() - offset <= (int) size_deopt_handler(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } bool Matcher::match_rule_supported(int opcode) { diff --git a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp index 219c49d1f14..1d7c1579502 100644 --- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp @@ -272,14 +272,20 @@ int LIR_Assembler::emit_deopt_handler() { int offset = code_offset(); + Label start; + __ bind(start); + + __ jump(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type, noreg); + + int entry_offset = __ offset(); __ mov_relative_address(LR, __ pc()); __ push(LR); // stub expects LR to be saved - __ jump(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type, noreg); + __ b(start); assert(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } diff --git a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp index 77d13532685..615d2f188ff 100644 --- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp +++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp @@ -54,7 +54,7 @@ enum { _call_stub_size = 16, _exception_handler_size = PRODUCT_ONLY(68) NOT_PRODUCT(68+60), - _deopt_handler_size = 16 + _deopt_handler_size = 20 }; public: diff --git a/src/hotspot/cpu/arm/runtime_arm.cpp b/src/hotspot/cpu/arm/runtime_arm.cpp index 8d48de5795a..29fd0aa0a10 100644 --- a/src/hotspot/cpu/arm/runtime_arm.cpp +++ b/src/hotspot/cpu/arm/runtime_arm.cpp @@ -182,8 +182,6 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------ generate_exception_blob --------------------------- // creates exception blob at the end -// Using exception blob, this code is jumped from a compiled method. -// (see emit_exception_handler in sparc.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp index 108da2039f6..7898500cff2 100644 --- a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp @@ -264,12 +264,17 @@ int LIR_Assembler::emit_deopt_handler() { } int offset = code_offset(); + Label start; + + __ bind(start); __ bl64_patchable(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type); + int entry_offset = __ offset(); + __ b(start); guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } diff --git a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp index e4de2eb5c46..6a2f6264850 100644 --- a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp @@ -63,7 +63,7 @@ enum { _static_call_stub_size = 4 * BytesPerInstWord + MacroAssembler::b64_patchable_size, // or smaller _call_stub_size = _static_call_stub_size + MacroAssembler::trampoline_stub_size, // or smaller _exception_handler_size = MacroAssembler::b64_patchable_size, // or smaller - _deopt_handler_size = MacroAssembler::bl64_patchable_size + _deopt_handler_size = MacroAssembler::bl64_patchable_size + BytesPerInstWord }; // '_static_call_stub_size' is only used on ppc (see LIR_Assembler::emit_static_call_stub() diff --git a/src/hotspot/cpu/ppc/ppc.ad b/src/hotspot/cpu/ppc/ppc.ad index 75566b2dd80..5488dbdb8c0 100644 --- a/src/hotspot/cpu/ppc/ppc.ad +++ b/src/hotspot/cpu/ppc/ppc.ad @@ -2088,17 +2088,11 @@ class HandlerImpl { public: - static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); - static uint size_exception_handler() { - // The exception_handler is a b64_patchable. - return MacroAssembler::b64_patchable_size; - } - static uint size_deopt_handler() { // The deopt_handler is a bl64_patchable. - return MacroAssembler::bl64_patchable_size; + return MacroAssembler::bl64_patchable_size + BytesPerInstWord; } }; @@ -2114,22 +2108,6 @@ public: source %{ -int HandlerImpl::emit_exception_handler(C2_MacroAssembler *masm) { - address base = __ start_a_stub(size_exception_handler()); - if (base == nullptr) { - ciEnv::current()->record_failure("CodeCache is full"); - return 0; // CodeBuffer::expand failed - } - - int offset = __ offset(); - __ b64_patchable((address)OptoRuntime::exception_blob()->content_begin(), - relocInfo::runtime_call_type); - assert(__ offset() - offset == (int)size_exception_handler(), "must be fixed size"); - __ end_a_stub(); - - return offset; -} - // The deopt_handler is like the exception handler, but it calls to // the deoptimization blob instead of jumping to the exception blob. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -2140,12 +2118,21 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { } int offset = __ offset(); + + Label start; + __ bind(start); + __ bl64_patchable((address)SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type); + + int entry_offset = __ offset(); + + __ b(start); + assert(__ offset() - offset == (int) size_deopt_handler(), "must be fixed size"); __ end_a_stub(); - return offset; + return entry_offset; } //============================================================================= diff --git a/src/hotspot/cpu/ppc/runtime_ppc.cpp b/src/hotspot/cpu/ppc/runtime_ppc.cpp index 2654075f702..ab658e9de58 100644 --- a/src/hotspot/cpu/ppc/runtime_ppc.cpp +++ b/src/hotspot/cpu/ppc/runtime_ppc.cpp @@ -46,7 +46,6 @@ //------------------------------generate_exception_blob--------------------------- // Creates exception blob at the end. -// Using exception blob, this code is jumped from a compiled method. // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp b/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp index 9fe7e1f22ff..4be3a0aee8b 100644 --- a/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp +++ b/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp @@ -83,7 +83,6 @@ class RegisterSaver { static OopMap* push_frame_reg_args_and_save_live_registers(MacroAssembler* masm, int* out_frame_size_in_bytes, bool generate_oop_map, - int return_pc_adjustment, ReturnPCLocation return_pc_location, bool save_vectors = false); static void restore_live_registers_and_pop_frame(MacroAssembler* masm, @@ -262,7 +261,6 @@ static const RegisterSaver::LiveRegType RegisterSaver_LiveVecRegs[] = { OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssembler* masm, int* out_frame_size_in_bytes, bool generate_oop_map, - int return_pc_adjustment, ReturnPCLocation return_pc_location, bool save_vectors) { // Push an abi_reg_args-frame and store all registers which may be live. @@ -271,7 +269,6 @@ OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssemble // propagated to the RegisterMap of the caller frame during // StackFrameStream construction (needed for deoptimization; see // compiledVFrame::create_stack_value). - // If return_pc_adjustment != 0 adjust the return pc by return_pc_adjustment. // Updated return pc is returned in R31 (if not return_pc_is_pre_saved). // calculate frame size @@ -305,14 +302,11 @@ OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssemble // Do the save_LR by hand and adjust the return pc if requested. switch (return_pc_location) { case return_pc_is_lr: __ mflr(R31); break; - case return_pc_is_pre_saved: assert(return_pc_adjustment == 0, "unsupported"); break; + case return_pc_is_pre_saved: break; case return_pc_is_thread_saved_exception_pc: __ ld(R31, thread_(saved_exception_pc)); break; default: ShouldNotReachHere(); } if (return_pc_location != return_pc_is_pre_saved) { - if (return_pc_adjustment != 0) { - __ addi(R31, R31, return_pc_adjustment); - } __ std(R31, frame_size_in_bytes + _abi0(lr), R1_SP); } @@ -2907,22 +2901,15 @@ void SharedRuntime::generate_deopt_blob() { // deopt_handler: call_deopt_stub // cur. return pc --> ... // - // So currently SR_LR points behind the call in the deopt handler. - // We adjust it such that it points to the start of the deopt handler. // The return_pc has been stored in the frame of the deoptee and // will replace the address of the deopt_handler in the call // to Deoptimization::fetch_unroll_info below. - // We can't grab a free register here, because all registers may - // contain live values, so let the RegisterSaver do the adjustment - // of the return pc. - const int return_pc_adjustment_no_exception = -MacroAssembler::bl64_patchable_size; // Push the "unpack frame" // Save everything in sight. map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &first_frame_size_in_bytes, /*generate_oop_map=*/ true, - return_pc_adjustment_no_exception, RegisterSaver::return_pc_is_lr); assert(map != nullptr, "OopMap must have been created"); @@ -2957,7 +2944,6 @@ void SharedRuntime::generate_deopt_blob() { RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &first_frame_size_in_bytes, /*generate_oop_map=*/ false, - /*return_pc_adjustment_exception=*/ 0, RegisterSaver::return_pc_is_pre_saved); // Deopt during an exception. Save exec mode for unpack_frames. @@ -2975,7 +2961,6 @@ void SharedRuntime::generate_deopt_blob() { RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &first_frame_size_in_bytes, /*generate_oop_map=*/ false, - /*return_pc_adjustment_reexecute=*/ 0, RegisterSaver::return_pc_is_pre_saved); __ li(exec_mode_reg, Deoptimization::Unpack_reexecute); #endif @@ -3266,7 +3251,6 @@ SafepointBlob* SharedRuntime::generate_handler_blob(StubId id, address call_ptr) map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &frame_size_in_bytes, /*generate_oop_map=*/ true, - /*return_pc_adjustment=*/0, return_pc_location, save_vectors); // The following is basically a call_VM. However, we need the precise @@ -3367,7 +3351,6 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(StubId id, address destination map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &frame_size_in_bytes, /*generate_oop_map*/ true, - /*return_pc_adjustment*/ 0, RegisterSaver::return_pc_is_lr); // Use noreg as last_Java_pc, the return pc will be reconstructed diff --git a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp index 9d8ae770ccf..b085dd7ac00 100644 --- a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp @@ -377,12 +377,18 @@ int LIR_Assembler::emit_deopt_handler() { int offset = code_offset(); - __ auipc(ra, 0); - __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + Label start; + __ bind(start); + + __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + + int entry_offset = __ offset(); + __ j(start); + guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } void LIR_Assembler::return_op(LIR_Opr result, C1SafepointPollStub* code_stub) { diff --git a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp index e4efb2c171d..ed2ab0c4861 100644 --- a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp @@ -72,7 +72,7 @@ private: // See emit_exception_handler for detail _exception_handler_size = DEBUG_ONLY(256) NOT_DEBUG(32), // or smaller // See emit_deopt_handler for detail - // auipc (1) + far_jump (2) + // far_call (2) + j (1) _deopt_handler_size = 1 * MacroAssembler::instruction_size + 2 * MacroAssembler::instruction_size }; diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index 4be408f6ca5..34177701900 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -1049,15 +1049,10 @@ class HandlerImpl { public: - static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); - static uint size_exception_handler() { - return MacroAssembler::far_branch_size(); - } - static uint size_deopt_handler() { - // count auipc + far branch + // count far call + j return NativeInstruction::instruction_size + MacroAssembler::far_branch_size(); } }; @@ -1838,25 +1833,6 @@ uint MachUEPNode::size(PhaseRegAlloc* ra_) const //============================================================================= -// Emit exception handler code. -int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) -{ - // auipc t1, #exception_blob_entry_point - // jr (offset)t1 - // Note that the code buffer's insts_mark is always relative to insts. - // That's why we must use the macroassembler to generate a handler. - address base = __ start_a_stub(size_exception_handler()); - if (base == nullptr) { - ciEnv::current()->record_failure("CodeCache is full"); - return 0; // CodeBuffer::expand failed - } - int offset = __ offset(); - __ far_jump(RuntimeAddress(OptoRuntime::exception_blob()->entry_point())); - assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); - __ end_a_stub(); - return offset; -} - // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -1867,12 +1843,17 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) } int offset = __ offset(); - __ auipc(ra, 0); - __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + Label start; + __ bind(start); + + __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + + int entry_offset = __ offset(); + __ j(start); assert(__ offset() - offset <= (int) size_deopt_handler(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } // REQUIRED MATCHER CODE diff --git a/src/hotspot/cpu/riscv/runtime_riscv.cpp b/src/hotspot/cpu/riscv/runtime_riscv.cpp index e1add8dbb82..c52d5a31066 100644 --- a/src/hotspot/cpu/riscv/runtime_riscv.cpp +++ b/src/hotspot/cpu/riscv/runtime_riscv.cpp @@ -249,8 +249,6 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end -// Using exception blob, this code is jumped from a compiled method. -// (see emit_exception_handler in riscv.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp b/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp index 298234156c3..ee6df63d21b 100644 --- a/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp @@ -272,14 +272,25 @@ int LIR_Assembler::emit_deopt_handler() { // Not enough space left for the handler. bailout("deopt handler overflow"); return -1; - } int offset = code_offset(); + } + + int offset = code_offset(); + + Label start; + __ bind(start); + // Size must be constant (see HandlerImpl::emit_deopt_handler). __ load_const(Z_R1_scratch, SharedRuntime::deopt_blob()->unpack()); __ call(Z_R1_scratch); + + int entry_offset = __ offset(); + + __ z_bru(start); + guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } void LIR_Assembler::jobject2reg(jobject o, Register reg) { diff --git a/src/hotspot/cpu/s390/runtime_s390.cpp b/src/hotspot/cpu/s390/runtime_s390.cpp index 314c407af91..658fba069b4 100644 --- a/src/hotspot/cpu/s390/runtime_s390.cpp +++ b/src/hotspot/cpu/s390/runtime_s390.cpp @@ -43,8 +43,6 @@ //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end -// Using exception blob, this code is jumped from a compiled method. -// (see emit_exception_handler in s390.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/s390/s390.ad b/src/hotspot/cpu/s390/s390.ad index ab991896b53..0c4939d8432 100644 --- a/src/hotspot/cpu/s390/s390.ad +++ b/src/hotspot/cpu/s390/s390.ad @@ -1649,15 +1649,10 @@ source_hpp %{ // Header information of the source block. class HandlerImpl { public: - static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); - static uint size_exception_handler() { - return NativeJump::max_instruction_size(); - } - static uint size_deopt_handler() { - return NativeCall::max_instruction_size(); + return NativeCall::max_instruction_size() + MacroAssembler::jump_pcrelative_size(); } }; @@ -1672,43 +1667,6 @@ public: source %{ -// This exception handler code snippet is placed after the method's -// code. It is the return point if an exception occurred. it jumps to -// the exception blob. -// -// If the method gets deoptimized, the method and this code snippet -// get patched. -// -// 1) Trampoline code gets patched into the end of this exception -// handler. the trampoline code jumps to the deoptimization blob. -// -// 2) The return address in the method's code will get patched such -// that it jumps to the trampoline. -// -// 3) The handler will get patched such that it does not jump to the -// exception blob, but to an entry in the deoptimization blob being -// aware of the exception. -int HandlerImpl::emit_exception_handler(C2_MacroAssembler *masm) { - Register temp_reg = Z_R1; - - address base = __ start_a_stub(size_exception_handler()); - if (base == nullptr) { - ciEnv::current()->record_failure("CodeCache is full"); - return 0; // CodeBuffer::expand failed - } - - int offset = __ offset(); - // Use unconditional pc-relative jump with 32-bit range here. - __ load_const_optimized(temp_reg, (address)OptoRuntime::exception_blob()->content_begin()); - __ z_br(temp_reg); - - assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); - - __ end_a_stub(); - - return offset; -} - // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { address base = __ start_a_stub(size_deopt_handler()); @@ -1720,14 +1678,22 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { int offset = __ offset(); + Label start; + __ bind(start); + // Size_deopt_handler() must be exact on zarch, so for simplicity // we do not use load_const_opt here. __ load_const(Z_R1, SharedRuntime::deopt_blob()->unpack()); __ call(Z_R1); + + int entry_offset = __ offset(); + + __ z_bru(start); + assert(__ offset() - offset == (int) size_deopt_handler(), "must be fixed size"); __ end_a_stub(); - return offset; + return entry_offset; } //============================================================================= diff --git a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp index db1ee8351ac..3a6e1bff8f4 100644 --- a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp +++ b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp @@ -2544,14 +2544,10 @@ void SharedRuntime::generate_deopt_blob() { // Normal entry (non-exception case) // // We have been called from the deopt handler of the deoptee. - // Z_R14 points behind the call in the deopt handler. We adjust - // it such that it points to the start of the deopt handler. + // Z_R14 points to the entry point of the deopt handler. // The return_pc has been stored in the frame of the deoptee and // will replace the address of the deopt_handler in the call // to Deoptimization::fetch_unroll_info below. - // The (int) cast is necessary, because -((unsigned int)14) - // is an unsigned int. - __ add2reg(Z_R14, -(int)NativeCall::max_instruction_size()); const Register exec_mode_reg = Z_tmp_1; diff --git a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp index edeb0baea0e..6600d841050 100644 --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp @@ -450,14 +450,20 @@ int LIR_Assembler::emit_deopt_handler() { } int offset = code_offset(); - InternalAddress here(__ pc()); - __ pushptr(here.addr(), rscratch1); - __ jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + Label start; + __ bind(start); + + __ call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + + int entry_offset = __ offset(); + + __ jmp(start); + guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return offset; + return entry_offset; } void LIR_Assembler::return_op(LIR_Opr result, C1SafepointPollStub* code_stub) { diff --git a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp index 8524dc90276..7a8fbc75ba7 100644 --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp @@ -48,7 +48,7 @@ enum { _call_stub_size = 28, _exception_handler_size = DEBUG_ONLY(1*K) NOT_DEBUG(175), - _deopt_handler_size = 17 + _deopt_handler_size = 10 }; public: diff --git a/src/hotspot/cpu/x86/runtime_x86_64.cpp b/src/hotspot/cpu/x86/runtime_x86_64.cpp index 7b98cf4fad7..5bf65299a0c 100644 --- a/src/hotspot/cpu/x86/runtime_x86_64.cpp +++ b/src/hotspot/cpu/x86/runtime_x86_64.cpp @@ -242,8 +242,6 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end -// Using exception blob, this code is jumped from a compiled method. -// (see emit_exception_handler in x86_64.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 064c52e658b..ca94b03a841 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -2767,21 +2767,11 @@ class HandlerImpl { public: - static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); - static uint size_exception_handler() { - // NativeCall instruction size is the same as NativeJump. - // exception handler starts out as jump and can be patched to - // a call be deoptimization. (4932387) - // Note that this value is also credited (in output.cpp) to - // the size of the code section. - return NativeJump::instruction_size; - } - static uint size_deopt_handler() { - // three 5 byte instructions plus one move for unreachable address. - return 15+3; + // one call and one jmp. + return 10; } }; @@ -2873,24 +2863,6 @@ int MachNode::compute_padding(int current_offset) const { } } -// Emit exception handler code. -// Stuff framesize into a register and call a VM stub routine. -int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) { - - // Note that the code buffer's insts_mark is always relative to insts. - // That's why we must use the macroassembler to generate a handler. - address base = __ start_a_stub(size_exception_handler()); - if (base == nullptr) { - ciEnv::current()->record_failure("CodeCache is full"); - return 0; // CodeBuffer::expand failed - } - int offset = __ offset(); - __ jump(RuntimeAddress(OptoRuntime::exception_blob()->entry_point())); - assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); - __ end_a_stub(); - return offset; -} - // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -2903,21 +2875,18 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { } int offset = __ offset(); - address the_pc = (address) __ pc(); - Label next; - // push a "the_pc" on the stack without destroying any registers - // as they all may be live. + Label start; + __ bind(start); - // push address of "next" - __ call(next, relocInfo::none); // reloc none is fine since it is a disp32 - __ bind(next); - // adjust it so it matches "the_pc" - __ subptr(Address(rsp, 0), __ offset() - offset); + __ call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); + + int entry_offset = __ offset(); + + __ jmp(start); - __ jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); assert(__ offset() - offset <= (int) size_deopt_handler(), "overflow %d", (__ offset() - offset)); __ end_a_stub(); - return offset; + return entry_offset; } static Assembler::Width widthForType(BasicType bt) { diff --git a/src/hotspot/os/posix/signals_posix.cpp b/src/hotspot/os/posix/signals_posix.cpp index 5833e324070..625eb63445a 100644 --- a/src/hotspot/os/posix/signals_posix.cpp +++ b/src/hotspot/os/posix/signals_posix.cpp @@ -621,7 +621,7 @@ int JVM_HANDLE_XXX_SIGNAL(int sig, siginfo_t* info, if (cb != nullptr && cb->is_nmethod()) { nmethod* nm = cb->as_nmethod(); assert(nm->insts_contains_inclusive(pc), ""); - address deopt = nm->deopt_handler_begin(); + address deopt = nm->deopt_handler_entry(); assert(deopt != nullptr, ""); frame fr = os::fetch_frame_from_context(uc); diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index ce2baeaf46c..4b84e2fdfdb 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -2795,7 +2795,7 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { if (cb != nullptr && cb->is_nmethod()) { nmethod* nm = cb->as_nmethod(); frame fr = os::fetch_frame_from_context((void*)exceptionInfo->ContextRecord); - address deopt = nm->deopt_handler_begin(); + address deopt = nm->deopt_handler_entry(); assert(nm->insts_contains_inclusive(pc), ""); nm->set_original_pc(&fr, pc); // Set pc to handler diff --git a/src/hotspot/share/ci/ciEnv.cpp b/src/hotspot/share/ci/ciEnv.cpp index 79ab881e7f6..92bacc4c2c3 100644 --- a/src/hotspot/share/ci/ciEnv.cpp +++ b/src/hotspot/share/ci/ciEnv.cpp @@ -1057,7 +1057,9 @@ void ciEnv::register_method(ciMethod* target, } assert(offsets->value(CodeOffsets::Deopt) != -1, "must have deopt entry"); - assert(offsets->value(CodeOffsets::Exceptions) != -1, "must have exception entry"); + + assert(compiler->type() == compiler_c2 || + offsets->value(CodeOffsets::Exceptions) != -1, "must have exception entry"); nm = nmethod::new_nmethod(method, compile_id(), diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index d91af9b4991..c2f8b46f00e 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -1302,7 +1302,7 @@ nmethod::nmethod( } // Native wrappers do not have deopt handlers. Make the values // something that will never match a pc like the nmethod vtable entry - _deopt_handler_offset = 0; + _deopt_handler_entry_offset = 0; _unwind_handler_offset = 0; CHECKED_CAST(_oops_size, uint16_t, align_up(code_buffer->total_oop_size(), oopSize)); @@ -1442,7 +1442,7 @@ nmethod::nmethod(const nmethod &nm) : CodeBlob(nm._name, nm._kind, nm._size, nm. _skipped_instructions_size = nm._skipped_instructions_size; _stub_offset = nm._stub_offset; _exception_offset = nm._exception_offset; - _deopt_handler_offset = nm._deopt_handler_offset; + _deopt_handler_entry_offset = nm._deopt_handler_entry_offset; _unwind_handler_offset = nm._unwind_handler_offset; _num_stack_arg_slots = nm._num_stack_arg_slots; _oops_size = nm._oops_size; @@ -1704,19 +1704,26 @@ nmethod::nmethod( _exception_offset = -1; } if (offsets->value(CodeOffsets::Deopt) != -1) { - _deopt_handler_offset = code_offset() + offsets->value(CodeOffsets::Deopt); + _deopt_handler_entry_offset = code_offset() + offsets->value(CodeOffsets::Deopt); } else { - _deopt_handler_offset = -1; + _deopt_handler_entry_offset = -1; } } else #endif { // Exception handler and deopt handler are in the stub section - assert(offsets->value(CodeOffsets::Exceptions) != -1, "must be set"); assert(offsets->value(CodeOffsets::Deopt ) != -1, "must be set"); - _exception_offset = _stub_offset + offsets->value(CodeOffsets::Exceptions); - _deopt_handler_offset = _stub_offset + offsets->value(CodeOffsets::Deopt); + bool has_exception_handler = (offsets->value(CodeOffsets::Exceptions) != -1); + assert(has_exception_handler == (compiler->type() != compiler_c2), + "C2 compiler doesn't provide exception handler stub code."); + if (has_exception_handler) { + _exception_offset = _stub_offset + offsets->value(CodeOffsets::Exceptions); + } else { + _exception_offset = -1; + } + + _deopt_handler_entry_offset = _stub_offset + offsets->value(CodeOffsets::Deopt); } if (offsets->value(CodeOffsets::UnwindHandler) != -1) { // C1 generates UnwindHandler at the end of instructions section. @@ -4024,7 +4031,7 @@ const char* nmethod::nmethod_section_label(address pos) const { // Check stub_code before checking exception_handler or deopt_handler. if (pos == this->stub_begin()) label = "[Stub Code]"; if (JVMCI_ONLY(_exception_offset >= 0 &&) pos == exception_begin()) label = "[Exception Handler]"; - if (JVMCI_ONLY(_deopt_handler_offset != -1 &&) pos == deopt_handler_begin()) label = "[Deopt Handler Code]"; + if (JVMCI_ONLY(_deopt_handler_entry_offset != -1 &&) pos == deopt_handler_entry()) label = "[Deopt Handler Entry Point]"; return label; } diff --git a/src/hotspot/share/code/nmethod.hpp b/src/hotspot/share/code/nmethod.hpp index 34accf428b6..0fa9d7fda9e 100644 --- a/src/hotspot/share/code/nmethod.hpp +++ b/src/hotspot/share/code/nmethod.hpp @@ -229,7 +229,7 @@ class nmethod : public CodeBlob { int _exception_offset; // All deoptee's will resume execution at this location described by // this offset. - int _deopt_handler_offset; + int _deopt_handler_entry_offset; // Offset (from insts_end) of the unwind handler if it exists int16_t _unwind_handler_offset; // Number of arguments passed on the stack @@ -617,7 +617,7 @@ public: address stub_begin () const { return header_begin() + _stub_offset ; } address stub_end () const { return code_end() ; } address exception_begin () const { return header_begin() + _exception_offset ; } - address deopt_handler_begin () const { return header_begin() + _deopt_handler_offset ; } + address deopt_handler_entry () const { return header_begin() + _deopt_handler_entry_offset ; } address unwind_handler_begin () const { return _unwind_handler_offset != -1 ? (insts_end() - _unwind_handler_offset) : nullptr; } oop* oops_begin () const { return (oop*) data_begin(); } oop* oops_end () const { return (oop*) data_end(); } diff --git a/src/hotspot/share/code/nmethod.inline.hpp b/src/hotspot/share/code/nmethod.inline.hpp index 44331db669c..ecee3c0c31a 100644 --- a/src/hotspot/share/code/nmethod.inline.hpp +++ b/src/hotspot/share/code/nmethod.inline.hpp @@ -34,7 +34,7 @@ inline bool nmethod::is_deopt_pc(address pc) { return is_deopt_entry(pc); } inline bool nmethod::is_deopt_entry(address pc) { - return pc == deopt_handler_begin(); + return pc == deopt_handler_entry(); } // class ExceptionCache methods diff --git a/src/hotspot/share/opto/output.cpp b/src/hotspot/share/opto/output.cpp index 84c01c68e38..136fc8ac864 100644 --- a/src/hotspot/share/opto/output.cpp +++ b/src/hotspot/share/opto/output.cpp @@ -1347,20 +1347,18 @@ CodeBuffer* PhaseOutput::init_buffer() { // nmethod and CodeBuffer count stubs & constants as part of method's code. // class HandlerImpl is platform-specific and defined in the *.ad files. - int exception_handler_req = HandlerImpl::size_exception_handler() + MAX_stubs_size; // add marginal slop for handler int deopt_handler_req = HandlerImpl::size_deopt_handler() + MAX_stubs_size; // add marginal slop for handler stub_req += MAX_stubs_size; // ensure per-stub margin code_req += MAX_inst_size; // ensure per-instruction margin if (StressCodeBuffers) - code_req = const_req = stub_req = exception_handler_req = deopt_handler_req = 0x10; // force expansion + code_req = const_req = stub_req = deopt_handler_req = 0x10; // force expansion int total_req = const_req + code_req + pad_req + stub_req + - exception_handler_req + deopt_handler_req; // deopt handler CodeBuffer* cb = code_buffer(); @@ -1789,8 +1787,6 @@ void PhaseOutput::fill_buffer(C2_MacroAssembler* masm, uint* blk_starts) { // Only java methods have exception handlers and deopt handlers // class HandlerImpl is platform-specific and defined in the *.ad files. if (C->method()) { - // Emit the exception handler code. - _code_offsets.set_value(CodeOffsets::Exceptions, HandlerImpl::emit_exception_handler(masm)); if (C->failing()) { return; // CodeBuffer::expand failed } diff --git a/src/hotspot/share/runtime/deoptimization.cpp b/src/hotspot/share/runtime/deoptimization.cpp index 144de698d85..35ccc92f90b 100644 --- a/src/hotspot/share/runtime/deoptimization.cpp +++ b/src/hotspot/share/runtime/deoptimization.cpp @@ -499,6 +499,9 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread RegisterMap::WalkContinuation::skip); // Now get the deoptee with a valid map frame deoptee = stub_frame.sender(&map); + if (exec_mode == Unpack_deopt) { + assert(deoptee.is_deoptimized_frame(), "frame is not marked for deoptimization"); + } // Set the deoptee nmethod assert(current->deopt_compiled_method() == nullptr, "Pending deopt!"); nmethod* nm = deoptee.cb()->as_nmethod_or_null(); diff --git a/src/hotspot/share/runtime/frame.cpp b/src/hotspot/share/runtime/frame.cpp index b5cd4acc75d..8f969600ba8 100644 --- a/src/hotspot/share/runtime/frame.cpp +++ b/src/hotspot/share/runtime/frame.cpp @@ -206,7 +206,7 @@ address frame::raw_pc() const { if (is_deoptimized_frame()) { nmethod* nm = cb()->as_nmethod_or_null(); assert(nm != nullptr, "only nmethod is expected here"); - return nm->deopt_handler_begin() - pc_return_offset; + return nm->deopt_handler_entry() - pc_return_offset; } else { return (pc() - pc_return_offset); } @@ -355,7 +355,7 @@ void frame::deoptimize(JavaThread* thread) { // If the call site is a MethodHandle call site use the MH deopt handler. nmethod* nm = _cb->as_nmethod(); - address deopt = nm->deopt_handler_begin(); + address deopt = nm->deopt_handler_entry(); NativePostCallNop* inst = nativePostCallNop_at(pc()); diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp index 35bc3f5f1be..a980838ed76 100644 --- a/src/hotspot/share/runtime/sharedRuntime.cpp +++ b/src/hotspot/share/runtime/sharedRuntime.cpp @@ -87,6 +87,9 @@ #ifdef COMPILER1 #include "c1/c1_Runtime1.hpp" #endif +#ifdef COMPILER2 +#include "opto/runtime.hpp" +#endif #if INCLUDE_JFR #include "jfr/jfr.inline.hpp" #endif @@ -601,6 +604,11 @@ address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* curr // The deferred StackWatermarkSet::after_unwind check will be performed in // * OptoRuntime::handle_exception_C_helper for C2 code // * exception_handler_for_pc_helper via Runtime1::handle_exception_from_callee_id for C1 code +#ifdef COMPILER2 + if (nm->compiler_type() == compiler_c2) { + return OptoRuntime::exception_blob()->entry_point(); + } +#endif // COMPILER2 return nm->exception_begin(); } } diff --git a/src/hotspot/share/runtime/vmStructs.cpp b/src/hotspot/share/runtime/vmStructs.cpp index a7342448522..2ce6a6cac76 100644 --- a/src/hotspot/share/runtime/vmStructs.cpp +++ b/src/hotspot/share/runtime/vmStructs.cpp @@ -535,7 +535,7 @@ nonstatic_field(nmethod, _osr_link, nmethod*) \ nonstatic_field(nmethod, _state, volatile signed char) \ nonstatic_field(nmethod, _exception_offset, int) \ - nonstatic_field(nmethod, _deopt_handler_offset, int) \ + nonstatic_field(nmethod, _deopt_handler_entry_offset, int) \ nonstatic_field(nmethod, _orig_pc_offset, int) \ nonstatic_field(nmethod, _stub_offset, int) \ nonstatic_field(nmethod, _immutable_data_ref_count_offset, int) \ diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java index 91302dba0f6..f935c56b536 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java @@ -48,7 +48,7 @@ public class NMethod extends CodeBlob { /** Offsets for different nmethod parts */ private static CIntegerField exceptionOffsetField; - private static CIntegerField deoptHandlerOffsetField; + private static CIntegerField deoptHandlerEntryOffsetField; private static CIntegerField origPCOffsetField; private static CIntegerField stubOffsetField; private static CIntField handlerTableOffsetField; @@ -86,7 +86,7 @@ public class NMethod extends CodeBlob { immutableDataField = type.getAddressField("_immutable_data"); immutableDataSizeField = type.getCIntegerField("_immutable_data_size"); exceptionOffsetField = type.getCIntegerField("_exception_offset"); - deoptHandlerOffsetField = type.getCIntegerField("_deopt_handler_offset"); + deoptHandlerEntryOffsetField = type.getCIntegerField("_deopt_handler_entry_offset"); origPCOffsetField = type.getCIntegerField("_orig_pc_offset"); stubOffsetField = type.getCIntegerField("_stub_offset"); scopesPCsOffsetField = type.getCIntegerField("_scopes_pcs_offset"); @@ -121,16 +121,16 @@ public class NMethod extends CodeBlob { public boolean isOSRMethod() { return getEntryBCI() != VM.getVM().getInvocationEntryBCI(); } /** Boundaries for different parts */ - public Address constantsBegin() { return contentBegin(); } - public Address constantsEnd() { return codeBegin(); } - public Address instsBegin() { return codeBegin(); } - public Address instsEnd() { return headerBegin().addOffsetTo(getStubOffset()); } - public Address exceptionBegin() { return headerBegin().addOffsetTo(getExceptionOffset()); } - public Address deoptHandlerBegin() { return headerBegin().addOffsetTo(getDeoptHandlerOffset()); } - public Address stubBegin() { return headerBegin().addOffsetTo(getStubOffset()); } - public Address stubEnd() { return dataBegin(); } - public Address oopsBegin() { return dataBegin(); } - public Address oopsEnd() { return dataEnd(); } + public Address constantsBegin() { return contentBegin(); } + public Address constantsEnd() { return codeBegin(); } + public Address instsBegin() { return codeBegin(); } + public Address instsEnd() { return headerBegin().addOffsetTo(getStubOffset()); } + public Address exceptionBegin() { return headerBegin().addOffsetTo(getExceptionOffset()); } + public Address deoptHandlerEntry() { return headerBegin().addOffsetTo(getDeoptHandlerEntryOffset()); } + public Address stubBegin() { return headerBegin().addOffsetTo(getStubOffset()); } + public Address stubEnd() { return dataBegin(); } + public Address oopsBegin() { return dataBegin(); } + public Address oopsEnd() { return dataEnd(); } public Address immutableDataBegin() { return immutableDataField.getValue(addr); } public Address immutableDataEnd() { return immutableDataBegin().addOffsetTo(getImmutableDataSize()); } @@ -262,7 +262,7 @@ public class NMethod extends CodeBlob { // Deopt // Return true is the PC is one would expect if the frame is being deopted. public boolean isDeoptPc (Address pc) { return isDeoptEntry(pc); } - public boolean isDeoptEntry (Address pc) { return pc == deoptHandlerBegin(); } + public boolean isDeoptEntry (Address pc) { return pc == deoptHandlerEntry(); } /** Tells whether frames described by this nmethod can be deoptimized. Note: native wrappers cannot be deoptimized. */ @@ -490,7 +490,7 @@ public class NMethod extends CodeBlob { private int getEntryBCI() { return (int) entryBCIField .getValue(addr); } private int getExceptionOffset() { return (int) exceptionOffsetField .getValue(addr); } - private int getDeoptHandlerOffset() { return (int) deoptHandlerOffsetField .getValue(addr); } + private int getDeoptHandlerEntryOffset() { return (int) deoptHandlerEntryOffsetField .getValue(addr); } private int getStubOffset() { return (int) stubOffsetField .getValue(addr); } private int getScopesDataOffset() { return (int) scopesDataOffsetField .getValue(addr); } private int getScopesPCsOffset() { return (int) scopesPCsOffsetField .getValue(addr); } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java index 27efb631f79..ee9e0ecdafd 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java @@ -87,7 +87,7 @@ public abstract class Frame implements Cloneable { CodeBlob cb = VM.getVM().getCodeCache().findBlob(pc); if (cb != null && cb.isJavaMethod()) { NMethod nm = (NMethod) cb; - if (pc.equals(nm.deoptHandlerBegin())) { + if (pc.equals(nm.deoptHandlerEntry())) { if (Assert.ASSERTS_ENABLED) { Assert.that(this.getUnextendedSP() != null, "null SP in Java frame"); } diff --git a/test/hotspot/jtreg/runtime/vthread/Deoptimization.java b/test/hotspot/jtreg/runtime/vthread/Deoptimization.java new file mode 100644 index 00000000000..050848c3a72 --- /dev/null +++ b/test/hotspot/jtreg/runtime/vthread/Deoptimization.java @@ -0,0 +1,159 @@ +/* + * Copyright 2025 Arm Limited and/or its affiliates. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test id=vthread-deopt-c1 + * @summary Deoptimization test for virtual threads (C1) + * @requires vm.continuations + * @requires vm.compiler1.enabled + * @requires vm.opt.TieredStopAtLevel != 0 + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:-BackgroundCompilation + * -XX:TieredStopAtLevel=1 + * Deoptimization + */ + +/** + * @test id=vthread-deopt-c2 + * @summary Deoptimization test for virtual threads (C2) + * @requires vm.continuations + * @requires vm.compiler2.enabled + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:-BackgroundCompilation + * -XX:-TieredCompilation + * Deoptimization + */ + +import java.lang.reflect.Method; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; +import java.util.Objects; +import jdk.test.whitebox.WhiteBox; + +public class Deoptimization { + static final WhiteBox white_box = WhiteBox.getWhiteBox(); + + static class TestTask implements Runnable { + CyclicBarrier start_barrier = null; + AtomicInteger completed_number = new AtomicInteger(0); + + public void reset(int barrier_parties) { + start_barrier = new CyclicBarrier(barrier_parties); + completed_number.set(0); + } + + public int getNumberWaiting() { + return start_barrier.getNumberWaiting(); + } + + public int getNumberCompleted() { + return completed_number.get(); + } + + public void await() throws BrokenBarrierException, InterruptedException { + start_barrier.await(); + } + + public void run() { + try { + await(); + } catch(BrokenBarrierException e) { + return; + } catch(InterruptedException e) { + return; + } + + completed_number.getAndIncrement(); + } + } + + static void test(TestTask task, Method method, int vthreads_num) throws Exception { + task.reset(vthreads_num + 1 /* 1 for the main thread */); + + Thread[] vthreads = new Thread[vthreads_num]; + for (int i = 0; i < vthreads_num; i++) { + vthreads[i] = Thread.startVirtualThread(task); + } + + while (task.getNumberWaiting() != vthreads_num) { + Thread.onSpinWait(); + } + + if (method != null) { + if (!white_box.isMethodCompiled(method, false)) { + throw new Error("Unexpectedly, it is not compiled."); + } + + white_box.deoptimizeMethod(method); + + if (white_box.isMethodCompiled(method, false)) { + throw new Error("Unexpectedly, it is compiled."); + } + } + + task.await(); + + for (int i = 0; i < vthreads_num; i++) { + vthreads[i].join(); + } + + if (task.getNumberCompleted() != vthreads_num) { + throw new Error("Some threads didn't reach completion"); + } + } + + static int getIntegerOption(String option_name) { + Object option_object = white_box.getVMFlag(option_name); + String option_string = Objects.toString(option_object); + return Integer.parseInt(option_string); + } + + public static void main(String[] args) throws Exception { + int tiered_stop_at_level = getIntegerOption("TieredStopAtLevel"); + + Method method_run = TestTask.class.getMethod("run"); + white_box.testSetDontInlineMethod(method_run, true); + + Method method_await = TestTask.class.getMethod("await"); + white_box.testSetDontInlineMethod(method_await, true); + + TestTask task = new TestTask(); + + // Warm-up + test(task, null, 2); + + white_box.enqueueMethodForCompilation(method_run, tiered_stop_at_level); + + // Deoptimization test + test(task, method_run, 10000); + } +} From f6f87bb6759c86d941453a1776e8abfdffc48183 Mon Sep 17 00:00:00 2001 From: Volkan Yazici Date: Wed, 5 Nov 2025 13:01:51 +0000 Subject: [PATCH 039/512] 8371133: Clarify the purpose of "src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties" Reviewed-by: jlahoda --- .../com/sun/tools/javac/resources/ct.properties | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties index ba42e8e067c..a8fdd923e2c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2025, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,15 @@ # questions. # +# This file was originally used to produce the `proprietary` warning when +# accessing non-APIs, and to hide some non-APIs in JDK <= 8. This has been +# superseded by the module system and `--release`. But, when compiling with +# `--source 8`, it is still used for this purpose by +# `com.sun.tools.javac.file.JRTIndex`. +# +# The build generates `jdk.compiler/com/sun/tools/javac/resources/ct.java` from +# this file, which is then used at runtime. + apple.laf.*: hidden apple.security.*: hidden com.apple.eawt.*: hidden From c9a98169cb79df235316cb38a804d539044ea57e Mon Sep 17 00:00:00 2001 From: Samuel Chee Date: Wed, 5 Nov 2025 13:56:26 +0000 Subject: [PATCH 040/512] 8371205: AArch64: Remove unused cmpxchg* methods Co-authored-by: Samuel Chee Reviewed-by: aph, kbarrett, haosun --- .../cpu/aarch64/macroAssembler_aarch64.cpp | 91 ------------------- .../cpu/aarch64/macroAssembler_aarch64.hpp | 10 -- 2 files changed, 101 deletions(-) diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp index e6dd29f105a..c83e6e12fa1 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp @@ -3315,97 +3315,6 @@ void MacroAssembler::reinit_heapbase() } } -// this simulates the behaviour of the x86 cmpxchg instruction using a -// load linked/store conditional pair. we use the acquire/release -// versions of these instructions so that we flush pending writes as -// per Java semantics. - -// n.b the x86 version assumes the old value to be compared against is -// in rax and updates rax with the value located in memory if the -// cmpxchg fails. we supply a register for the old value explicitly - -// the aarch64 load linked/store conditional instructions do not -// accept an offset. so, unlike x86, we must provide a plain register -// to identify the memory word to be compared/exchanged rather than a -// register+offset Address. - -void MacroAssembler::cmpxchgptr(Register oldv, Register newv, Register addr, Register tmp, - Label &succeed, Label *fail) { - // oldv holds comparison value - // newv holds value to write in exchange - // addr identifies memory word to compare against/update - if (UseLSE) { - mov(tmp, oldv); - casal(Assembler::xword, oldv, newv, addr); - cmp(tmp, oldv); - br(Assembler::EQ, succeed); - membar(AnyAny); - } else { - Label retry_load, nope; - prfm(Address(addr), PSTL1STRM); - bind(retry_load); - // flush and load exclusive from the memory location - // and fail if it is not what we expect - ldaxr(tmp, addr); - cmp(tmp, oldv); - br(Assembler::NE, nope); - // if we store+flush with no intervening write tmp will be zero - stlxr(tmp, newv, addr); - cbzw(tmp, succeed); - // retry so we only ever return after a load fails to compare - // ensures we don't return a stale value after a failed write. - b(retry_load); - // if the memory word differs we return it in oldv and signal a fail - bind(nope); - membar(AnyAny); - mov(oldv, tmp); - } - if (fail) - b(*fail); -} - -void MacroAssembler::cmpxchg_obj_header(Register oldv, Register newv, Register obj, Register tmp, - Label &succeed, Label *fail) { - assert(oopDesc::mark_offset_in_bytes() == 0, "assumption"); - cmpxchgptr(oldv, newv, obj, tmp, succeed, fail); -} - -void MacroAssembler::cmpxchgw(Register oldv, Register newv, Register addr, Register tmp, - Label &succeed, Label *fail) { - // oldv holds comparison value - // newv holds value to write in exchange - // addr identifies memory word to compare against/update - // tmp returns 0/1 for success/failure - if (UseLSE) { - mov(tmp, oldv); - casal(Assembler::word, oldv, newv, addr); - cmp(tmp, oldv); - br(Assembler::EQ, succeed); - membar(AnyAny); - } else { - Label retry_load, nope; - prfm(Address(addr), PSTL1STRM); - bind(retry_load); - // flush and load exclusive from the memory location - // and fail if it is not what we expect - ldaxrw(tmp, addr); - cmp(tmp, oldv); - br(Assembler::NE, nope); - // if we store+flush with no intervening write tmp will be zero - stlxrw(tmp, newv, addr); - cbzw(tmp, succeed); - // retry so we only ever return after a load fails to compare - // ensures we don't return a stale value after a failed write. - b(retry_load); - // if the memory word differs we return it in oldv and signal a fail - bind(nope); - membar(AnyAny); - mov(oldv, tmp); - } - if (fail) - b(*fail); -} - // A generic CAS; success or failure is in the EQ flag. A weak CAS // doesn't retry and may fail spuriously. If the oldval is wanted, // Pass a register for the result, otherwise pass noreg. diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp index 7bfc6c562e3..4468eaa40c5 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp @@ -1200,16 +1200,6 @@ public: void cmpoop(Register obj1, Register obj2); - // Various forms of CAS - - void cmpxchg_obj_header(Register oldv, Register newv, Register obj, Register tmp, - Label &succeed, Label *fail); - void cmpxchgptr(Register oldv, Register newv, Register addr, Register tmp, - Label &succeed, Label *fail); - - void cmpxchgw(Register oldv, Register newv, Register addr, Register tmp, - Label &succeed, Label *fail); - void atomic_add(Register prev, RegisterOrConstant incr, Register addr); void atomic_addw(Register prev, RegisterOrConstant incr, Register addr); void atomic_addal(Register prev, RegisterOrConstant incr, Register addr); From 2dd15cf5bf1614e4b74ad9675723562e14ced8ab Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Wed, 5 Nov 2025 13:57:18 +0000 Subject: [PATCH 041/512] 8346719: Add relaunchers to the static JDK image for missing executables Reviewed-by: alanb, erikj --- make/Main.gmk | 6 +- make/StaticLibs.gmk | 117 ++++++++- make/common/modules/LauncherCommon.gmk | 60 ++++- make/modules/java.base/Launcher.gmk | 2 +- make/modules/jdk.jpackage/Lib.gmk | 1 - src/java.base/share/native/launcher/defines.h | 75 ------ src/java.base/share/native/launcher/main.c | 88 ++++++- .../unix/native/launcher/relauncher.c | 113 ++++++++ src/java.base/unix/native/libjli/java_md.c | 6 +- .../windows/native/launcher/relauncher.c | 246 ++++++++++++++++++ test/hotspot/jtreg/ProblemList-StaticJdk.txt | 35 --- test/jdk/ProblemList-StaticJdk.txt | 38 ++- test/langtools/ProblemList-StaticJdk.txt | 53 ++-- test/lib-test/ProblemList-StaticJdk.txt | 28 +- 14 files changed, 678 insertions(+), 190 deletions(-) delete mode 100644 src/java.base/share/native/launcher/defines.h create mode 100644 src/java.base/unix/native/launcher/relauncher.c create mode 100644 src/java.base/windows/native/launcher/relauncher.c diff --git a/make/Main.gmk b/make/Main.gmk index e9f0b5bb9eb..22302cdea46 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -461,9 +461,9 @@ $(eval $(call SetupTarget, symbols-image, \ TARGET := symbols, \ )) -$(eval $(call SetupTarget, static-launcher, \ +$(eval $(call SetupTarget, static-launchers, \ MAKEFILE := StaticLibs, \ - TARGET := static-launcher, \ + TARGET := static-launchers, \ DEPS := hotspot-static-libs static-libs, \ )) @@ -1290,7 +1290,7 @@ ifeq ($(call isTargetOs, macosx), true) legacy-images: mac-legacy-jre-bundle endif -static-exploded-image: static-launcher exploded-image +static-exploded-image: static-launchers exploded-image # These targets build the various documentation images docs-jdk-image: docs-jdk diff --git a/make/StaticLibs.gmk b/make/StaticLibs.gmk index 490180eb649..ca74590938d 100644 --- a/make/StaticLibs.gmk +++ b/make/StaticLibs.gmk @@ -48,8 +48,8 @@ ifneq ($(word 2, $(wildcard $(HOTSPOT_STATIC_LIB_PATH))), ) endif # Find all modules with static libraries -STATIC_LIB_MODULES := $(patsubst $(SUPPORT_OUTPUTDIR)/modules_static-libs/%, \ - %, $(wildcard $(SUPPORT_OUTPUTDIR)/modules_static-libs/*)) +STATIC_LIB_MODULES := $(sort $(patsubst $(SUPPORT_OUTPUTDIR)/modules_static-libs/%, \ + %, $(wildcard $(SUPPORT_OUTPUTDIR)/modules_static-libs/*))) # Filter out known broken libraries. This is a temporary measure until # proper support for these libraries can be provided. @@ -123,13 +123,18 @@ else $(error Unsupported platform) endif +################################################################################ +# Build the java static launcher +################################################################################ $(eval $(call SetupBuildLauncher, java, \ ENABLE_ARG_FILES := true, \ EXPAND_CLASSPATH_WILDCARDS := true, \ EXTRA_RCFLAGS := $(JAVA_RCFLAGS), \ VERSION_INFO_RESOURCE := $(JAVA_VERSION_INFO_RESOURCE), \ OPTIMIZATION := HIGH, \ + MACOSX_PRIVILEGED := true, \ STATIC_LAUNCHER := true, \ + CFLAGS := -DSTATIC_BUILD, \ LDFLAGS := $(LDFLAGS_STATIC_JDK), \ LIBS := $(STATIC_LIBS) $(EXTERNAL_LIBS), \ LINK_TYPE := C++, \ @@ -146,7 +151,53 @@ TARGETS += $(java) JAVA_LAUNCHER := $(BUILD_LAUNCHER_java_TARGET) -static-launcher: $(java) +static-launchers: $(java) + +################################################################################ +# Build relaunchers (thin wrappers calling the java binary) for all other +# JDK launchers. +################################################################################ + +RELAUNCHER_SRC := $(TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/launcher + +# $1: The module name +# $2: The launcher name +define SetupRelauncher + $1_$2_LAUNCHER_ARGS_LINE := $$(call ReadFile, $$(SUPPORT_OUTPUTDIR)/static-native/relaunchers/$1/$2-relauncher-arguments.txt) + # Restore |||| with space + $1_$2_LAUNCHER_ARGS := '{ $$(subst ||||,$(SPACE),$$(strip $$(foreach a, $$($1_$2_LAUNCHER_ARGS_LINE), "-J$$a"$$(COMMA) )) ) }' + + $$(eval $$(call SetupJdkExecutable, BUILD_relauncher_$2, \ + NAME := $2, \ + EXTRA_FILES := $$(RELAUNCHER_SRC)/relauncher.c, \ + CFLAGS := -DLAUNCHER_ARGS=$$($1_$2_LAUNCHER_ARGS), \ + LIBS_windows := shlwapi.lib, \ + OUTPUT_DIR := $$(STATIC_LAUNCHER_OUTPUT_DIR), \ + OBJECT_DIR := $$(STATIC_LAUNCHER_OUTPUT_DIR)/relaunchers/$2, \ + )) + + TARGETS += $$(BUILD_relauncher_$2) + + RELAUNCHERS += $$(BUILD_relauncher_$2_TARGET) + static-launchers: $$(BUILD_relauncher_$2) +endef + +# Find all modules with launchers +LAUNCHER_MODULES := $(sort $(patsubst $(SUPPORT_OUTPUTDIR)/modules_static-launchers/%, \ + %, $(wildcard $(SUPPORT_OUTPUTDIR)/modules_static-launchers/*))) + +# Find launchers for each module +$(foreach module, $(LAUNCHER_MODULES), \ + $(eval LAUNCHERS_$(module) := $(if $(wildcard \ + $(SUPPORT_OUTPUTDIR)/modules_static-launchers/$(module)/module-included-launchers.txt), \ + $(shell cat \ + $(SUPPORT_OUTPUTDIR)/modules_static-launchers/$(module)/module-included-launchers.txt))) \ +) + +# For all launchers (except java and javaw), setup a relauncher build +$(foreach module, $(LAUNCHER_MODULES), \ + $(foreach launcher, $(filter-out java javaw, $(LAUNCHERS_$(module))), \ + $(eval $(call SetupRelauncher,$(module),$(launcher))))) ################################################################################ # @@ -188,26 +239,72 @@ TARGETS += $(copy-from-jdk-image) $(copy-from-jdk-image): | static-jdk-info -$(eval $(call SetupCopyFiles, copy-static-launcher, \ - FILES := $(JAVA_LAUNCHER), \ +$(eval $(call SetupCopyFiles, copy-static-launchers, \ + FILES := $(JAVA_LAUNCHER) $(RELAUNCHERS), \ DEST := $(STATIC_JDK_IMAGE_DIR)/bin, \ )) -TARGETS += $(copy-static-launcher) +TARGETS += $(copy-static-launchers) -$(eval $(call SetupCopyFiles, copy-static-launcher-debuginfo, \ +$(eval $(call SetupCopyFiles, copy-static-launchers-debuginfo, \ SRC := $(STATIC_LAUNCHER_OUTPUT_DIR), \ DEST := $(STATIC_JDK_IMAGE_DIR)/bin, \ FILES := $(call FindDebuginfoFiles, $(STATIC_LAUNCHER_OUTPUT_DIR)), \ )) -TARGETS += $(copy-static-launcher-debuginfo) +TARGETS += $(copy-static-launchers-debuginfo) -static-jdk-image: $(copy-from-jdk-image) $(copy-static-launcher) $(copy-static-launcher-debuginfo) +# Copy the microsoft runtime libraries on windows +ifeq ($(call isTargetOs, windows), true) + # Chmod to avoid permission issues if bundles are unpacked on unix platforms. + # Use separate macro calls in case the source files are not in the same + # directory. + $(eval $(call SetupCopyFiles, copy-windows-msvcr, \ + DEST := $(STATIC_JDK_IMAGE_DIR)/bin, \ + FILES := $(MSVCR_DLL), \ + MACRO := copy-and-chmod-executable, \ + )) + + TARGETS += $(copy-windows-msvcr) + + $(eval $(call SetupCopyFiles, copy-windows-vcruntime, \ + DEST := $(STATIC_JDK_IMAGE_DIR)/bin, \ + FILES := $(VCRUNTIME_1_DLL), \ + MACRO := copy-and-chmod-executable, \ + )) + + TARGETS += $(copy-windows-vcruntime) + + $(eval $(call SetupCopyFiles, copy-windows-msvcp, \ + DEST := $(STATIC_JDK_IMAGE_DIR)/bin, \ + FILES := $(MSVCP_DLL), \ + MACRO := copy-and-chmod-executable, \ + )) + + TARGETS += $(copy-windows-msvcp) + + copy-windows-libs := $(copy-windows-msvcr) $(copy-windows-vcruntime) $(copy-windows-msvcp) + + ifneq ($(UCRT_DLL_DIR), ) + $(eval $(call SetupCopyFiles, copy-windows-ucrt, \ + DEST := $(STATIC_JDK_IMAGE_DIR)/bin, \ + SRC := $(UCRT_DLL_DIR), \ + FILES := $(wildcard $(UCRT_DLL_DIR)/*.dll), \ + MACRO := copy-and-chmod-executable, \ + )) + + TARGETS += $(copy-windows-ucrt) + + copy-windows-libs += $(copy-windows-ucrt) + endif +endif + +static-jdk-image: $(copy-from-jdk-image) $(copy-static-launchers) \ + $(copy-static-launchers-debuginfo) $(copy-windows-libs) TARGETS += static-jdk-image -.PHONY: static-launcher static-jdk-image +.PHONY: static-launchers static-jdk-image ################################################################################ diff --git a/make/common/modules/LauncherCommon.gmk b/make/common/modules/LauncherCommon.gmk index 0b420df5684..7682ffbb95c 100644 --- a/make/common/modules/LauncherCommon.gmk +++ b/make/common/modules/LauncherCommon.gmk @@ -43,6 +43,9 @@ LAUNCHER_CFLAGS += -I$(TOPDIR)/src/java.base/share/native/launcher \ MACOSX_PLIST_DIR := $(TOPDIR)/src/java.base/macosx/native/launcher JAVA_MANIFEST := $(TOPDIR)/src/java.base/windows/native/launcher/java.manifest +INCLUDED_LAUNCHERS_FILE := $(SUPPORT_OUTPUTDIR)/modules_static-launchers/$(MODULE)/module-included-launchers.txt +INCLUDED_LAUNCHERS := + ################################################################################ # Build standard launcher. @@ -74,19 +77,30 @@ define SetupBuildLauncherBody $1_MAIN_MODULE := $(MODULE) + $1_RELAUNCHER_ARGUMENTS := + ifneq ($$($1_MAIN_CLASS), ) $1_JAVA_ARGS += -Xms8m $1_LAUNCHER_CLASS := -m $$($1_MAIN_MODULE)/$$($1_MAIN_CLASS) endif - ifeq ($$($1_EXPAND_CLASSPATH_WILDCARDS), true) - $1_CFLAGS += -DEXPAND_CLASSPATH_WILDCARDS + ifeq ($$($1_ENABLE_ARG_FILES), true) + $1_CFLAGS += -DDISABLE_ARGFILE=JNI_FALSE + else + $1_CFLAGS += -DDISABLE_ARGFILE=JNI_TRUE + # This must be the first argument given, if it should be present + $1_RELAUNCHER_ARGUMENTS += -DjavaLauncherArgFiles=false endif - ifeq ($$($1_ENABLE_ARG_FILES), true) - $1_CFLAGS += -DENABLE_ARG_FILES + ifeq ($$($1_EXPAND_CLASSPATH_WILDCARDS), true) + $1_CFLAGS += -DCLASSPATH_WILDCARDS=JNI_TRUE + else + $1_CFLAGS += -DCLASSPATH_WILDCARDS=JNI_FALSE + $1_RELAUNCHER_ARGUMENTS += -DjavaLauncherWildcards=false endif + $1_RELAUNCHER_ARGUMENTS += -DjavaLauncherProgname=$1 + ifeq ($(call isTargetOs, windows), true) ifeq ($$($1_WINDOWS_JAVAW), true) $1_CFLAGS += -DJAVAW @@ -94,9 +108,14 @@ define SetupBuildLauncherBody endif ifneq ($$($1_JAVA_ARGS), ) - $1_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \ - $$(addprefix -J, $$($1_JAVA_ARGS)) $$($1_LAUNCHER_CLASS), "$$a"$(COMMA) )) }' + $1_PREFIXED_JAVA_ARGS := $$(addprefix -J, $$($1_JAVA_ARGS)) \ + $$($1_LAUNCHER_CLASS) + $1_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, $$($1_PREFIXED_JAVA_ARGS), \ + "$$a"$(COMMA) )) }' $1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR) + # To preserve spaces, substitute them with a hopefully unique pattern + $1_RELAUNCHER_ARGUMENTS += \ + -DjavaLauncherArgs=$$(subst $$(SPACE),||||,$$($1_PREFIXED_JAVA_ARGS)) endif ifeq ($(call isTargetOs, macosx), true) @@ -172,8 +191,28 @@ define SetupBuildLauncherBody )) $1 += $$(BUILD_LAUNCHER_$1) + + $1_RELAUNCHER_ARGUMENTS_FILE := \ + $$(SUPPORT_OUTPUTDIR)/static-native/relaunchers/$$(MODULE)/$1-relauncher-arguments.txt + + $1_VARDEPS := $$($1_RELAUNCHER_ARGUMENTS) + $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \ + $$($1_RELAUNCHER_ARGUMENTS_FILE).vardeps) + + $$($1_RELAUNCHER_ARGUMENTS_FILE): + $$(call MakeDir, $$(@D)) + $$(ECHO) '$$($1_RELAUNCHER_ARGUMENTS)' > $$@ + + $1 += $$($1_RELAUNCHER_ARGUMENTS_FILE) + TARGETS += $$($1) + # Record the fact that this launcher is part of the current module. + INCLUDED_LAUNCHERS += $1 + + # Add a dependency from this launcher to the launcher list + $$(INCLUDED_LAUNCHERS_FILE): $$($1) + $$(BUILD_LAUNCHER_$1): $$(BUILD_PLIST_$1) ifeq ($(call isTargetOs, macosx), true) @@ -242,5 +281,14 @@ endif ################################################################################ +# We need to keep track of which launchers are created by this module. This +# information is required for static builds, to know which relaunchers to +# create. The file module-included-launchers.txt is then read in StaticLibs.gmk. +$(INCLUDED_LAUNCHERS_FILE): + $(call MakeDir, $(@D)) + $(ECHO) $(INCLUDED_LAUNCHERS) > $@ + +TARGETS += $(INCLUDED_LAUNCHERS_FILE) + endif # include guard include MakeIncludeEnd.gmk diff --git a/make/modules/java.base/Launcher.gmk b/make/modules/java.base/Launcher.gmk index c249656f188..3a3920acb12 100644 --- a/make/modules/java.base/Launcher.gmk +++ b/make/modules/java.base/Launcher.gmk @@ -73,7 +73,7 @@ ifeq ($(call isTargetOs, linux), true) $(eval $(call SetupJdkExecutable, BUILD_JEXEC, \ NAME := jexec, \ - SRC := $(TOPDIR)/src/$(MODULE)/unix/native/launcher, \ + EXTRA_FILES := $(TOPDIR)/src/$(MODULE)/unix/native/launcher/jexec.c, \ OPTIMIZATION := LOW, \ EXTRA_HEADER_DIRS := libjli, \ CFLAGS_linux := -fPIC, \ diff --git a/make/modules/jdk.jpackage/Lib.gmk b/make/modules/jdk.jpackage/Lib.gmk index 51d70c6d835..704436bbde6 100644 --- a/make/modules/jdk.jpackage/Lib.gmk +++ b/make/modules/jdk.jpackage/Lib.gmk @@ -25,7 +25,6 @@ ################################################################################ -include LauncherCommon.gmk include LibCommon.gmk JPACKAGE_OUTPUT_DIR := \ diff --git a/src/java.base/share/native/launcher/defines.h b/src/java.base/share/native/launcher/defines.h deleted file mode 100644 index a07a1db17a6..00000000000 --- a/src/java.base/share/native/launcher/defines.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -#ifndef _DEFINES_H -#define _DEFINES_H - -#include "java.h" - -#define STR_HELPER(x) #x -#define STR(x) STR_HELPER(x) - -/* - * This file contains commonly defined constants used only by main.c - * and should not be included by another file. - */ -#ifndef VERSION_STRING -/* make sure the compilation fails */ -#error "VERSION_STRING must be defined" -#endif - -/* Unused, but retained for JLI_Launch compatibility*/ -#define DOT_VERSION "0.0" - -#ifdef JAVA_ARGS -#ifdef PROGNAME -static const char* const_progname = PROGNAME; -#else -static char* const_progname = NULL; -#endif -static const char* const_jargs[] = JAVA_ARGS; -#else /* !JAVA_ARGS */ -static const char* const_progname = "java"; -static const char** const_jargs = NULL; -#endif /* JAVA_ARGS */ - -#ifdef LAUNCHER_NAME -static const char* const_launcher = LAUNCHER_NAME; -#else /* LAUNCHER_NAME */ -static char* const_launcher = NULL; -#endif /* LAUNCHER_NAME */ - -#ifdef EXPAND_CLASSPATH_WILDCARDS -static const jboolean const_cpwildcard = JNI_TRUE; -#else -static const jboolean const_cpwildcard = JNI_FALSE; -#endif /* EXPAND_CLASSPATH_WILDCARDS */ - -#ifdef ENABLE_ARG_FILES -static const jboolean const_disable_argfile = JNI_FALSE; -#else -static const jboolean const_disable_argfile = JNI_TRUE; -#endif -#endif /*_DEFINES_H */ diff --git a/src/java.base/share/native/launcher/main.c b/src/java.base/share/native/launcher/main.c index 4e42e03dfc7..6fa2a29dc7b 100644 --- a/src/java.base/share/native/launcher/main.c +++ b/src/java.base/share/native/launcher/main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,10 +30,60 @@ * tools. The rest of the files will be linked in. */ -#include "defines.h" +#include "java.h" #include "jli_util.h" #include "jni.h" +// Unused, but retained for JLI_Launch compatibility +#define DOT_VERSION "0.0" + +// This is reported when requesting a full version +static char* launcher = LAUNCHER_NAME; + +// This is used as the name of the executable in the help message +static char* progname = PROGNAME; + +#ifdef JAVA_ARGS +static const char* jargs[] = JAVA_ARGS; +#else +static const char** jargs = NULL; +#endif +static int jargc; + +static jboolean cpwildcard = CLASSPATH_WILDCARDS; +static jboolean disable_argfile = DISABLE_ARGFILE; + +#ifdef STATIC_BUILD +static void check_relauncher_argument(char* arg) { + if (strcmp(arg, "-J-DjavaLauncherWildcards=false") == 0) { + cpwildcard = JNI_FALSE; + } + const char *progname_prefix = "-J-DjavaLauncherProgname="; + size_t progname_prefix_len = strlen(progname_prefix); + if (strncmp(arg, progname_prefix, progname_prefix_len) == 0) { + progname = arg + progname_prefix_len; + } + const char *args_prefix = "-J-DjavaLauncherArgs="; + size_t args_prefix_len = strlen(args_prefix); + if (strncmp(arg, args_prefix, args_prefix_len) == 0) { + char* java_args_ptr = arg + args_prefix_len; + size_t java_args_len = strlen(arg) - args_prefix_len; + + JLI_List java_args = JLI_List_new(java_args_len); + char* next_space; + while ((next_space = strchr(java_args_ptr, ' ')) != NULL) { + size_t next_arg_len = next_space - java_args_ptr; + JLI_List_addSubstring(java_args, java_args_ptr, next_arg_len); + java_args_ptr = next_space + 1; + } + JLI_List_add(java_args, java_args_ptr); + + jargc = (int) java_args->size; + jargs = (const char**) java_args->elements; + } +} +#endif + /* * Entry point. */ @@ -44,7 +94,7 @@ char **__initenv; int WINAPI WinMain(HINSTANCE inst, HINSTANCE previnst, LPSTR cmdline, int cmdshow) { - const jboolean const_javaw = JNI_TRUE; + const jboolean javaw = JNI_TRUE; __initenv = _environ; @@ -52,19 +102,25 @@ WinMain(HINSTANCE inst, HINSTANCE previnst, LPSTR cmdline, int cmdshow) JNIEXPORT int main(int argc, char **argv) { - const jboolean const_javaw = JNI_FALSE; + const jboolean javaw = JNI_FALSE; #endif /* JAVAW */ int margc; char** margv; - int jargc; - const char** jargv = const_jargs; - jargc = (sizeof(const_jargs) / sizeof(char *)) > 1 - ? sizeof(const_jargs) / sizeof(char *) + jargc = (sizeof(jargs) / sizeof(char *)) > 1 + ? sizeof(jargs) / sizeof(char *) : 0; // ignore the null terminator index - JLI_InitArgProcessing(jargc > 0, const_disable_argfile); +#ifdef STATIC_BUILD + // Relaunchers always give -J-DjavaLauncherArgFiles as the first argument, if present + // We must check disable_argfile before calling JLI_InitArgProcessing. + if (argc > 1 && strcmp(argv[1], "-J-DjavaLauncherArgFiles=false") == 0) { + disable_argfile = JNI_TRUE; + } +#endif + + JLI_InitArgProcessing(jargc > 0, disable_argfile); #ifdef _WIN32 { @@ -103,6 +159,9 @@ main(int argc, char **argv) StdArg *stdargs = JLI_GetStdArgs(); for (i = 0 ; i < margc ; i++) { margv[i] = stdargs[i].arg; +#ifdef STATIC_BUILD + check_relauncher_argument(margv[i]); +#endif } margv[i] = NULL; } @@ -127,6 +186,9 @@ main(int argc, char **argv) } // Iterate the rest of command line for (i = 1; i < argc; i++) { +#ifdef STATIC_BUILD + check_relauncher_argument(argv[i]); +#endif JLI_List argsInFile = JLI_PreprocessArg(argv[i], JNI_TRUE); if (NULL == argsInFile) { JLI_List_add(args, JLI_StringDup(argv[i])); @@ -148,12 +210,12 @@ main(int argc, char **argv) } #endif /* WIN32 */ return JLI_Launch(margc, margv, - jargc, jargv, + jargc, jargs, 0, NULL, VERSION_STRING, DOT_VERSION, - (const_progname != NULL) ? const_progname : *margv, - (const_launcher != NULL) ? const_launcher : *margv, + progname, + launcher, jargc > 0, - const_cpwildcard, const_javaw, 0); + cpwildcard, javaw, 0); } diff --git a/src/java.base/unix/native/launcher/relauncher.c b/src/java.base/unix/native/launcher/relauncher.c new file mode 100644 index 00000000000..f95e3b38caa --- /dev/null +++ b/src/java.base/unix/native/launcher/relauncher.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include +#include + +#define JAVA_EXECUTABLE_NAME "java" + +#ifndef LAUNCHER_ARGS +#error LAUNCHER_ARGS must be defined +#endif + +static char *launcher_args[] = LAUNCHER_ARGS; + +int main(int argc, char *argv[]) { + //////////////////////////////////////////////////////////////////////////// + // Create a fully qualified path to the java executable in the same + // directory as this file resides in. + + char *our_full_path = realpath(argv[0], NULL); + if (our_full_path == NULL) { + perror("failed to get the full path of the executable"); + return 1; + } + + char *last_slash_pos = strrchr(our_full_path, '/'); + if (last_slash_pos == NULL) { + fprintf(stderr, "no '/' found in the full path of the executable\n"); + return 1; + } + + size_t base_length = last_slash_pos - our_full_path + 1; + size_t java_path_length = base_length + strlen(JAVA_EXECUTABLE_NAME) + 1; + + char *java_path = malloc(java_path_length); + if (java_path == NULL) { + perror("malloc failed"); + return 1; + } + + memcpy(java_path, our_full_path, base_length); + strcpy(java_path + base_length, JAVA_EXECUTABLE_NAME); + + //////////////////////////////////////////////////////////////////////////// + // Build the argument list: our executable name + launcher args + users args + + int launcher_argsc = sizeof(launcher_args) / sizeof(char *); + + char **java_args = malloc((launcher_argsc + argc + 1) * sizeof(char *)); + if (java_args == NULL) { + perror("malloc failed"); + return 1; + } + + // Our executable name + java_args[0] = argv[0]; + + // Launcher arguments + for (int i = 0; i < launcher_argsc; i++) { + java_args[i + 1] = launcher_args[i]; + } + + // User arguments + for (int i = 1; i < argc; i++) { + java_args[launcher_argsc + i] = argv[i]; + } + + java_args[launcher_argsc + argc] = NULL; + + //////////////////////////////////////////////////////////////////////////// + // Finally execute the real java process with the constructed arguments + + if (getenv("_JAVA_LAUNCHER_DEBUG")) { + char *program_name = basename(argv[0]); + + fprintf(stderr, "%s: executing: '%s'", program_name, java_path); + for (int i = 0; java_args[i] != NULL; i++) { + fprintf(stderr, " '%s' ", java_args[i]); + } + fprintf(stderr, "\n"); + } + + execv(java_path, java_args); + + // Should not reach here, unless something went wrong + perror("execv failed"); + return 1; +} diff --git a/src/java.base/unix/native/libjli/java_md.c b/src/java.base/unix/native/libjli/java_md.c index 0a61971b080..a75795af580 100644 --- a/src/java.base/unix/native/libjli/java_md.c +++ b/src/java.base/unix/native/libjli/java_md.c @@ -276,6 +276,9 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, char jdkroot[], jint so_jdkroot, char jvmpath[], jint so_jvmpath, char jvmcfg[], jint so_jvmcfg) { + /* Compute/set the name of the executable */ + SetExecname(*pargv); + if (JLI_IsStaticallyLinked()) { // With static builds, all JDK and VM natives are statically linked // with the launcher executable. No need to manipulate LD_LIBRARY_PATH @@ -297,9 +300,6 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, size_t new_runpath_size; #endif /* SETENV_REQUIRED */ - /* Compute/set the name of the executable */ - SetExecname(*pargv); - /* Check to see if the jvmpath exists */ /* Find out where the JDK is that we will be using. */ if (!GetJDKInstallRoot(jdkroot, so_jdkroot, JNI_FALSE)) { diff --git a/src/java.base/windows/native/launcher/relauncher.c b/src/java.base/windows/native/launcher/relauncher.c new file mode 100644 index 00000000000..6487406c04e --- /dev/null +++ b/src/java.base/windows/native/launcher/relauncher.c @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include +#include + +#define JAVA_EXECUTABLE_NAME "java.exe" + +#ifndef LAUNCHER_ARGS +#error LAUNCHER_ARGS must be defined +#endif + +static char* launcher_args[] = LAUNCHER_ARGS; + +char* quote_argument(char* arg) { + // See https://learn.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way + // for an explanation of how to properly quote command lines for CreateProcess + size_t arg_length = strlen(arg); + + if (strcspn(arg, " \t\n\v\"") == arg_length) { + // No quoting is needed + return arg; + } + + // Worst-case buffer size: all characters need a backslash, and starting + end quotes + size_t buffer_size = arg_length * 2 + 3; + char* buffer = malloc(buffer_size); + if (buffer == NULL) { + return NULL; + } + + int backslashes = 0; + char* write_pos = buffer; + char* read_pos = arg; + + // Start with a quote character + *write_pos++ = '"'; + + while (*read_pos) { + while (*read_pos == '\\') { + read_pos++; + backslashes++; + } + + if (*read_pos == '"') { + // Any potential backslashes before a quote needs to be doubled, + // and the quote needs to be escaped with an additional backslash + for (int i = 0; i < backslashes * 2 + 1; i++) { + *write_pos++ = '\\'; + } + *write_pos++ = *read_pos++; + backslashes = 0; + } else { + // Backslashes not preceeding a quote are copied without escaping + for (int i = 0; i < backslashes; i++) { + *write_pos++ = '\\'; + } + if (*read_pos) { + *write_pos++ = *read_pos++; + backslashes = 0; + } + } + } + + // If the string ended with backslashes, they need to be doubled before + // the final quote character + for (int i = 0; i < backslashes; i++) { + *write_pos++ = '\\'; + } + *write_pos++ = '"'; + *write_pos = '\0'; + + return buffer; +} + +int main(int argc, char* argv[]) { + //////////////////////////////////////////////////////////////////////////// + // Create a fully qualified path to the java executable in the same + // directory as this file resides in. + + // Calculate path length first + DWORD our_full_path_len = GetFullPathName(argv[0], 0, NULL, NULL); + if (our_full_path_len == 0) { + fprintf(stderr, "failed to get the full path of the executable: %lu\n", GetLastError()); + return 1; + } + + char* our_full_path = malloc(our_full_path_len + 1); + if (our_full_path == NULL) { + perror("malloc failed"); + return 1; + } + + if (GetFullPathName(argv[0], our_full_path_len + 1, our_full_path, NULL) == 0) { + fprintf(stderr, "failed to get the full path of the executable: %lu\n", GetLastError()); + return 1; + } + + char *last_slash_pos = strrchr(our_full_path, '\\'); + if (last_slash_pos == NULL) { + fprintf(stderr, "no '\\' found in the full path of the executable\n"); + return 1; + } + + size_t base_length = last_slash_pos - our_full_path + 1; + size_t java_path_length = base_length + strlen(JAVA_EXECUTABLE_NAME) + 1; + + char *java_path = malloc(java_path_length); + if (java_path == NULL) { + perror("malloc failed"); + return 1; + } + + memcpy(java_path, our_full_path, base_length); + strcpy(java_path + base_length, JAVA_EXECUTABLE_NAME); + + //////////////////////////////////////////////////////////////////////////// + // Build the argument list: our executable name + launcher args + users args + + int launcher_argsc = sizeof(launcher_args) / sizeof(char *); + + char **java_args = malloc((launcher_argsc + argc + 1) * sizeof(char *)); + if (java_args == NULL) { + perror("malloc failed"); + return 1; + } + + // Our executable name + java_args[0] = quote_argument(argv[0]); + if (java_args[0] == NULL) { + perror("malloc failed"); + return 1; + } + + // Launcher arguments + for (int i = 0; i < launcher_argsc; i++) { + char* quoted = quote_argument(launcher_args[i]); + if (quoted == NULL) { + perror("malloc failed"); + return 1; + } + java_args[i + 1] = quoted; + } + + // User arguments + for (int i = 1; i < argc; i++) { + char* quoted = quote_argument(argv[i]); + if (quoted == NULL) { + perror("malloc failed"); + return 1; + } + java_args[launcher_argsc + i] = quoted; + } + + java_args[launcher_argsc + argc] = NULL; + + // Windows needs the command line as a single string, not as an array of char* + size_t total_length = 0; + for (int i = 0; java_args[i] != NULL; i++) { + char* arg = java_args[i]; + total_length += strlen(java_args[i]) + 1; + } + + char* command_line = malloc(total_length); + if (command_line == NULL) { + perror("malloc failed"); + return 1; + } + + // Concatenate the quoted arguments with a space between them + char* write_pos = command_line; + for (int i = 0; java_args[i] != NULL; i++) { + size_t arg_len = strlen(java_args[i]); + memcpy(write_pos, java_args[i], arg_len); + write_pos += arg_len; + + // Append a space + *write_pos++ = ' '; + } + + // Replace the last space with a null terminator + write_pos--; + *write_pos = '\0'; + + //////////////////////////////////////////////////////////////////////////// + // Finally execute the real java process with the constructed arguments + + if (GetEnvironmentVariable("_JAVA_LAUNCHER_DEBUG", NULL, 0)) { + char *program_name = PathFindFileName(argv[0]); + + fprintf(stderr, "%s: executing: '%s' '%s'\n", program_name, java_path, command_line); + } + + STARTUPINFO si; + PROCESS_INFORMATION pi; + + memset(&si, 0, sizeof(si)); + memset(&pi, 0, sizeof(pi)); + + // Windows has no equivalent of exec, so start the process and wait for it + // to finish, to be able to return the same exit code + if (!CreateProcess(java_path, command_line, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + fprintf(stderr, "CreateProcess failed: %lu\n", GetLastError()); + return 1; + } + + if (WaitForSingleObject(pi.hProcess, INFINITE) == WAIT_FAILED) { + fprintf(stderr, "WaitForSingleObject failed: %lu\n", GetLastError()); + return 1; + } + + DWORD exit_code; + if (!GetExitCodeProcess(pi.hProcess, &exit_code)) { + fprintf(stderr, "GetExitCodeProcess failed: %lu\n", GetLastError()); + return 1; + } + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + + return exit_code; +} diff --git a/test/hotspot/jtreg/ProblemList-StaticJdk.txt b/test/hotspot/jtreg/ProblemList-StaticJdk.txt index 1681fb74634..1e5538ca5b9 100644 --- a/test/hotspot/jtreg/ProblemList-StaticJdk.txt +++ b/test/hotspot/jtreg/ProblemList-StaticJdk.txt @@ -1,38 +1,3 @@ -# Require javac -runtime/HiddenClasses/DefineHiddenClass.java 8346719 generic-all - -# Require jstack -runtime/Thread/TestThreadDumpClassInitMonitor.java 8346719 generic-all -runtime/Thread/TestThreadDumpSMRInfo.java 8346719 generic-all -serviceability/tmtools/jstack/DaemonThreadTest.java 8346719 generic-all -serviceability/tmtools/jstack/JstackThreadTest.java 8346719 generic-all -serviceability/tmtools/jstack/SpreadLockTest.java 8346719 generic-all -serviceability/tmtools/jstack/ThreadNamesTest.java 8346719 generic-all -serviceability/tmtools/jstack/TraveledLockTest.java 8346719 generic-all -serviceability/tmtools/jstack/WaitNotifyThreadTest.java 8346719 generic-all -serviceability/tmtools/jstat/GcCapacityTest.java 8346719 generic-all -serviceability/tmtools/jstat/GcCauseTest01.java 8346719 generic-all -serviceability/tmtools/jstat/GcCauseTest02.java 8346719 generic-all -serviceability/tmtools/jstat/GcCauseTest03.java 8346719 generic-all -serviceability/tmtools/jstat/GcNewTest.java 8346719 generic-all -serviceability/tmtools/jstat/GcTest01.java 8346719 generic-all -serviceability/tmtools/jstat/GcTest02.java 8346719 generic-all - -# Require jcmd -serviceability/HeapDump/DuplicateArrayClassesTest.java 8346719 generic-all -serviceability/HeapDump/FieldsInInstanceTest.java 8346719 generic-all -serviceability/attach/ConcAttachTest.java 8346719 generic-all -serviceability/attach/RemovingUnixDomainSocketTest.java 8346719 generic-all -serviceability/jvmti/vthread/HeapDump/VThreadInHeapDump.java#default 8346719 generic-all -serviceability/jvmti/vthread/HeapDump/VThreadInHeapDump.java#no-vmcontinuations 8346719 generic-all - -# Require jhsdb -serviceability/sa/ClhsdbCDSCore.java 8346719 generic-all -serviceability/sa/ClhsdbFindPC.java#no-xcomp-core 8346719 generic-all -serviceability/sa/ClhsdbFindPC.java#xcomp-core 8346719 generic-all -serviceability/sa/ClhsdbPmap.java#core 8346719 generic-all -serviceability/sa/ClhsdbPstack.java#core 8346719 generic-all - # Dynamically link with JDK/VM native libraries gtest/GTestWrapper.java 8356201 generic-all gtest/LargePageGtests.java#use-large-pages 8356201 generic-all diff --git a/test/jdk/ProblemList-StaticJdk.txt b/test/jdk/ProblemList-StaticJdk.txt index 12ff29dbae9..70f0438c0c6 100644 --- a/test/jdk/ProblemList-StaticJdk.txt +++ b/test/jdk/ProblemList-StaticJdk.txt @@ -1,14 +1,26 @@ -# Require jarsigner -java/lang/System/LoggerFinder/SignedLoggerFinderTest/SignedLoggerFinderTest.java 8346719 generic-all -java/util/jar/JarFile/jarVerification/MultiProviderTest.java 8346719 generic-all +########################################################################### +# +# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# +########################################################################### -# Require jar -java/lang/System/MacEncoding/TestFileEncoding.java 8346719 generic-all -java/util/ResourceBundle/modules/basic/BasicTest.java 8346719 generic-all - -# Require javac -java/util/ResourceBundle/modules/layer/LayerTest.java 8346719 generic-all -java/util/ResourceBundle/modules/unnamed/UnNamedTest.java 8346719 generic-all - -# Require jps -java/util/concurrent/locks/Lock/TimedAcquireLeak.java 8346719 generic-all +# Currently empty diff --git a/test/langtools/ProblemList-StaticJdk.txt b/test/langtools/ProblemList-StaticJdk.txt index 85fa3a6e14d..70f0438c0c6 100644 --- a/test/langtools/ProblemList-StaticJdk.txt +++ b/test/langtools/ProblemList-StaticJdk.txt @@ -1,29 +1,26 @@ -# Requires javadoc -jdk/javadoc/tool/6964914/TestStdDoclet.java 8346719 generic-all -jdk/javadoc/tool/6964914/TestUserDoclet.java 8346719 generic-all -jdk/javadoc/tool/AddOpensTest.java 8346719 generic-all -jdk/javadoc/tool/EncodingTest.java 8346719 generic-all -jdk/javadoc/tool/EnsureNewOldDoclet.java 8346719 generic-all -jdk/javadoc/tool/QuietOption.java 8346719 generic-all -jdk/javadoc/tool/testLocaleOption/TestLocaleOption.java 8346719 generic-all +########################################################################### +# +# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# +########################################################################### -# Requires javac -tools/javac/ClassPathTest/ClassPathTest.java 8346719 generic-all -tools/javac/Paths/ClassPath.java 8346719 generic-all -tools/javac/Paths/WildcardMineField.java 8346719 generic-all -tools/javac/T8132562/ClassPathWithDoubleQuotesTest.java 8346719 generic-all -tools/javac/file/MultiReleaseJar/MultiReleaseJarTest.java 8346719 generic-all -tools/javac/modules/AllDefaultTest.java 8346719 generic-all -tools/javac/modules/EnvVarTest.java 8346719 generic-all -tools/javac/modules/InheritRuntimeEnvironmentTest.java 8346719 generic-all -tools/javac/modules/NPEEmptyFileTest.java 8346719 generic-all -tools/javac/newlines/NewLineTest.java 8346719 generic-all -tools/javac/options/smokeTests/OptionSmokeTest.java 8346719 generic-all -tools/javac/platform/PlatformProviderTest.java 8346719 generic-all -tools/javac/processing/options/testPrintProcessorInfo/TestWithXstdout.java 8346719 generic-all - -# Requires jar -tools/jdeps/MultiReleaseJar.java 8346719 generic-all - -# Requires jimage -tools/javac/Paths/MineField.java 8346719 generic-all +# Currently empty diff --git a/test/lib-test/ProblemList-StaticJdk.txt b/test/lib-test/ProblemList-StaticJdk.txt index 3d151e07d41..70f0438c0c6 100644 --- a/test/lib-test/ProblemList-StaticJdk.txt +++ b/test/lib-test/ProblemList-StaticJdk.txt @@ -1,2 +1,26 @@ -# Requires jcmd -jdk/test/lib/hprof/HprofTest.java 8346719 generic-all +########################################################################### +# +# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# +########################################################################### + +# Currently empty From 973dc3fc47b249bb392d277880dcac0940f62771 Mon Sep 17 00:00:00 2001 From: EunHyunsu Date: Wed, 5 Nov 2025 14:57:05 +0000 Subject: [PATCH 042/512] 8371009: HttpClient javadoc synchronous example missing HttpRequest variable declaration Reviewed-by: dfuchs, michaelm --- .../share/classes/java/net/http/HttpClient.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/java.net.http/share/classes/java/net/http/HttpClient.java b/src/java.net.http/share/classes/java/net/http/HttpClient.java index 889ea56531e..a7a2171857d 100644 --- a/src/java.net.http/share/classes/java/net/http/HttpClient.java +++ b/src/java.net.http/share/classes/java/net/http/HttpClient.java @@ -102,13 +102,17 @@ import jdk.internal.net.http.HttpClientBuilderImpl; * .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80))) * .authenticator(Authenticator.getDefault()) * .build(); + * + * HttpRequest request = HttpRequest.newBuilder() + * .uri(URI.create("https://foo.com/")) + * .build(); * HttpResponse response = client.send(request, BodyHandlers.ofString()); * System.out.println(response.statusCode()); * System.out.println(response.body()); } * *

    Asynchronous Example * {@snippet : - * HttpRequest request = HttpRequest.newBuilder() + * HttpRequest request = HttpRequest.newBuilder() * .uri(URI.create("https://foo.com/")) * .timeout(Duration.ofMinutes(2)) * .header("Content-Type", "application/json") From b0536f9c2a6ddfa27be8fad8f53783c6b28d22c9 Mon Sep 17 00:00:00 2001 From: Chris Plummer Date: Wed, 5 Nov 2025 15:56:08 +0000 Subject: [PATCH 043/512] 8370201: Test serviceability/sa/TestJhsdbJstackWithVirtualThread.java fails due to VM warnings Reviewed-by: kevinw, amenkov, sspitsyn --- .../serviceability/attach/RemovingUnixDomainSocketTest.java | 4 ++-- .../jtreg/serviceability/sa/ClhsdbJstackXcompStress.java | 2 +- test/hotspot/jtreg/serviceability/sa/JhsdbThreadInfoTest.java | 4 ++-- test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackLock.java | 4 ++-- .../serviceability/sa/TestJhsdbJstackWithVirtualThread.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/hotspot/jtreg/serviceability/attach/RemovingUnixDomainSocketTest.java b/test/hotspot/jtreg/serviceability/attach/RemovingUnixDomainSocketTest.java index 3e15b24b5d4..22083ee1334 100644 --- a/test/hotspot/jtreg/serviceability/attach/RemovingUnixDomainSocketTest.java +++ b/test/hotspot/jtreg/serviceability/attach/RemovingUnixDomainSocketTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,7 +67,7 @@ public class RemovingUnixDomainSocketTest { "jcmd exitValue = " + out.getExitValue()); out.shouldHaveExitValue(0); - out.stderrShouldBeEmptyIgnoreDeprecatedWarnings(); + out.stderrShouldBeEmptyIgnoreVMWarnings(); } public static void main(String... args) throws Exception { diff --git a/test/hotspot/jtreg/serviceability/sa/ClhsdbJstackXcompStress.java b/test/hotspot/jtreg/serviceability/sa/ClhsdbJstackXcompStress.java index bb35e6c5aff..4b02c01119d 100644 --- a/test/hotspot/jtreg/serviceability/sa/ClhsdbJstackXcompStress.java +++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbJstackXcompStress.java @@ -75,7 +75,7 @@ public class ClhsdbJstackXcompStress { System.err.println(out.getStderr()); } - out.stderrShouldBeEmptyIgnoreDeprecatedWarnings(); + out.stderrShouldBeEmptyIgnoreVMWarnings(); out.stdoutShouldNotContain("Error occurred during stack walking:"); out.stdoutShouldContain(LingeredAppWithRecComputation.THREAD_NAME); List stdoutList = Arrays.asList(out.getStdout().split("\\R")); diff --git a/test/hotspot/jtreg/serviceability/sa/JhsdbThreadInfoTest.java b/test/hotspot/jtreg/serviceability/sa/JhsdbThreadInfoTest.java index 798de679d7c..75942f7113a 100644 --- a/test/hotspot/jtreg/serviceability/sa/JhsdbThreadInfoTest.java +++ b/test/hotspot/jtreg/serviceability/sa/JhsdbThreadInfoTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -70,7 +70,7 @@ public class JhsdbThreadInfoTest { out.shouldNotContain(" prio=0 "); out.shouldNotContain(" java.lang.Thread.State: UNKNOWN"); - out.stderrShouldBeEmptyIgnoreDeprecatedWarnings(); + out.stderrShouldBeEmptyIgnoreVMWarnings(); System.out.println("Test Completed"); } catch (Exception ex) { diff --git a/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackLock.java b/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackLock.java index 8d5c95721d5..ac536523815 100644 --- a/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackLock.java +++ b/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackLock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,7 +68,7 @@ public class TestJhsdbJstackLock { out.shouldMatch("^\\s+- locked <0x[0-9a-f]+> \\(a java\\.lang\\.Class for int\\)$"); out.shouldMatch("^\\s+- waiting on (<0x[0-9a-f]+> \\(a java\\.lang\\.Object\\)|)$"); - out.stderrShouldBeEmptyIgnoreDeprecatedWarnings(); + out.stderrShouldBeEmptyIgnoreVMWarnings(); System.out.println("Test Completed"); } finally { diff --git a/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackWithVirtualThread.java b/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackWithVirtualThread.java index 6d7921c7ed8..39b6e1ed609 100644 --- a/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackWithVirtualThread.java +++ b/test/hotspot/jtreg/serviceability/sa/TestJhsdbJstackWithVirtualThread.java @@ -58,7 +58,7 @@ public class TestJhsdbJstackWithVirtualThread { System.out.println(out.getStdout()); System.err.println(out.getStderr()); - out.stderrShouldBeEmptyIgnoreDeprecatedWarnings(); + out.stderrShouldBeEmptyIgnoreVMWarnings(); out.shouldNotContain("must have non-zero frame size"); } From cf45e09c388e95b5f11ad08ebdf7f277e968f90b Mon Sep 17 00:00:00 2001 From: Chris Plummer Date: Wed, 5 Nov 2025 18:03:22 +0000 Subject: [PATCH 044/512] 8371354: Problem list serviceability/sa/TestJhsdbJstackMixedWithXComp.java due to JDK-8371194 Reviewed-by: kevinw --- test/hotspot/jtreg/ProblemList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 0b9630e9434..1e4ac9e2848 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -144,6 +144,7 @@ serviceability/sa/TestJmapCore.java 8318754 macosx-aarch64 serviceability/sa/TestJmapCoreMetaspace.java 8318754 macosx-aarch64 serviceability/sa/ClhsdbThreadContext.java 8356704 windows-x64 +serviceability/sa/TestJhsdbJstackMixedWithXComp.java 8371194 linux-x64 serviceability/jvmti/stress/StackTrace/NotSuspended/GetStackTraceNotSuspendedStressTest.java 8315980 linux-all,windows-x64 From 7d93cb73c45d393705504f0637b12512124923a1 Mon Sep 17 00:00:00 2001 From: Phil Race Date: Wed, 5 Nov 2025 18:52:26 +0000 Subject: [PATCH 045/512] 8370637: [Windows] Crash if use Graphics after PrintJob.end Reviewed-by: azvegint, psadhukhan, aivanov --- .../classes/sun/awt/windows/WPrinterJob.java | 142 +++++++++--------- .../native/libawt/windows/awt_PrintJob.cpp | 128 +++++++++++++++- .../awt/PrintJob/PrintJobAfterEndTest.java | 12 +- .../print/PrinterJob/PrintAfterEndTest.java | 4 +- 4 files changed, 206 insertions(+), 80 deletions(-) diff --git a/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java b/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java index 17d41036bcc..01be8587685 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java @@ -929,35 +929,35 @@ public final class WPrinterJob extends RasterPrinterJob * Return the Window's device context that we are printing * into. */ - private long getPrintDC() { + private synchronized long getPrintDC() { return handleRecord.mPrintDC; } - private void setPrintDC(long mPrintDC) { + private synchronized void setPrintDC(long mPrintDC) { handleRecord.mPrintDC = mPrintDC; } - private long getDevMode() { + private synchronized long getDevMode() { return handleRecord.mPrintHDevMode; } - private void setDevMode(long mPrintHDevMode) { + private synchronized void setDevMode(long mPrintHDevMode) { handleRecord.mPrintHDevMode = mPrintHDevMode; } - private long getDevNames() { + private synchronized long getDevNames() { return handleRecord.mPrintHDevNames; } - private void setDevNames(long mPrintHDevNames) { + private synchronized void setDevNames(long mPrintHDevNames) { handleRecord.mPrintHDevNames = mPrintHDevNames; } - protected void beginPath() { + protected synchronized void beginPath() { beginPath(getPrintDC()); } - protected void endPath() { + protected synchronized void endPath() { endPath(getPrintDC()); } @@ -972,23 +972,23 @@ public final class WPrinterJob extends RasterPrinterJob setGraphicsMode(graphicsMode); } - protected void closeFigure() { + protected synchronized void closeFigure() { closeFigure(getPrintDC()); } - protected void fillPath() { + protected synchronized void fillPath() { fillPath(getPrintDC()); } - protected void moveTo(float x, float y) { + protected synchronized void moveTo(float x, float y) { moveTo(getPrintDC(), x, y); } - protected void lineTo(float x, float y) { + protected synchronized void lineTo(float x, float y) { lineTo(getPrintDC(), x, y); } - protected void polyBezierTo(float control1x, float control1y, + protected synchronized void polyBezierTo(float control1x, float control1y, float control2x, float control2y, float endX, float endY) { @@ -1003,14 +1003,14 @@ public final class WPrinterJob extends RasterPrinterJob * be one of the following Windows constants: * {@code ALTERNATE} or {@code WINDING}. */ - protected void setPolyFillMode(int fillRule) { + protected synchronized void setPolyFillMode(int fillRule) { setPolyFillMode(getPrintDC(), fillRule); } /** * Set the GDI graphics mode to {@code GM_ADVANCED}. */ - private int setAdvancedGraphicsMode() { + private synchronized int setAdvancedGraphicsMode() { return setAdvancedGraphicsMode(getPrintDC()); } @@ -1020,28 +1020,28 @@ public final class WPrinterJob extends RasterPrinterJob * be one of the following Windows constants: * {@code GM_COMPATIBLE} or {@code GM_ADVANCED}. */ - private void setGraphicsMode(int mode) { + private synchronized void setGraphicsMode(int mode) { setGraphicsMode(getPrintDC(), mode); } /** * Scale the GDI World Transform. */ - private void scale(double scaleX, double scaleY) { + private synchronized void scale(double scaleX, double scaleY) { scale(getPrintDC(), scaleX, scaleY); } /** * Get the GDI World Transform. */ - private void getWorldTransform(double[] transform) { + private synchronized void getWorldTransform(double[] transform) { getWorldTransform(getPrintDC(), transform); } /** * Set the GDI World Transform. */ - private void setWorldTransform(double[] transform) { + private synchronized void setWorldTransform(double[] transform) { setWorldTransform(getPrintDC(), transform); } @@ -1051,7 +1051,7 @@ public final class WPrinterJob extends RasterPrinterJob * is created, select it in the current printing device * context and free the old brush. */ - protected void selectSolidBrush(Color color) { + protected synchronized void selectSolidBrush(Color color) { /* We only need to select a brush if the color has changed. */ @@ -1070,7 +1070,7 @@ public final class WPrinterJob extends RasterPrinterJob * Return the x coordinate of the current pen * position in the print device context. */ - protected int getPenX() { + protected synchronized int getPenX() { return getPenX(getPrintDC()); } @@ -1080,7 +1080,7 @@ public final class WPrinterJob extends RasterPrinterJob * Return the y coordinate of the current pen * position in the print device context. */ - protected int getPenY() { + protected synchronized int getPenY() { return getPenY(getPrintDC()); } @@ -1089,16 +1089,16 @@ public final class WPrinterJob extends RasterPrinterJob * Set the current path in the printer device's * context to be clipping path. */ - protected void selectClipPath() { + protected synchronized void selectClipPath() { selectClipPath(getPrintDC()); } - protected void frameRect(float x, float y, float width, float height) { + protected synchronized void frameRect(float x, float y, float width, float height) { frameRect(getPrintDC(), x, y, width, height); } - protected void fillRect(float x, float y, float width, float height, + protected synchronized void fillRect(float x, float y, float width, float height, Color color) { float[] rgb = color.getRGBColorComponents(null); @@ -1109,7 +1109,7 @@ public final class WPrinterJob extends RasterPrinterJob } - protected void selectPen(float width, Color color) { + protected synchronized void selectPen(float width, Color color) { float[] rgb = color.getRGBColorComponents(null); @@ -1120,7 +1120,7 @@ public final class WPrinterJob extends RasterPrinterJob } - protected boolean selectStylePen(int cap, int join, float width, + protected synchronized boolean selectStylePen(int cap, int join, float width, Color color) { long endCap; @@ -1152,7 +1152,7 @@ public final class WPrinterJob extends RasterPrinterJob * Set a GDI font capable of drawing the java Font * passed in. */ - protected boolean setFont(String family, float size, int style, + protected synchronized boolean setFont(String family, float size, int style, int rotation, float awScale) { if (family.isEmpty()) { @@ -1187,7 +1187,7 @@ public final class WPrinterJob extends RasterPrinterJob /** * Set the GDI color for text drawing. */ - protected void setTextColor(Color color) { + protected synchronized void setTextColor(Color color) { /* We only need to select a brush if the color has changed. */ @@ -1206,7 +1206,7 @@ public final class WPrinterJob extends RasterPrinterJob * Draw the string {@code text} to the printer's * device context at the specified position. */ - protected void textOut(String str, float x, float y, + protected synchronized void textOut(String str, float x, float y, float[] positions) { /* Don't leave handling of control chars to GDI. * If control chars are removed, 'positions' isn't valid. @@ -1226,7 +1226,7 @@ public final class WPrinterJob extends RasterPrinterJob * Draw the glyphs {@code glyphs} to the printer's * device context at the specified position. */ - protected void glyphsOut(int []glyphs, float x, float y, + protected synchronized void glyphsOut(int []glyphs, float x, float y, float[] positions) { /* TrueType glyph codes are 16 bit values, so can be packed @@ -1254,7 +1254,7 @@ public final class WPrinterJob extends RasterPrinterJob * rendering so also remove them for measurement so that * this measurement can be properly compared with JDK measurement. */ - protected int getGDIAdvance(String text) { + protected synchronized int getGDIAdvance(String text) { /* Don't leave handling of control chars to GDI. */ text = removeControlChars(text); if (text.length() == 0) { @@ -1275,7 +1275,7 @@ public final class WPrinterJob extends RasterPrinterJob * by {@code srcX}, {@code srcY}, * {@code srcWidth}, and srcHeight. */ - protected void drawImage3ByteBGR(byte[] image, + protected synchronized void drawImage3ByteBGR(byte[] image, float destX, float destY, float destWidth, float destHeight, float srcX, float srcY, @@ -1306,7 +1306,7 @@ public final class WPrinterJob extends RasterPrinterJob * There's no alignment problem as GDI expects this to be packed * and each struct will start on a 4 byte boundary anyway. */ - protected void drawDIBImage(byte[] image, + protected synchronized void drawDIBImage(byte[] image, float destX, float destY, float destWidth, float destHeight, float srcX, float srcY, @@ -1338,7 +1338,7 @@ public final class WPrinterJob extends RasterPrinterJob * Begin a new page. */ @Override - protected void startPage(PageFormat format, Printable painter, + protected synchronized void startPage(PageFormat format, Printable painter, int index, boolean paperChanged) { /* Invalidate any device state caches we are @@ -1355,7 +1355,7 @@ public final class WPrinterJob extends RasterPrinterJob * End a page. */ @Override - protected void endPage(PageFormat format, Printable painter, + protected synchronized void endPage(PageFormat format, Printable painter, int index) { deviceEndPage(format, painter, index); @@ -1402,7 +1402,7 @@ public final class WPrinterJob extends RasterPrinterJob * is reflected back up to Java code */ @Override - protected native void initPrinter(); + protected synchronized native void initPrinter(); /** * Call Window's StartDoc routine to begin a @@ -1415,10 +1415,10 @@ public final class WPrinterJob extends RasterPrinterJob * user may cancel out of it. Note that the implementation of * cancel() throws PrinterAbortException to indicate the user cancelled. */ - private native boolean _startDoc(String dest, String jobName) + private synchronized native boolean _startDoc(String dest, String jobName) throws PrinterException; @Override - protected void startDoc() throws PrinterException { + protected synchronized void startDoc() throws PrinterException { if (!_startDoc(mDestination, getJobName())) { cancel(); } @@ -1429,31 +1429,31 @@ public final class WPrinterJob extends RasterPrinterJob * print job. */ @Override - protected native void endDoc(); + protected synchronized native void endDoc(); /** * Call Window's AbortDoc routine to abort a * print job. */ @Override - protected native void abortDoc(); + protected synchronized native void abortDoc(); /** * Call Windows native resource freeing APIs */ - private static native void deleteDC(long dc, long devmode, long devnames); + private static synchronized native void deleteDC(long dc, long devmode, long devnames); /** * Begin a new page. This call's Window's * StartPage routine. */ - protected native void deviceStartPage(PageFormat format, Printable painter, + protected synchronized native void deviceStartPage(PageFormat format, Printable painter, int index, boolean paperChanged); /** * End a page. This call's Window's EndPage * routine. */ - protected native void deviceEndPage(PageFormat format, Printable painter, + protected synchronized native void deviceEndPage(PageFormat format, Printable painter, int index); /** @@ -1464,46 +1464,46 @@ public final class WPrinterJob extends RasterPrinterJob * specified by the caller. */ @Override - protected native void printBand(byte[] data, int x, int y, + protected synchronized native void printBand(byte[] data, int x, int y, int width, int height); /** * Begin a Window's rendering path in the device * context {@code printDC}. */ - protected native void beginPath(long printDC); + protected synchronized native void beginPath(long printDC); /** * End a Window's rendering path in the device * context {@code printDC}. */ - protected native void endPath(long printDC); + protected synchronized native void endPath(long printDC); /** * Close a subpath in a Window's rendering path in the device * context {@code printDC}. */ - protected native void closeFigure(long printDC); + protected synchronized native void closeFigure(long printDC); /** * Fill a defined Window's rendering path in the device * context {@code printDC}. */ - protected native void fillPath(long printDC); + protected synchronized native void fillPath(long printDC); /** * Move the Window's pen position to {@code (x,y)} * in the device context {@code printDC}. */ - protected native void moveTo(long printDC, float x, float y); + protected synchronized native void moveTo(long printDC, float x, float y); /** * Draw a line from the current pen position to * {@code (x,y)} in the device context {@code printDC}. */ - protected native void lineTo(long printDC, float x, float y); + protected synchronized native void lineTo(long printDC, float x, float y); - protected native void polyBezierTo(long printDC, + protected synchronized native void polyBezierTo(long printDC, float control1x, float control1y, float control2x, float control2y, float endX, float endY); @@ -1514,13 +1514,13 @@ public final class WPrinterJob extends RasterPrinterJob * be one of the following Windows constants: * {@code ALTERNATE} or {@code WINDING}. */ - protected native void setPolyFillMode(long printDC, int fillRule); + protected synchronized native void setPolyFillMode(long printDC, int fillRule); /** * Set the GDI graphics mode to {@code GM_ADVANCED} * into the device context {@code printDC}. */ - protected native int setAdvancedGraphicsMode(long printDC); + protected synchronized native int setAdvancedGraphicsMode(long printDC); /** * Set the GDI graphics {@code mode} @@ -1529,25 +1529,25 @@ public final class WPrinterJob extends RasterPrinterJob * be one of the following Windows constants: * {@code GM_COMPATIBLE} or {@code GM_ADVANCED}. */ - protected native void setGraphicsMode(long printDC, int mode); + protected synchronized native void setGraphicsMode(long printDC, int mode); /** * Scale the GDI World Transform * of the device context {@code printDC}. */ - protected native void scale(long printDC, double scaleX, double scaleY); + protected synchronized native void scale(long printDC, double scaleX, double scaleY); /** * Get the GDI World Transform * from the device context {@code printDC}. */ - protected native void getWorldTransform(long printDC, double[] transform); + protected synchronized native void getWorldTransform(long printDC, double[] transform); /** * Set the GDI World Transform * into the device context {@code printDC}. */ - protected native void setWorldTransform(long printDC, double[] transform); + protected synchronized native void setWorldTransform(long printDC, double[] transform); /** * Create a Window's solid brush for the color specified @@ -1555,7 +1555,7 @@ public final class WPrinterJob extends RasterPrinterJob * is created, select it in the device * context {@code printDC} and free the old brush. */ - protected native void selectSolidBrush(long printDC, + protected synchronized native void selectSolidBrush(long printDC, int red, int green, int blue); /** @@ -1563,32 +1563,32 @@ public final class WPrinterJob extends RasterPrinterJob * position in the device context * {@code printDC}. */ - protected native int getPenX(long printDC); + protected synchronized native int getPenX(long printDC); /** * Return the y coordinate of the current pen * position in the device context * {@code printDC}. */ - protected native int getPenY(long printDC); + protected synchronized native int getPenY(long printDC); /** * Select the device context's current path * to be the clipping path. */ - protected native void selectClipPath(long printDC); + protected synchronized native void selectClipPath(long printDC); /** * Draw a rectangle using specified brush. */ - protected native void frameRect(long printDC, float x, float y, + protected synchronized native void frameRect(long printDC, float x, float y, float width, float height); /** * Fill a rectangle specified by the coordinates using * specified brush. */ - protected native void fillRect(long printDC, float x, float y, + protected synchronized native void fillRect(long printDC, float x, float y, float width, float height, int red, int green, int blue); @@ -1596,14 +1596,14 @@ public final class WPrinterJob extends RasterPrinterJob * Create a solid brush using the RG & B colors and width. * Select this brush and delete the old one. */ - protected native void selectPen(long printDC, float width, + protected synchronized native void selectPen(long printDC, float width, int red, int green, int blue); /** * Create a solid brush using the RG & B colors and specified * pen styles. Select this created brush and delete the old one. */ - protected native boolean selectStylePen(long printDC, long cap, + protected synchronized native boolean selectStylePen(long printDC, long cap, long join, float width, int red, int green, int blue); @@ -1611,7 +1611,7 @@ public final class WPrinterJob extends RasterPrinterJob * Set a GDI font capable of drawing the java Font * passed in. */ - protected native boolean setFont(long printDC, String familyName, + protected synchronized native boolean setFont(long printDC, String familyName, float fontSize, boolean bold, boolean italic, @@ -1622,7 +1622,7 @@ public final class WPrinterJob extends RasterPrinterJob /** * Set the GDI color for text drawing. */ - protected native void setTextColor(long printDC, + protected synchronized native void setTextColor(long printDC, int red, int green, int blue); @@ -1631,12 +1631,12 @@ public final class WPrinterJob extends RasterPrinterJob * context {@code printDC} at the specified * position. */ - protected native void textOut(long printDC, String text, + protected synchronized native void textOut(long printDC, String text, int strlen, boolean glyphs, float x, float y, float[] positions); - private native int getGDIAdvance(long printDC, String text); + private synchronized native int getGDIAdvance(long printDC, String text); /** * Draw the DIB compatible image buffer represented by @@ -1653,7 +1653,7 @@ public final class WPrinterJob extends RasterPrinterJob * At the very least it needs to be padded so each scanline is * DWORD aligned. Also we "flip" the image to make it a bottom-up DIB. */ - private native void drawDIBImage(long printDC, byte[] image, + private synchronized native void drawDIBImage(long printDC, byte[] image, float destX, float destY, float destWidth, float destHeight, float srcX, float srcY, diff --git a/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp b/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp index 9abe32e0fcc..9d45c3f083b 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp @@ -1523,6 +1523,7 @@ Java_sun_awt_windows_WPrinterJob_endDoc(JNIEnv *env, jobject self) { if (printDC != NULL){ SAVE_CONTROLWORD ::EndDoc(printDC); + AwtPrintControl::setPrintDC(env, self, (HDC)NULL); RESTORE_CONTROLWORD } @@ -1583,7 +1584,9 @@ Java_sun_awt_windows_WPrinterJob_deleteDC TRY_NO_VERIFY; - DeletePrintDC((HDC)dc); + if ((HDC)dc != NULL) { + DeletePrintDC((HDC)dc); + } if ((HGLOBAL)devmode != NULL){ ::GlobalFree((HGLOBAL)devmode); @@ -1850,6 +1853,9 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_printBand jint width, jint height) { HDC printDC = AwtPrintControl::getPrintDC(env, self); + if ((HDC)printDC == NULL) { + return; + } doPrintBand(env, printDC, imageArray, x, y, width, height); } @@ -1862,6 +1868,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_beginPath (JNIEnv *env , jobject self, jlong printDC) { TRY; + if ((HDC)printDC == NULL) { + return; + } + (void) ::BeginPath((HDC)printDC); CATCH_BAD_ALLOC; @@ -1876,6 +1886,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_endPath (JNIEnv *env, jobject self, jlong printDC) { TRY; + if ((HDC)printDC == NULL) { + return; + } + (void) ::EndPath((HDC)printDC); CATCH_BAD_ALLOC; @@ -1890,6 +1904,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_fillPath (JNIEnv *env, jobject self, jlong printDC) { TRY; + if ((HDC)printDC == NULL) { + return; + } + (void) ::FillPath((HDC)printDC); CATCH_BAD_ALLOC; @@ -1904,6 +1922,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_closeFigure (JNIEnv *env, jobject self, jlong printDC) { TRY; + if ((HDC)printDC == NULL) { + return; + } + (void) ::CloseFigure((HDC)printDC); CATCH_BAD_ALLOC; @@ -1918,6 +1940,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_lineTo (JNIEnv *env, jobject self, jlong printDC, jfloat x, jfloat y) { TRY; + if ((HDC)printDC == NULL) { + return; + } + (void) ::LineTo((HDC)printDC, ROUND_TO_LONG(x), ROUND_TO_LONG(y)); CATCH_BAD_ALLOC; @@ -1933,6 +1959,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_moveTo (JNIEnv *env, jobject self, jlong printDC, jfloat x, jfloat y) { TRY; + if ((HDC)printDC == NULL) { + return; + } + (void) ::MoveToEx((HDC)printDC, ROUND_TO_LONG(x), ROUND_TO_LONG(y), NULL); CATCH_BAD_ALLOC; @@ -1951,6 +1981,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_polyBezierTo TRY; + if ((HDC)printDC == NULL) { + return; + } + POINT points[3]; points[0].x = ROUND_TO_LONG(control1x); @@ -1974,6 +2008,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_setPolyFillMode (JNIEnv *env, jobject self, jlong printDC, jint fillRule) { TRY; + if ((HDC)printDC == NULL) { + return; + } + (void) ::SetPolyFillMode((HDC)printDC, fillRule); CATCH_BAD_ALLOC; @@ -1988,6 +2026,10 @@ JNIEXPORT jint JNICALL Java_sun_awt_windows_WPrinterJob_setAdvancedGraphicsMode (JNIEnv *env, jobject self, jlong printDC) { TRY; + if ((HDC)printDC == NULL) { + return 0; + } + int oldGraphicsMode = ::SetGraphicsMode((HDC)printDC, GM_ADVANCED); DASSERT(oldGraphicsMode != 0); return (jint) oldGraphicsMode; @@ -2004,6 +2046,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_setGraphicsMode (JNIEnv *env, jobject self, jlong printDC, jint mode) { TRY; + if ((HDC)printDC == NULL) { + return; + } + int oldGraphicsMode = ::SetGraphicsMode((HDC)printDC, mode); DASSERT(oldGraphicsMode != 0); @@ -2019,6 +2065,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_scale (JNIEnv *env, jobject self, jlong printDC, jdouble scaleX, jdouble scaleY) { TRY; + if ((HDC)printDC == NULL) { + return; + } + XFORM xForm; xForm.eM11 = (FLOAT) scaleX; @@ -2043,6 +2093,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_getWorldTransform (JNIEnv* env, jobject self, jlong printDC, jdoubleArray transform) { TRY; + if ((HDC)printDC == NULL) { + return; + } + double elems[6]; XFORM xForm; @@ -2070,6 +2124,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_setWorldTransform (JNIEnv* env, jobject self, jlong printDC, jdoubleArray transform) { TRY; + if ((HDC)printDC == NULL) { + return; + } + double *elems; XFORM xForm; @@ -2100,6 +2158,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_selectSolidBrush TRY; + if ((HDC)printDC == NULL) { + return; + } + HBRUSH colorBrush = ::CreateSolidBrush(RGB(red, green, blue)); HBRUSH oldBrush = (HBRUSH)::SelectObject((HDC)printDC, colorBrush); DeleteObject(oldBrush); @@ -2117,6 +2179,10 @@ JNIEXPORT jint JNICALL Java_sun_awt_windows_WPrinterJob_getPenX TRY; + if ((HDC)printDC == NULL) { + return 0; + } + POINT where; ::GetCurrentPositionEx((HDC)printDC, &where); @@ -2135,6 +2201,10 @@ JNIEXPORT jint JNICALL Java_sun_awt_windows_WPrinterJob_getPenY TRY; + if ((HDC)printDC == NULL) { + return 0; + } + POINT where; ::GetCurrentPositionEx((HDC)printDC, &where); @@ -2153,6 +2223,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_selectClipPath TRY; + if ((HDC)printDC == NULL) { + return; + } + ::SelectClipPath((HDC)printDC, RGN_COPY); CATCH_BAD_ALLOC; @@ -2170,6 +2244,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_frameRect TRY; + if ((HDC)printDC == NULL) { + return; + } + POINT points[5]; points[0].x = ROUND_TO_LONG(x); @@ -2200,6 +2278,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_fillRect TRY; + if ((HDC)printDC == NULL) { + return; + } + RECT rect; rect.left = ROUND_TO_LONG(x); rect.top = ROUND_TO_LONG(y); @@ -2228,6 +2310,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_selectPen TRY; + if ((HDC)printDC == NULL) { + return; + } + HPEN hpen = ::CreatePen(PS_SOLID, ROUND_TO_LONG(width), RGB(red, green, blue)); @@ -2254,6 +2340,10 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WPrinterJob_selectStylePen TRY; + if ((HDC)printDC == NULL) { + return JNI_FALSE; + } + LOGBRUSH logBrush; logBrush.lbStyle = PS_SOLID ; @@ -2287,6 +2377,10 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WPrinterJob_setFont jfloat fontSize, jboolean isBold, jboolean isItalic, jint rotation, jfloat awScale) { + if ((HDC)printDC == NULL) { + return JNI_FALSE; + } + jboolean didSetFont = JNI_FALSE; didSetFont = jFontToWFontW(env, (HDC)printDC, @@ -2317,6 +2411,10 @@ static jboolean jFontToWFontW(JNIEnv *env, HDC printDC, jstring fontName, LOGFONTW matchedLogFont; BOOL foundFont = false; // Assume we didn't find a matching GDI font. + if ((HDC)printDC == NULL) { + return JNI_FALSE; + } + memset(&matchedLogFont, 0, sizeof(matchedLogFont)); LPCWSTR fontNameW = JNU_GetStringPlatformChars(env, fontName, NULL); @@ -2478,6 +2576,10 @@ static int embolden(int currentWeight) JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_setTextColor (JNIEnv *env, jobject self, jlong printDC, jint red, jint green, jint blue) { + if ((HDC)printDC == NULL) { + return; + } + (void) ::SetTextColor( (HDC)printDC, RGB(red, green, blue)); } @@ -2485,6 +2587,11 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_setTextColor JNIEXPORT jint JNICALL Java_sun_awt_windows_WPrinterJob_getGDIAdvance (JNIEnv *env, jobject self, jlong printDC, jstring text) { + + if ((HDC)printDC == NULL) { + return 0; + } + SIZE size; LPCWSTR wText = JNU_GetStringPlatformChars(env, text, NULL); CHECK_NULL_RETURN(wText, 0); @@ -2538,6 +2645,9 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_textOut (JNIEnv *env, jobject self, jlong printDC, jstring text, jint strLen, jboolean glyphCodes, jfloat x, jfloat y, jfloatArray positions) { + if ((HDC)printDC == NULL) { + return; + } long posX = ROUND_TO_LONG(x); long posY = ROUND_TO_LONG(y); @@ -2832,6 +2942,10 @@ JNIEXPORT void JNICALL Java_sun_awt_windows_WPrinterJob_drawDIBImage jfloat srcWidth, jfloat srcHeight, jint bitCount, jbyteArray bmiColorsArray) { + if ((HDC)printDC == NULL) { + return; + } + int result = 0; assert(printDC != NULL); @@ -2922,6 +3036,10 @@ static void doPrintBand(JNIEnv *env, HDC printDC, jbyteArray imageArray, TRY; + if ((HDC)printDC == NULL) { + return; + } + jbyte *image = NULL; try { long scanLineStride = J2DRasterBPP * width; @@ -2966,6 +3084,10 @@ static int bitsToDevice(HDC printDC, jbyte *image, long destX, long destY, long width, long height) { int result = 0; + if ((HDC)printDC == NULL) { + return result; + } + assert(printDC != NULL); assert(image != NULL); assert(destX >= 0); @@ -3707,6 +3829,10 @@ static double convertToPoints(long value, int units) { */ void setCapabilities(JNIEnv *env, jobject self, HDC printDC) { + if ((HDC)printDC == NULL) { + return; + } + jboolean err; // width of page in pixels jint pageWid = GetDeviceCaps(printDC, PHYSICALWIDTH); diff --git a/test/jdk/java/awt/PrintJob/PrintJobAfterEndTest.java b/test/jdk/java/awt/PrintJob/PrintJobAfterEndTest.java index e4ce07ac038..034866c4b3c 100644 --- a/test/jdk/java/awt/PrintJob/PrintJobAfterEndTest.java +++ b/test/jdk/java/awt/PrintJob/PrintJobAfterEndTest.java @@ -23,12 +23,12 @@ /* - @test - @bug 8370141 - @summary Test no crash printing to Graphics after job is ended. - @key headful printer - @run main PrintJobAfterEndTest -*/ + * @test + * @bug 8370141 8370637 + * @summary Test no crash printing to Graphics after job is ended. + * @key headful printer + * @run main PrintJobAfterEndTest + */ import java.awt.Frame; import java.awt.Graphics; diff --git a/test/jdk/java/awt/print/PrinterJob/PrintAfterEndTest.java b/test/jdk/java/awt/print/PrinterJob/PrintAfterEndTest.java index a1d173681e7..b7232e93497 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintAfterEndTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintAfterEndTest.java @@ -21,10 +21,10 @@ * questions. */ -/** +/* * @test * @key printer - * @bug 8370141 + * @bug 8370141 8370637 * @summary No crash when printing after job completed. * @run main PrintAfterEndTest */ From 2872f815fdbe4a84bbec1cd910e81e2e21fffbdf Mon Sep 17 00:00:00 2001 From: Dmitry Kulikov Date: Wed, 5 Nov 2025 18:54:34 +0000 Subject: [PATCH 046/512] 8360120: Bundled macOS applications not receiving OpenURL events when launched as subprocess Reviewed-by: kizune, prr --- .../classes/com/apple/eawt/Application.java | 4 +- .../libawt_lwawt/awt/ApplicationDelegate.h | 3 +- .../libawt_lwawt/awt/ApplicationDelegate.m | 40 +++++++++++++++---- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/java.desktop/macosx/classes/com/apple/eawt/Application.java b/src/java.desktop/macosx/classes/com/apple/eawt/Application.java index c1daee47912..137aa864510 100644 --- a/src/java.desktop/macosx/classes/com/apple/eawt/Application.java +++ b/src/java.desktop/macosx/classes/com/apple/eawt/Application.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,6 +75,7 @@ import sun.lwawt.macosx.CPlatformWindow; */ public final class Application { private static native void nativeInitializeApplicationDelegate(); + private static native void nativeInstallOpenURLEventHandler(); static Application sApplication = null; @@ -211,6 +212,7 @@ public final class Application { * @since Java for Mac OS X 10.5 Update 8 */ public void setOpenURIHandler(final OpenURIHandler openURIHandler) { + nativeInstallOpenURLEventHandler(); eventHandler.openURIDispatcher.setHandler(openURIHandler); } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.h b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.h index 8d0723c555a..831bdeee603 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.h +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ BOOL fHandlesDocumentTypes; BOOL fHandlesURLTypes; + BOOL fOpenURLHandlerInstalled; } @property (nonatomic, retain) NSMenuItem *fPreferencesMenu; diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m index b256c4121d4..d84fe9afa4a 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -243,11 +243,9 @@ AWT_ASSERT_APPKIT_THREAD; NSBundle *bundle = [NSBundle mainBundle]; fHandlesDocumentTypes = [bundle objectForInfoDictionaryKey:@"CFBundleDocumentTypes"] != nil || [bundle _hasEAWTOverride:@"DocumentHandler"]; fHandlesURLTypes = [bundle objectForInfoDictionaryKey:@"CFBundleURLTypes"] != nil || [bundle _hasEAWTOverride:@"URLHandler"]; + fOpenURLHandlerInstalled = NO; if (fHandlesURLTypes) { - [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self - andSelector:@selector(_handleOpenURLEvent:withReplyEvent:) - forEventClass:kInternetEventClass - andEventID:kAEGetURL]; + [self _installOpenURLHandler]; } // By HIG, Preferences are not available unless there is a handler. By default in Mac OS X, @@ -302,9 +300,19 @@ static jclass sjc_AppEventHandler = NULL; #define GET_APPEVENTHANDLER_CLASS_RETURN(ret) \ GET_CLASS_RETURN(sjc_AppEventHandler, "com/apple/eawt/_AppEventHandler", ret); -- (void)_handleOpenURLEvent:(NSAppleEventDescriptor *)openURLEvent withReplyEvent:(NSAppleEventDescriptor *)replyEvent { - if (!fHandlesURLTypes) return; +- (void)_installOpenURLHandler { +AWT_ASSERT_APPKIT_THREAD; + if (fOpenURLHandlerInstalled) return; + [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self + andSelector:@selector(_handleOpenURLEvent:withReplyEvent:) + forEventClass:kInternetEventClass + andEventID:kAEGetURL]; + + fOpenURLHandlerInstalled = YES; +} + +- (void)_handleOpenURLEvent:(NSAppleEventDescriptor *)openURLEvent withReplyEvent:(NSAppleEventDescriptor *)replyEvent { NSString *url = [[openURLEvent paramDescriptorForKeyword:keyDirectObject] stringValue]; [ApplicationDelegate _openURL:url]; @@ -626,6 +634,24 @@ JNI_COCOA_ENTER(env); JNI_COCOA_EXIT(env); } +/* + * Class: com_apple_eawt_Application + * Method: nativeInstallOpenURLEventHandler + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_com_apple_eawt_Application_nativeInstallOpenURLEventHandler +(JNIEnv *env, jclass clz) +{ +JNI_COCOA_ENTER(env); + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ + ApplicationDelegate *delegate = [ApplicationDelegate sharedDelegate]; + if (delegate != nil) { + [delegate _installOpenURLHandler]; + } + }]; +JNI_COCOA_EXIT(env); +} + /* * Class: com_apple_eawt__AppEventHandler * Method: nativeOpenCocoaAboutWindow From 5a37374dcaae0d3939570b33418f772a901df21a Mon Sep 17 00:00:00 2001 From: Phil Race Date: Wed, 5 Nov 2025 18:55:07 +0000 Subject: [PATCH 047/512] 8368576: PrintJob.getGraphics() does not specify behavior after PrintJob.end() Reviewed-by: psadhukhan, tr, serb --- src/java.desktop/share/classes/java/awt/PrintJob.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/java.desktop/share/classes/java/awt/PrintJob.java b/src/java.desktop/share/classes/java/awt/PrintJob.java index f4ea24efd97..926de65608b 100644 --- a/src/java.desktop/share/classes/java/awt/PrintJob.java +++ b/src/java.desktop/share/classes/java/awt/PrintJob.java @@ -46,6 +46,8 @@ public abstract class PrintJob { * The page is sent to the printer when the graphics * object is disposed. This graphics object will also implement * the PrintGraphics interface. + * If {@code PrintJob.end()} has been called, this method will + * return {@code null}. * @see PrintGraphics * @return the graphics context for printing the next page */ From acc8a76db2314211dd29a5b84c5bbe73d9055c76 Mon Sep 17 00:00:00 2001 From: Jeremy Wood Date: Wed, 5 Nov 2025 18:57:03 +0000 Subject: [PATCH 048/512] 8357034: GifImageDecoder can produce wrong transparent pixels Reviewed-by: jdv, prr --- .../sun/awt/image/GifImageDecoder.java | 6 +- test/jdk/sun/awt/image/gif/GifBuilder.java | 8 +- test/jdk/sun/awt/image/gif/GifComparison.java | 95 +++++++++++++------ .../awt/image/gif/GifEmptyBackgroundTest.java | 16 +++- .../gif/GifSavedImageTransparentTest.java | 53 +++++++++++ 5 files changed, 143 insertions(+), 35 deletions(-) create mode 100644 test/jdk/sun/awt/image/gif/GifSavedImageTransparentTest.java diff --git a/src/java.desktop/share/classes/sun/awt/image/GifImageDecoder.java b/src/java.desktop/share/classes/sun/awt/image/GifImageDecoder.java index ae7ee6618bf..a8deaa71a4b 100644 --- a/src/java.desktop/share/classes/sun/awt/image/GifImageDecoder.java +++ b/src/java.desktop/share/classes/sun/awt/image/GifImageDecoder.java @@ -343,6 +343,7 @@ public class GifImageDecoder extends ImageDecoder { private short[] prefix = new short[4096]; private byte[] suffix = new byte[4096]; private byte[] outCode = new byte[4097]; + private boolean isSavedModelReliable = true; private static native void initIDs(); @@ -396,7 +397,7 @@ public class GifImageDecoder extends ImageDecoder { int off = y * global_width + x2; boolean save = (curframe.disposal_method == GifFrame.DISPOSAL_SAVE); if (trans_pixel >= 0 && !curframe.initialframe) { - if (saved_image != null && model.equals(saved_model)) { + if (saved_image != null && model.equals(saved_model) && isSavedModelReliable) { for (int i = rasbeg; i < rasend; i++, off++) { byte pixel = rasline[i]; if ((pixel & 0xff) == trans_pixel) { @@ -406,6 +407,8 @@ public class GifImageDecoder extends ImageDecoder { } } } else { + isSavedModelReliable = false; + // We have to do this the hard way - only transmit // the non-transparent sections of the line... // Fix for 6301050: the interlacing is ignored in this case @@ -597,6 +600,7 @@ public class GifImageDecoder extends ImageDecoder { } return false; } + boolean ret = parseImage(x, y, width, height, interlace, initCodeSize, block, rasline, model); diff --git a/test/jdk/sun/awt/image/gif/GifBuilder.java b/test/jdk/sun/awt/image/gif/GifBuilder.java index 41eed6abeff..d118bdd0149 100644 --- a/test/jdk/sun/awt/image/gif/GifBuilder.java +++ b/test/jdk/sun/awt/image/gif/GifBuilder.java @@ -65,12 +65,16 @@ public class GifBuilder { /** * This creates a sample gif image based on a series of FrameDescriptions, * and the calls {@link GifComparison#run(URL)} + * + * @param frameDir an optional directory to write all frames as PNGs to. + * See {@link GifComparison#run(URL, File)} */ - public static void test(FrameDescription... frameDescriptions) + public static void test(FrameDescription[] frameDescriptions, + File frameDir) throws Throwable { File file = createTestFile(frameDescriptions); try { - GifComparison.run(file.toURI().toURL()); + GifComparison.run(file.toURI().toURL(), frameDir); } finally { file.delete(); } diff --git a/test/jdk/sun/awt/image/gif/GifComparison.java b/test/jdk/sun/awt/image/gif/GifComparison.java index d0ef3cc128d..a3deb38a810 100644 --- a/test/jdk/sun/awt/image/gif/GifComparison.java +++ b/test/jdk/sun/awt/image/gif/GifComparison.java @@ -38,6 +38,7 @@ import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ImageConsumer; import java.awt.image.IndexColorModel; +import java.io.File; import java.net.URL; import java.util.Hashtable; import java.util.LinkedList; @@ -59,13 +60,21 @@ public class GifComparison { * if ImageIO and ToolkitImage produce different BufferedImage renderings. * * @param srcURL the URL of the image to inspect + * @param frameDir an optional directory to write frames to as PNG images. + * The frames should render identically whether we use + * the ImageIO model or the ToolkitImage model. If they're + * identical, then we only output one image, such as + * "frame_0.png". If they're different then we'll + * output two images: "frame_0_iio.png" and + * "frame_0_awt.png". * * @return the last frame encoded as a TYPE_INT_ARGB image. *

    * Unit tests may further inspect this image to make sure certain * conditions are met. */ - public static BufferedImage run(URL srcURL) throws Throwable { + public static BufferedImage run(URL srcURL, File frameDir) + throws Throwable { System.out.println("Comparing ImageIO vs ToolkitImage rendering of " + srcURL); ImageIOModel ioModel = new ImageIOModel(srcURL); @@ -73,41 +82,67 @@ public class GifComparison { BufferedImage lastImage = null; - int a = ioModel.frames.size() - 1; - BufferedImage ioImg = ioModel.getFrame(a); - BufferedImage awtImage = awtModel.getFrame(a); + // if frameDir exists: test & export all frames. + // Otherwise: only test the last frame + int startIndex = frameDir == null ? ioModel.frames.size() - 1 : 0; - lastImage = awtImage; + for (int a = startIndex; a < ioModel.frames.size(); a++) { + BufferedImage ioImg = ioModel.getFrame(a); + BufferedImage awtImage = awtModel.getFrame(a); - if (!(ioImg.getWidth() == awtImage.getWidth() && - ioImg.getHeight() == awtImage.getHeight())) - throw new Error("These images are not the same size: " + - ioImg.getWidth() + "x" + ioImg.getHeight() + " vs " + - awtImage.getWidth() + "x" + awtImage.getHeight()); + lastImage = awtImage; - for (int y = 0; y < ioImg.getHeight(); y++) { - for (int x = 0; x < ioImg.getWidth(); x++) { - int argb1 = ioImg.getRGB(x, y); - int argb2 = awtImage.getRGB(x, y); + try { + if (!(ioImg.getWidth() == awtImage.getWidth() && + ioImg.getHeight() == awtImage.getHeight())) + throw new Error("These images are not the same size: " + + ioImg.getWidth() + "x" + ioImg.getHeight() + + " vs " + + awtImage.getWidth() + "x" + awtImage.getHeight()); - int alpha1 = (argb1 & 0xff000000) >> 24; - int alpha2 = (argb2 & 0xff000000) >> 24; - if (alpha1 == 0 && alpha2 == 0) { - continue; - } else if (alpha1 == 0 || alpha2 == 0) { - throw new Error("pixels at (" + x + ", " + y + - ") have different opacities: " + - Integer.toUnsignedString(argb1, 16) + " vs " + - Integer.toUnsignedString(argb2, 16)); + for (int y = 0; y < ioImg.getHeight(); y++) { + for (int x = 0; x < ioImg.getWidth(); x++) { + int argb1 = ioImg.getRGB(x, y); + int argb2 = awtImage.getRGB(x, y); + + int alpha1 = (argb1 & 0xff000000) >> 24; + int alpha2 = (argb2 & 0xff000000) >> 24; + if (alpha1 == 0 && alpha2 == 0) { + continue; + } else if (alpha1 == 0 || alpha2 == 0) { + throw new Error("pixels at (" + x + ", " + y + + ") have different opacities: " + + Integer.toUnsignedString(argb1, 16) + + " vs " + + Integer.toUnsignedString(argb2, 16)); + } + int rgb1 = argb1 & 0xffffff; + int rgb2 = argb2 & 0xffffff; + if (rgb1 != rgb2) { + throw new Error("pixels at (" + x + ", " + y + + ") have different opaque RGB values: " + + Integer.toUnsignedString(rgb1, 16) + + " vs " + + Integer.toUnsignedString(rgb2, 16)); + } + } } - int rgb1 = argb1 & 0xffffff; - int rgb2 = argb2 & 0xffffff; - if (rgb1 != rgb2) { - throw new Error("pixels at (" + x + ", " + y + - ") have different opaque RGB values: " + - Integer.toUnsignedString(rgb1, 16) + " vs " + - Integer.toUnsignedString(rgb2, 16)); + + if (frameDir != null) { + // the two models are identical, so simply write one image: + File pngFile = new File(frameDir, "frame_" + a + ".png"); + ImageIO.write(ioImg, "png", pngFile); + System.out.println("\tWrote " + pngFile); } + } catch (Throwable t) { + if (frameDir != null) { + File f1 = new File(frameDir, "frame_" + + a + "_iio.png"); + File f2 = new File(frameDir, "frame_" + + a + "_awt.png"); + ImageIO.write(ioImg, "png", f1); + ImageIO.write(awtImage, "png", f2); + System.out.println("\tWrote " + f1 + " vs " + f2); + } + throw t; } } System.out.println("Passed"); diff --git a/test/jdk/sun/awt/image/gif/GifEmptyBackgroundTest.java b/test/jdk/sun/awt/image/gif/GifEmptyBackgroundTest.java index 3adc2faa387..3b230cf3a57 100644 --- a/test/jdk/sun/awt/image/gif/GifEmptyBackgroundTest.java +++ b/test/jdk/sun/awt/image/gif/GifEmptyBackgroundTest.java @@ -28,14 +28,26 @@ * the disposal method changes from 2 to 1 */ +import java.io.File; + public class GifEmptyBackgroundTest { public static void main(String[] args) throws Throwable { - GifBuilder.test( + GifBuilder.FrameDescription[] frames = + new GifBuilder.FrameDescription[] { new GifBuilder.FrameDescription( GifBuilder.Disposal.restoreToBackgroundColor, false), new GifBuilder.FrameDescription( GifBuilder.Disposal.doNotDispose, false), new GifBuilder.FrameDescription( - GifBuilder.Disposal.doNotDispose, false) ); + GifBuilder.Disposal.doNotDispose, false) + }; + + File dir = null; + + // un-comment to visually inspect the frames: +// dir = new File("8356137-frames"); +// dir.mkdir(); + + GifBuilder.test(frames, dir); } } diff --git a/test/jdk/sun/awt/image/gif/GifSavedImageTransparentTest.java b/test/jdk/sun/awt/image/gif/GifSavedImageTransparentTest.java new file mode 100644 index 00000000000..10db453bd63 --- /dev/null +++ b/test/jdk/sun/awt/image/gif/GifSavedImageTransparentTest.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8357034 + * @summary This test verifies that when the transparent pixel index changes + * and we're rendering on top of another frame we respect the new transparency. + */ + +import java.io.File; + +public class GifSavedImageTransparentTest { + public static void main(String[] args) throws Throwable { + GifBuilder.FrameDescription[] frames = + new GifBuilder.FrameDescription[] { + new GifBuilder.FrameDescription( + GifBuilder.Disposal.doNotDispose, false), + new GifBuilder.FrameDescription( + GifBuilder.Disposal.doNotDispose, true), + new GifBuilder.FrameDescription( + GifBuilder.Disposal.doNotDispose, true) + }; + + File dir = null; + + // un-comment to visually inspect the frames: +// dir = new File("8357034-frames"); +// dir.mkdir(); + + GifBuilder.test(frames, dir); + } +} From 1357be98fc7aeb73655ed1a31d0b6fa7a7213c3e Mon Sep 17 00:00:00 2001 From: Ashutosh Mehra Date: Wed, 5 Nov 2025 21:38:34 +0000 Subject: [PATCH 049/512] 8371178: Preserve fast version of getfield and putfield in AOTCache Reviewed-by: adinn, iklam --- src/hotspot/share/cds/aotMetaspace.cpp | 105 ++++++++++++++++++++--- src/hotspot/share/cds/aotMetaspace.hpp | 2 +- src/hotspot/share/cds/archiveBuilder.cpp | 2 +- 3 files changed, 96 insertions(+), 13 deletions(-) diff --git a/src/hotspot/share/cds/aotMetaspace.cpp b/src/hotspot/share/cds/aotMetaspace.cpp index d80383be272..039c32a2bad 100644 --- a/src/hotspot/share/cds/aotMetaspace.cpp +++ b/src/hotspot/share/cds/aotMetaspace.cpp @@ -77,11 +77,13 @@ #include "memory/universe.hpp" #include "nmt/memTracker.hpp" #include "oops/compressedKlass.hpp" +#include "oops/constantPool.inline.hpp" #include "oops/instanceMirrorKlass.hpp" #include "oops/klass.inline.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "oops/oopHandle.hpp" +#include "oops/resolvedFieldEntry.hpp" #include "oops/trainingData.hpp" #include "prims/jvmtiExport.hpp" #include "runtime/arguments.hpp" @@ -519,21 +521,102 @@ void AOTMetaspace::serialize(SerializeClosure* soc) { soc->do_tag(666); } -static void rewrite_nofast_bytecode(const methodHandle& method) { +// In AOTCache workflow, when dumping preimage, the constant pool entries are stored in unresolved state. +// So the fast version of getfield/putfield needs to be converted to nofast version. +// When dumping the final image in the assembly phase, these nofast versions are converted back to fast versions +// if the constant pool entry refered by these bytecodes is stored in resolved state. +// Same principle applies to static and dynamic archives. If the constant pool entry is in resolved state, then +// the fast version of the bytecodes can be preserved, else use the nofast version. +// +// The fast versions of aload_0 (i.e. _fast_Xaccess_0) merges the bytecode pair (aload_0, fast_Xgetfield). +// If the fast version of aload_0 is preserved in AOTCache, then the JVMTI notifications for field access and +// breakpoint events will be skipped for the second bytecode (fast_Xgetfield) in the pair. +// Same holds for fast versions of iload_0. So for these bytecodes, nofast version is used. +static void rewrite_bytecodes(const methodHandle& method) { + ConstantPool* cp = method->constants(); BytecodeStream bcs(method); + Bytecodes::Code new_code; + + LogStreamHandle(Trace, aot, resolve) lsh; + if (lsh.is_enabled()) { + lsh.print("Rewriting bytecodes for "); + method()->print_external_name(&lsh); + lsh.print("\n"); + } + while (!bcs.is_last_bytecode()) { Bytecodes::Code opcode = bcs.next(); - switch (opcode) { - case Bytecodes::_getfield: *bcs.bcp() = Bytecodes::_nofast_getfield; break; - case Bytecodes::_putfield: *bcs.bcp() = Bytecodes::_nofast_putfield; break; - case Bytecodes::_aload_0: *bcs.bcp() = Bytecodes::_nofast_aload_0; break; - case Bytecodes::_iload: { - if (!bcs.is_wide()) { - *bcs.bcp() = Bytecodes::_nofast_iload; + // Use current opcode as the default value of new_code + new_code = opcode; + switch(opcode) { + case Bytecodes::_getfield: { + uint rfe_index = bcs.get_index_u2(); + bool is_resolved = cp->is_resolved(rfe_index, opcode); + if (is_resolved) { + assert(!CDSConfig::is_dumping_preimage_static_archive(), "preimage should not have resolved field references"); + ResolvedFieldEntry* rfe = cp->resolved_field_entry_at(bcs.get_index_u2()); + switch(rfe->tos_state()) { + case btos: + // fallthrough + case ztos: new_code = Bytecodes::_fast_bgetfield; break; + case atos: new_code = Bytecodes::_fast_agetfield; break; + case itos: new_code = Bytecodes::_fast_igetfield; break; + case ctos: new_code = Bytecodes::_fast_cgetfield; break; + case stos: new_code = Bytecodes::_fast_sgetfield; break; + case ltos: new_code = Bytecodes::_fast_lgetfield; break; + case ftos: new_code = Bytecodes::_fast_fgetfield; break; + case dtos: new_code = Bytecodes::_fast_dgetfield; break; + default: + ShouldNotReachHere(); + break; + } + } else { + new_code = Bytecodes::_nofast_getfield; } break; } - default: break; + case Bytecodes::_putfield: { + uint rfe_index = bcs.get_index_u2(); + bool is_resolved = cp->is_resolved(rfe_index, opcode); + if (is_resolved) { + assert(!CDSConfig::is_dumping_preimage_static_archive(), "preimage should not have resolved field references"); + ResolvedFieldEntry* rfe = cp->resolved_field_entry_at(bcs.get_index_u2()); + switch(rfe->tos_state()) { + case btos: new_code = Bytecodes::_fast_bputfield; break; + case ztos: new_code = Bytecodes::_fast_zputfield; break; + case atos: new_code = Bytecodes::_fast_aputfield; break; + case itos: new_code = Bytecodes::_fast_iputfield; break; + case ctos: new_code = Bytecodes::_fast_cputfield; break; + case stos: new_code = Bytecodes::_fast_sputfield; break; + case ltos: new_code = Bytecodes::_fast_lputfield; break; + case ftos: new_code = Bytecodes::_fast_fputfield; break; + case dtos: new_code = Bytecodes::_fast_dputfield; break; + default: + ShouldNotReachHere(); + break; + } + } else { + new_code = Bytecodes::_nofast_putfield; + } + break; + } + case Bytecodes::_aload_0: + // Revert _fast_Xaccess_0 or _aload_0 to _nofast_aload_0 + new_code = Bytecodes::_nofast_aload_0; + break; + case Bytecodes::_iload: + if (!bcs.is_wide()) { + new_code = Bytecodes::_nofast_iload; + } + break; + default: + break; + } + if (opcode != new_code) { + *bcs.bcp() = new_code; + if (lsh.is_enabled()) { + lsh.print_cr("%d:%s -> %s", bcs.bci(), Bytecodes::name(opcode), Bytecodes::name(new_code)); + } } } } @@ -541,11 +624,11 @@ static void rewrite_nofast_bytecode(const methodHandle& method) { // [1] Rewrite all bytecodes as needed, so that the ConstMethod* will not be modified // at run time by RewriteBytecodes/RewriteFrequentPairs // [2] Assign a fingerprint, so one doesn't need to be assigned at run-time. -void AOTMetaspace::rewrite_nofast_bytecodes_and_calculate_fingerprints(Thread* thread, InstanceKlass* ik) { +void AOTMetaspace::rewrite_bytecodes_and_calculate_fingerprints(Thread* thread, InstanceKlass* ik) { for (int i = 0; i < ik->methods()->length(); i++) { methodHandle m(thread, ik->methods()->at(i)); if (ik->can_be_verified_at_dumptime() && ik->is_linked()) { - rewrite_nofast_bytecode(m); + rewrite_bytecodes(m); } Fingerprinter fp(m); // The side effect of this call sets method's fingerprint field. diff --git a/src/hotspot/share/cds/aotMetaspace.hpp b/src/hotspot/share/cds/aotMetaspace.hpp index 379c684e939..c7b1578ec08 100644 --- a/src/hotspot/share/cds/aotMetaspace.hpp +++ b/src/hotspot/share/cds/aotMetaspace.hpp @@ -144,7 +144,7 @@ public: // (Heap region alignments are decided by GC). static size_t core_region_alignment(); static size_t protection_zone_size(); - static void rewrite_nofast_bytecodes_and_calculate_fingerprints(Thread* thread, InstanceKlass* ik); + static void rewrite_bytecodes_and_calculate_fingerprints(Thread* thread, InstanceKlass* ik); // print loaded classes names to file. static void dump_loaded_classes(const char* file_name, TRAPS); #endif diff --git a/src/hotspot/share/cds/archiveBuilder.cpp b/src/hotspot/share/cds/archiveBuilder.cpp index f5026339086..539c2672cf6 100644 --- a/src/hotspot/share/cds/archiveBuilder.cpp +++ b/src/hotspot/share/cds/archiveBuilder.cpp @@ -952,7 +952,7 @@ void ArchiveBuilder::make_klasses_shareable() { } } - AOTMetaspace::rewrite_nofast_bytecodes_and_calculate_fingerprints(Thread::current(), ik); + AOTMetaspace::rewrite_bytecodes_and_calculate_fingerprints(Thread::current(), ik); ik->remove_unshareable_info(); } From d5831ed866cb3d1cf2c77d7a3e535afc9e2b688b Mon Sep 17 00:00:00 2001 From: Peyang Date: Wed, 5 Nov 2025 22:26:03 +0000 Subject: [PATCH 050/512] 8357880: Code formatting typo in Cipher.getMaxAllowedParameterSpec Reviewed-by: fandreuzzi, mullan --- src/java.base/share/classes/javax/crypto/Cipher.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/java.base/share/classes/javax/crypto/Cipher.java b/src/java.base/share/classes/javax/crypto/Cipher.java index f95917b5c86..6ff5a4e00ac 100644 --- a/src/java.base/share/classes/javax/crypto/Cipher.java +++ b/src/java.base/share/classes/javax/crypto/Cipher.java @@ -263,7 +263,7 @@ public class Cipher { } /** - * Creates a {code Cipher} object. Called internally by {code NullCipher}. + * Creates a {@code Cipher} object. Called internally by {@code NullCipher}. * * @param cipherSpi the delegate * @param transformation the transformation @@ -2690,7 +2690,7 @@ public class Cipher { } /** - * Returns an {code AlgorithmParameterSpec} object which contains + * Returns an {@code AlgorithmParameterSpec} object which contains * the maximum {@code Cipher} parameter value according to the * jurisdiction policy file. If JCE unlimited strength jurisdiction * policy files are installed or there is no maximum limit on the @@ -2698,7 +2698,7 @@ public class Cipher { * {@code null} will be returned. * * @param transformation the cipher transformation - * @return an {code AlgorithmParameterSpec} object which holds the maximum + * @return an {@code AlgorithmParameterSpec} object which holds the maximum * value or {@code null} * @throws NullPointerException if {@code transformation} * is {@code null} From 188da51f30e5ca3945fee91fe2e94f0466151c06 Mon Sep 17 00:00:00 2001 From: Jaikiran Pai Date: Thu, 6 Nov 2025 04:42:20 +0000 Subject: [PATCH 051/512] 8365699: Remove jdk.internal.javac.PreviewFeature.Feature enum values for features finalized in Java 25 or earlier Reviewed-by: vromero, liach --- .../jdk/internal/javac/PreviewFeature.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java index e6c994a12b1..eb0346c7397 100644 --- a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java +++ b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java @@ -64,18 +64,27 @@ public @interface PreviewFeature { * Values should be annotated with the feature's {@code JEP}. */ public enum Feature { - // while building the interim javac, the ClassReader will produce a warning when loading a class - // keeping the constant of a feature that has been integrated or dropped, serves the purpose of muting such warnings. + // The JDK build process involves creating an interim javac which is then + // used to compile the rest of the JDK. The jdk.internal.javac.PreviewFeature + // annotation from the current sources is used when compiling interim javac. + // That's because the javac APIs of the current sources may be annotated with + // this annotation and they may be using the enum constants of the current sources. + // Furthermore, when compiling interim javac, the class files from the bootstrap JDK get + // used and those may also contain the PreviewFeature annotation. However, they may be + // using the enum constants of the bootstrap JDK's PreviewFeature annotation. + // If javac sees an annotation with an unknown enum constant, it produces a warning, + // and that in turn fails the build. + // So, in the current sources, we need to preserve the PreviewFeature enum constants + // for as long as the interim javac build needs it. As a result, we retain PreviewFeature + // enum constants for preview features that are present in the bootstrap JDK. + // Older constants can be removed. + // + // For example, Class-File API became final in JDK 24. As soon as JDK 23 was dropped as + // the bootstrap JDK, the CLASSFILE_API enum constant became eligible for removal. //--- - IMPLICIT_CLASSES, //to be removed when boot JDK is 25 - SCOPED_VALUES, @JEP(number=505, title="Structured Concurrency", status="Fifth Preview") STRUCTURED_CONCURRENCY, - CLASSFILE_API, - STREAM_GATHERERS, - MODULE_IMPORTS, //remove when the boot JDK is JDK 25 - KEY_DERIVATION, //remove when the boot JDK is JDK 25 @JEP(number = 502, title = "Stable Values", status = "Preview") STABLE_VALUES, @JEP(number=470, title="PEM Encodings of Cryptographic Objects", status="Preview") From 3f40f4c362f6ff4d1ec7d513b4690ed5fade3e2a Mon Sep 17 00:00:00 2001 From: Ioi Lam Date: Thu, 6 Nov 2025 04:48:29 +0000 Subject: [PATCH 052/512] 8370975: OutputAnalyzer.matches() should use Matcher with Pattern.MULTILINE Reviewed-by: stefank --- .../test/lib/process/OutputAnalyzerTest.java | 70 ++++++++++++++++++- .../jdk/test/lib/process/OutputAnalyzer.java | 52 ++++++++------ 2 files changed, 98 insertions(+), 24 deletions(-) diff --git a/test/lib-test/jdk/test/lib/process/OutputAnalyzerTest.java b/test/lib-test/jdk/test/lib/process/OutputAnalyzerTest.java index 3426c7daab9..4d916f9b1fa 100644 --- a/test/lib-test/jdk/test/lib/process/OutputAnalyzerTest.java +++ b/test/lib-test/jdk/test/lib/process/OutputAnalyzerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -217,6 +217,69 @@ public class OutputAnalyzerTest { } } + { + // Multi-line output: OutputAnalyzer uses MULTILINE but not DOTALL, so "." doesn't match newline, but + // "^" and "$" matches just after or just before, respectively, a newline. + stdout = "aaaaaa\nxxxxxx\n"; + stderr = "bbbbbb\nyyyyyy\n"; + + OutputAnalyzer out = new OutputAnalyzer(stdout, stderr); + + out.shouldMatch("aaa"); + out.shouldMatch("xxx"); + out.shouldMatch("bbb"); + out.shouldMatch("yyy"); + + out.stdoutShouldMatch("aaaaaa"); + out.stdoutShouldMatch("xxxxxx"); + out.stderrShouldMatch("bbbbbb"); + out.stderrShouldMatch("yyyyyy"); + + out.shouldMatch("^aaaaaa$"); + out.shouldMatch("^xxxxxx$"); + out.shouldMatch("^bbbbbb$"); + out.shouldMatch("^yyyyyy$"); + + out.stdoutShouldMatch("^aaaaaa$"); + out.stdoutShouldMatch("^xxxxxx$"); + out.stderrShouldMatch("^bbbbbb$"); + out.stderrShouldMatch("^yyyyyy$"); + + out.shouldMatch ("a.*"); + out.shouldNotMatch("a.*x"); + out.shouldMatch ("b.*"); + out.shouldNotMatch("b.*y"); + out.stdoutShouldMatch ("a.*"); + out.stdoutShouldNotMatch("a.*x"); + out.stderrShouldMatch ("b.*"); + out.stderrShouldNotMatch("b.*y"); + + check(out.matches("^aaaaaa$")); + check(out.matches("^yyyyyy$")); + check(out.stdoutMatches("^aaaaaa$")); + check(out.stderrMatches("^yyyyyy$")); + + check( out.matches("a.*")); + check(!out.matches("a.*x")); + + check( out.stdoutMatches("a.*")); + check(!out.stdoutMatches("a.*x")); + + check( out.stderrMatches("b.*")); + check(!out.stderrMatches("b.*y")); + + // Test the "contains" methods as well + check(out.contains("aaa\nxxx")); + check(out.contains("bbb\nyyy")); + check(out.stdoutContains("aaa\nxxx")); + check(out.stderrContains("bbb\nyyy")); + + check(!out.contains("X")); + check(!out.contains("X")); + check(!out.stdoutContains("X")); + check(!out.stderrContains("X")); + } + { try { // Verify the exception message @@ -244,4 +307,9 @@ public class OutputAnalyzerTest { } } + private static void check(boolean b) { + if (!b) { + throw new RuntimeException("Check failed"); + } + } } diff --git a/test/lib/jdk/test/lib/process/OutputAnalyzer.java b/test/lib/jdk/test/lib/process/OutputAnalyzer.java index fa5e30dd815..d8b3f470260 100644 --- a/test/lib/jdk/test/lib/process/OutputAnalyzer.java +++ b/test/lib/jdk/test/lib/process/OutputAnalyzer.java @@ -354,25 +354,44 @@ public final class OutputAnalyzer { return this; } + /** + * Returns true if the pattern can be found in the given string(s). + * + * NOTE: The meaning of "match" in OutputAnalyzer is NOT the same as String.matches(). + * Rather it means "can the pattern be found in stdout and/or stderr". + * + * The pattern is comiled with MULTILINE but without DOTALL, so "." doesn't match newline, but + * "^" and "$" matches just after or just before, respectively, a newline. + */ + private boolean findPattern(String regexp, String... strings) { + Pattern pattern = Pattern.compile(regexp, Pattern.MULTILINE); + for (String s : strings) { + if (pattern.matcher(s).find()) { + return true; + } + } + return false; + } + /** * Returns true if stdout matches the given pattern */ public boolean stdoutMatches(String regexp) { - return getStdout().matches(regexp); + return findPattern(regexp, getStdout()); } /** * Returns true if stderr matches the given pattern */ public boolean stderrMatches(String regexp) { - return getStderr().matches(regexp); + return findPattern(regexp, getStderr()); } /** * Returns true if either stdout or stderr matches the given pattern */ public boolean matches(String regexp) { - return stdoutMatches(regexp) || stderrMatches(regexp); + return findPattern(regexp, getStdout(), getStderr()); } /** @@ -383,12 +402,7 @@ public final class OutputAnalyzer { * @throws RuntimeException If the pattern was not found */ public OutputAnalyzer shouldMatch(String regexp) { - String stdout = getStdout(); - String stderr = getStderr(); - Pattern pattern = Pattern.compile(regexp, Pattern.MULTILINE); - Matcher stdoutMatcher = pattern.matcher(stdout); - Matcher stderrMatcher = pattern.matcher(stderr); - if (!stdoutMatcher.find() && !stderrMatcher.find()) { + if (!matches(regexp)) { reportDiagnosticSummary(); throw new RuntimeException("'" + regexp + "' missing from stdout/stderr"); @@ -404,9 +418,7 @@ public final class OutputAnalyzer { * @throws RuntimeException If the pattern was not found */ public OutputAnalyzer stdoutShouldMatch(String regexp) { - String stdout = getStdout(); - Matcher matcher = Pattern.compile(regexp, Pattern.MULTILINE).matcher(stdout); - if (!matcher.find()) { + if (!stdoutMatches(regexp)) { reportDiagnosticSummary(); throw new RuntimeException("'" + regexp + "' missing from stdout"); @@ -421,12 +433,10 @@ public final class OutputAnalyzer { * @param pattern * @throws RuntimeException If the pattern was not found */ - public OutputAnalyzer stderrShouldMatch(String pattern) { - String stderr = getStderr(); - Matcher matcher = Pattern.compile(pattern, Pattern.MULTILINE).matcher(stderr); - if (!matcher.find()) { + public OutputAnalyzer stderrShouldMatch(String regexp) { + if (!stderrMatches(regexp)) { reportDiagnosticSummary(); - throw new RuntimeException("'" + pattern + throw new RuntimeException("'" + regexp + "' missing from stderr"); } return this; @@ -468,9 +478,7 @@ public final class OutputAnalyzer { * @throws RuntimeException If the pattern was found */ public OutputAnalyzer stdoutShouldNotMatch(String regexp) { - String stdout = getStdout(); - Matcher matcher = Pattern.compile(regexp, Pattern.MULTILINE).matcher(stdout); - if (matcher.find()) { + if (stdoutMatches(regexp)) { reportDiagnosticSummary(); throw new RuntimeException("'" + regexp + "' found in stdout"); @@ -486,9 +494,7 @@ public final class OutputAnalyzer { * @throws RuntimeException If the pattern was found */ public OutputAnalyzer stderrShouldNotMatch(String regexp) { - String stderr = getStderr(); - Matcher matcher = Pattern.compile(regexp, Pattern.MULTILINE).matcher(stderr); - if (matcher.find()) { + if (stderrMatches(regexp)) { reportDiagnosticSummary(); throw new RuntimeException("'" + regexp + "' found in stderr"); From c754e3e095cd367de9d3f69a4afb0c4be53a9342 Mon Sep 17 00:00:00 2001 From: Volkan Yazici Date: Thu, 6 Nov 2025 06:22:32 +0000 Subject: [PATCH 053/512] 8368528: HttpClient.Builder.connectTimeout should accept arbitrarily large values Reviewed-by: dfuchs --- .../internal/net/http/HttpQuicConnection.java | 16 +- .../internal/net/http/common/Deadline.java | 154 +++++--- .../net/httpclient/DurationOverflowTest.java | 349 ++++++++++++++++++ .../whitebox/DeadlineOverflowTestDriver.java | 30 ++ .../net/http/common/DeadlineOverflowTest.java | 129 +++++++ 5 files changed, 621 insertions(+), 57 deletions(-) create mode 100644 test/jdk/java/net/httpclient/DurationOverflowTest.java create mode 100644 test/jdk/java/net/httpclient/whitebox/DeadlineOverflowTestDriver.java create mode 100644 test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/common/DeadlineOverflowTest.java diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/HttpQuicConnection.java b/src/java.net.http/share/classes/jdk/internal/net/http/HttpQuicConnection.java index bbbe1157cdf..0a22256f6c6 100644 --- a/src/java.net.http/share/classes/jdk/internal/net/http/HttpQuicConnection.java +++ b/src/java.net.http/share/classes/jdk/internal/net/http/HttpQuicConnection.java @@ -499,22 +499,28 @@ abstract class HttpQuicConnection extends HttpConnection { }, exchange.parentExecutor.safeDelegate()); } - Optional timeout = client().connectTimeout(); CompletableFuture> fxi = handshakeCfCf; // In case of connection timeout, set up a timeout on the handshakeCfCf. // Note: this is a different timeout than the direct connection timeout. - if (timeout.isPresent()) { + Duration timeout = client().connectTimeout().orElse(null); + if (timeout != null) { // In case of timeout we need to close the quic connection - debug.log("setting up quic connect timeout: " + timeout.get().toMillis()); + debug.log("setting up quic connect timeout: " + timeout); + long timeoutMillis; + try { + timeoutMillis = timeout.toMillis(); + } catch (ArithmeticException _) { + timeoutMillis = Long.MAX_VALUE; + } fxi = handshakeCfCf.completeOnTimeout( MinimalFuture.failedFuture(new HttpConnectTimeoutException("quic connect timeout")), - timeout.get().toMillis(), TimeUnit.MILLISECONDS); + timeoutMillis, TimeUnit.MILLISECONDS); } // If we have set up any timeout, arrange to close the quicConnection // if one of the timeout expires - if (timeout.isPresent() || directTimeout.isPresent()) { + if (timeout != null || directTimeout.isPresent()) { fxi = fxi.handleAsync(this::handleTimeout, exchange.parentExecutor.safeDelegate()); } return fxi.thenCompose(Function.identity()); diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/common/Deadline.java b/src/java.net.http/share/classes/jdk/internal/net/http/common/Deadline.java index 3ee334885a3..6a042fd7d0d 100644 --- a/src/java.net.http/share/classes/jdk/internal/net/http/common/Deadline.java +++ b/src/java.net.http/share/classes/jdk/internal/net/http/common/Deadline.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,14 +28,22 @@ import java.time.DateTimeException; import java.time.Duration; import java.time.Instant; import java.time.temporal.ChronoUnit; -import java.time.temporal.Temporal; -import java.time.temporal.TemporalAccessor; -import java.time.temporal.TemporalAmount; import java.time.temporal.TemporalUnit; import java.time.temporal.UnsupportedTemporalTypeException; /** - * A Deadline represents an instant on a {@linkplain TimeLine time line}. + * An instantaneous point on the {@linkplain TimeLine time-line}. + *

    + * This class is immutable and thread-safe. + *

    + * Operations that add or subtract durations to a {@code Deadline}, whether + * represented as a {@link Duration} or as a {@code long} time increment (such + * as seconds or nanoseconds) do not throw on numeric overflow if the resulting + * {@code Deadline} would exceed {@link #MAX} or be less than {@link #MIN}. + * Instead, {@code MAX} or {@code MIN} is returned, respectively. Similarly, + * methods that return a duration as a {@code long} will either return + * {@link Long#MAX_VALUE} or {@link Long#MIN_VALUE} if the returned quantity + * would exceed the capacity of a {@code long}. */ public final class Deadline implements Comparable { @@ -49,17 +57,24 @@ public final class Deadline implements Comparable { /** - * Returns a copy of this deadline with the specified duration in nanoseconds added. + * {@return a deadline with the specified duration in nanoseconds added} *

    * This instance is immutable and unaffected by this method call. + *

    + * On {@linkplain ##overflow numeric overflows}, this method will return + * {@link Deadline#MAX} if the provided duration is positive, + * {@link Deadline#MIN} otherwise. * * @param nanosToAdd the nanoseconds to add, positive or negative - * @return a {@code Deadline} based on this deadline with the specified nanoseconds added, not null - * @throws DateTimeException if the result exceeds the maximum or minimum deadline - * @throws ArithmeticException if numeric overflow occurs */ public Deadline plusNanos(long nanosToAdd) { - return new Deadline(deadline.plusNanos(nanosToAdd)); + if (nanosToAdd == 0) return this; + try { + return new Deadline(deadline.plusNanos(nanosToAdd)); + } catch (DateTimeException | // "Instant exceeds minimum or maximum instant" + ArithmeticException _) { // "long overflow" + return nanosToAdd > 0 ? Deadline.MAX : Deadline.MIN; + } } /** @@ -89,92 +104,116 @@ public final class Deadline implements Comparable { } /** - * Returns a copy of this deadline with the specified amount subtracted. - *

    - * This returns a {@code Deadline}, based on this one, with the specified amount subtracted. - * The amount is typically {@link Duration} but may be any other type implementing - * the {@link TemporalAmount} interface. + * {@return a deadline with the specified amount subtracted from this deadline} *

    * This instance is immutable and unaffected by this method call. + *

    + * On {@linkplain ##overflow numeric overflows}, this method will return + * {@link Deadline#MIN} if the provided duration is positive, + * {@link Deadline#MAX} otherwise. * - * @param amountToSubtract the amount to subtract, not null - * @return a {@code Deadline} based on this deadline with the subtraction made, not null - * @throws DateTimeException if the subtraction cannot be made - * @throws ArithmeticException if numeric overflow occurs + * @param duration the amount to subtract, not null */ - public Deadline minus(TemporalAmount amountToSubtract) { - return Deadline.of(deadline.minus(amountToSubtract)); + public Deadline minus(Duration duration) { + if (duration.isZero()) return this; + try { + return Deadline.of(deadline.minus(duration)); + } catch (DateTimeException | // "Instant exceeds minimum or maximum instant" + ArithmeticException _) { // "long overflow" + return duration.isPositive() ? Deadline.MIN : Deadline.MAX; + } } /** - * Returns a copy of this deadline with the specified amount added. + * {@return a deadline with the specified amount added to this deadline} *

    * This returns a {@code Deadline}, based on this one, with the amount * in terms of the unit added. If it is not possible to add the amount, because the * unit is not supported or for some other reason, an exception is thrown. *

    * This instance is immutable and unaffected by this method call. + *

    + * On {@linkplain ##overflow numeric overflows}, this method will return + * {@link Deadline#MAX} if the provided amount is positive, + * {@link Deadline#MIN} otherwise. * * @see Instant#plus(long, TemporalUnit) * * @param amountToAdd the amount of the unit to add to the result, may be negative * @param unit the unit of the amount to add, not null - * @return a {@code Deadline} based on this deadline with the specified amount added, not null - * @throws DateTimeException if the addition cannot be made * @throws UnsupportedTemporalTypeException if the unit is not supported - * @throws ArithmeticException if numeric overflow occurs */ public Deadline plus(long amountToAdd, TemporalUnit unit) { if (amountToAdd == 0) return this; - return Deadline.of(deadline.plus(amountToAdd, unit)); + try { + return Deadline.of(deadline.plus(amountToAdd, unit)); + } catch (DateTimeException | // "Instant exceeds minimum or maximum instant" + ArithmeticException _) { // "long overflow" + return amountToAdd > 0 ? Deadline.MAX : Deadline.MIN; + } } /** - * Returns a copy of this deadline with the specified duration in seconds added. + * {@return a deadline with the specified duration in seconds added to this deadline} *

    * This instance is immutable and unaffected by this method call. + *

    + * On {@linkplain ##overflow numeric overflows}, this method will return + * {@link Deadline#MAX} if the provided duration is positive, + * {@link Deadline#MIN} otherwise. * * @param secondsToAdd the seconds to add, positive or negative - * @return a {@code Deadline} based on this deadline with the specified seconds added, not null - * @throws DateTimeException if the result exceeds the maximum or minimum deadline - * @throws ArithmeticException if numeric overflow occurs */ public Deadline plusSeconds(long secondsToAdd) { if (secondsToAdd == 0) return this; - return Deadline.of(deadline.plusSeconds(secondsToAdd)); + try { + return Deadline.of(deadline.plusSeconds(secondsToAdd)); + } catch (DateTimeException | // "Instant exceeds minimum or maximum instant" + ArithmeticException _) { // "long overflow" + return secondsToAdd > 0 ? Deadline.MAX : Deadline.MIN; + } } /** - * Returns a copy of this deadline with the specified duration in milliseconds added. + * {@return a deadline with the specified duration in milliseconds added to this deadline} *

    * This instance is immutable and unaffected by this method call. + *

    + * On {@linkplain ##overflow numeric overflows}, this method will return + * {@link Deadline#MAX} if the provided duration is positive, + * {@link Deadline#MIN} otherwise. * * @param millisToAdd the milliseconds to add, positive or negative - * @return a {@code Deadline} based on this deadline with the specified milliseconds added, not null - * @throws DateTimeException if the result exceeds the maximum or minimum deadline - * @throws ArithmeticException if numeric overflow occurs */ public Deadline plusMillis(long millisToAdd) { if (millisToAdd == 0) return this; - return Deadline.of(deadline.plusMillis(millisToAdd)); + try { + return Deadline.of(deadline.plusMillis(millisToAdd)); + } catch (DateTimeException | // "Instant exceeds minimum or maximum instant" + ArithmeticException _) { // "long overflow" + return millisToAdd > 0 ? Deadline.MAX : Deadline.MIN; + } } /** - * Returns a copy of this deadline with the specified amount added. - *

    - * This returns a {@code Deadline}, based on this one, with the specified amount added. - * The amount is typically {@link Duration} but may be any other type implementing - * the {@link TemporalAmount} interface. + * {@return a deadline with the specified duration added to this deadline} *

    * This instance is immutable and unaffected by this method call. + *

    + * On {@linkplain ##overflow numeric overflows}, this method will return + * {@link Deadline#MAX} if the provided duration is positive, + * {@link Deadline#MIN} otherwise. * - * @param amountToAdd the amount to add, not null - * @return a {@code Deadline} based on this deadline with the addition made, not null - * @throws DateTimeException if the addition cannot be made - * @throws ArithmeticException if numeric overflow occurs + * @param duration the duration to add, not null */ - public Deadline plus(TemporalAmount amountToAdd) { - return Deadline.of(deadline.plus(amountToAdd)); + public Deadline plus(Duration duration) { + if (duration.isZero()) return this; + try { + return Deadline.of(deadline.plus(duration)); + } catch (DateTimeException | // "Instant exceeds minimum or maximum instant" + ArithmeticException _) { // "long overflow" + return duration.isPositive() ? Deadline.MAX : Deadline.MIN; + } } /** @@ -188,16 +227,24 @@ public final class Deadline implements Comparable { * complete units between the two deadlines. *

    * This instance is immutable and unaffected by this method call. + *

    + * On {@linkplain ##overflow numeric overflows}, this method will return + * {@link Long#MAX_VALUE} if the current deadline is before the provided end + * deadline, {@link Long#MIN_VALUE} otherwise. * * @param endExclusive the end deadline, exclusive * @param unit the unit to measure the amount in, not null * @return the amount of time between this deadline and the end deadline - * @throws DateTimeException if the amount cannot be calculated * @throws UnsupportedTemporalTypeException if the unit is not supported - * @throws ArithmeticException if numeric overflow occurs */ public long until(Deadline endExclusive, TemporalUnit unit) { - return deadline.until(endExclusive.deadline, unit); + try { + return deadline.until(endExclusive.deadline, unit); + } catch (DateTimeException | // "Instant exceeds minimum or maximum instant" + ArithmeticException _) { // "long overflow" + int delta = compareTo(endExclusive); + return delta < 0 ? Long.MAX_VALUE : Long.MIN_VALUE; + } } /** @@ -266,10 +313,13 @@ public final class Deadline implements Comparable { * @param startInclusive the start deadline, inclusive, not null * @param endExclusive the end deadline, exclusive, not null * @return a {@code Duration}, not null - * @throws DateTimeException if the seconds between the deadline cannot be obtained - * @throws ArithmeticException if the calculation exceeds the capacity of {@code Duration} */ public static Duration between(Deadline startInclusive, Deadline endExclusive) { + if (startInclusive.equals(endExclusive)) return Duration.ZERO; + // `Deadline` works with `Instant` under the hood. + // Delta between `Instant.MIN` and `Instant.MAX` fits in a `Duration`. + // Hence, we should never receive a numeric overflow while calculating the delta between two deadlines. return Duration.between(startInclusive.deadline, endExclusive.deadline); } + } diff --git a/test/jdk/java/net/httpclient/DurationOverflowTest.java b/test/jdk/java/net/httpclient/DurationOverflowTest.java new file mode 100644 index 00000000000..bc836a7c5dd --- /dev/null +++ b/test/jdk/java/net/httpclient/DurationOverflowTest.java @@ -0,0 +1,349 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestEchoHandler; +import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestServer; +import jdk.internal.net.http.common.Logger; +import jdk.internal.net.http.common.Utils; +import jdk.test.lib.net.SimpleSSLContext; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import javax.net.ssl.SSLContext; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpClient.Version; +import java.net.http.HttpOption; +import java.net.http.HttpRequest; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; +import java.time.Duration; +import java.time.Instant; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; +import java.util.function.Supplier; +import java.util.stream.Stream; + +import static java.net.http.HttpClient.Builder.NO_PROXY; +import static java.net.http.HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY; +import static java.nio.charset.StandardCharsets.US_ASCII; +import static jdk.httpclient.test.lib.common.HttpServerAdapters.createClientBuilderFor; + +/* + * @test id=withoutPropertyConfig + * @bug 8368528 + * @summary Verifies that `Duration`-accepting programmatic public APIs, either + * individually, or in combination, work with arbitrarily large values + * + * @library /test/jdk/java/net/httpclient/lib + * /test/lib + * + * @run junit DurationOverflowTest + */ + +/* + * @test id=withPropertyConfig + * @bug 8368528 + * @summary Verifies that `Duration`-accepting programmatic public APIs, either + * individually, or in combination, work with arbitrarily large values + * when combined with duration-accepting property-based public APIs. + * + * @library /test/jdk/java/net/httpclient/lib + * /test/lib + * + * @comment 9223372036854775807 is the value of `Long.MAX_VALUE` + * + * @run junit/othervm + * -Djdk.httpclient.keepalive.timeout=9223372036854775807 + * DurationOverflowTest + * + * @comment `h3` infra is also enabled for this test since `j.h.k.timeout.h3` + * defaults to `j.h.k.timeout.h2` + * @run junit/othervm + * -Djdk.httpclient.keepalive.timeout.h2=9223372036854775807 + * -DallowedInfras=h2,h2s,h3 + * DurationOverflowTest + * + * @run junit/othervm + * -Djdk.httpclient.keepalive.timeout.h3=9223372036854775807 + * -DallowedInfras=h3 + * DurationOverflowTest + */ + +public class DurationOverflowTest { + + private static final String CLASS_NAME = DurationOverflowTest.class.getSimpleName(); + + private static final Logger LOGGER = Utils.getDebugLogger(CLASS_NAME::toString, Utils.DEBUG); + + private static final SSLContext SSL_CONTEXT = createSslContext(); + + private static SSLContext createSslContext() { + try { + return new SimpleSSLContext().get(); + } catch (IOException exception) { + throw new UncheckedIOException(exception); + } + } + + private static final List INFRAS = loadInfras(); + + private static final class Infra implements AutoCloseable { + + private static final AtomicInteger SERVER_COUNTER = new AtomicInteger(); + + private final String serverId; + + private final HttpTestServer server; + + private final Supplier clientBuilderSupplier; + + private final Supplier requestBuilderSupplier; + + private final boolean secure; + + private Infra( + String serverId, + HttpTestServer server, + Supplier clientBuilderSupplier, + Supplier requestBuilderSupplier, + boolean secure) { + this.serverId = serverId; + this.server = server; + this.clientBuilderSupplier = clientBuilderSupplier; + this.requestBuilderSupplier = requestBuilderSupplier; + this.secure = secure; + } + + private static Infra of(Version version, boolean secure) { + + // Create the server and the request URI + var sslContext = secure ? SSL_CONTEXT : null; + var server = createServer(version, sslContext); + server.getVersion(); + var handlerPath = "/%s/".formatted(CLASS_NAME); + var requestUriScheme = secure ? "https" : "http"; + var requestUri = URI.create("%s://%s%s-".formatted(requestUriScheme, server.serverAuthority(), handlerPath)); + + // Register the request handler + var serverId = "" + SERVER_COUNTER.getAndIncrement(); + server.addHandler( + // Intentionally opting for receiving a body to cover code paths associated with its retrieval + new HttpTestEchoHandler(false), + handlerPath); + + // Create client & request builders + Supplier clientBuilderSupplier = + () -> createClientBuilderFor(version) + .version(version) + .sslContext(SSL_CONTEXT) + .proxy(NO_PROXY); + Supplier requestBuilderSupplier = + () -> createRequestBuilder(requestUri, version); + + // Create the pair + var pair = new Infra(serverId, server, clientBuilderSupplier, requestBuilderSupplier, secure); + pair.server.start(); + LOGGER.log("Server[%s] is started at `%s`", serverId, server.serverAuthority()); + return pair; + + } + + private static HttpTestServer createServer(Version version, SSLContext sslContext) { + try { + return switch (version) { + case HTTP_1_1, HTTP_2 -> HttpTestServer.create(version, sslContext, null); + case HTTP_3 -> HttpTestServer.create(HTTP_3_URI_ONLY, sslContext, null); + }; + } catch (IOException exception) { + throw new UncheckedIOException(exception); + } + } + + private static HttpRequest.Builder createRequestBuilder(URI uri, Version version) { + var requestBuilder = HttpRequest.newBuilder(uri).version(version).HEAD(); + if (Version.HTTP_3.equals(version)) { + requestBuilder.setOption(HttpOption.H3_DISCOVERY, HttpOption.Http3DiscoveryMode.HTTP_3_URI_ONLY); + } + return requestBuilder; + } + + @Override + public void close() { + LOGGER.log("Server[%s] is stopping", serverId); + server.stop(); + } + + @Override + public String toString() { + var version = server.getVersion(); + var versionString = version.toString(); + return switch (version) { + case HTTP_1_1, HTTP_2 -> secure ? versionString.replaceFirst("_", "S_") : versionString; + case HTTP_3 -> versionString; + }; + } + + } + + private static List loadInfras() { + return Stream + .of(System.getProperty("allowedInfras", "h1,h1s,h2,h2s,h3").split(",")) + .map(infra -> { + LOGGER.log("Loading test infrastructure: `%s`", infra); + return switch (infra) { + case "h1" -> Infra.of(Version.HTTP_1_1, false); + case "h1s" -> Infra.of(Version.HTTP_1_1, true); + case "h2" -> Infra.of(Version.HTTP_2, false); + case "h2s" -> Infra.of(Version.HTTP_2, true); + case "h3" -> Infra.of(Version.HTTP_3, true); + default -> throw new IllegalArgumentException("Unknown test infrastructure: " + infra); + }; + }) + .toList(); + } + + @AfterAll + static void tearDownInfras() { + LOGGER.log("Tearing down test infrastructure"); + Exception[] exceptionRef = {null}; + infras().forEach(infra -> { + try { + infra.close(); + } catch (Exception exception) { + if (exceptionRef[0] == null) { + exceptionRef[0] = exception; + } else { + exceptionRef[0].addSuppressed(exception); + } + } + }); + if (exceptionRef[0] != null) { + throw new RuntimeException("Failed tearing down one or more test infrastructures", exceptionRef[0]); + } + } + + private static Stream infras() { + return INFRAS.stream(); + } + + public static final Set EXCESSIVE_DURATIONS = Set.of( + Duration.MAX, + // This triggers different exceptions than the ones triggered by `Duration.MAX` + Duration.ofMillis(Long.MAX_VALUE)); + + private static Stream infraDurationPairs() { + return infras().flatMap(infra -> EXCESSIVE_DURATIONS.stream() + .map(duration -> new InfraDurationPair(infra, duration))); + } + + private record InfraDurationPair(Infra infra, Duration duration) {} + + @ParameterizedTest + @MethodSource("infraDurationPairs") + void testClientConnectTimeout(InfraDurationPair pair) throws Exception { + testConfig(pair.infra, clientBuilder -> clientBuilder.connectTimeout(pair.duration), null); + } + + @ParameterizedTest + @MethodSource("infraDurationPairs") + void testRequestTimeout(InfraDurationPair pair) throws Exception { + testConfig(pair.infra, null, requestBuilder -> requestBuilder.timeout(pair.duration)); + } + + private static Stream infraDurationDurationTriples() { + return infras().flatMap(infra -> EXCESSIVE_DURATIONS.stream() + .flatMap(duration1 -> EXCESSIVE_DURATIONS.stream() + .map(duration2 -> new InfraDurationDurationTriple(infra, duration1, duration2)))); + } + + private record InfraDurationDurationTriple(Infra infra, Duration duration1, Duration duration2) {} + + @ParameterizedTest + @MethodSource("infraDurationDurationTriples") + void testClientConnectTimeoutAndRequestTimeout(InfraDurationDurationTriple triple) throws Exception { + testConfig( + triple.infra, + clientBuilder -> clientBuilder.connectTimeout(triple.duration1), + requestBuilder -> requestBuilder.timeout(triple.duration2)); + } + + private static void testConfig( + Infra infra, + Consumer clientBuilderConsumer, + Consumer requestBuilderConsumer) + throws Exception { + + // Create the client + var clientBuilder = infra.clientBuilderSupplier.get(); + if (clientBuilderConsumer != null) { + clientBuilderConsumer.accept(clientBuilder); + } + try (var client = clientBuilder.build()) { + + // Create the request + byte[] expectedBytes = "abc".repeat(8192).getBytes(US_ASCII); + var requestBuilder = infra.requestBuilderSupplier.get() + // Intentionally opting for sending a body to cover code paths associated with its delivery + .POST(BodyPublishers.ofByteArray(expectedBytes)); + if (requestBuilderConsumer != null) { + requestBuilderConsumer.accept(requestBuilder); + } + var request = requestBuilder.build(); + + // Execute the request. + // Doing it twice to touch code paths before & after a protocol upgrade, if present. + for (int requestIndex = 0; requestIndex < 2; requestIndex++) { + LOGGER.log("Executing request (attempt=%s)", requestIndex + 1); + var response = client.send(request, BodyHandlers.ofByteArray()); + + // Verify the response status code + if (response.statusCode() != 200) { + var message = String.format( + "Unexpected status code: %s (attempt=%s)", + response.statusCode(), requestIndex + 1); + throw new AssertionError(message); + } + + // Verify the response body + int mismatchIndex = Arrays.mismatch(expectedBytes, response.body()); + if (mismatchIndex > 0) { + var message = String.format( + "Body mismatch at index %s (attempt=%s)", + mismatchIndex, requestIndex + 1); + throw new AssertionError(message); + } + + } + + } + + } + +} diff --git a/test/jdk/java/net/httpclient/whitebox/DeadlineOverflowTestDriver.java b/test/jdk/java/net/httpclient/whitebox/DeadlineOverflowTestDriver.java new file mode 100644 index 00000000000..a7270c2bfdb --- /dev/null +++ b/test/jdk/java/net/httpclient/whitebox/DeadlineOverflowTestDriver.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8368528 + * @summary Verifies that `Deadline` returns extremums on numeric overflows + * @modules java.net.http/jdk.internal.net.http.common:+open + * @run junit java.net.http/jdk.internal.net.http.common.DeadlineOverflowTest + */ diff --git a/test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/common/DeadlineOverflowTest.java b/test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/common/DeadlineOverflowTest.java new file mode 100644 index 00000000000..2d3d32b084d --- /dev/null +++ b/test/jdk/java/net/httpclient/whitebox/java.net.http/jdk/internal/net/http/common/DeadlineOverflowTest.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.internal.net.http.common; + +import org.junit.jupiter.api.Test; + +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; + +import static java.time.temporal.ChronoUnit.NANOS; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class DeadlineOverflowTest { + + @Test + void test_DeadlineOf_InstantMin() { + assertEquals(Instant.MIN, Deadline.of(Instant.MIN).asInstant()); + } + + @Test + void test_DeadlineOf_InstantMax() { + assertEquals(Instant.MAX, Deadline.of(Instant.MAX).asInstant()); + } + + @Test + void test_plusNanos_min() { + assertEquals(Deadline.MIN, Deadline.MIN.plusNanos(-1)); + } + + @Test + void test_plusNanos_max() { + assertEquals(Deadline.MAX, Deadline.MAX.plusNanos(1)); + } + + @Test + void test_minus_min() { + assertEquals(Deadline.MIN, Deadline.MIN.minus(Duration.ofNanos(1))); + } + + @Test + void test_minus_max() { + assertEquals(Deadline.MAX, Deadline.MAX.minus(Duration.ofNanos(-1))); + } + + @Test + void test_plusAmount_min() { + assertEquals(Deadline.MIN, Deadline.MIN.plus(-1, ChronoUnit.NANOS)); + } + + @Test + void test_plusAmount_max() { + assertEquals(Deadline.MAX, Deadline.MAX.plus(1, ChronoUnit.NANOS)); + } + + @Test + void test_plusSeconds_min() { + assertEquals(Deadline.MIN, Deadline.MIN.plusSeconds(-1)); + } + + @Test + void test_plusSeconds_max() { + assertEquals(Deadline.MAX, Deadline.MAX.plusSeconds(1)); + } + + @Test + void test_plusMillis_min() { + assertEquals(Deadline.MIN, Deadline.MIN.plusMillis(-1)); + } + + @Test + void test_plusMillis_max() { + assertEquals(Deadline.MAX, Deadline.MAX.plusMillis(1)); + } + + @Test + void test_plusDuration_min() { + assertEquals(Deadline.MIN, Deadline.MIN.plus(Duration.ofNanos(-1))); + } + + @Test + void test_plusDuration_max() { + assertEquals(Deadline.MAX, Deadline.MAX.plus(Duration.ofNanos(1))); + } + + @Test + void test_until_min() { + assertEquals(Long.MIN_VALUE, Deadline.MAX.until(Deadline.MIN, NANOS)); + } + + @Test + void test_until_max() { + assertEquals(Long.MAX_VALUE, Deadline.MIN.until(Deadline.MAX, NANOS)); + } + + @Test + void test_between_min() { + Duration delta = Duration.between(Instant.MAX, Instant.MIN); + assertEquals(delta, Deadline.between(Deadline.MAX, Deadline.MIN)); + } + + @Test + void test_between_max() { + Duration delta = Duration.between(Instant.MIN, Instant.MAX); + assertEquals(delta, Deadline.between(Deadline.MIN, Deadline.MAX)); + } + +} From ac9cf5d572f7504507117aa15e56c903e1400cf5 Mon Sep 17 00:00:00 2001 From: Zihao Lin Date: Thu, 6 Nov 2025 07:19:14 +0000 Subject: [PATCH 054/512] 8370878: C1: Clean up unnecessary ConversionStub constructor Reviewed-by: chagedorn --- src/hotspot/cpu/arm/c1_LIRGenerator_arm.cpp | 2 +- src/hotspot/share/c1/c1_CodeStubs.hpp | 30 --------------------- src/hotspot/share/c1/c1_LIR.cpp | 4 --- src/hotspot/share/c1/c1_LIR.hpp | 11 +++----- 4 files changed, 4 insertions(+), 43 deletions(-) diff --git a/src/hotspot/cpu/arm/c1_LIRGenerator_arm.cpp b/src/hotspot/cpu/arm/c1_LIRGenerator_arm.cpp index c8a3f79960b..4c339968f85 100644 --- a/src/hotspot/cpu/arm/c1_LIRGenerator_arm.cpp +++ b/src/hotspot/cpu/arm/c1_LIRGenerator_arm.cpp @@ -924,7 +924,7 @@ void LIRGenerator::do_Convert(Convert* x) { LIRItem value(x->value(), this); value.load_item(); LIR_Opr reg = rlock_result(x); - __ convert(x->op(), value.result(), reg, nullptr); + __ convert(x->op(), value.result(), reg); return; } } diff --git a/src/hotspot/share/c1/c1_CodeStubs.hpp b/src/hotspot/share/c1/c1_CodeStubs.hpp index 9a462006bcc..c8b29f91bb2 100644 --- a/src/hotspot/share/c1/c1_CodeStubs.hpp +++ b/src/hotspot/share/c1/c1_CodeStubs.hpp @@ -127,36 +127,6 @@ public: }; -class ConversionStub: public CodeStub { - private: - Bytecodes::Code _bytecode; - LIR_Opr _input; - LIR_Opr _result; - - static float float_zero; - static double double_zero; - public: - ConversionStub(Bytecodes::Code bytecode, LIR_Opr input, LIR_Opr result) - : _bytecode(bytecode), _input(input), _result(result) { - ShouldNotReachHere(); - } - - Bytecodes::Code bytecode() { return _bytecode; } - LIR_Opr input() { return _input; } - LIR_Opr result() { return _result; } - - virtual void emit_code(LIR_Assembler* e); - virtual void visit(LIR_OpVisitState* visitor) { - visitor->do_slow_case(); - visitor->do_input(_input); - visitor->do_output(_result); - } -#ifndef PRODUCT - virtual void print_name(outputStream* out) const { out->print("ConversionStub"); } -#endif // PRODUCT -}; - - // Throws ArrayIndexOutOfBoundsException by default but can be // configured to throw IndexOutOfBoundsException in constructor class RangeCheckStub: public CodeStub { diff --git a/src/hotspot/share/c1/c1_LIR.cpp b/src/hotspot/share/c1/c1_LIR.cpp index 012c0f92f25..a67fa98f8f8 100644 --- a/src/hotspot/share/c1/c1_LIR.cpp +++ b/src/hotspot/share/c1/c1_LIR.cpp @@ -501,7 +501,6 @@ void LIR_OpVisitState::visit(LIR_Op* op) { assert(opConvert->_info == nullptr, "must be"); if (opConvert->_opr->is_valid()) do_input(opConvert->_opr); if (opConvert->_result->is_valid()) do_output(opConvert->_result); - do_stub(opConvert->_stub); break; } @@ -1009,9 +1008,6 @@ void LIR_OpBranch::emit_code(LIR_Assembler* masm) { void LIR_OpConvert::emit_code(LIR_Assembler* masm) { masm->emit_opConvert(this); - if (stub() != nullptr) { - masm->append_code_stub(stub()); - } } void LIR_Op2::emit_code(LIR_Assembler* masm) { diff --git a/src/hotspot/share/c1/c1_LIR.hpp b/src/hotspot/share/c1/c1_LIR.hpp index 847184731ce..80b0fd65bc1 100644 --- a/src/hotspot/share/c1/c1_LIR.hpp +++ b/src/hotspot/share/c1/c1_LIR.hpp @@ -1430,23 +1430,18 @@ class LIR_OpReturn: public LIR_Op1 { virtual LIR_OpReturn* as_OpReturn() { return this; } }; -class ConversionStub; - class LIR_OpConvert: public LIR_Op1 { friend class LIR_OpVisitState; private: Bytecodes::Code _bytecode; - ConversionStub* _stub; public: - LIR_OpConvert(Bytecodes::Code code, LIR_Opr opr, LIR_Opr result, ConversionStub* stub) + LIR_OpConvert(Bytecodes::Code code, LIR_Opr opr, LIR_Opr result) : LIR_Op1(lir_convert, opr, result) - , _bytecode(code) - , _stub(stub) {} + , _bytecode(code) {} Bytecodes::Code bytecode() const { return _bytecode; } - ConversionStub* stub() const { return _stub; } virtual void emit_code(LIR_Assembler* masm); virtual LIR_OpConvert* as_OpConvert() { return this; } @@ -2171,7 +2166,7 @@ class LIR_List: public CompilationResourceObj { void safepoint(LIR_Opr tmp, CodeEmitInfo* info) { append(new LIR_Op1(lir_safepoint, tmp, info)); } void return_op(LIR_Opr result) { append(new LIR_OpReturn(result)); } - void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ConversionStub* stub = nullptr/*, bool is_32bit = false*/) { append(new LIR_OpConvert(code, left, dst, stub)); } + void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst) { append(new LIR_OpConvert(code, left, dst)); } void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and, left, right, dst)); } void logical_or (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or, left, right, dst)); } From db76479a105cda383f38f5f9857a8642ccf50cfd Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Thu, 6 Nov 2025 08:06:34 +0000 Subject: [PATCH 055/512] 8371316: Adjust assertion (GC pause time cannot be smaller than the sum of each phase) in G1GCPhaseTimes::print Reviewed-by: ayang, tschatzl --- src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp index b211b1e32fb..a5013ddbb40 100644 --- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp +++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp @@ -567,8 +567,8 @@ void G1GCPhaseTimes::print(bool evacuation_failed) { accounted_ms += print_evacuate_optional_collection_set(); accounted_ms += print_post_evacuate_collection_set(evacuation_failed); - assert(_gc_pause_time_ms >= accounted_ms, "GC pause time(%.3lfms) cannot be " - "smaller than the sum of each phase(%.3lfms).", _gc_pause_time_ms, accounted_ms); + assert(_gc_pause_time_ms >= accounted_ms, "GC pause time(%.15lf ms) cannot be " + "smaller than the sum of each phase(%.15lf ms).", _gc_pause_time_ms, accounted_ms); print_other(accounted_ms); From 1b3889a47092e018ab9ecb6aaa922046d8d0e916 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Thu, 6 Nov 2025 08:27:32 +0000 Subject: [PATCH 056/512] 8354937: Cleanup some sparc related coding in os_linux Reviewed-by: ayang, mdoerr, lucy --- src/hotspot/os/linux/os_linux.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index d1a7b7b82c8..69ef8ce7c33 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -486,13 +486,11 @@ bool os::Linux::get_tick_information(CPUPerfTicks* pticks, int which_logical_cpu } #ifndef SYS_gettid -// i386: 224, amd64: 186, sparc: 143 +// i386: 224, amd64: 186 #if defined(__i386__) #define SYS_gettid 224 #elif defined(__amd64__) #define SYS_gettid 186 - #elif defined(__sparc__) - #define SYS_gettid 143 #else #error "Define SYS_gettid for this architecture" #endif @@ -2715,8 +2713,6 @@ const char* search_string = "CPU"; const char* search_string = "cpu"; #elif defined(S390) const char* search_string = "machine ="; -#elif defined(SPARC) -const char* search_string = "cpu"; #else const char* search_string = "Processor"; #endif @@ -2766,8 +2762,6 @@ void os::get_summary_cpu_info(char* cpuinfo, size_t length) { strncpy(cpuinfo, LP64_ONLY("RISCV64") NOT_LP64("RISCV32"), length); #elif defined(S390) strncpy(cpuinfo, "S390", length); -#elif defined(SPARC) - strncpy(cpuinfo, "sparcv9", length); #elif defined(ZERO_LIBARCH) strncpy(cpuinfo, ZERO_LIBARCH, length); #else From 913c973ca0ffdc19171a56550e8a8f03ac7f4771 Mon Sep 17 00:00:00 2001 From: Kim Barrett Date: Thu, 6 Nov 2025 10:14:21 +0000 Subject: [PATCH 057/512] 8371104: gtests should use wrappers for and Reviewed-by: jrose, tschatzl --- test/hotspot/gtest/metaprogramming/test_enableIf.cpp | 3 +-- test/hotspot/gtest/riscv/test_assembler_riscv.cpp | 3 +-- test/hotspot/gtest/utilities/test_align.cpp | 3 +-- test/hotspot/gtest/utilities/test_count_leading_zeros.cpp | 5 ++--- test/hotspot/gtest/utilities/test_deferredStatic.cpp | 3 +-- test/hotspot/gtest/utilities/test_enumIterator.cpp | 3 +-- test/hotspot/gtest/utilities/test_globalDefinitions.cpp | 3 +-- test/hotspot/gtest/utilities/test_population_count.cpp | 3 +-- test/hotspot/gtest/utilities/test_powerOfTwo.cpp | 5 ++--- 9 files changed, 11 insertions(+), 20 deletions(-) diff --git a/test/hotspot/gtest/metaprogramming/test_enableIf.cpp b/test/hotspot/gtest/metaprogramming/test_enableIf.cpp index 39073309704..05603f01c64 100644 --- a/test/hotspot/gtest/metaprogramming/test_enableIf.cpp +++ b/test/hotspot/gtest/metaprogramming/test_enableIf.cpp @@ -22,13 +22,12 @@ * */ +#include "cppstdlib/type_traits.hpp" #include "memory/allStatic.hpp" #include "metaprogramming/enableIf.hpp" #include "utilities/debug.hpp" #include "unittest.hpp" -#include - class EnableIfTest: AllStatic { class A: AllStatic { public: diff --git a/test/hotspot/gtest/riscv/test_assembler_riscv.cpp b/test/hotspot/gtest/riscv/test_assembler_riscv.cpp index c6754eacae6..55504c34b0f 100644 --- a/test/hotspot/gtest/riscv/test_assembler_riscv.cpp +++ b/test/hotspot/gtest/riscv/test_assembler_riscv.cpp @@ -26,14 +26,13 @@ #include "asm/assembler.inline.hpp" #include "asm/macroAssembler.hpp" +#include "cppstdlib/limits.hpp" #include "memory/resourceArea.hpp" #include "metaprogramming/enableIf.hpp" #include "runtime/orderAccess.hpp" #include "threadHelper.inline.hpp" #include "unittest.hpp" -#include - typedef int64_t (*zicond_func)(int64_t cmp1, int64_t cmp2, int64_t dst, int64_t src); typedef void (MacroAssembler::*cmov_func)(Register cmp1, Register cmp2, Register dst, Register src); diff --git a/test/hotspot/gtest/utilities/test_align.cpp b/test/hotspot/gtest/utilities/test_align.cpp index 7413e58e7ab..3679a0b3e42 100644 --- a/test/hotspot/gtest/utilities/test_align.cpp +++ b/test/hotspot/gtest/utilities/test_align.cpp @@ -21,13 +21,12 @@ * questions. */ +#include "cppstdlib/limits.hpp" #include "utilities/align.hpp" #include "utilities/formatBuffer.hpp" #include "utilities/globalDefinitions.hpp" #include "unittest.hpp" -#include - // A few arbitrarily chosen values to test the align functions on. static constexpr uint64_t values[] = {1, 3, 10, 345, 1023, 1024, 1025, 23909034, INT_MAX, uint64_t(-1) / 2, uint64_t(-1) / 2 + 100, ~(uint64_t(1) << 62)}; diff --git a/test/hotspot/gtest/utilities/test_count_leading_zeros.cpp b/test/hotspot/gtest/utilities/test_count_leading_zeros.cpp index 4d5fcc09999..8d8f0a6f5e4 100644 --- a/test/hotspot/gtest/utilities/test_count_leading_zeros.cpp +++ b/test/hotspot/gtest/utilities/test_count_leading_zeros.cpp @@ -22,13 +22,12 @@ * */ +#include "cppstdlib/limits.hpp" +#include "cppstdlib/type_traits.hpp" #include "utilities/count_leading_zeros.hpp" #include "utilities/globalDefinitions.hpp" #include "unittest.hpp" -#include -#include - template void one_or_two_set_bits() { uint32_t bit1_pos = 0; uint32_t bits = sizeof(T) * BitsPerByte; diff --git a/test/hotspot/gtest/utilities/test_deferredStatic.cpp b/test/hotspot/gtest/utilities/test_deferredStatic.cpp index b41b1e4ee60..779c0d08b2c 100644 --- a/test/hotspot/gtest/utilities/test_deferredStatic.cpp +++ b/test/hotspot/gtest/utilities/test_deferredStatic.cpp @@ -22,12 +22,11 @@ * */ +#include "cppstdlib/type_traits.hpp" #include "utilities/debug.hpp" #include "utilities/deferredStatic.hpp" #include "utilities/globalDefinitions.hpp" -#include - #include "unittest.hpp" class DeferredStaticTestClass { diff --git a/test/hotspot/gtest/utilities/test_enumIterator.cpp b/test/hotspot/gtest/utilities/test_enumIterator.cpp index 2506e85e3d3..429efff7ede 100644 --- a/test/hotspot/gtest/utilities/test_enumIterator.cpp +++ b/test/hotspot/gtest/utilities/test_enumIterator.cpp @@ -21,11 +21,10 @@ * questions. */ +#include "cppstdlib/type_traits.hpp" #include "utilities/enumIterator.hpp" #include "unittest.hpp" -#include - enum class ExplicitTest : int { value1, value2, value3 }; ENUMERATOR_RANGE(ExplicitTest, ExplicitTest::value1, ExplicitTest::value3); constexpr int explicit_start = 0; diff --git a/test/hotspot/gtest/utilities/test_globalDefinitions.cpp b/test/hotspot/gtest/utilities/test_globalDefinitions.cpp index 4c04b77a51b..f24d74ea529 100644 --- a/test/hotspot/gtest/utilities/test_globalDefinitions.cpp +++ b/test/hotspot/gtest/utilities/test_globalDefinitions.cpp @@ -21,6 +21,7 @@ * questions. */ +#include "cppstdlib/type_traits.hpp" #include "memory/resourceArea.hpp" #include "runtime/os.hpp" #include "utilities/align.hpp" @@ -28,8 +29,6 @@ #include "utilities/ostream.hpp" #include "unittest.hpp" -#include - static ::testing::AssertionResult testPageAddress( const char* expected_addr_expr, const char* addr_expr, diff --git a/test/hotspot/gtest/utilities/test_population_count.cpp b/test/hotspot/gtest/utilities/test_population_count.cpp index 1cb7c87f434..8494d9b593e 100644 --- a/test/hotspot/gtest/utilities/test_population_count.cpp +++ b/test/hotspot/gtest/utilities/test_population_count.cpp @@ -22,14 +22,13 @@ * */ +#include "cppstdlib/limits.hpp" #include "runtime/os.hpp" #include "utilities/population_count.hpp" #include "utilities/powerOfTwo.hpp" #include "utilities/globalDefinitions.hpp" #include "unittest.hpp" -#include - #define BITS_IN_BYTE_ARRAY_SIZE 256 const uint8_t test_popcnt_bitsInByte[BITS_IN_BYTE_ARRAY_SIZE] = { diff --git a/test/hotspot/gtest/utilities/test_powerOfTwo.cpp b/test/hotspot/gtest/utilities/test_powerOfTwo.cpp index a287036e6a0..9ead9952e73 100644 --- a/test/hotspot/gtest/utilities/test_powerOfTwo.cpp +++ b/test/hotspot/gtest/utilities/test_powerOfTwo.cpp @@ -22,13 +22,12 @@ */ +#include "cppstdlib/limits.hpp" +#include "cppstdlib/type_traits.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/powerOfTwo.hpp" #include "unittest.hpp" -#include -#include - struct StaticTestIsPowerOf2Result { uint64_t _value; int _status; // 0: success, > 0 indicates which failure case From 093e128771f3dc01f64a8572de068e9776e38b97 Mon Sep 17 00:00:00 2001 From: Qizheng Xing Date: Thu, 6 Nov 2025 10:56:48 +0000 Subject: [PATCH 058/512] 8347499: C2: Make `PhaseIdealLoop` eliminate more redundant safepoints in loops Reviewed-by: epeter, roland --- src/hotspot/share/opto/loopnode.cpp | 65 ++++--- .../TestRedundantSafepointElimination.java | 177 ++++++++++++++++++ .../bench/vm/compiler/LoopSafepoint.java | 131 +++++++++++++ 3 files changed, 345 insertions(+), 28 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/loopopts/TestRedundantSafepointElimination.java create mode 100644 test/micro/org/openjdk/bench/vm/compiler/LoopSafepoint.java diff --git a/src/hotspot/share/opto/loopnode.cpp b/src/hotspot/share/opto/loopnode.cpp index d04eb34acee..3b398b053a3 100644 --- a/src/hotspot/share/opto/loopnode.cpp +++ b/src/hotspot/share/opto/loopnode.cpp @@ -4165,35 +4165,44 @@ void IdealLoopTree::allpaths_check_safepts(VectorSet &visited, Node_List &stack) // backedge (arc 3->2). So it deletes the ncsfpt (non-call safepoint) // in block 2, _but_ this leaves the outer loop without a safepoint. // -// entry 0 -// | -// v -// outer 1,2 +->1 -// | | -// | v -// | 2<---+ ncsfpt in 2 -// |_/|\ | -// | v | -// inner 2,3 / 3 | call in 3 -// / | | -// v +--+ -// exit 4 +// entry 0 +// | +// v +// outer 1,2,4 +-> 1 +// | \ +// | v +// inner 2,3 | 2 <---+ ncsfpt in 2 +// | / \ | +// | v v | +// | 4 3 | call in 3 +// |_/ \ \_| +// | +// v +// exit 5 // +// This method maintains a list (_required_safept) of ncsfpts that must +// be protected for each loop. It only marks ncsfpts for prevervation, +// and does not actually delete any of them. // -// This method creates a list (_required_safept) of ncsfpt nodes that must -// be protected is created for each loop. When a ncsfpt maybe deleted, it -// is first looked for in the lists for the outer loops of the current loop. +// If some other method needs to delete a ncsfpt later, it will make sure +// the ncsfpt is not in the list of all outer loops of the current loop. +// See `PhaseIdealLoop::is_deleteable_safept`. // // The insights into the problem: -// A) counted loops are okay -// B) innermost loops are okay (only an inner loop can delete -// a ncsfpt needed by an outer loop) -// C) a loop is immune from an inner loop deleting a safepoint -// if the loop has a call on the idom-path -// D) a loop is also immune if it has a ncsfpt (non-call safepoint) on the -// idom-path that is not in a nested loop -// E) otherwise, an ncsfpt on the idom-path that is nested in an inner -// loop needs to be prevented from deletion by an inner loop +// A) Counted loops are okay (i.e. do not need to preserve ncsfpts), +// they will be handled in `IdealLoopTree::counted_loop` +// B) Innermost loops are okay because there's no inner loops that can +// delete their ncsfpts. Only outer loops need to mark safepoints for +// protection, because only loops further in can accidentally delete +// their ncsfpts +// C) If an outer loop has a call that's guaranteed to execute (on the +// idom-path), then that loop is okay. Because the call will always +// perform a safepoint poll, regardless of what safepoints are deleted +// from its inner loops +// D) Similarly, if an outer loop has a ncsfpt on the idom-path that isn't +// inside any nested loop, then that loop is okay +// E) Otherwise, if an outer loop's ncsfpt on the idom-path is nested in +// an inner loop, we need to prevent the inner loop from deleting it // // There are two analyses: // 1) The first, and cheaper one, scans the loop body from @@ -4227,10 +4236,10 @@ void IdealLoopTree::check_safepts(VectorSet &visited, Node_List &stack) { break; } else if (n->Opcode() == Op_SafePoint) { if (_phase->get_loop(n) == this) { + // We found a local ncsfpt. + // Continue searching for a call that is guaranteed to be a safepoint. has_local_ncsfpt = true; - break; - } - if (nonlocal_ncsfpt == nullptr) { + } else if (nonlocal_ncsfpt == nullptr) { nonlocal_ncsfpt = n; // save the one closest to the tail } } else { diff --git a/test/hotspot/jtreg/compiler/loopopts/TestRedundantSafepointElimination.java b/test/hotspot/jtreg/compiler/loopopts/TestRedundantSafepointElimination.java new file mode 100644 index 00000000000..69f86a2bf1d --- /dev/null +++ b/test/hotspot/jtreg/compiler/loopopts/TestRedundantSafepointElimination.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2025 Alibaba Group Holding Limited. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package compiler.loopopts; + +import compiler.lib.ir_framework.*; + +/* + * @test + * @bug 8347499 + * @summary Tests that redundant safepoints can be eliminated in loops. + * @library /test/lib / + * @run main compiler.loopopts.TestRedundantSafepointElimination + */ +public class TestRedundantSafepointElimination { + public static void main(String[] args) { + TestFramework.run(); + } + + static int someInts0 = 1; + static int someInts1 = 2; + + @DontInline + private void empty() {} + + // Test for a top-level counted loop. + // There should be a non-call safepoint in the loop. + @Test + @IR(counts = {IRNode.SAFEPOINT, "1"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public int testTopLevelCountedLoop() { + int sum = 0; + for (int i = 0; i < 100000; i++) { + sum += someInts0; + } + return sum; + } + + // Test for a top-level counted loop with a call that dominates + // the tail of the loop. + // There should be no safepoint in the loop, because the call is + // guaranteed to have a safepoint. + @Test + @IR(counts = {IRNode.SAFEPOINT, "0"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public int testTopLevelCountedLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100000; i++) { + empty(); + sum += someInts0; + } + return sum; + } + + // Test for a top-level uncounted loop. + // There should be a non-call safepoint in the loop. + @Test + @IR(counts = {IRNode.SAFEPOINT, "1"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public int testTopLevelUncountedLoop() { + int sum = 0; + for (int i = 0; i < 100000; i += someInts0) { + sum += someInts1; + } + return sum; + } + + // Test for a top-level uncounted loop with a call that dominates + // the tail of the loop. + // There should be no safepoint in the loop, because the call is + // guaranteed to have a safepoint. + // Before JDK-8347499, this test would fail due to C2 exiting + // prematurely when encountering the local non-call safepoint. + @Test + @IR(counts = {IRNode.SAFEPOINT, "0"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public int testTopLevelUncountedLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100000; i += someInts0) { + empty(); + sum += someInts1; + } + return sum; + } + + // Test for nested loops, where the outer loop has a call that + // dominates its own tail. + // There should be only one safepoint in the inner loop. + // Before JDK-8347499, this test would fail due to C2 exiting + // prematurely when encountering the local non-call safepoint. + @Test + @IR(counts = {IRNode.SAFEPOINT, "1"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public int testOuterLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100; i += someInts0) { + empty(); + for (int j = 0; j < 1000; j++) { + sum += someInts1; + } + } + return sum; + } + + // Test for nested loops, where both the outer and inner loops + // have a call that dominates their tails. + // There should be no safepoint in both loops, because calls + // within them are guaranteed to have a safepoint. + // Before JDK-8347499, this test would fail due to C2 exiting + // prematurely when encountering the local non-call safepoint. + @Test + @IR(counts = {IRNode.SAFEPOINT, "0"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public int testOuterAndInnerLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100; i += someInts0) { + empty(); + for (int j = 0; j < 1000; j++) { + empty(); + sum += someInts1; + } + } + return sum; + } + + // Test for nested loops, where the outer loop has a local + // non-call safepoint. + // There should be a safepoint in both loops. + @Test + @IR(counts = {IRNode.SAFEPOINT, "2"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public int testOuterLoopWithLocalNonCallSafepoint() { + int sum = 0; + for (int i = 0; i < 100; i += someInts0) { + for (int j = 0; j < 1000; j++) { + sum += someInts1; + } + } + return sum; + } + + // Test for nested loops, where the outer loop has no local + // safepoints, and it must preserve a non-local safepoint. + // There should be two safepoints in the loop tree. + @Test + @IR(counts = {IRNode.SAFEPOINT, "2"}, + phase = CompilePhase.AFTER_LOOP_OPTS) + public void testLoopNeedsToPreserveSafepoint() { + int i = 0, stop; + while (i < 1000) { + stop = i + 10; + while (i < stop) { + i += 1; + } + } + } +} diff --git a/test/micro/org/openjdk/bench/vm/compiler/LoopSafepoint.java b/test/micro/org/openjdk/bench/vm/compiler/LoopSafepoint.java new file mode 100644 index 00000000000..fa69550948e --- /dev/null +++ b/test/micro/org/openjdk/bench/vm/compiler/LoopSafepoint.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2025 Alibaba Group Holding Limited. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package org.openjdk.bench.vm.compiler; + +import org.openjdk.jmh.annotations.*; + +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Fork(value = 3) +@Warmup(iterations = 5, time = 2) +@Measurement(iterations = 5, time = 3) +@State(Scope.Thread) +public class LoopSafepoint { + static int someInts0 = 1; + static int someInts1 = 2; + + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + private void empty() {} + + // All benchmarks below are in sync with the IR test + // `compiler.loopopts.TestRedundantSafepointElimination.java`. + // Check the comments in the IR test for more details. + + @Benchmark + public int topLevelCountedLoop() { + int sum = 0; + for (int i = 0; i < 100000; i++) { + sum += someInts0; + } + return sum; + } + + @Benchmark + public int topLevelCountedLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100000; i++) { + empty(); + sum += someInts0; + } + return sum; + } + + @Benchmark + public int topLevelUncountedLoop() { + int sum = 0; + for (int i = 0; i < 100000; i += someInts0) { + sum += someInts1; + } + return sum; + } + + @Benchmark + public int topLevelUncountedLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100000; i += someInts0) { + empty(); + sum += someInts1; + } + return sum; + } + + @Benchmark + public int outerLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100; i += someInts0) { + empty(); + for (int j = 0; j < 1000; j++) { + sum += someInts1; + } + } + return sum; + } + + @Benchmark + public int outerAndInnerLoopWithDomCall() { + int sum = 0; + for (int i = 0; i < 100; i += someInts0) { + empty(); + for (int j = 0; j < 1000; j++) { + empty(); + sum += someInts1; + } + } + return sum; + } + + @Benchmark + public int outerLoopWithLocalNonCallSafepoint() { + int sum = 0; + for (int i = 0; i < 100; i += someInts0) { + for (int j = 0; j < 1000; j++) { + sum += someInts1; + } + } + return sum; + } + + @Benchmark + public void loopNeedsToPreserveSafepoint() { + int i = 0, stop; + while (i < 1000) { + stop = i + 10; + while (i < stop) { + i += 1; + } + } + } +} From 3930b1d4ddda9d56d0fb3626421283c72f4ad7f9 Mon Sep 17 00:00:00 2001 From: Fredrik Bredberg Date: Thu, 6 Nov 2025 12:16:19 +0000 Subject: [PATCH 059/512] 8367982: Unify ObjectSynchronizer and LightweightSynchronizer Reviewed-by: pchilanomate, coleenp --- src/hotspot/cpu/aarch64/aarch64.ad | 8 +- .../cpu/aarch64/c1_MacroAssembler_aarch64.cpp | 4 +- .../cpu/aarch64/c2_MacroAssembler_aarch64.cpp | 14 +- .../cpu/aarch64/c2_MacroAssembler_aarch64.hpp | 6 +- .../cpu/aarch64/interp_masm_aarch64.cpp | 6 +- .../cpu/aarch64/macroAssembler_aarch64.cpp | 10 +- .../cpu/aarch64/macroAssembler_aarch64.hpp | 4 +- .../cpu/aarch64/sharedRuntime_aarch64.cpp | 6 +- .../cpu/aarch64/vm_version_aarch64.hpp | 2 +- src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp | 4 +- src/hotspot/cpu/arm/c2_MacroAssembler_arm.cpp | 8 +- src/hotspot/cpu/arm/interp_masm_arm.cpp | 6 +- src/hotspot/cpu/arm/macroAssembler_arm.cpp | 8 +- src/hotspot/cpu/arm/macroAssembler_arm.hpp | 10 +- src/hotspot/cpu/arm/sharedRuntime_arm.cpp | 8 +- src/hotspot/cpu/ppc/c1_MacroAssembler_ppc.cpp | 4 +- src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.cpp | 12 +- src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.hpp | 12 +- src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp | 4 +- src/hotspot/cpu/ppc/macroAssembler_ppc.cpp | 24 +- src/hotspot/cpu/ppc/macroAssembler_ppc.hpp | 12 +- src/hotspot/cpu/ppc/ppc.ad | 16 +- src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp | 4 +- src/hotspot/cpu/ppc/vm_version_ppc.hpp | 2 +- .../cpu/riscv/c1_MacroAssembler_riscv.cpp | 4 +- .../cpu/riscv/c2_MacroAssembler_riscv.cpp | 12 +- .../cpu/riscv/c2_MacroAssembler_riscv.hpp | 10 +- src/hotspot/cpu/riscv/interp_masm_riscv.cpp | 6 +- .../cpu/riscv/macroAssembler_riscv.cpp | 8 +- .../cpu/riscv/macroAssembler_riscv.hpp | 4 +- src/hotspot/cpu/riscv/riscv.ad | 20 +- src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp | 6 +- src/hotspot/cpu/riscv/vm_version_riscv.hpp | 4 +- .../cpu/s390/c1_MacroAssembler_s390.cpp | 4 +- .../cpu/s390/c2_MacroAssembler_s390.cpp | 8 +- .../cpu/s390/c2_MacroAssembler_s390.hpp | 8 +- src/hotspot/cpu/s390/interp_masm_s390.cpp | 4 +- src/hotspot/cpu/s390/macroAssembler_s390.cpp | 32 +- src/hotspot/cpu/s390/macroAssembler_s390.hpp | 8 +- src/hotspot/cpu/s390/s390.ad | 8 +- src/hotspot/cpu/s390/sharedRuntime_s390.cpp | 4 +- src/hotspot/cpu/s390/vm_version_s390.hpp | 4 +- src/hotspot/cpu/x86/c1_MacroAssembler_x86.cpp | 4 +- src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp | 4 +- src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp | 14 +- src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp | 6 +- src/hotspot/cpu/x86/interp_masm_x86.cpp | 4 +- src/hotspot/cpu/x86/macroAssembler_x86.cpp | 10 +- src/hotspot/cpu/x86/macroAssembler_x86.hpp | 4 +- src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp | 4 +- src/hotspot/cpu/x86/vm_version_x86.hpp | 2 +- src/hotspot/cpu/x86/x86.ad | 8 +- .../share/interpreter/interpreterRuntime.cpp | 2 +- src/hotspot/share/oops/markWord.hpp | 4 +- src/hotspot/share/opto/c2_CodeStubs.hpp | 8 +- src/hotspot/share/prims/jvmtiEnvBase.cpp | 2 +- src/hotspot/share/prims/whitebox.cpp | 7 +- .../share/runtime/abstract_vm_version.hpp | 4 +- src/hotspot/share/runtime/deoptimization.cpp | 7 +- src/hotspot/share/runtime/globals.hpp | 14 +- src/hotspot/share/runtime/javaThread.cpp | 2 +- .../share/runtime/lightweightSynchronizer.cpp | 1231 ---------------- .../share/runtime/lightweightSynchronizer.hpp | 80 - src/hotspot/share/runtime/lockStack.cpp | 4 +- .../share/runtime/lockStack.inline.hpp | 12 +- src/hotspot/share/runtime/objectMonitor.cpp | 6 +- src/hotspot/share/runtime/objectMonitor.hpp | 6 +- .../share/runtime/objectMonitor.inline.hpp | 8 +- src/hotspot/share/runtime/serviceThread.cpp | 6 +- src/hotspot/share/runtime/sharedRuntime.cpp | 4 +- src/hotspot/share/runtime/synchronizer.cpp | 1283 ++++++++++++++++- src/hotspot/share/runtime/synchronizer.hpp | 51 +- .../share/runtime/synchronizer.inline.hpp | 71 - src/hotspot/share/runtime/vframe.cpp | 2 +- src/hotspot/share/services/threadService.cpp | 2 +- test/hotspot/gtest/runtime/test_lockStack.cpp | 8 +- .../runtime/Monitor/TestRecursiveLocking.java | 11 +- .../lockStack/TestLockStackCapacity.java | 6 +- test/jdk/com/sun/jdi/EATests.java | 17 +- test/lib/jdk/test/whitebox/WhiteBox.java | 2 +- 80 files changed, 1551 insertions(+), 1717 deletions(-) delete mode 100644 src/hotspot/share/runtime/lightweightSynchronizer.cpp delete mode 100644 src/hotspot/share/runtime/lightweightSynchronizer.hpp delete mode 100644 src/hotspot/share/runtime/synchronizer.inline.hpp diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad index 1e506edb634..44d7bf1e0fa 100644 --- a/src/hotspot/cpu/aarch64/aarch64.ad +++ b/src/hotspot/cpu/aarch64/aarch64.ad @@ -16262,7 +16262,7 @@ instruct branchLoopEnd(cmpOp cmp, rFlagsReg cr, label lbl) // ============================================================================ // inlined locking and unlocking -instruct cmpFastLockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2, iRegPNoSp tmp3) +instruct cmpFastLock(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2, iRegPNoSp tmp3) %{ match(Set cr (FastLock object box)); effect(TEMP tmp, TEMP tmp2, TEMP tmp3); @@ -16271,13 +16271,13 @@ instruct cmpFastLockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp format %{ "fastlock $object,$box\t! kills $tmp,$tmp2,$tmp3" %} ins_encode %{ - __ fast_lock_lightweight($object$$Register, $box$$Register, $tmp$$Register, $tmp2$$Register, $tmp3$$Register); + __ fast_lock($object$$Register, $box$$Register, $tmp$$Register, $tmp2$$Register, $tmp3$$Register); %} ins_pipe(pipe_serial); %} -instruct cmpFastUnlockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2, iRegPNoSp tmp3) +instruct cmpFastUnlock(rFlagsReg cr, iRegP object, iRegP box, iRegPNoSp tmp, iRegPNoSp tmp2, iRegPNoSp tmp3) %{ match(Set cr (FastUnlock object box)); effect(TEMP tmp, TEMP tmp2, TEMP tmp3); @@ -16286,7 +16286,7 @@ instruct cmpFastUnlockLightweight(rFlagsReg cr, iRegP object, iRegP box, iRegPNo format %{ "fastunlock $object,$box\t! kills $tmp, $tmp2, $tmp3" %} ins_encode %{ - __ fast_unlock_lightweight($object$$Register, $box$$Register, $tmp$$Register, $tmp2$$Register, $tmp3$$Register); + __ fast_unlock($object$$Register, $box$$Register, $tmp$$Register, $tmp2$$Register, $tmp3$$Register); %} ins_pipe(pipe_serial); diff --git a/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp index 31c36e749c5..e934632715c 100644 --- a/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c1_MacroAssembler_aarch64.cpp @@ -70,7 +70,7 @@ int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register basic_lo null_check_offset = offset(); - lightweight_lock(basic_lock, obj, hdr, temp, rscratch2, slow_case); + fast_lock(basic_lock, obj, hdr, temp, rscratch2, slow_case); return null_check_offset; } @@ -83,7 +83,7 @@ void C1_MacroAssembler::unlock_object(Register hdr, Register obj, Register basic ldr(obj, Address(basic_lock, BasicObjectLock::obj_offset())); verify_oop(obj); - lightweight_unlock(obj, hdr, temp, rscratch2, slow_case); + fast_unlock(obj, hdr, temp, rscratch2, slow_case); } diff --git a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp index 5f71222ed88..ebb4a897906 100644 --- a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp @@ -147,8 +147,8 @@ address C2_MacroAssembler::arrays_hashcode(Register ary, Register cnt, Register return pc(); } -void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Register t1, - Register t2, Register t3) { +void C2_MacroAssembler::fast_lock(Register obj, Register box, Register t1, + Register t2, Register t3) { assert_different_registers(obj, box, t1, t2, t3, rscratch2); // Handle inflated monitor. @@ -173,7 +173,7 @@ void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Regist const Register t1_mark = t1; const Register t3_t = t3; - { // Lightweight locking + { // Fast locking // Push lock to the lock stack and finish successfully. MUST branch to with flag == EQ Label push; @@ -303,8 +303,8 @@ void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Regist // C2 uses the value of Flags (NE vs EQ) to determine the continuation. } -void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register box, Register t1, - Register t2, Register t3) { +void C2_MacroAssembler::fast_unlock(Register obj, Register box, Register t1, + Register t2, Register t3) { assert_different_registers(obj, box, t1, t2, t3); // Handle inflated monitor. @@ -318,7 +318,7 @@ void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register box, Regi const Register t2_top = t2; const Register t3_t = t3; - { // Lightweight unlock + { // Fast unlock Label push_and_slow_path; @@ -2859,4 +2859,4 @@ void C2_MacroAssembler::vector_expand_sve(FloatRegister dst, FloatRegister src, sve_sub(dst, size, 1); // dst = 00 87 00 65 00 43 00 21 sve_tbl(dst, size, src, dst); -} \ No newline at end of file +} diff --git a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp index 09850a60c64..ccd091938a3 100644 --- a/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp @@ -51,9 +51,9 @@ FloatRegister vmul3, FloatRegister vpow, FloatRegister vpowm, BasicType eltype); - // Code used by cmpFastLockLightweight and cmpFastUnlockLightweight mach instructions in .ad file. - void fast_lock_lightweight(Register object, Register box, Register t1, Register t2, Register t3); - void fast_unlock_lightweight(Register object, Register box, Register t1, Register t2, Register t3); + // Code used by cmpFastLock and cmpFastUnlock mach instructions in .ad file. + void fast_lock(Register object, Register box, Register t1, Register t2, Register t3); + void fast_unlock(Register object, Register box, Register t1, Register t2, Register t3); void string_compare(Register str1, Register str2, Register cnt1, Register cnt2, Register result, diff --git a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp index cf4d5a63496..957c2aee1c1 100644 --- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp @@ -709,7 +709,7 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg) ldr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset())); Label slow_case, done; - lightweight_lock(lock_reg, obj_reg, tmp, tmp2, tmp3, slow_case); + fast_lock(lock_reg, obj_reg, tmp, tmp2, tmp3, slow_case); b(done); bind(slow_case); @@ -741,7 +741,7 @@ void InterpreterMacroAssembler::unlock_object(Register lock_reg) const Register swap_reg = r0; const Register header_reg = c_rarg2; // Will contain the old oopMark const Register obj_reg = c_rarg3; // Will contain the oop - const Register tmp_reg = c_rarg4; // Temporary used by lightweight_unlock + const Register tmp_reg = c_rarg4; // Temporary used by fast_unlock save_bcp(); // Save in case of exception @@ -752,7 +752,7 @@ void InterpreterMacroAssembler::unlock_object(Register lock_reg) str(zr, Address(lock_reg, BasicObjectLock::obj_offset())); Label slow_case, done; - lightweight_unlock(obj_reg, header_reg, swap_reg, tmp_reg, slow_case); + fast_unlock(obj_reg, header_reg, swap_reg, tmp_reg, slow_case); b(done); bind(slow_case); diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp index c83e6e12fa1..ceedb4f1063 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp @@ -6934,12 +6934,12 @@ void MacroAssembler::double_move(VMRegPair src, VMRegPair dst, Register tmp) { } } -// Implements lightweight-locking. +// Implements fast-locking. // // - obj: the object to be locked // - t1, t2, t3: temporary registers, will be destroyed // - slow: branched to if locking fails, absolute offset may larger than 32KB (imm14 encoding). -void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Register t1, Register t2, Register t3, Label& slow) { +void MacroAssembler::fast_lock(Register basic_lock, Register obj, Register t1, Register t2, Register t3, Label& slow) { assert_different_registers(basic_lock, obj, t1, t2, t3, rscratch1); Label push; @@ -6993,12 +6993,12 @@ void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Registe strw(top, Address(rthread, JavaThread::lock_stack_top_offset())); } -// Implements lightweight-unlocking. +// Implements fast-unlocking. // // - obj: the object to be unlocked // - t1, t2, t3: temporary registers // - slow: branched to if unlocking fails, absolute offset may larger than 32KB (imm14 encoding). -void MacroAssembler::lightweight_unlock(Register obj, Register t1, Register t2, Register t3, Label& slow) { +void MacroAssembler::fast_unlock(Register obj, Register t1, Register t2, Register t3, Label& slow) { // cmpxchg clobbers rscratch1. assert_different_registers(obj, t1, t2, t3, rscratch1); @@ -7044,7 +7044,7 @@ void MacroAssembler::lightweight_unlock(Register obj, Register t1, Register t2, // Check header not unlocked (0b01). Label not_unlocked; tbz(mark, log2i_exact(markWord::unlocked_value), not_unlocked); - stop("lightweight_unlock already unlocked"); + stop("fast_unlock already unlocked"); bind(not_unlocked); #endif diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp index 4468eaa40c5..4baa07d7d49 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp @@ -1721,8 +1721,8 @@ public: // Code for java.lang.Thread::onSpinWait() intrinsic. void spin_wait(); - void lightweight_lock(Register basic_lock, Register obj, Register t1, Register t2, Register t3, Label& slow); - void lightweight_unlock(Register obj, Register t1, Register t2, Register t3, Label& slow); + void fast_lock(Register basic_lock, Register obj, Register t1, Register t2, Register t3, Label& slow); + void fast_unlock(Register obj, Register t1, Register t2, Register t3, Label& slow); private: // Check the current thread doesn't need a cross modify fence. diff --git a/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp b/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp index 39609cbe0ac..89ae6bc10e0 100644 --- a/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp @@ -1707,7 +1707,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, const Register obj_reg = r19; // Will contain the oop const Register lock_reg = r13; // Address of compiler lock object (BasicLock) const Register old_hdr = r13; // value of old header at unlock time - const Register lock_tmp = r14; // Temporary used by lightweight_lock/unlock + const Register lock_tmp = r14; // Temporary used by fast_lock/unlock const Register tmp = lr; Label slow_path_lock; @@ -1724,7 +1724,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, // Load the oop from the handle __ ldr(obj_reg, Address(oop_handle_reg, 0)); - __ lightweight_lock(lock_reg, obj_reg, swap_reg, tmp, lock_tmp, slow_path_lock); + __ fast_lock(lock_reg, obj_reg, swap_reg, tmp, lock_tmp, slow_path_lock); // Slow path will re-enter here __ bind(lock_done); @@ -1833,7 +1833,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, save_native_result(masm, ret_type, stack_slots); } - __ lightweight_unlock(obj_reg, old_hdr, swap_reg, lock_tmp, slow_path_unlock); + __ fast_unlock(obj_reg, old_hdr, swap_reg, lock_tmp, slow_path_unlock); // slow path re-enters here __ bind(unlock_done); diff --git a/src/hotspot/cpu/aarch64/vm_version_aarch64.hpp b/src/hotspot/cpu/aarch64/vm_version_aarch64.hpp index 5a8642a285a..3f7ba683efc 100644 --- a/src/hotspot/cpu/aarch64/vm_version_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/vm_version_aarch64.hpp @@ -195,7 +195,7 @@ enum Ampere_CPU_Model { // Aarch64 supports fast class initialization checks static bool supports_fast_class_init_checks() { return true; } constexpr static bool supports_stack_watermark_barrier() { return true; } - constexpr static bool supports_recursive_lightweight_locking() { return true; } + constexpr static bool supports_recursive_fast_locking() { return true; } constexpr static bool supports_secondary_supers_table() { return true; } diff --git a/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp b/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp index ca7711353d2..ad6c56186df 100644 --- a/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp @@ -201,7 +201,7 @@ int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register basic_lo Register t2 = hdr; // blow Register t3 = Rtemp; // blow - lightweight_lock(obj, t1, t2, t3, 1 /* savemask - save t1 */, slow_case); + fast_lock(obj, t1, t2, t3, 1 /* savemask - save t1 */, slow_case); // Success: fall through return null_check_offset; } @@ -218,7 +218,7 @@ void C1_MacroAssembler::unlock_object(Register hdr, Register obj, Register basic Register t2 = hdr; // blow Register t3 = Rtemp; // blow - lightweight_unlock(obj, t1, t2, t3, 1 /* savemask - save t1 */, slow_case); + fast_unlock(obj, t1, t2, t3, 1 /* savemask - save t1 */, slow_case); // Success: fall through } diff --git a/src/hotspot/cpu/arm/c2_MacroAssembler_arm.cpp b/src/hotspot/cpu/arm/c2_MacroAssembler_arm.cpp index 2d26b4f9a50..83e9cc672f2 100644 --- a/src/hotspot/cpu/arm/c2_MacroAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/c2_MacroAssembler_arm.cpp @@ -90,8 +90,8 @@ void C2_MacroAssembler::fast_lock(Register Roop, Register Rbox, Register Rscratc b(done, ne); } - lightweight_lock(Roop /* obj */, Rbox /* t1 */, Rscratch /* t2 */, Rscratch2 /* t3 */, - 1 /* savemask (save t1) */, done); + MacroAssembler::fast_lock(Roop /* obj */, Rbox /* t1 */, Rscratch /* t2 */, Rscratch2 /* t3 */, + 1 /* savemask (save t1) */, done); cmp(Roop, Roop); // Success: set Z bind(done); @@ -107,8 +107,8 @@ void C2_MacroAssembler::fast_unlock(Register Roop, Register Rbox, Register Rscra Label done; - lightweight_unlock(Roop /* obj */, Rbox /* t1 */, Rscratch /* t2 */, Rscratch2 /* t3 */, - 1 /* savemask (save t1) */, done); + MacroAssembler::fast_unlock(Roop /* obj */, Rbox /* t1 */, Rscratch /* t2 */, Rscratch2 /* t3 */, + 1 /* savemask (save t1) */, done); cmp(Roop, Roop); // Success: Set Z // Fall through diff --git a/src/hotspot/cpu/arm/interp_masm_arm.cpp b/src/hotspot/cpu/arm/interp_masm_arm.cpp index 3f9130309e9..720413c9c5b 100644 --- a/src/hotspot/cpu/arm/interp_masm_arm.cpp +++ b/src/hotspot/cpu/arm/interp_masm_arm.cpp @@ -904,7 +904,7 @@ void InterpreterMacroAssembler::lock_object(Register Rlock) { b(slow_case, ne); } - lightweight_lock(Robj, R0 /* t1 */, Rmark /* t2 */, Rtemp /* t3 */, 0 /* savemask */, slow_case); + fast_lock(Robj, R0 /* t1 */, Rmark /* t2 */, Rtemp /* t3 */, 0 /* savemask */, slow_case); b(done); bind(slow_case); @@ -945,8 +945,8 @@ void InterpreterMacroAssembler::unlock_object(Register Rlock) { cmpoop(Rtemp, Robj); b(slow_case, ne); - lightweight_unlock(Robj /* obj */, Rlock /* t1 */, Rmark /* t2 */, Rtemp /* t3 */, - 1 /* savemask (save t1) */, slow_case); + fast_unlock(Robj /* obj */, Rlock /* t1 */, Rmark /* t2 */, Rtemp /* t3 */, + 1 /* savemask (save t1) */, slow_case); b(done); bind(slow_case); diff --git a/src/hotspot/cpu/arm/macroAssembler_arm.cpp b/src/hotspot/cpu/arm/macroAssembler_arm.cpp index 12462e1843c..935c9544620 100644 --- a/src/hotspot/cpu/arm/macroAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/macroAssembler_arm.cpp @@ -1750,14 +1750,14 @@ void MacroAssembler::read_polling_page(Register dest, relocInfo::relocType rtype POISON_REG(mask, 1, R2, poison) \ POISON_REG(mask, 2, R3, poison) -// Attempt to lightweight-lock an object +// Attempt to fast-lock an object // Registers: // - obj: the object to be locked // - t1, t2, t3: temp registers. If corresponding bit in savemask is set, they get saved, otherwise blown. // Result: // - Success: fallthrough // - Error: break to slow, Z cleared. -void MacroAssembler::lightweight_lock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow) { +void MacroAssembler::fast_lock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow) { assert_different_registers(obj, t1, t2, t3); #ifdef ASSERT @@ -1807,14 +1807,14 @@ void MacroAssembler::lightweight_lock(Register obj, Register t1, Register t2, Re // Success: fall through } -// Attempt to lightweight-unlock an object +// Attempt to fast-unlock an object // Registers: // - obj: the object to be unlocked // - t1, t2, t3: temp registers. If corresponding bit in savemask is set, they get saved, otherwise blown. // Result: // - Success: fallthrough // - Error: break to slow, Z cleared. -void MacroAssembler::lightweight_unlock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow) { +void MacroAssembler::fast_unlock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow) { assert_different_registers(obj, t1, t2, t3); #ifdef ASSERT diff --git a/src/hotspot/cpu/arm/macroAssembler_arm.hpp b/src/hotspot/cpu/arm/macroAssembler_arm.hpp index d60b38e42db..8e80c5bcc6e 100644 --- a/src/hotspot/cpu/arm/macroAssembler_arm.hpp +++ b/src/hotspot/cpu/arm/macroAssembler_arm.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1010,23 +1010,23 @@ public: void cas_for_lock_acquire(Register oldval, Register newval, Register base, Register tmp, Label &slow_case, bool allow_fallthrough_on_failure = false, bool one_shot = false); void cas_for_lock_release(Register oldval, Register newval, Register base, Register tmp, Label &slow_case, bool allow_fallthrough_on_failure = false, bool one_shot = false); - // Attempt to lightweight-lock an object + // Attempt to fast-lock an object // Registers: // - obj: the object to be locked // - t1, t2, t3: temp registers. If corresponding bit in savemask is set, they get saved, otherwise blown. // Result: // - Success: fallthrough // - Error: break to slow, Z cleared. - void lightweight_lock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow); + void fast_lock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow); - // Attempt to lightweight-unlock an object + // Attempt to fast-unlock an object // Registers: // - obj: the object to be unlocked // - t1, t2, t3: temp registers. If corresponding bit in savemask is set, they get saved, otherwise blown. // Result: // - Success: fallthrough // - Error: break to slow, Z cleared. - void lightweight_unlock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow); + void fast_unlock(Register obj, Register t1, Register t2, Register t3, unsigned savemask, Label& slow); #ifndef PRODUCT // Preserves flags and all registers. diff --git a/src/hotspot/cpu/arm/sharedRuntime_arm.cpp b/src/hotspot/cpu/arm/sharedRuntime_arm.cpp index 99d8773368d..76e38d29478 100644 --- a/src/hotspot/cpu/arm/sharedRuntime_arm.cpp +++ b/src/hotspot/cpu/arm/sharedRuntime_arm.cpp @@ -1139,8 +1139,8 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, __ mov(sync_handle, R1); log_trace(fastlock)("SharedRuntime lock fast"); - __ lightweight_lock(sync_obj /* object */, basic_lock /* t1 */, tmp /* t2 */, Rtemp /* t3 */, - 0x7 /* savemask */, slow_lock); + __ fast_lock(sync_obj /* object */, basic_lock /* t1 */, tmp /* t2 */, Rtemp /* t3 */, + 0x7 /* savemask */, slow_lock); // Fall through to lock_done __ bind(lock_done); } @@ -1195,8 +1195,8 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, Label slow_unlock, unlock_done; if (method->is_synchronized()) { log_trace(fastlock)("SharedRuntime unlock fast"); - __ lightweight_unlock(sync_obj, R2 /* t1 */, tmp /* t2 */, Rtemp /* t3 */, - 7 /* savemask */, slow_unlock); + __ fast_unlock(sync_obj, R2 /* t1 */, tmp /* t2 */, Rtemp /* t3 */, + 7 /* savemask */, slow_unlock); // Fall through __ bind(unlock_done); diff --git a/src/hotspot/cpu/ppc/c1_MacroAssembler_ppc.cpp b/src/hotspot/cpu/ppc/c1_MacroAssembler_ppc.cpp index 04af473c99b..798451446e5 100644 --- a/src/hotspot/cpu/ppc/c1_MacroAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/c1_MacroAssembler_ppc.cpp @@ -82,7 +82,7 @@ void C1_MacroAssembler::lock_object(Register Rmark, Register Roop, Register Rbox // Save object being locked into the BasicObjectLock... std(Roop, in_bytes(BasicObjectLock::obj_offset()), Rbox); - lightweight_lock(Rbox, Roop, Rmark, Rscratch, slow_int); + fast_lock(Rbox, Roop, Rmark, Rscratch, slow_int); b(done); bind(slow_int); @@ -104,7 +104,7 @@ void C1_MacroAssembler::unlock_object(Register Rmark, Register Roop, Register Rb ld(Roop, in_bytes(BasicObjectLock::obj_offset()), Rbox); verify_oop(Roop, FILE_AND_LINE); - lightweight_unlock(Roop, Rmark, slow_int); + fast_unlock(Roop, Rmark, slow_int); b(done); bind(slow_int); b(slow_case); // far diff --git a/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.cpp b/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.cpp index eab3df03fde..edf348fdc50 100644 --- a/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.cpp @@ -36,14 +36,14 @@ #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") -void C2_MacroAssembler::fast_lock_lightweight(ConditionRegister flag, Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3) { - compiler_fast_lock_lightweight_object(flag, obj, box, tmp1, tmp2, tmp3); +void C2_MacroAssembler::fast_lock(ConditionRegister flag, Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3) { + compiler_fast_lock_object(flag, obj, box, tmp1, tmp2, tmp3); } -void C2_MacroAssembler::fast_unlock_lightweight(ConditionRegister flag, Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3) { - compiler_fast_unlock_lightweight_object(flag, obj, box, tmp1, tmp2, tmp3); +void C2_MacroAssembler::fast_unlock(ConditionRegister flag, Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3) { + compiler_fast_unlock_object(flag, obj, box, tmp1, tmp2, tmp3); } void C2_MacroAssembler::load_narrow_klass_compact_c2(Register dst, Register obj, int disp) { diff --git a/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.hpp b/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.hpp index 16b6d1935ba..5a114294c1f 100644 --- a/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/c2_MacroAssembler_ppc.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,11 +28,11 @@ // C2_MacroAssembler contains high-level macros for C2 public: - // Code used by cmpFastLockLightweight and cmpFastUnlockLightweight mach instructions in .ad file. - void fast_lock_lightweight(ConditionRegister flag, Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3); - void fast_unlock_lightweight(ConditionRegister flag, Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3); + // Code used by cmpFastLock and cmpFastUnlock mach instructions in .ad file. + void fast_lock(ConditionRegister flag, Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3); + void fast_unlock(ConditionRegister flag, Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3); void load_narrow_klass_compact_c2(Register dst, Register obj, int disp); diff --git a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp index 0d32ea8003e..fc865be015e 100644 --- a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp @@ -958,7 +958,7 @@ void InterpreterMacroAssembler::lock_object(Register monitor, Register object) { assert_different_registers(header, tmp); - lightweight_lock(monitor, object, header, tmp, slow_case); + fast_lock(monitor, object, header, tmp, slow_case); b(done); bind(slow_case); @@ -987,7 +987,7 @@ void InterpreterMacroAssembler::unlock_object(Register monitor) { // The object address from the monitor is in object. ld(object, in_bytes(BasicObjectLock::obj_offset()), monitor); - lightweight_unlock(object, header, slow_case); + fast_unlock(object, header, slow_case); b(free_slot); diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp index 5a7e2172b29..5649ead2ea8 100644 --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp @@ -2671,8 +2671,8 @@ address MacroAssembler::emit_trampoline_stub(int destination_toc_offset, } // "The box" is the space on the stack where we copy the object mark. -void MacroAssembler::compiler_fast_lock_lightweight_object(ConditionRegister flag, Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3) { +void MacroAssembler::compiler_fast_lock_object(ConditionRegister flag, Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3) { assert_different_registers(obj, box, tmp1, tmp2, tmp3); assert(UseObjectMonitorTable || tmp3 == noreg, "tmp3 not needed"); assert(flag == CR0, "bad condition register"); @@ -2699,7 +2699,7 @@ void MacroAssembler::compiler_fast_lock_lightweight_object(ConditionRegister fla Register mark = tmp1; - { // Lightweight locking + { // Fast locking // Push lock to the lock stack and finish successfully. MUST reach to with flag == EQ Label push; @@ -2847,8 +2847,8 @@ void MacroAssembler::compiler_fast_lock_lightweight_object(ConditionRegister fla // C2 uses the value of flag (NE vs EQ) to determine the continuation. } -void MacroAssembler::compiler_fast_unlock_lightweight_object(ConditionRegister flag, Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3) { +void MacroAssembler::compiler_fast_unlock_object(ConditionRegister flag, Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3) { assert_different_registers(obj, tmp1, tmp2, tmp3); assert(flag == CR0, "bad condition register"); @@ -2863,7 +2863,7 @@ void MacroAssembler::compiler_fast_unlock_lightweight_object(ConditionRegister f const Register top = tmp2; const Register t = tmp3; - { // Lightweight unlock + { // Fast unlock Label push_and_slow; // Check if obj is top of lock-stack. @@ -2904,7 +2904,7 @@ void MacroAssembler::compiler_fast_unlock_lightweight_object(ConditionRegister f Label not_unlocked; andi_(t, mark, markWord::unlocked_value); beq(CR0, not_unlocked); - stop("lightweight_unlock already unlocked"); + stop("fast_unlock already unlocked"); bind(not_unlocked); #endif @@ -4588,11 +4588,11 @@ void MacroAssembler::atomically_flip_locked_state(bool is_unlock, Register obj, } } -// Implements lightweight-locking. +// Implements fast-locking. // // - obj: the object to be locked // - t1, t2: temporary register -void MacroAssembler::lightweight_lock(Register box, Register obj, Register t1, Register t2, Label& slow) { +void MacroAssembler::fast_lock(Register box, Register obj, Register t1, Register t2, Label& slow) { assert_different_registers(box, obj, t1, t2, R0); Label push; @@ -4644,11 +4644,11 @@ void MacroAssembler::lightweight_lock(Register box, Register obj, Register t1, R stw(top, in_bytes(JavaThread::lock_stack_top_offset()), R16_thread); } -// Implements lightweight-unlocking. +// Implements fast-unlocking. // // - obj: the object to be unlocked // - t1: temporary register -void MacroAssembler::lightweight_unlock(Register obj, Register t1, Label& slow) { +void MacroAssembler::fast_unlock(Register obj, Register t1, Label& slow) { assert_different_registers(obj, t1); #ifdef ASSERT @@ -4706,7 +4706,7 @@ void MacroAssembler::lightweight_unlock(Register obj, Register t1, Label& slow) Label not_unlocked; andi_(t, mark, markWord::unlocked_value); beq(CR0, not_unlocked); - stop("lightweight_unlock already unlocked"); + stop("fast_unlock already unlocked"); bind(not_unlocked); #endif diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp index 61e6a173823..875602cae58 100644 --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp @@ -698,8 +698,8 @@ class MacroAssembler: public Assembler { void push_cont_fastpath(); void pop_cont_fastpath(); void atomically_flip_locked_state(bool is_unlock, Register obj, Register tmp, Label& failed, int semantics); - void lightweight_lock(Register box, Register obj, Register t1, Register t2, Label& slow); - void lightweight_unlock(Register obj, Register t1, Label& slow); + void fast_lock(Register box, Register obj, Register t1, Register t2, Label& slow); + void fast_unlock(Register obj, Register t1, Label& slow); // allocation (for C1) void tlab_allocate( @@ -713,11 +713,11 @@ class MacroAssembler: public Assembler { enum { trampoline_stub_size = 6 * 4 }; address emit_trampoline_stub(int destination_toc_offset, int insts_call_instruction_offset, Register Rtoc = noreg); - void compiler_fast_lock_lightweight_object(ConditionRegister flag, Register oop, Register box, - Register tmp1, Register tmp2, Register tmp3); + void compiler_fast_lock_object(ConditionRegister flag, Register oop, Register box, + Register tmp1, Register tmp2, Register tmp3); - void compiler_fast_unlock_lightweight_object(ConditionRegister flag, Register oop, Register box, - Register tmp1, Register tmp2, Register tmp3); + void compiler_fast_unlock_object(ConditionRegister flag, Register oop, Register box, + Register tmp1, Register tmp2, Register tmp3); // Check if safepoint requested and if so branch void safepoint_poll(Label& slow_path, Register temp, bool at_return, bool in_nmethod); diff --git a/src/hotspot/cpu/ppc/ppc.ad b/src/hotspot/cpu/ppc/ppc.ad index 5488dbdb8c0..5c44fc19704 100644 --- a/src/hotspot/cpu/ppc/ppc.ad +++ b/src/hotspot/cpu/ppc/ppc.ad @@ -11551,15 +11551,15 @@ instruct partialSubtypeCheckConstSuper(rarg3RegP sub, rarg2RegP super_reg, immP // inlined locking and unlocking -instruct cmpFastLockLightweight(flagsRegCR0 crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2) %{ +instruct cmpFastLock(flagsRegCR0 crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2) %{ predicate(!UseObjectMonitorTable); match(Set crx (FastLock oop box)); effect(TEMP tmp1, TEMP tmp2); format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2" %} ins_encode %{ - __ fast_lock_lightweight($crx$$CondRegister, $oop$$Register, $box$$Register, - $tmp1$$Register, $tmp2$$Register, noreg /*tmp3*/); + __ fast_lock($crx$$CondRegister, $oop$$Register, $box$$Register, + $tmp1$$Register, $tmp2$$Register, noreg /*tmp3*/); // If locking was successful, crx should indicate 'EQ'. // The compiler generates a branch to the runtime call to // _complete_monitor_locking_Java for the case where crx is 'NE'. @@ -11574,8 +11574,8 @@ instruct cmpFastLockMonitorTable(flagsRegCR0 crx, iRegPdst oop, iRegPdst box, iR format %{ "FASTLOCK $oop, $box, $tmp1, $tmp2, $tmp3" %} ins_encode %{ - __ fast_lock_lightweight($crx$$CondRegister, $oop$$Register, $box$$Register, - $tmp1$$Register, $tmp2$$Register, $tmp3$$Register); + __ fast_lock($crx$$CondRegister, $oop$$Register, $box$$Register, + $tmp1$$Register, $tmp2$$Register, $tmp3$$Register); // If locking was successful, crx should indicate 'EQ'. // The compiler generates a branch to the runtime call to // _complete_monitor_locking_Java for the case where crx is 'NE'. @@ -11583,14 +11583,14 @@ instruct cmpFastLockMonitorTable(flagsRegCR0 crx, iRegPdst oop, iRegPdst box, iR ins_pipe(pipe_class_compare); %} -instruct cmpFastUnlockLightweight(flagsRegCR0 crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{ +instruct cmpFastUnlock(flagsRegCR0 crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2, iRegPdst tmp3) %{ match(Set crx (FastUnlock oop box)); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3); format %{ "FASTUNLOCK $oop, $box, $tmp1, $tmp2" %} ins_encode %{ - __ fast_unlock_lightweight($crx$$CondRegister, $oop$$Register, $box$$Register, - $tmp1$$Register, $tmp2$$Register, $tmp3$$Register); + __ fast_unlock($crx$$CondRegister, $oop$$Register, $box$$Register, + $tmp1$$Register, $tmp2$$Register, $tmp3$$Register); // If unlocking was successful, crx should indicate 'EQ'. // The compiler generates a branch to the runtime call to // _complete_monitor_unlocking_Java for the case where crx is 'NE'. diff --git a/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp b/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp index 4be3a0aee8b..4e427ace404 100644 --- a/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp +++ b/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp @@ -2381,7 +2381,7 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, // Try fastpath for locking. // fast_lock kills r_temp_1, r_temp_2, r_temp_3. Register r_temp_3_or_noreg = UseObjectMonitorTable ? r_temp_3 : noreg; - __ compiler_fast_lock_lightweight_object(CR0, r_oop, r_box, r_temp_1, r_temp_2, r_temp_3_or_noreg); + __ compiler_fast_lock_object(CR0, r_oop, r_box, r_temp_1, r_temp_2, r_temp_3_or_noreg); __ beq(CR0, locked); // None of the above fast optimizations worked so we have to get into the @@ -2600,7 +2600,7 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, __ addi(r_box, R1_SP, lock_offset); // Try fastpath for unlocking. - __ compiler_fast_unlock_lightweight_object(CR0, r_oop, r_box, r_temp_1, r_temp_2, r_temp_3); + __ compiler_fast_unlock_object(CR0, r_oop, r_box, r_temp_1, r_temp_2, r_temp_3); __ beq(CR0, done); // Save and restore any potential method result value around the unlocking operation. diff --git a/src/hotspot/cpu/ppc/vm_version_ppc.hpp b/src/hotspot/cpu/ppc/vm_version_ppc.hpp index 9588edc4bf8..11dce83bed0 100644 --- a/src/hotspot/cpu/ppc/vm_version_ppc.hpp +++ b/src/hotspot/cpu/ppc/vm_version_ppc.hpp @@ -62,7 +62,7 @@ public: // PPC64 supports fast class initialization checks static bool supports_fast_class_init_checks() { return true; } constexpr static bool supports_stack_watermark_barrier() { return true; } - constexpr static bool supports_recursive_lightweight_locking() { return true; } + constexpr static bool supports_recursive_fast_locking() { return true; } constexpr static bool supports_secondary_supers_table() { return true; } static bool supports_float16() { return PowerArchitecturePPC64 >= 9; } diff --git a/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp index 8e989de2665..aeb077ba0a0 100644 --- a/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp @@ -59,7 +59,7 @@ int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register basic_lo null_check_offset = offset(); - lightweight_lock(basic_lock, obj, hdr, temp, t1, slow_case); + fast_lock(basic_lock, obj, hdr, temp, t1, slow_case); return null_check_offset; } @@ -71,7 +71,7 @@ void C1_MacroAssembler::unlock_object(Register hdr, Register obj, Register basic ld(obj, Address(basic_lock, BasicObjectLock::obj_offset())); verify_oop(obj); - lightweight_unlock(obj, hdr, temp, t1, slow_case); + fast_unlock(obj, hdr, temp, t1, slow_case); } // Defines obj, preserves var_size_in_bytes diff --git a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp index 154b62db47f..abbd7eedbba 100644 --- a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp @@ -43,8 +43,8 @@ #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") -void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3, Register tmp4) { +void C2_MacroAssembler::fast_lock(Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3, Register tmp4) { // Flag register, zero for success; non-zero for failure. Register flag = t1; @@ -74,7 +74,7 @@ void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, const Register tmp1_mark = tmp1; const Register tmp3_t = tmp3; - { // Lightweight locking + { // Fast locking // Push lock to the lock stack and finish successfully. MUST branch to with flag == 0 Label push; @@ -205,8 +205,8 @@ void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, // C2 uses the value of flag (0 vs !0) to determine the continuation. } -void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register box, - Register tmp1, Register tmp2, Register tmp3) { +void C2_MacroAssembler::fast_unlock(Register obj, Register box, + Register tmp1, Register tmp2, Register tmp3) { // Flag register, zero for success; non-zero for failure. Register flag = t1; @@ -225,7 +225,7 @@ void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register box, const Register tmp2_top = tmp2; const Register tmp3_t = tmp3; - { // Lightweight unlock + { // Fast unlock Label push_and_slow_path; // Check if obj is top of lock-stack. diff --git a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp index 2d5339dc153..f08e5e27c87 100644 --- a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.hpp @@ -49,11 +49,11 @@ const int STUB_THRESHOLD, Label *STUB, Label *DONE); public: - // Code used by cmpFastLockLightweight and cmpFastUnlockLightweight mach instructions in .ad file. - void fast_lock_lightweight(Register object, Register box, - Register tmp1, Register tmp2, Register tmp3, Register tmp4); - void fast_unlock_lightweight(Register object, Register box, - Register tmp1, Register tmp2, Register tmp3); + // Code used by cmpFastLock and cmpFastUnlock mach instructions in .ad file. + void fast_lock(Register object, Register box, + Register tmp1, Register tmp2, Register tmp3, Register tmp4); + void fast_unlock(Register object, Register box, + Register tmp1, Register tmp2, Register tmp3); void string_compare(Register str1, Register str2, Register cnt1, Register cnt2, Register result, diff --git a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp index 5af8ea1da37..189c7c93d07 100644 --- a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp +++ b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp @@ -751,7 +751,7 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg) ld(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset())); Label done, slow_case; - lightweight_lock(lock_reg, obj_reg, tmp, tmp2, tmp3, slow_case); + fast_lock(lock_reg, obj_reg, tmp, tmp2, tmp3, slow_case); j(done); bind(slow_case); @@ -782,7 +782,7 @@ void InterpreterMacroAssembler::unlock_object(Register lock_reg) const Register swap_reg = x10; const Register header_reg = c_rarg2; // Will contain the old oopMark const Register obj_reg = c_rarg3; // Will contain the oop - const Register tmp_reg = c_rarg4; // Temporary used by lightweight_unlock + const Register tmp_reg = c_rarg4; // Temporary used by fast_unlock save_bcp(); // Save in case of exception @@ -793,7 +793,7 @@ void InterpreterMacroAssembler::unlock_object(Register lock_reg) sd(zr, Address(lock_reg, BasicObjectLock::obj_offset())); Label done, slow_case; - lightweight_unlock(obj_reg, header_reg, swap_reg, tmp_reg, slow_case); + fast_unlock(obj_reg, header_reg, swap_reg, tmp_reg, slow_case); j(done); bind(slow_case); diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 54304ec648d..7a8496ae42b 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -6435,12 +6435,12 @@ void MacroAssembler::test_bit(Register Rd, Register Rs, uint32_t bit_pos) { } } -// Implements lightweight-locking. +// Implements fast-locking. // // - obj: the object to be locked // - tmp1, tmp2, tmp3: temporary registers, will be destroyed // - slow: branched to if locking fails -void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow) { +void MacroAssembler::fast_lock(Register basic_lock, Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow) { assert_different_registers(basic_lock, obj, tmp1, tmp2, tmp3, t0); Label push; @@ -6499,7 +6499,7 @@ void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Registe // - obj: the object to be unlocked // - tmp1, tmp2, tmp3: temporary registers // - slow: branched to if unlocking fails -void MacroAssembler::lightweight_unlock(Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow) { +void MacroAssembler::fast_unlock(Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow) { assert_different_registers(obj, tmp1, tmp2, tmp3, t0); #ifdef ASSERT @@ -6546,7 +6546,7 @@ void MacroAssembler::lightweight_unlock(Register obj, Register tmp1, Register tm Label not_unlocked; test_bit(t, mark, exact_log2(markWord::unlocked_value)); beqz(t, not_unlocked); - stop("lightweight_unlock already unlocked"); + stop("fast_unlock already unlocked"); bind(not_unlocked); #endif diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index e0e610ff49a..1908b9a9605 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -1639,8 +1639,8 @@ private: void store_conditional(Register dst, Register new_val, Register addr, Assembler::operand_size size, Assembler::Aqrl release); public: - void lightweight_lock(Register basic_lock, Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow); - void lightweight_unlock(Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow); + void fast_lock(Register basic_lock, Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow); + void fast_unlock(Register obj, Register tmp1, Register tmp2, Register tmp3, Label& slow); public: enum { diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index 34177701900..e23adcf2488 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -11039,36 +11039,36 @@ instruct tlsLoadP(javaThread_RegP dst) // inlined locking and unlocking // using t1 as the 'flag' register to bridge the BoolNode producers and consumers -instruct cmpFastLockLightweight(rFlagsReg cr, iRegP object, iRegP box, - iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegPNoSp tmp4) +instruct cmpFastLock(rFlagsReg cr, iRegP object, iRegP box, + iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegPNoSp tmp4) %{ match(Set cr (FastLock object box)); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4); ins_cost(10 * DEFAULT_COST); - format %{ "fastlock $object,$box\t! kills $tmp1,$tmp2,$tmp3,$tmp4 #@cmpFastLockLightweight" %} + format %{ "fastlock $object,$box\t! kills $tmp1,$tmp2,$tmp3,$tmp4 #@cmpFastLock" %} ins_encode %{ - __ fast_lock_lightweight($object$$Register, $box$$Register, - $tmp1$$Register, $tmp2$$Register, $tmp3$$Register, $tmp4$$Register); + __ fast_lock($object$$Register, $box$$Register, + $tmp1$$Register, $tmp2$$Register, $tmp3$$Register, $tmp4$$Register); %} ins_pipe(pipe_serial); %} // using t1 as the 'flag' register to bridge the BoolNode producers and consumers -instruct cmpFastUnlockLightweight(rFlagsReg cr, iRegP object, iRegP box, - iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3) +instruct cmpFastUnlock(rFlagsReg cr, iRegP object, iRegP box, + iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3) %{ match(Set cr (FastUnlock object box)); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3); ins_cost(10 * DEFAULT_COST); - format %{ "fastunlock $object,$box\t! kills $tmp1,$tmp2,$tmp3 #@cmpFastUnlockLightweight" %} + format %{ "fastunlock $object,$box\t! kills $tmp1,$tmp2,$tmp3 #@cmpFastUnlock" %} ins_encode %{ - __ fast_unlock_lightweight($object$$Register, $box$$Register, - $tmp1$$Register, $tmp2$$Register, $tmp3$$Register); + __ fast_unlock($object$$Register, $box$$Register, + $tmp1$$Register, $tmp2$$Register, $tmp3$$Register); %} ins_pipe(pipe_serial); diff --git a/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp b/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp index e64fc2ffc80..eeb6fad1b59 100644 --- a/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp +++ b/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp @@ -1642,7 +1642,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, const Register obj_reg = x9; // Will contain the oop const Register lock_reg = x30; // Address of compiler lock object (BasicLock) const Register old_hdr = x30; // value of old header at unlock time - const Register lock_tmp = x31; // Temporary used by lightweight_lock/unlock + const Register lock_tmp = x31; // Temporary used by fast_lock/unlock const Register tmp = ra; Label slow_path_lock; @@ -1659,7 +1659,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, // Load the oop from the handle __ ld(obj_reg, Address(oop_handle_reg, 0)); - __ lightweight_lock(lock_reg, obj_reg, swap_reg, tmp, lock_tmp, slow_path_lock); + __ fast_lock(lock_reg, obj_reg, swap_reg, tmp, lock_tmp, slow_path_lock); // Slow path will re-enter here __ bind(lock_done); @@ -1754,7 +1754,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, save_native_result(masm, ret_type, stack_slots); } - __ lightweight_unlock(obj_reg, old_hdr, swap_reg, lock_tmp, slow_path_unlock); + __ fast_unlock(obj_reg, old_hdr, swap_reg, lock_tmp, slow_path_unlock); // slow path re-enters here __ bind(unlock_done); diff --git a/src/hotspot/cpu/riscv/vm_version_riscv.hpp b/src/hotspot/cpu/riscv/vm_version_riscv.hpp index f74992cbc37..16f2e5d8f5b 100644 --- a/src/hotspot/cpu/riscv/vm_version_riscv.hpp +++ b/src/hotspot/cpu/riscv/vm_version_riscv.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved. * Copyright (c) 2020, 2023, Huawei Technologies Co., Ltd. All rights reserved. * Copyright (c) 2023, Rivos Inc. All rights reserved. @@ -498,7 +498,7 @@ private: constexpr static bool supports_stack_watermark_barrier() { return true; } - constexpr static bool supports_recursive_lightweight_locking() { return true; } + constexpr static bool supports_recursive_fast_locking() { return true; } constexpr static bool supports_secondary_supers_table() { return true; } diff --git a/src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp b/src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp index 91d52def08d..993c1a1b552 100644 --- a/src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp @@ -67,7 +67,7 @@ void C1_MacroAssembler::lock_object(Register Rmark, Register Roop, Register Rbox // Save object being locked into the BasicObjectLock... z_stg(Roop, Address(Rbox, BasicObjectLock::obj_offset())); - lightweight_lock(Rbox, Roop, Rmark, tmp, slow_case); + fast_lock(Rbox, Roop, Rmark, tmp, slow_case); } void C1_MacroAssembler::unlock_object(Register Rmark, Register Roop, Register Rbox, Label& slow_case) { @@ -77,7 +77,7 @@ void C1_MacroAssembler::unlock_object(Register Rmark, Register Roop, Register Rb z_lg(Roop, Address(Rbox, BasicObjectLock::obj_offset())); verify_oop(Roop, FILE_AND_LINE); - lightweight_unlock(Roop, Rmark, Z_R1_scratch, slow_case); + fast_unlock(Roop, Rmark, Z_R1_scratch, slow_case); } void C1_MacroAssembler::try_allocate( diff --git a/src/hotspot/cpu/s390/c2_MacroAssembler_s390.cpp b/src/hotspot/cpu/s390/c2_MacroAssembler_s390.cpp index 485efec6b9b..957c89af3fc 100644 --- a/src/hotspot/cpu/s390/c2_MacroAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/c2_MacroAssembler_s390.cpp @@ -32,13 +32,13 @@ #define BLOCK_COMMENT(str) block_comment(str) #define BIND(label) bind(label); BLOCK_COMMENT(#label ":") -void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Register temp1, Register temp2) { - compiler_fast_lock_lightweight_object(obj, box, temp1, temp2); +void C2_MacroAssembler::fast_lock(Register obj, Register box, Register temp1, Register temp2) { + compiler_fast_lock_object(obj, box, temp1, temp2); } -void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register box, Register temp1, Register temp2) { - compiler_fast_unlock_lightweight_object(obj, box, temp1, temp2); +void C2_MacroAssembler::fast_unlock(Register obj, Register box, Register temp1, Register temp2) { + compiler_fast_unlock_object(obj, box, temp1, temp2); } void C2_MacroAssembler::load_narrow_klass_compact_c2(Register dst, Address src) { diff --git a/src/hotspot/cpu/s390/c2_MacroAssembler_s390.hpp b/src/hotspot/cpu/s390/c2_MacroAssembler_s390.hpp index abf0db8e520..632cc31d492 100644 --- a/src/hotspot/cpu/s390/c2_MacroAssembler_s390.hpp +++ b/src/hotspot/cpu/s390/c2_MacroAssembler_s390.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2017, 2024 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -29,9 +29,9 @@ // C2_MacroAssembler contains high-level macros for C2 public: - // Code used by cmpFastLockLightweight and cmpFastUnlockLightweight mach instructions in s390.ad file. - void fast_lock_lightweight(Register obj, Register box, Register temp1, Register temp2); - void fast_unlock_lightweight(Register obj, Register box, Register temp1, Register temp2); + // Code used by cmpFastLock and cmpFastUnlock mach instructions in s390.ad file. + void fast_lock(Register obj, Register box, Register temp1, Register temp2); + void fast_unlock(Register obj, Register box, Register temp1, Register temp2); void load_narrow_klass_compact_c2(Register dst, Address src); diff --git a/src/hotspot/cpu/s390/interp_masm_s390.cpp b/src/hotspot/cpu/s390/interp_masm_s390.cpp index f62051c628e..a80ca26239b 100644 --- a/src/hotspot/cpu/s390/interp_masm_s390.cpp +++ b/src/hotspot/cpu/s390/interp_masm_s390.cpp @@ -1019,7 +1019,7 @@ void InterpreterMacroAssembler::lock_object(Register monitor, Register object) { NearLabel done, slow_case; - lightweight_lock(monitor, object, header, tmp, slow_case); + fast_lock(monitor, object, header, tmp, slow_case); z_bru(done); bind(slow_case); @@ -1054,7 +1054,7 @@ void InterpreterMacroAssembler::unlock_object(Register monitor, Register object) clear_mem(obj_entry, sizeof(oop)); - lightweight_unlock(object, header, current_header, slow_case); + fast_unlock(object, header, current_header, slow_case); z_bru(done); // The lock has been converted into a heavy lock and hence diff --git a/src/hotspot/cpu/s390/macroAssembler_s390.cpp b/src/hotspot/cpu/s390/macroAssembler_s390.cpp index b047ff00044..f35e18c7398 100644 --- a/src/hotspot/cpu/s390/macroAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/macroAssembler_s390.cpp @@ -6138,11 +6138,11 @@ void MacroAssembler::zap_from_to(Register low, Register high, Register val, Regi } #endif // !PRODUCT -// Implements lightweight-locking. +// Implements fast-locking. // - obj: the object to be locked, contents preserved. // - temp1, temp2: temporary registers, contents destroyed. // Note: make sure Z_R1 is not manipulated here when C2 compiler is in play -void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Register temp1, Register temp2, Label& slow) { +void MacroAssembler::fast_lock(Register basic_lock, Register obj, Register temp1, Register temp2, Label& slow) { assert_different_registers(basic_lock, obj, temp1, temp2); @@ -6203,11 +6203,11 @@ void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Registe z_alsi(in_bytes(ls_top_offset), Z_thread, oopSize); } -// Implements lightweight-unlocking. +// Implements fast-unlocking. // - obj: the object to be unlocked // - temp1, temp2: temporary registers, will be destroyed // - Z_R1_scratch: will be killed in case of Interpreter & C1 Compiler -void MacroAssembler::lightweight_unlock(Register obj, Register temp1, Register temp2, Label& slow) { +void MacroAssembler::fast_unlock(Register obj, Register temp1, Register temp2, Label& slow) { assert_different_registers(obj, temp1, temp2); @@ -6264,7 +6264,7 @@ void MacroAssembler::lightweight_unlock(Register obj, Register temp1, Register t NearLabel not_unlocked; z_tmll(mark, markWord::unlocked_value); z_braz(not_unlocked); - stop("lightweight_unlock already unlocked"); + stop("fast_unlock already unlocked"); bind(not_unlocked); #endif // ASSERT @@ -6289,7 +6289,7 @@ void MacroAssembler::lightweight_unlock(Register obj, Register temp1, Register t bind(unlocked); } -void MacroAssembler::compiler_fast_lock_lightweight_object(Register obj, Register box, Register tmp1, Register tmp2) { +void MacroAssembler::compiler_fast_lock_object(Register obj, Register box, Register tmp1, Register tmp2) { assert_different_registers(obj, box, tmp1, tmp2, Z_R0_scratch); // Handle inflated monitor. @@ -6314,8 +6314,8 @@ void MacroAssembler::compiler_fast_lock_lightweight_object(Register obj, Registe const int mark_offset = oopDesc::mark_offset_in_bytes(); const ByteSize ls_top_offset = JavaThread::lock_stack_top_offset(); - BLOCK_COMMENT("compiler_fast_lightweight_locking {"); - { // lightweight locking + BLOCK_COMMENT("compiler_fast_locking {"); + { // Fast locking // Push lock to the lock stack and finish successfully. MUST reach to with flag == EQ NearLabel push; @@ -6362,9 +6362,9 @@ void MacroAssembler::compiler_fast_lock_lightweight_object(Register obj, Registe z_cgr(obj, obj); // set the CC to EQ, as it could be changed by alsi z_bru(locked); } - BLOCK_COMMENT("} compiler_fast_lightweight_locking"); + BLOCK_COMMENT("} compiler_fast_locking"); - BLOCK_COMMENT("handle_inflated_monitor_lightweight_locking {"); + BLOCK_COMMENT("handle_inflated_monitor_locking {"); { // Handle inflated monitor. bind(inflated); @@ -6441,7 +6441,7 @@ void MacroAssembler::compiler_fast_lock_lightweight_object(Register obj, Registe // set the CC now z_cgr(obj, obj); } - BLOCK_COMMENT("} handle_inflated_monitor_lightweight_locking"); + BLOCK_COMMENT("} handle_inflated_monitor_locking"); bind(locked); @@ -6464,7 +6464,7 @@ void MacroAssembler::compiler_fast_lock_lightweight_object(Register obj, Registe // C2 uses the value of flag (NE vs EQ) to determine the continuation. } -void MacroAssembler::compiler_fast_unlock_lightweight_object(Register obj, Register box, Register tmp1, Register tmp2) { +void MacroAssembler::compiler_fast_unlock_object(Register obj, Register box, Register tmp1, Register tmp2) { assert_different_registers(obj, box, tmp1, tmp2); // Handle inflated monitor. @@ -6479,8 +6479,8 @@ void MacroAssembler::compiler_fast_unlock_lightweight_object(Register obj, Regis const int mark_offset = oopDesc::mark_offset_in_bytes(); const ByteSize ls_top_offset = JavaThread::lock_stack_top_offset(); - BLOCK_COMMENT("compiler_fast_lightweight_unlock {"); - { // Lightweight Unlock + BLOCK_COMMENT("compiler_fast_unlock {"); + { // Fast Unlock NearLabel push_and_slow_path; // Check if obj is top of lock-stack. @@ -6525,7 +6525,7 @@ void MacroAssembler::compiler_fast_unlock_lightweight_object(Register obj, Regis NearLabel not_unlocked; z_tmll(mark, markWord::unlocked_value); z_braz(not_unlocked); - stop("lightweight_unlock already unlocked"); + stop("fast_unlock already unlocked"); bind(not_unlocked); #endif // ASSERT @@ -6546,7 +6546,7 @@ void MacroAssembler::compiler_fast_unlock_lightweight_object(Register obj, Regis z_ltgr(obj, obj); // object is not null here z_bru(slow_path); } - BLOCK_COMMENT("} compiler_fast_lightweight_unlock"); + BLOCK_COMMENT("} compiler_fast_unlock"); { // Handle inflated monitor. diff --git a/src/hotspot/cpu/s390/macroAssembler_s390.hpp b/src/hotspot/cpu/s390/macroAssembler_s390.hpp index 1c4da4d26eb..da24ae80d45 100644 --- a/src/hotspot/cpu/s390/macroAssembler_s390.hpp +++ b/src/hotspot/cpu/s390/macroAssembler_s390.hpp @@ -790,10 +790,10 @@ class MacroAssembler: public Assembler { // Kills registers tmp1_reg and tmp2_reg and preserves the condition code. void increment_counter_eq(address counter_address, Register tmp1_reg, Register tmp2_reg); - void lightweight_lock(Register basic_lock, Register obj, Register tmp1, Register tmp2, Label& slow); - void lightweight_unlock(Register obj, Register tmp1, Register tmp2, Label& slow); - void compiler_fast_lock_lightweight_object(Register obj, Register box, Register tmp1, Register tmp2); - void compiler_fast_unlock_lightweight_object(Register obj, Register box, Register tmp1, Register tmp2); + void fast_lock(Register basic_lock, Register obj, Register tmp1, Register tmp2, Label& slow); + void fast_unlock(Register obj, Register tmp1, Register tmp2, Label& slow); + void compiler_fast_lock_object(Register obj, Register box, Register tmp1, Register tmp2); + void compiler_fast_unlock_object(Register obj, Register box, Register tmp1, Register tmp2); void resolve_jobject(Register value, Register tmp1, Register tmp2); void resolve_global_jobject(Register value, Register tmp1, Register tmp2); diff --git a/src/hotspot/cpu/s390/s390.ad b/src/hotspot/cpu/s390/s390.ad index 0c4939d8432..2f12aa4c03c 100644 --- a/src/hotspot/cpu/s390/s390.ad +++ b/src/hotspot/cpu/s390/s390.ad @@ -10123,14 +10123,14 @@ instruct partialSubtypeCheckConstSuper(rarg2RegP sub, rarg1RegP super, immP supe // ============================================================================ // inlined locking and unlocking -instruct cmpFastLockLightweight(flagsReg pcc, iRegP_N2P oop, iRegP_N2P box, iRegP tmp1, iRegP tmp2) %{ +instruct cmpFastLock(flagsReg pcc, iRegP_N2P oop, iRegP_N2P box, iRegP tmp1, iRegP tmp2) %{ match(Set pcc (FastLock oop box)); effect(TEMP tmp1, TEMP tmp2); ins_cost(100); // TODO: s390 port size(VARIABLE_SIZE); format %{ "FASTLOCK $oop, $box; KILL Z_ARG4, Z_ARG5" %} ins_encode %{ - __ fast_lock_lightweight($oop$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register); + __ fast_lock($oop$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register); // If locking was successful, cc should indicate 'EQ'. // The compiler generates a branch to the runtime call to // _complete_monitor_locking_Java for the case where cc is 'NE'. @@ -10138,14 +10138,14 @@ instruct cmpFastLockLightweight(flagsReg pcc, iRegP_N2P oop, iRegP_N2P box, iReg ins_pipe(pipe_class_dummy); %} -instruct cmpFastUnlockLightweight(flagsReg pcc, iRegP_N2P oop, iRegP_N2P box, iRegP tmp1, iRegP tmp2) %{ +instruct cmpFastUnlock(flagsReg pcc, iRegP_N2P oop, iRegP_N2P box, iRegP tmp1, iRegP tmp2) %{ match(Set pcc (FastUnlock oop box)); effect(TEMP tmp1, TEMP tmp2); ins_cost(100); // TODO: s390 port size(FIXED_SIZE); format %{ "FASTUNLOCK $oop, $box; KILL Z_ARG4, Z_ARG5" %} ins_encode %{ - __ fast_unlock_lightweight($oop$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register); + __ fast_unlock($oop$$Register, $box$$Register, $tmp1$$Register, $tmp2$$Register); // If unlocking was successful, cc should indicate 'EQ'. // The compiler generates a branch to the runtime call to // _complete_monitor_unlocking_Java for the case where cc is 'NE'. diff --git a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp index 3a6e1bff8f4..5b6f7dcd984 100644 --- a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp +++ b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp @@ -1765,7 +1765,7 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, // Try fastpath for locking. // Fast_lock kills r_temp_1, r_temp_2. - __ compiler_fast_lock_lightweight_object(r_oop, r_box, r_tmp1, r_tmp2); + __ compiler_fast_lock_object(r_oop, r_box, r_tmp1, r_tmp2); __ z_bre(done); //------------------------------------------------------------------------- @@ -1961,7 +1961,7 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, // Try fastpath for unlocking. // Fast_unlock kills r_tmp1, r_tmp2. - __ compiler_fast_unlock_lightweight_object(r_oop, r_box, r_tmp1, r_tmp2); + __ compiler_fast_unlock_object(r_oop, r_box, r_tmp1, r_tmp2); __ z_bre(done); // Slow path for unlocking. diff --git a/src/hotspot/cpu/s390/vm_version_s390.hpp b/src/hotspot/cpu/s390/vm_version_s390.hpp index 04005ff2cf9..591d30c3a1c 100644 --- a/src/hotspot/cpu/s390/vm_version_s390.hpp +++ b/src/hotspot/cpu/s390/vm_version_s390.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2025, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2016, 2024 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -425,7 +425,7 @@ class VM_Version: public Abstract_VM_Version { constexpr static bool supports_secondary_supers_table() { return true; } - constexpr static bool supports_recursive_lightweight_locking() { return true; } + constexpr static bool supports_recursive_fast_locking() { return true; } // CPU feature query functions static const char* get_model_string() { return _model_string; } diff --git a/src/hotspot/cpu/x86/c1_MacroAssembler_x86.cpp b/src/hotspot/cpu/x86/c1_MacroAssembler_x86.cpp index c3d45f9d15d..88e2e6c8ba9 100644 --- a/src/hotspot/cpu/x86/c1_MacroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c1_MacroAssembler_x86.cpp @@ -53,7 +53,7 @@ int C1_MacroAssembler::lock_object(Register hdr, Register obj, Register basic_lo null_check_offset = offset(); - lightweight_lock(basic_lock, obj, hdr, tmp, slow_case); + fast_lock(basic_lock, obj, hdr, tmp, slow_case); return null_check_offset; } @@ -66,7 +66,7 @@ void C1_MacroAssembler::unlock_object(Register hdr, Register obj, Register basic movptr(obj, Address(basic_lock, BasicObjectLock::obj_offset())); verify_oop(obj); - lightweight_unlock(obj, rax, hdr, slow_case); + fast_unlock(obj, rax, hdr, slow_case); } diff --git a/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp b/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp index b4f8e9d9514..f73110f8660 100644 --- a/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp +++ b/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp @@ -58,11 +58,11 @@ void C2EntryBarrierStub::emit(C2_MacroAssembler& masm) { __ jmp(continuation(), false /* maybe_short */); } -int C2FastUnlockLightweightStub::max_size() const { +int C2FastUnlockStub::max_size() const { return 128; } -void C2FastUnlockLightweightStub::emit(C2_MacroAssembler& masm) { +void C2FastUnlockStub::emit(C2_MacroAssembler& masm) { assert(_t == rax, "must be"); { // Restore lock-stack and handle the unlock in runtime. diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp index 8386e57c389..51b2eff2cfb 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp @@ -222,8 +222,8 @@ inline Assembler::AvxVectorLen C2_MacroAssembler::vector_length_encoding(int vle // box: on-stack box address -- KILLED // rax: tmp -- KILLED // t : tmp -- KILLED -void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Register rax_reg, - Register t, Register thread) { +void C2_MacroAssembler::fast_lock(Register obj, Register box, Register rax_reg, + Register t, Register thread) { assert(rax_reg == rax, "Used for CAS"); assert_different_registers(obj, box, rax_reg, t, thread); @@ -247,7 +247,7 @@ void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Regist const Register mark = t; - { // Lightweight Lock + { // Fast Lock Label push; @@ -415,7 +415,7 @@ void C2_MacroAssembler::fast_lock_lightweight(Register obj, Register box, Regist // A perfectly viable alternative is to elide the owner check except when // Xcheck:jni is enabled. -void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register reg_rax, Register t, Register thread) { +void C2_MacroAssembler::fast_unlock(Register obj, Register reg_rax, Register t, Register thread) { assert(reg_rax == rax, "Used for CAS"); assert_different_registers(obj, reg_rax, t); @@ -430,16 +430,16 @@ void C2_MacroAssembler::fast_unlock_lightweight(Register obj, Register reg_rax, const Register box = reg_rax; Label dummy; - C2FastUnlockLightweightStub* stub = nullptr; + C2FastUnlockStub* stub = nullptr; if (!Compile::current()->output()->in_scratch_emit_size()) { - stub = new (Compile::current()->comp_arena()) C2FastUnlockLightweightStub(obj, mark, reg_rax, thread); + stub = new (Compile::current()->comp_arena()) C2FastUnlockStub(obj, mark, reg_rax, thread); Compile::current()->output()->add_stub(stub); } Label& push_and_slow_path = stub == nullptr ? dummy : stub->push_and_slow_path(); - { // Lightweight Unlock + { // Fast Unlock // Load top. movl(top, Address(thread, JavaThread::lock_stack_top_offset())); diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp index aaee25f440a..cd5f0ceb900 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp @@ -35,9 +35,9 @@ public: // Code used by cmpFastLock and cmpFastUnlock mach instructions in .ad file. // See full description in c2_MacroAssembler_x86.cpp. - void fast_lock_lightweight(Register obj, Register box, Register rax_reg, - Register t, Register thread); - void fast_unlock_lightweight(Register obj, Register reg_rax, Register t, Register thread); + void fast_lock(Register obj, Register box, Register rax_reg, + Register t, Register thread); + void fast_unlock(Register obj, Register reg_rax, Register t, Register thread); void verify_int_in_range(uint idx, const TypeInt* t, Register val); void verify_long_in_range(uint idx, const TypeLong* t, Register val, Register tmp); diff --git a/src/hotspot/cpu/x86/interp_masm_x86.cpp b/src/hotspot/cpu/x86/interp_masm_x86.cpp index 110dfab5808..36959ddfe1d 100644 --- a/src/hotspot/cpu/x86/interp_masm_x86.cpp +++ b/src/hotspot/cpu/x86/interp_masm_x86.cpp @@ -1107,7 +1107,7 @@ void InterpreterMacroAssembler::lock_object(Register lock_reg) { // Load object pointer into obj_reg movptr(obj_reg, Address(lock_reg, BasicObjectLock::obj_offset())); - lightweight_lock(lock_reg, obj_reg, swap_reg, tmp_reg, slow_case); + fast_lock(lock_reg, obj_reg, swap_reg, tmp_reg, slow_case); jmp(done); bind(slow_case); @@ -1149,7 +1149,7 @@ void InterpreterMacroAssembler::unlock_object(Register lock_reg) { // Free entry movptr(Address(lock_reg, BasicObjectLock::obj_offset()), NULL_WORD); - lightweight_unlock(obj_reg, swap_reg, header_reg, slow_case); + fast_unlock(obj_reg, swap_reg, header_reg, slow_case); jmp(done); bind(slow_case); diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.cpp b/src/hotspot/cpu/x86/macroAssembler_x86.cpp index 4f19b30b832..44f1a35d443 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp @@ -9653,13 +9653,13 @@ void MacroAssembler::check_stack_alignment(Register sp, const char* msg, unsigne bind(L_stack_ok); } -// Implements lightweight-locking. +// Implements fast-locking. // // obj: the object to be locked // reg_rax: rax // thread: the thread which attempts to lock obj // tmp: a temporary register -void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Register reg_rax, Register tmp, Label& slow) { +void MacroAssembler::fast_lock(Register basic_lock, Register obj, Register reg_rax, Register tmp, Label& slow) { Register thread = r15_thread; assert(reg_rax == rax, ""); @@ -9715,13 +9715,13 @@ void MacroAssembler::lightweight_lock(Register basic_lock, Register obj, Registe movl(Address(thread, JavaThread::lock_stack_top_offset()), top); } -// Implements lightweight-unlocking. +// Implements fast-unlocking. // // obj: the object to be unlocked // reg_rax: rax // thread: the thread // tmp: a temporary register -void MacroAssembler::lightweight_unlock(Register obj, Register reg_rax, Register tmp, Label& slow) { +void MacroAssembler::fast_unlock(Register obj, Register reg_rax, Register tmp, Label& slow) { Register thread = r15_thread; assert(reg_rax == rax, ""); @@ -9753,7 +9753,7 @@ void MacroAssembler::lightweight_unlock(Register obj, Register reg_rax, Register Label not_unlocked; testptr(reg_rax, markWord::unlocked_value); jcc(Assembler::zero, not_unlocked); - stop("lightweight_unlock already unlocked"); + stop("fast_unlock already unlocked"); bind(not_unlocked); #endif diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.hpp b/src/hotspot/cpu/x86/macroAssembler_x86.hpp index ed1343d9c8c..4cecaa55345 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.hpp @@ -2054,8 +2054,8 @@ public: void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg); - void lightweight_lock(Register basic_lock, Register obj, Register reg_rax, Register tmp, Label& slow); - void lightweight_unlock(Register obj, Register reg_rax, Register tmp, Label& slow); + void fast_lock(Register basic_lock, Register obj, Register reg_rax, Register tmp, Label& slow); + void fast_unlock(Register obj, Register reg_rax, Register tmp, Label& slow); void save_legacy_gprs(); void restore_legacy_gprs(); diff --git a/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp b/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp index e702b587edd..5a4a5b1809e 100644 --- a/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp +++ b/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp @@ -2141,7 +2141,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, // Load the oop from the handle __ movptr(obj_reg, Address(oop_handle_reg, 0)); - __ lightweight_lock(lock_reg, obj_reg, swap_reg, rscratch1, slow_path_lock); + __ fast_lock(lock_reg, obj_reg, swap_reg, rscratch1, slow_path_lock); // Slow path will re-enter here __ bind(lock_done); @@ -2266,7 +2266,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, save_native_result(masm, ret_type, stack_slots); } - __ lightweight_unlock(obj_reg, swap_reg, lock_reg, slow_path_unlock); + __ fast_unlock(obj_reg, swap_reg, lock_reg, slow_path_unlock); // slow path re-enters here __ bind(unlock_done); diff --git a/src/hotspot/cpu/x86/vm_version_x86.hpp b/src/hotspot/cpu/x86/vm_version_x86.hpp index aa9a527e0b7..cc93ee3564e 100644 --- a/src/hotspot/cpu/x86/vm_version_x86.hpp +++ b/src/hotspot/cpu/x86/vm_version_x86.hpp @@ -995,7 +995,7 @@ public: return true; } - constexpr static bool supports_recursive_lightweight_locking() { + constexpr static bool supports_recursive_fast_locking() { return true; } diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index ca94b03a841..783ed038858 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -16925,24 +16925,24 @@ instruct jmpConUCF2_short(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{ // ============================================================================ // inlined locking and unlocking -instruct cmpFastLockLightweight(rFlagsReg cr, rRegP object, rbx_RegP box, rax_RegI rax_reg, rRegP tmp) %{ +instruct cmpFastLock(rFlagsReg cr, rRegP object, rbx_RegP box, rax_RegI rax_reg, rRegP tmp) %{ match(Set cr (FastLock object box)); effect(TEMP rax_reg, TEMP tmp, USE_KILL box); ins_cost(300); format %{ "fastlock $object,$box\t! kills $box,$rax_reg,$tmp" %} ins_encode %{ - __ fast_lock_lightweight($object$$Register, $box$$Register, $rax_reg$$Register, $tmp$$Register, r15_thread); + __ fast_lock($object$$Register, $box$$Register, $rax_reg$$Register, $tmp$$Register, r15_thread); %} ins_pipe(pipe_slow); %} -instruct cmpFastUnlockLightweight(rFlagsReg cr, rRegP object, rax_RegP rax_reg, rRegP tmp) %{ +instruct cmpFastUnlock(rFlagsReg cr, rRegP object, rax_RegP rax_reg, rRegP tmp) %{ match(Set cr (FastUnlock object rax_reg)); effect(TEMP tmp, USE_KILL rax_reg); ins_cost(300); format %{ "fastunlock $object,$rax_reg\t! kills $rax_reg,$tmp" %} ins_encode %{ - __ fast_unlock_lightweight($object$$Register, $rax_reg$$Register, $tmp$$Register, r15_thread); + __ fast_unlock($object$$Register, $rax_reg$$Register, $tmp$$Register, r15_thread); %} ins_pipe(pipe_slow); %} diff --git a/src/hotspot/share/interpreter/interpreterRuntime.cpp b/src/hotspot/share/interpreter/interpreterRuntime.cpp index 5f4cc6c450d..b985d2af6ff 100644 --- a/src/hotspot/share/interpreter/interpreterRuntime.cpp +++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp @@ -70,7 +70,7 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stackWatermarkSet.hpp" #include "runtime/stubRoutines.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "utilities/align.hpp" #include "utilities/checkedCast.hpp" #include "utilities/copy.hpp" diff --git a/src/hotspot/share/oops/markWord.hpp b/src/hotspot/share/oops/markWord.hpp index aa9cdd65ba9..6bcbcfe97a0 100644 --- a/src/hotspot/share/oops/markWord.hpp +++ b/src/hotspot/share/oops/markWord.hpp @@ -211,7 +211,7 @@ class markWord { } ObjectMonitor* monitor() const { assert(has_monitor(), "check"); - assert(!UseObjectMonitorTable, "Lightweight locking with OM table does not use markWord for monitors"); + assert(!UseObjectMonitorTable, "Locking with OM table does not use markWord for monitors"); // Use xor instead of &~ to provide one extra tag-bit check. return (ObjectMonitor*) (value() ^ monitor_value); } @@ -237,7 +237,7 @@ class markWord { return from_pointer(lock); } static markWord encode(ObjectMonitor* monitor) { - assert(!UseObjectMonitorTable, "Lightweight locking with OM table does not use markWord for monitors"); + assert(!UseObjectMonitorTable, "Locking with OM table does not use markWord for monitors"); uintptr_t tmp = (uintptr_t) monitor; return markWord(tmp | monitor_value); } diff --git a/src/hotspot/share/opto/c2_CodeStubs.hpp b/src/hotspot/share/opto/c2_CodeStubs.hpp index e778cfcde47..5664ee03e5c 100644 --- a/src/hotspot/share/opto/c2_CodeStubs.hpp +++ b/src/hotspot/share/opto/c2_CodeStubs.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -97,7 +97,7 @@ public: void emit(C2_MacroAssembler& masm); }; -class C2FastUnlockLightweightStub : public C2CodeStub { +class C2FastUnlockStub : public C2CodeStub { private: Register _obj; Register _mark; @@ -107,8 +107,8 @@ private: Label _push_and_slow_path; Label _unlocked_continuation; public: - C2FastUnlockLightweightStub(Register obj, Register mark, Register t, Register thread) : C2CodeStub(), - _obj(obj), _mark(mark), _t(t), _thread(thread) {} + C2FastUnlockStub(Register obj, Register mark, Register t, Register thread) : C2CodeStub(), + _obj(obj), _mark(mark), _t(t), _thread(thread) {} int max_size() const; void emit(C2_MacroAssembler& masm); Label& slow_path() { return _slow_path; } diff --git a/src/hotspot/share/prims/jvmtiEnvBase.cpp b/src/hotspot/share/prims/jvmtiEnvBase.cpp index 7450b079d18..2b17eddbe94 100644 --- a/src/hotspot/share/prims/jvmtiEnvBase.cpp +++ b/src/hotspot/share/prims/jvmtiEnvBase.cpp @@ -55,7 +55,7 @@ #include "runtime/osThread.hpp" #include "runtime/signature.hpp" #include "runtime/stackWatermarkSet.inline.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/threads.hpp" #include "runtime/threadSMR.inline.hpp" #include "runtime/vframe.inline.hpp" diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index 92f5356235a..f5d1edd28f4 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -87,7 +87,6 @@ #include "runtime/javaCalls.hpp" #include "runtime/javaThread.inline.hpp" #include "runtime/jniHandles.inline.hpp" -#include "runtime/lightweightSynchronizer.hpp" #include "runtime/lockStack.hpp" #include "runtime/os.hpp" #include "runtime/stackFrameStream.inline.hpp" @@ -1974,8 +1973,8 @@ WB_ENTRY(jint, WB_getLockStackCapacity(JNIEnv* env)) return (jint) LockStack::CAPACITY; WB_END -WB_ENTRY(jboolean, WB_supportsRecursiveLightweightLocking(JNIEnv* env)) - return (jboolean) VM_Version::supports_recursive_lightweight_locking(); +WB_ENTRY(jboolean, WB_supportsRecursiveFastLocking(JNIEnv* env)) + return (jboolean) VM_Version::supports_recursive_fast_locking(); WB_END WB_ENTRY(jboolean, WB_DeflateIdleMonitors(JNIEnv* env, jobject wb)) @@ -2996,7 +2995,7 @@ static JNINativeMethod methods[] = { {CC"isUbsanEnabled", CC"()Z", (void*)&WB_IsUbsanEnabled }, {CC"getInUseMonitorCount", CC"()J", (void*)&WB_getInUseMonitorCount }, {CC"getLockStackCapacity", CC"()I", (void*)&WB_getLockStackCapacity }, - {CC"supportsRecursiveLightweightLocking", CC"()Z", (void*)&WB_supportsRecursiveLightweightLocking }, + {CC"supportsRecursiveFastLocking", CC"()Z", (void*)&WB_supportsRecursiveFastLocking }, {CC"forceSafepoint", CC"()V", (void*)&WB_ForceSafepoint }, {CC"forceClassLoaderStatsSafepoint", CC"()V", (void*)&WB_ForceClassLoaderStatsSafepoint }, {CC"getConstantPool0", CC"(Ljava/lang/Class;)J", (void*)&WB_GetConstantPool }, diff --git a/src/hotspot/share/runtime/abstract_vm_version.hpp b/src/hotspot/share/runtime/abstract_vm_version.hpp index b9c52b27182..5a6b41506c7 100644 --- a/src/hotspot/share/runtime/abstract_vm_version.hpp +++ b/src/hotspot/share/runtime/abstract_vm_version.hpp @@ -191,8 +191,8 @@ class Abstract_VM_Version: AllStatic { // Does platform support stack watermark barriers for concurrent stack processing? constexpr static bool supports_stack_watermark_barrier() { return false; } - // Is recursive lightweight locking implemented for this platform? - constexpr static bool supports_recursive_lightweight_locking() { return false; } + // Is recursive fast locking implemented for this platform? + constexpr static bool supports_recursive_fast_locking() { return false; } // Does platform support secondary supers table lookup? constexpr static bool supports_secondary_supers_table() { return false; } diff --git a/src/hotspot/share/runtime/deoptimization.cpp b/src/hotspot/share/runtime/deoptimization.cpp index 35ccc92f90b..e2029a26d37 100644 --- a/src/hotspot/share/runtime/deoptimization.cpp +++ b/src/hotspot/share/runtime/deoptimization.cpp @@ -74,7 +74,6 @@ #include "runtime/javaThread.hpp" #include "runtime/jniHandles.inline.hpp" #include "runtime/keepStackGCProcessed.hpp" -#include "runtime/lightweightSynchronizer.hpp" #include "runtime/lockStack.inline.hpp" #include "runtime/objectMonitor.inline.hpp" #include "runtime/osThread.hpp" @@ -85,7 +84,7 @@ #include "runtime/stackValue.hpp" #include "runtime/stackWatermarkSet.hpp" #include "runtime/stubRoutines.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/threadSMR.hpp" #include "runtime/threadWXSetters.inline.hpp" #include "runtime/vframe.hpp" @@ -1680,8 +1679,8 @@ bool Deoptimization::relock_objects(JavaThread* thread, GrowableArraylock_stack().contains(obj())) { - LightweightSynchronizer::inflate_fast_locked_object(obj(), ObjectSynchronizer::InflateCause::inflate_cause_vm_internal, - deoptee_thread, thread); + ObjectSynchronizer::inflate_fast_locked_object(obj(), ObjectSynchronizer::InflateCause::inflate_cause_vm_internal, + deoptee_thread, thread); } assert(mon_info->owner()->is_locked(), "object must be locked now"); assert(obj->mark().has_monitor(), "must be"); diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 238517197b2..d002edd48cd 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -1954,14 +1954,14 @@ const int ObjectAlignmentInBytes = 8; "fence. Add cleanliness checks.") \ \ product(bool, UseObjectMonitorTable, false, DIAGNOSTIC, \ - "With Lightweight Locking mode, use a table to record inflated " \ - "monitors rather than the first word of the object.") \ + "Use a table to record inflated monitors rather than the first " \ + "word of the object.") \ \ - product(int, LightweightFastLockingSpins, 13, DIAGNOSTIC, \ - "Specifies the number of times lightweight fast locking will " \ - "attempt to CAS the markWord before inflating. Between each " \ - "CAS it will spin for exponentially more time, resulting in " \ - "a total number of spins on the order of O(2^value)") \ + product(int, FastLockingSpins, 13, DIAGNOSTIC, \ + "Specifies the number of times fast locking will attempt to " \ + "CAS the markWord before inflating. Between each CAS it will " \ + "spin for exponentially more time, resulting in a total number " \ + "of spins on the order of O(2^value)") \ range(1, 30) \ \ product(uint, TrimNativeHeapInterval, 0, \ diff --git a/src/hotspot/share/runtime/javaThread.cpp b/src/hotspot/share/runtime/javaThread.cpp index 838f8e4c581..f52be5d740e 100644 --- a/src/hotspot/share/runtime/javaThread.cpp +++ b/src/hotspot/share/runtime/javaThread.cpp @@ -1409,7 +1409,7 @@ void JavaThread::oops_do_no_frames(OopClosure* f, NMethodClosure* cf) { entry = entry->parent(); } - // Due to lightweight locking + // Due to fast locking lock_stack().oops_do(f); } diff --git a/src/hotspot/share/runtime/lightweightSynchronizer.cpp b/src/hotspot/share/runtime/lightweightSynchronizer.cpp deleted file mode 100644 index ebb14490365..00000000000 --- a/src/hotspot/share/runtime/lightweightSynchronizer.cpp +++ /dev/null @@ -1,1231 +0,0 @@ -/* - * Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "classfile/vmSymbols.hpp" -#include "jfrfiles/jfrEventClasses.hpp" -#include "logging/log.hpp" -#include "memory/allStatic.hpp" -#include "memory/resourceArea.hpp" -#include "nmt/memTag.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/atomicAccess.hpp" -#include "runtime/basicLock.inline.hpp" -#include "runtime/globals_extension.hpp" -#include "runtime/interfaceSupport.inline.hpp" -#include "runtime/javaThread.inline.hpp" -#include "runtime/lightweightSynchronizer.hpp" -#include "runtime/lockStack.inline.hpp" -#include "runtime/mutexLocker.hpp" -#include "runtime/objectMonitor.inline.hpp" -#include "runtime/os.hpp" -#include "runtime/safepointMechanism.inline.hpp" -#include "runtime/safepointVerifiers.hpp" -#include "runtime/synchronizer.inline.hpp" -#include "runtime/timerTrace.hpp" -#include "runtime/trimNativeHeap.hpp" -#include "utilities/concurrentHashTable.inline.hpp" -#include "utilities/concurrentHashTableTasks.inline.hpp" -#include "utilities/globalDefinitions.hpp" - -// ConcurrentHashTable storing links from objects to ObjectMonitors -class ObjectMonitorTable : AllStatic { - struct Config { - using Value = ObjectMonitor*; - static uintx get_hash(Value const& value, bool* is_dead) { - return (uintx)value->hash(); - } - static void* allocate_node(void* context, size_t size, Value const& value) { - ObjectMonitorTable::inc_items_count(); - return AllocateHeap(size, mtObjectMonitor); - }; - static void free_node(void* context, void* memory, Value const& value) { - ObjectMonitorTable::dec_items_count(); - FreeHeap(memory); - } - }; - using ConcurrentTable = ConcurrentHashTable; - - static ConcurrentTable* _table; - static volatile size_t _items_count; - static size_t _table_size; - static volatile bool _resize; - - class Lookup : public StackObj { - oop _obj; - - public: - explicit Lookup(oop obj) : _obj(obj) {} - - uintx get_hash() const { - uintx hash = _obj->mark().hash(); - assert(hash != 0, "should have a hash"); - return hash; - } - - bool equals(ObjectMonitor** value) { - assert(*value != nullptr, "must be"); - return (*value)->object_refers_to(_obj); - } - - bool is_dead(ObjectMonitor** value) { - assert(*value != nullptr, "must be"); - return false; - } - }; - - class LookupMonitor : public StackObj { - ObjectMonitor* _monitor; - - public: - explicit LookupMonitor(ObjectMonitor* monitor) : _monitor(monitor) {} - - uintx get_hash() const { - return _monitor->hash(); - } - - bool equals(ObjectMonitor** value) { - return (*value) == _monitor; - } - - bool is_dead(ObjectMonitor** value) { - assert(*value != nullptr, "must be"); - return (*value)->object_is_dead(); - } - }; - - static void inc_items_count() { - AtomicAccess::inc(&_items_count, memory_order_relaxed); - } - - static void dec_items_count() { - AtomicAccess::dec(&_items_count, memory_order_relaxed); - } - - static double get_load_factor() { - size_t count = AtomicAccess::load(&_items_count); - return (double)count / (double)_table_size; - } - - static size_t table_size(Thread* current = Thread::current()) { - return ((size_t)1) << _table->get_size_log2(current); - } - - static size_t max_log_size() { - // TODO[OMTable]: Evaluate the max size. - // TODO[OMTable]: Need to fix init order to use Universe::heap()->max_capacity(); - // Using MaxHeapSize directly this early may be wrong, and there - // are definitely rounding errors (alignment). - const size_t max_capacity = MaxHeapSize; - const size_t min_object_size = CollectedHeap::min_dummy_object_size() * HeapWordSize; - const size_t max_objects = max_capacity / MAX2(MinObjAlignmentInBytes, checked_cast(min_object_size)); - const size_t log_max_objects = log2i_graceful(max_objects); - - return MAX2(MIN2(SIZE_BIG_LOG2, log_max_objects), min_log_size()); - } - - static size_t min_log_size() { - // ~= log(AvgMonitorsPerThreadEstimate default) - return 10; - } - - template - static size_t clamp_log_size(V log_size) { - return MAX2(MIN2(log_size, checked_cast(max_log_size())), checked_cast(min_log_size())); - } - - static size_t initial_log_size() { - const size_t estimate = log2i(MAX2(os::processor_count(), 1)) + log2i(MAX2(AvgMonitorsPerThreadEstimate, size_t(1))); - return clamp_log_size(estimate); - } - - static size_t grow_hint () { - return ConcurrentTable::DEFAULT_GROW_HINT; - } - - public: - static void create() { - _table = new ConcurrentTable(initial_log_size(), max_log_size(), grow_hint()); - _items_count = 0; - _table_size = table_size(); - _resize = false; - } - - static void verify_monitor_get_result(oop obj, ObjectMonitor* monitor) { -#ifdef ASSERT - if (SafepointSynchronize::is_at_safepoint()) { - bool has_monitor = obj->mark().has_monitor(); - assert(has_monitor == (monitor != nullptr), - "Inconsistency between markWord and ObjectMonitorTable has_monitor: %s monitor: " PTR_FORMAT, - BOOL_TO_STR(has_monitor), p2i(monitor)); - } -#endif - } - - static ObjectMonitor* monitor_get(Thread* current, oop obj) { - ObjectMonitor* result = nullptr; - Lookup lookup_f(obj); - auto found_f = [&](ObjectMonitor** found) { - assert((*found)->object_peek() == obj, "must be"); - result = *found; - }; - _table->get(current, lookup_f, found_f); - verify_monitor_get_result(obj, result); - return result; - } - - static void try_notify_grow() { - if (!_table->is_max_size_reached() && !AtomicAccess::load(&_resize)) { - AtomicAccess::store(&_resize, true); - if (Service_lock->try_lock()) { - Service_lock->notify(); - Service_lock->unlock(); - } - } - } - - static bool should_shrink() { - // Not implemented; - return false; - } - - static constexpr double GROW_LOAD_FACTOR = 0.75; - - static bool should_grow() { - return get_load_factor() > GROW_LOAD_FACTOR && !_table->is_max_size_reached(); - } - - static bool should_resize() { - return should_grow() || should_shrink() || AtomicAccess::load(&_resize); - } - - template - static bool run_task(JavaThread* current, Task& task, const char* task_name, Args&... args) { - if (task.prepare(current)) { - log_trace(monitortable)("Started to %s", task_name); - TraceTime timer(task_name, TRACETIME_LOG(Debug, monitortable, perf)); - while (task.do_task(current, args...)) { - task.pause(current); - { - ThreadBlockInVM tbivm(current); - } - task.cont(current); - } - task.done(current); - return true; - } - return false; - } - - static bool grow(JavaThread* current) { - ConcurrentTable::GrowTask grow_task(_table); - if (run_task(current, grow_task, "Grow")) { - _table_size = table_size(current); - log_info(monitortable)("Grown to size: %zu", _table_size); - return true; - } - return false; - } - - static bool clean(JavaThread* current) { - ConcurrentTable::BulkDeleteTask clean_task(_table); - auto is_dead = [&](ObjectMonitor** monitor) { - return (*monitor)->object_is_dead(); - }; - auto do_nothing = [&](ObjectMonitor** monitor) {}; - NativeHeapTrimmer::SuspendMark sm("ObjectMonitorTable"); - return run_task(current, clean_task, "Clean", is_dead, do_nothing); - } - - static bool resize(JavaThread* current) { - LogTarget(Info, monitortable) lt; - bool success = false; - - if (should_grow()) { - lt.print("Start growing with load factor %f", get_load_factor()); - success = grow(current); - } else { - if (!_table->is_max_size_reached() && AtomicAccess::load(&_resize)) { - lt.print("WARNING: Getting resize hints with load factor %f", get_load_factor()); - } - lt.print("Start cleaning with load factor %f", get_load_factor()); - success = clean(current); - } - - AtomicAccess::store(&_resize, false); - - return success; - } - - static ObjectMonitor* monitor_put_get(Thread* current, ObjectMonitor* monitor, oop obj) { - // Enter the monitor into the concurrent hashtable. - ObjectMonitor* result = monitor; - Lookup lookup_f(obj); - auto found_f = [&](ObjectMonitor** found) { - assert((*found)->object_peek() == obj, "must be"); - result = *found; - }; - bool grow; - _table->insert_get(current, lookup_f, monitor, found_f, &grow); - verify_monitor_get_result(obj, result); - if (grow) { - try_notify_grow(); - } - return result; - } - - static bool remove_monitor_entry(Thread* current, ObjectMonitor* monitor) { - LookupMonitor lookup_f(monitor); - return _table->remove(current, lookup_f); - } - - static bool contains_monitor(Thread* current, ObjectMonitor* monitor) { - LookupMonitor lookup_f(monitor); - bool result = false; - auto found_f = [&](ObjectMonitor** found) { - result = true; - }; - _table->get(current, lookup_f, found_f); - return result; - } - - static void print_on(outputStream* st) { - auto printer = [&] (ObjectMonitor** entry) { - ObjectMonitor* om = *entry; - oop obj = om->object_peek(); - st->print("monitor=" PTR_FORMAT ", ", p2i(om)); - st->print("object=" PTR_FORMAT, p2i(obj)); - assert(obj->mark().hash() == om->hash(), "hash must match"); - st->cr(); - return true; - }; - if (SafepointSynchronize::is_at_safepoint()) { - _table->do_safepoint_scan(printer); - } else { - _table->do_scan(Thread::current(), printer); - } - } -}; - -ObjectMonitorTable::ConcurrentTable* ObjectMonitorTable::_table = nullptr; -volatile size_t ObjectMonitorTable::_items_count = 0; -size_t ObjectMonitorTable::_table_size = 0; -volatile bool ObjectMonitorTable::_resize = false; - -ObjectMonitor* LightweightSynchronizer::get_or_insert_monitor_from_table(oop object, JavaThread* current, bool* inserted) { - ObjectMonitor* monitor = get_monitor_from_table(current, object); - if (monitor != nullptr) { - *inserted = false; - return monitor; - } - - ObjectMonitor* alloced_monitor = new ObjectMonitor(object); - alloced_monitor->set_anonymous_owner(); - - // Try insert monitor - monitor = add_monitor(current, alloced_monitor, object); - - *inserted = alloced_monitor == monitor; - if (!*inserted) { - delete alloced_monitor; - } - - return monitor; -} - -static void log_inflate(Thread* current, oop object, ObjectSynchronizer::InflateCause cause) { - if (log_is_enabled(Trace, monitorinflation)) { - ResourceMark rm(current); - log_trace(monitorinflation)("inflate: object=" INTPTR_FORMAT ", mark=" - INTPTR_FORMAT ", type='%s' cause=%s", p2i(object), - object->mark().value(), object->klass()->external_name(), - ObjectSynchronizer::inflate_cause_name(cause)); - } -} - -static void post_monitor_inflate_event(EventJavaMonitorInflate* event, - const oop obj, - ObjectSynchronizer::InflateCause cause) { - assert(event != nullptr, "invariant"); - const Klass* monitor_klass = obj->klass(); - if (ObjectMonitor::is_jfr_excluded(monitor_klass)) { - return; - } - event->set_monitorClass(monitor_klass); - event->set_address((uintptr_t)(void*)obj); - event->set_cause((u1)cause); - event->commit(); -} - -ObjectMonitor* LightweightSynchronizer::get_or_insert_monitor(oop object, JavaThread* current, ObjectSynchronizer::InflateCause cause) { - assert(UseObjectMonitorTable, "must be"); - - EventJavaMonitorInflate event; - - bool inserted; - ObjectMonitor* monitor = get_or_insert_monitor_from_table(object, current, &inserted); - - if (inserted) { - log_inflate(current, object, cause); - if (event.should_commit()) { - post_monitor_inflate_event(&event, object, cause); - } - - // The monitor has an anonymous owner so it is safe from async deflation. - ObjectSynchronizer::_in_use_list.add(monitor); - } - - return monitor; -} - -// Add the hashcode to the monitor to match the object and put it in the hashtable. -ObjectMonitor* LightweightSynchronizer::add_monitor(JavaThread* current, ObjectMonitor* monitor, oop obj) { - assert(UseObjectMonitorTable, "must be"); - assert(obj == monitor->object(), "must be"); - - intptr_t hash = obj->mark().hash(); - assert(hash != 0, "must be set when claiming the object monitor"); - monitor->set_hash(hash); - - return ObjectMonitorTable::monitor_put_get(current, monitor, obj); -} - -bool LightweightSynchronizer::remove_monitor(Thread* current, ObjectMonitor* monitor, oop obj) { - assert(UseObjectMonitorTable, "must be"); - assert(monitor->object_peek() == obj, "must be, cleared objects are removed by is_dead"); - - return ObjectMonitorTable::remove_monitor_entry(current, monitor); -} - -void LightweightSynchronizer::deflate_mark_word(oop obj) { - assert(UseObjectMonitorTable, "must be"); - - markWord mark = obj->mark_acquire(); - assert(!mark.has_no_hash(), "obj with inflated monitor must have had a hash"); - - while (mark.has_monitor()) { - const markWord new_mark = mark.clear_lock_bits().set_unlocked(); - mark = obj->cas_set_mark(new_mark, mark); - } -} - -void LightweightSynchronizer::initialize() { - if (!UseObjectMonitorTable) { - return; - } - ObjectMonitorTable::create(); -} - -bool LightweightSynchronizer::needs_resize() { - if (!UseObjectMonitorTable) { - return false; - } - return ObjectMonitorTable::should_resize(); -} - -bool LightweightSynchronizer::resize_table(JavaThread* current) { - if (!UseObjectMonitorTable) { - return true; - } - return ObjectMonitorTable::resize(current); -} - -class LightweightSynchronizer::LockStackInflateContendedLocks : private OopClosure { - private: - oop _contended_oops[LockStack::CAPACITY]; - int _length; - - void do_oop(oop* o) final { - oop obj = *o; - if (obj->mark_acquire().has_monitor()) { - if (_length > 0 && _contended_oops[_length - 1] == obj) { - // Recursive - return; - } - _contended_oops[_length++] = obj; - } - } - - void do_oop(narrowOop* o) final { - ShouldNotReachHere(); - } - - public: - LockStackInflateContendedLocks() : - _contended_oops(), - _length(0) {}; - - void inflate(JavaThread* current) { - assert(current == JavaThread::current(), "must be"); - current->lock_stack().oops_do(this); - for (int i = 0; i < _length; i++) { - LightweightSynchronizer:: - inflate_fast_locked_object(_contended_oops[i], ObjectSynchronizer::inflate_cause_vm_internal, current, current); - } - } -}; - -void LightweightSynchronizer::ensure_lock_stack_space(JavaThread* current) { - assert(current == JavaThread::current(), "must be"); - LockStack& lock_stack = current->lock_stack(); - - // Make room on lock_stack - if (lock_stack.is_full()) { - // Inflate contended objects - LockStackInflateContendedLocks().inflate(current); - if (lock_stack.is_full()) { - // Inflate the oldest object - inflate_fast_locked_object(lock_stack.bottom(), ObjectSynchronizer::inflate_cause_vm_internal, current, current); - } - } -} - -class LightweightSynchronizer::CacheSetter : StackObj { - JavaThread* const _thread; - BasicLock* const _lock; - ObjectMonitor* _monitor; - - NONCOPYABLE(CacheSetter); - - public: - CacheSetter(JavaThread* thread, BasicLock* lock) : - _thread(thread), - _lock(lock), - _monitor(nullptr) {} - - ~CacheSetter() { - // Only use the cache if using the table. - if (UseObjectMonitorTable) { - if (_monitor != nullptr) { - // If the monitor is already in the BasicLock cache then it is most - // likely in the thread cache, do not set it again to avoid reordering. - if (_monitor != _lock->object_monitor_cache()) { - _thread->om_set_monitor_cache(_monitor); - _lock->set_object_monitor_cache(_monitor); - } - } else { - _lock->clear_object_monitor_cache(); - } - } - } - - void set_monitor(ObjectMonitor* monitor) { - assert(_monitor == nullptr, "only set once"); - _monitor = monitor; - } - -}; - -// Reads first from the BasicLock cache then from the OMCache in the current thread. -// C2 fast-path may have put the monitor in the cache in the BasicLock. -inline static ObjectMonitor* read_caches(JavaThread* current, BasicLock* lock, oop object) { - ObjectMonitor* monitor = lock->object_monitor_cache(); - if (monitor == nullptr) { - monitor = current->om_get_from_monitor_cache(object); - } - return monitor; -} - -class LightweightSynchronizer::VerifyThreadState { - bool _no_safepoint; - - public: - VerifyThreadState(JavaThread* locking_thread, JavaThread* current) : _no_safepoint(locking_thread != current) { - assert(current == Thread::current(), "must be"); - assert(locking_thread == current || locking_thread->is_obj_deopt_suspend(), "locking_thread may not run concurrently"); - if (_no_safepoint) { - DEBUG_ONLY(JavaThread::current()->inc_no_safepoint_count();) - } - } - ~VerifyThreadState() { - if (_no_safepoint){ - DEBUG_ONLY(JavaThread::current()->dec_no_safepoint_count();) - } - } -}; - -inline bool LightweightSynchronizer::fast_lock_try_enter(oop obj, LockStack& lock_stack, JavaThread* current) { - markWord mark = obj->mark(); - while (mark.is_unlocked()) { - ensure_lock_stack_space(current); - assert(!lock_stack.is_full(), "must have made room on the lock stack"); - assert(!lock_stack.contains(obj), "thread must not already hold the lock"); - // Try to swing into 'fast-locked' state. - markWord locked_mark = mark.set_fast_locked(); - markWord old_mark = mark; - mark = obj->cas_set_mark(locked_mark, old_mark); - if (old_mark == mark) { - // Successfully fast-locked, push object to lock-stack and return. - lock_stack.push(obj); - return true; - } - } - return false; -} - -bool LightweightSynchronizer::fast_lock_spin_enter(oop obj, LockStack& lock_stack, JavaThread* current, bool observed_deflation) { - assert(UseObjectMonitorTable, "must be"); - // Will spin with exponential backoff with an accumulative O(2^spin_limit) spins. - const int log_spin_limit = os::is_MP() ? LightweightFastLockingSpins : 1; - const int log_min_safepoint_check_interval = 10; - - markWord mark = obj->mark(); - const auto should_spin = [&]() { - if (!mark.has_monitor()) { - // Spin while not inflated. - return true; - } else if (observed_deflation) { - // Spin while monitor is being deflated. - ObjectMonitor* monitor = ObjectSynchronizer::read_monitor(current, obj, mark); - return monitor == nullptr || monitor->is_being_async_deflated(); - } - // Else stop spinning. - return false; - }; - // Always attempt to lock once even when safepoint synchronizing. - bool should_process = false; - for (int i = 0; should_spin() && !should_process && i < log_spin_limit; i++) { - // Spin with exponential backoff. - const int total_spin_count = 1 << i; - const int inner_spin_count = MIN2(1 << log_min_safepoint_check_interval, total_spin_count); - const int outer_spin_count = total_spin_count / inner_spin_count; - for (int outer = 0; outer < outer_spin_count; outer++) { - should_process = SafepointMechanism::should_process(current); - if (should_process) { - // Stop spinning for safepoint. - break; - } - for (int inner = 1; inner < inner_spin_count; inner++) { - SpinPause(); - } - } - - if (fast_lock_try_enter(obj, lock_stack, current)) return true; - } - return false; -} - -void LightweightSynchronizer::enter_for(Handle obj, BasicLock* lock, JavaThread* locking_thread) { - assert(!UseObjectMonitorTable || lock->object_monitor_cache() == nullptr, "must be cleared"); - JavaThread* current = JavaThread::current(); - VerifyThreadState vts(locking_thread, current); - - if (obj->klass()->is_value_based()) { - ObjectSynchronizer::handle_sync_on_value_based_class(obj, locking_thread); - } - - LockStack& lock_stack = locking_thread->lock_stack(); - - ObjectMonitor* monitor = nullptr; - if (lock_stack.contains(obj())) { - monitor = inflate_fast_locked_object(obj(), ObjectSynchronizer::inflate_cause_monitor_enter, locking_thread, current); - bool entered = monitor->enter_for(locking_thread); - assert(entered, "recursive ObjectMonitor::enter_for must succeed"); - } else { - do { - // It is assumed that enter_for must enter on an object without contention. - monitor = inflate_and_enter(obj(), lock, ObjectSynchronizer::inflate_cause_monitor_enter, locking_thread, current); - // But there may still be a race with deflation. - } while (monitor == nullptr); - } - - assert(monitor != nullptr, "LightweightSynchronizer::enter_for must succeed"); - assert(!UseObjectMonitorTable || lock->object_monitor_cache() == nullptr, "unused. already cleared"); -} - -void LightweightSynchronizer::enter(Handle obj, BasicLock* lock, JavaThread* current) { - assert(current == JavaThread::current(), "must be"); - - if (obj->klass()->is_value_based()) { - ObjectSynchronizer::handle_sync_on_value_based_class(obj, current); - } - - CacheSetter cache_setter(current, lock); - - // Used when deflation is observed. Progress here requires progress - // from the deflator. After observing that the deflator is not - // making progress (after two yields), switch to sleeping. - SpinYield spin_yield(0, 2); - bool observed_deflation = false; - - LockStack& lock_stack = current->lock_stack(); - - if (!lock_stack.is_full() && lock_stack.try_recursive_enter(obj())) { - // Recursively fast locked - return; - } - - if (lock_stack.contains(obj())) { - ObjectMonitor* monitor = inflate_fast_locked_object(obj(), ObjectSynchronizer::inflate_cause_monitor_enter, current, current); - bool entered = monitor->enter(current); - assert(entered, "recursive ObjectMonitor::enter must succeed"); - cache_setter.set_monitor(monitor); - return; - } - - while (true) { - // Fast-locking does not use the 'lock' argument. - // Fast-lock spinning to avoid inflating for short critical sections. - // The goal is to only inflate when the extra cost of using ObjectMonitors - // is worth it. - // If deflation has been observed we also spin while deflation is ongoing. - if (fast_lock_try_enter(obj(), lock_stack, current)) { - return; - } else if (UseObjectMonitorTable && fast_lock_spin_enter(obj(), lock_stack, current, observed_deflation)) { - return; - } - - if (observed_deflation) { - spin_yield.wait(); - } - - ObjectMonitor* monitor = inflate_and_enter(obj(), lock, ObjectSynchronizer::inflate_cause_monitor_enter, current, current); - if (monitor != nullptr) { - cache_setter.set_monitor(monitor); - return; - } - - // If inflate_and_enter returns nullptr it is because a deflated monitor - // was encountered. Fallback to fast locking. The deflater is responsible - // for clearing out the monitor and transitioning the markWord back to - // fast locking. - observed_deflation = true; - } -} - -void LightweightSynchronizer::exit(oop object, BasicLock* lock, JavaThread* current) { - assert(current == Thread::current(), "must be"); - - markWord mark = object->mark(); - assert(!mark.is_unlocked(), "must be"); - - LockStack& lock_stack = current->lock_stack(); - if (mark.is_fast_locked()) { - if (lock_stack.try_recursive_exit(object)) { - // This is a recursive exit which succeeded - return; - } - if (lock_stack.is_recursive(object)) { - // Must inflate recursive locks if try_recursive_exit fails - // This happens for un-structured unlocks, could potentially - // fix try_recursive_exit to handle these. - inflate_fast_locked_object(object, ObjectSynchronizer::inflate_cause_vm_internal, current, current); - } - } - - while (mark.is_fast_locked()) { - markWord unlocked_mark = mark.set_unlocked(); - markWord old_mark = mark; - mark = object->cas_set_mark(unlocked_mark, old_mark); - if (old_mark == mark) { - // CAS successful, remove from lock_stack - size_t recursion = lock_stack.remove(object) - 1; - assert(recursion == 0, "Should not have unlocked here"); - return; - } - } - - assert(mark.has_monitor(), "must be"); - // The monitor exists - ObjectMonitor* monitor; - if (UseObjectMonitorTable) { - monitor = read_caches(current, lock, object); - if (monitor == nullptr) { - monitor = get_monitor_from_table(current, object); - } - } else { - monitor = ObjectSynchronizer::read_monitor(mark); - } - if (monitor->has_anonymous_owner()) { - assert(current->lock_stack().contains(object), "current must have object on its lock stack"); - monitor->set_owner_from_anonymous(current); - monitor->set_recursions(current->lock_stack().remove(object) - 1); - } - - monitor->exit(current); -} - -// LightweightSynchronizer::inflate_locked_or_imse is used to get an -// inflated ObjectMonitor* from contexts which require that, such as -// notify/wait and jni_exit. Lightweight locking keeps the invariant that it -// only inflates if it is already locked by the current thread or the current -// thread is in the process of entering. To maintain this invariant we need to -// throw a java.lang.IllegalMonitorStateException before inflating if the -// current thread is not the owner. -ObjectMonitor* LightweightSynchronizer::inflate_locked_or_imse(oop obj, ObjectSynchronizer::InflateCause cause, TRAPS) { - JavaThread* current = THREAD; - - for (;;) { - markWord mark = obj->mark_acquire(); - if (mark.is_unlocked()) { - // No lock, IMSE. - THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(), - "current thread is not owner", nullptr); - } - - if (mark.is_fast_locked()) { - if (!current->lock_stack().contains(obj)) { - // Fast locked by other thread, IMSE. - THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(), - "current thread is not owner", nullptr); - } else { - // Current thread owns the lock, must inflate - return inflate_fast_locked_object(obj, cause, current, current); - } - } - - assert(mark.has_monitor(), "must be"); - ObjectMonitor* monitor = ObjectSynchronizer::read_monitor(current, obj, mark); - if (monitor != nullptr) { - if (monitor->has_anonymous_owner()) { - LockStack& lock_stack = current->lock_stack(); - if (lock_stack.contains(obj)) { - // Current thread owns the lock but someone else inflated it. - // Fix owner and pop lock stack. - monitor->set_owner_from_anonymous(current); - monitor->set_recursions(lock_stack.remove(obj) - 1); - } else { - // Fast locked (and inflated) by other thread, or deflation in progress, IMSE. - THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(), - "current thread is not owner", nullptr); - } - } - return monitor; - } - } -} - -ObjectMonitor* LightweightSynchronizer::inflate_into_object_header(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, Thread* current) { - - // The JavaThread* locking parameter requires that the locking_thread == JavaThread::current, - // or is suspended throughout the call by some other mechanism. - // Even with lightweight locking the thread might be nullptr when called from a non - // JavaThread. (As may still be the case from FastHashCode). However it is only - // important for the correctness of the lightweight locking algorithm that the thread - // is set when called from ObjectSynchronizer::enter from the owning thread, - // ObjectSynchronizer::enter_for from any thread, or ObjectSynchronizer::exit. - EventJavaMonitorInflate event; - - for (;;) { - const markWord mark = object->mark_acquire(); - - // The mark can be in one of the following states: - // * inflated - Just return if using stack-locking. - // If using fast-locking and the ObjectMonitor owner - // is anonymous and the locking_thread owns the - // object lock, then we make the locking_thread - // the ObjectMonitor owner and remove the lock from - // the locking_thread's lock stack. - // * fast-locked - Coerce it to inflated from fast-locked. - // * unlocked - Aggressively inflate the object. - - // CASE: inflated - if (mark.has_monitor()) { - ObjectMonitor* inf = mark.monitor(); - markWord dmw = inf->header(); - assert(dmw.is_neutral(), "invariant: header=" INTPTR_FORMAT, dmw.value()); - if (inf->has_anonymous_owner() && - locking_thread != nullptr && locking_thread->lock_stack().contains(object)) { - inf->set_owner_from_anonymous(locking_thread); - size_t removed = locking_thread->lock_stack().remove(object); - inf->set_recursions(removed - 1); - } - return inf; - } - - // CASE: fast-locked - // Could be fast-locked either by the locking_thread or by some other thread. - // - // Note that we allocate the ObjectMonitor speculatively, _before_ - // attempting to set the object's mark to the new ObjectMonitor. If - // the locking_thread owns the monitor, then we set the ObjectMonitor's - // owner to the locking_thread. Otherwise, we set the ObjectMonitor's owner - // to anonymous. If we lose the race to set the object's mark to the - // new ObjectMonitor, then we just delete it and loop around again. - // - if (mark.is_fast_locked()) { - ObjectMonitor* monitor = new ObjectMonitor(object); - monitor->set_header(mark.set_unlocked()); - bool own = locking_thread != nullptr && locking_thread->lock_stack().contains(object); - if (own) { - // Owned by locking_thread. - monitor->set_owner(locking_thread); - } else { - // Owned by somebody else. - monitor->set_anonymous_owner(); - } - markWord monitor_mark = markWord::encode(monitor); - markWord old_mark = object->cas_set_mark(monitor_mark, mark); - if (old_mark == mark) { - // Success! Return inflated monitor. - if (own) { - size_t removed = locking_thread->lock_stack().remove(object); - monitor->set_recursions(removed - 1); - } - // Once the ObjectMonitor is configured and object is associated - // with the ObjectMonitor, it is safe to allow async deflation: - ObjectSynchronizer::_in_use_list.add(monitor); - - log_inflate(current, object, cause); - if (event.should_commit()) { - post_monitor_inflate_event(&event, object, cause); - } - return monitor; - } else { - delete monitor; - continue; // Interference -- just retry - } - } - - // CASE: unlocked - // TODO-FIXME: for entry we currently inflate and then try to CAS _owner. - // If we know we're inflating for entry it's better to inflate by swinging a - // pre-locked ObjectMonitor pointer into the object header. A successful - // CAS inflates the object *and* confers ownership to the inflating thread. - // In the current implementation we use a 2-step mechanism where we CAS() - // to inflate and then CAS() again to try to swing _owner from null to current. - // An inflateTry() method that we could call from enter() would be useful. - - assert(mark.is_unlocked(), "invariant: header=" INTPTR_FORMAT, mark.value()); - ObjectMonitor* m = new ObjectMonitor(object); - // prepare m for installation - set monitor to initial state - m->set_header(mark); - - if (object->cas_set_mark(markWord::encode(m), mark) != mark) { - delete m; - m = nullptr; - continue; - // interference - the markword changed - just retry. - // The state-transitions are one-way, so there's no chance of - // live-lock -- "Inflated" is an absorbing state. - } - - // Once the ObjectMonitor is configured and object is associated - // with the ObjectMonitor, it is safe to allow async deflation: - ObjectSynchronizer::_in_use_list.add(m); - - log_inflate(current, object, cause); - if (event.should_commit()) { - post_monitor_inflate_event(&event, object, cause); - } - return m; - } -} - -ObjectMonitor* LightweightSynchronizer::inflate_fast_locked_object(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current) { - VerifyThreadState vts(locking_thread, current); - assert(locking_thread->lock_stack().contains(object), "locking_thread must have object on its lock stack"); - - ObjectMonitor* monitor; - - if (!UseObjectMonitorTable) { - return inflate_into_object_header(object, cause, locking_thread, current); - } - - // Inflating requires a hash code - ObjectSynchronizer::FastHashCode(current, object); - - markWord mark = object->mark_acquire(); - assert(!mark.is_unlocked(), "Cannot be unlocked"); - - for (;;) { - // Fetch the monitor from the table - monitor = get_or_insert_monitor(object, current, cause); - - // ObjectMonitors are always inserted as anonymously owned, this thread is - // the current holder of the monitor. So unless the entry is stale and - // contains a deflating monitor it must be anonymously owned. - if (monitor->has_anonymous_owner()) { - // The monitor must be anonymously owned if it was added - assert(monitor == get_monitor_from_table(current, object), "The monitor must be found"); - // New fresh monitor - break; - } - - // If the monitor was not anonymously owned then we got a deflating monitor - // from the table. We need to let the deflator make progress and remove this - // entry before we are allowed to add a new one. - os::naked_yield(); - assert(monitor->is_being_async_deflated(), "Should be the reason"); - } - - // Set the mark word; loop to handle concurrent updates to other parts of the mark word - while (mark.is_fast_locked()) { - mark = object->cas_set_mark(mark.set_has_monitor(), mark); - } - - // Indicate that the monitor now has a known owner - monitor->set_owner_from_anonymous(locking_thread); - - // Remove the entry from the thread's lock stack - monitor->set_recursions(locking_thread->lock_stack().remove(object) - 1); - - if (locking_thread == current) { - // Only change the thread local state of the current thread. - locking_thread->om_set_monitor_cache(monitor); - } - - return monitor; -} - -ObjectMonitor* LightweightSynchronizer::inflate_and_enter(oop object, BasicLock* lock, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current) { - VerifyThreadState vts(locking_thread, current); - - // Note: In some paths (deoptimization) the 'current' thread inflates and - // enters the lock on behalf of the 'locking_thread' thread. - - ObjectMonitor* monitor = nullptr; - - if (!UseObjectMonitorTable) { - // Do the old inflate and enter. - monitor = inflate_into_object_header(object, cause, locking_thread, current); - - bool entered; - if (locking_thread == current) { - entered = monitor->enter(locking_thread); - } else { - entered = monitor->enter_for(locking_thread); - } - - // enter returns false for deflation found. - return entered ? monitor : nullptr; - } - - NoSafepointVerifier nsv; - - // Try to get the monitor from the thread-local cache. - // There's no need to use the cache if we are locking - // on behalf of another thread. - if (current == locking_thread) { - monitor = read_caches(current, lock, object); - } - - // Get or create the monitor - if (monitor == nullptr) { - // Lightweight monitors require that hash codes are installed first - ObjectSynchronizer::FastHashCode(locking_thread, object); - monitor = get_or_insert_monitor(object, current, cause); - } - - if (monitor->try_enter(locking_thread)) { - return monitor; - } - - // Holds is_being_async_deflated() stable throughout this function. - ObjectMonitorContentionMark contention_mark(monitor); - - /// First handle the case where the monitor from the table is deflated - if (monitor->is_being_async_deflated()) { - // The MonitorDeflation thread is deflating the monitor. The locking thread - // must spin until further progress has been made. - - // Clear the BasicLock cache as it may contain this monitor. - lock->clear_object_monitor_cache(); - - const markWord mark = object->mark_acquire(); - - if (mark.has_monitor()) { - // Waiting on the deflation thread to remove the deflated monitor from the table. - os::naked_yield(); - - } else if (mark.is_fast_locked()) { - // Some other thread managed to fast-lock the lock, or this is a - // recursive lock from the same thread; yield for the deflation - // thread to remove the deflated monitor from the table. - os::naked_yield(); - - } else { - assert(mark.is_unlocked(), "Implied"); - // Retry immediately - } - - // Retry - return nullptr; - } - - for (;;) { - const markWord mark = object->mark_acquire(); - // The mark can be in one of the following states: - // * inflated - If the ObjectMonitor owner is anonymous - // and the locking_thread owns the object - // lock, then we make the locking_thread - // the ObjectMonitor owner and remove the - // lock from the locking_thread's lock stack. - // * fast-locked - Coerce it to inflated from fast-locked. - // * neutral - Inflate the object. Successful CAS is locked - - // CASE: inflated - if (mark.has_monitor()) { - LockStack& lock_stack = locking_thread->lock_stack(); - if (monitor->has_anonymous_owner() && lock_stack.contains(object)) { - // The lock is fast-locked by the locking thread, - // convert it to a held monitor with a known owner. - monitor->set_owner_from_anonymous(locking_thread); - monitor->set_recursions(lock_stack.remove(object) - 1); - } - - break; // Success - } - - // CASE: fast-locked - // Could be fast-locked either by locking_thread or by some other thread. - // - if (mark.is_fast_locked()) { - markWord old_mark = object->cas_set_mark(mark.set_has_monitor(), mark); - if (old_mark != mark) { - // CAS failed - continue; - } - - // Success! Return inflated monitor. - LockStack& lock_stack = locking_thread->lock_stack(); - if (lock_stack.contains(object)) { - // The lock is fast-locked by the locking thread, - // convert it to a held monitor with a known owner. - monitor->set_owner_from_anonymous(locking_thread); - monitor->set_recursions(lock_stack.remove(object) - 1); - } - - break; // Success - } - - // CASE: neutral (unlocked) - - // Catch if the object's header is not neutral (not locked and - // not marked is what we care about here). - assert(mark.is_neutral(), "invariant: header=" INTPTR_FORMAT, mark.value()); - markWord old_mark = object->cas_set_mark(mark.set_has_monitor(), mark); - if (old_mark != mark) { - // CAS failed - continue; - } - - // Transitioned from unlocked to monitor means locking_thread owns the lock. - monitor->set_owner_from_anonymous(locking_thread); - - return monitor; - } - - if (current == locking_thread) { - // One round of spinning - if (monitor->spin_enter(locking_thread)) { - return monitor; - } - - // Monitor is contended, take the time before entering to fix the lock stack. - LockStackInflateContendedLocks().inflate(current); - } - - // enter can block for safepoints; clear the unhandled object oop - PauseNoSafepointVerifier pnsv(&nsv); - object = nullptr; - - if (current == locking_thread) { - monitor->enter_with_contention_mark(locking_thread, contention_mark); - } else { - monitor->enter_for_with_contention_mark(locking_thread, contention_mark); - } - - return monitor; -} - -void LightweightSynchronizer::deflate_monitor(Thread* current, oop obj, ObjectMonitor* monitor) { - if (obj != nullptr) { - deflate_mark_word(obj); - } - bool removed = remove_monitor(current, monitor, obj); - if (obj != nullptr) { - assert(removed, "Should have removed the entry if obj was alive"); - } -} - -ObjectMonitor* LightweightSynchronizer::get_monitor_from_table(Thread* current, oop obj) { - assert(UseObjectMonitorTable, "must be"); - return ObjectMonitorTable::monitor_get(current, obj); -} - -bool LightweightSynchronizer::contains_monitor(Thread* current, ObjectMonitor* monitor) { - assert(UseObjectMonitorTable, "must be"); - return ObjectMonitorTable::contains_monitor(current, monitor); -} - -bool LightweightSynchronizer::quick_enter(oop obj, BasicLock* lock, JavaThread* current) { - assert(current->thread_state() == _thread_in_Java, "must be"); - assert(obj != nullptr, "must be"); - NoSafepointVerifier nsv; - - LockStack& lock_stack = current->lock_stack(); - if (lock_stack.is_full()) { - // Always go into runtime if the lock stack is full. - return false; - } - - const markWord mark = obj->mark(); - -#ifndef _LP64 - // Only for 32bit which has limited support for fast locking outside the runtime. - if (lock_stack.try_recursive_enter(obj)) { - // Recursive lock successful. - return true; - } - - if (mark.is_unlocked()) { - markWord locked_mark = mark.set_fast_locked(); - if (obj->cas_set_mark(locked_mark, mark) == mark) { - // Successfully fast-locked, push object to lock-stack and return. - lock_stack.push(obj); - return true; - } - } -#endif - - if (mark.has_monitor()) { - ObjectMonitor* monitor; - if (UseObjectMonitorTable) { - monitor = read_caches(current, lock, obj); - } else { - monitor = ObjectSynchronizer::read_monitor(mark); - } - - if (monitor == nullptr) { - // Take the slow-path on a cache miss. - return false; - } - - if (UseObjectMonitorTable) { - // Set the monitor regardless of success. - // Either we successfully lock on the monitor, or we retry with the - // monitor in the slow path. If the monitor gets deflated, it will be - // cleared, either by the CacheSetter if we fast lock in enter or in - // inflate_and_enter when we see that the monitor is deflated. - lock->set_object_monitor_cache(monitor); - } - - if (monitor->spin_enter(current)) { - return true; - } - } - - // Slow-path. - return false; -} diff --git a/src/hotspot/share/runtime/lightweightSynchronizer.hpp b/src/hotspot/share/runtime/lightweightSynchronizer.hpp deleted file mode 100644 index b10e639a67c..00000000000 --- a/src/hotspot/share/runtime/lightweightSynchronizer.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_RUNTIME_LIGHTWEIGHTSYNCHRONIZER_HPP -#define SHARE_RUNTIME_LIGHTWEIGHTSYNCHRONIZER_HPP - -#include "memory/allStatic.hpp" -#include "runtime/javaThread.hpp" -#include "runtime/objectMonitor.hpp" -#include "runtime/synchronizer.hpp" - -class ObjectMonitorTable; - -class LightweightSynchronizer : AllStatic { - private: - static ObjectMonitor* get_or_insert_monitor_from_table(oop object, JavaThread* current, bool* inserted); - static ObjectMonitor* get_or_insert_monitor(oop object, JavaThread* current, ObjectSynchronizer::InflateCause cause); - - static ObjectMonitor* add_monitor(JavaThread* current, ObjectMonitor* monitor, oop obj); - static bool remove_monitor(Thread* current, ObjectMonitor* monitor, oop obj); - - static void deflate_mark_word(oop object); - - static void ensure_lock_stack_space(JavaThread* current); - - class CacheSetter; - class LockStackInflateContendedLocks; - class VerifyThreadState; - - public: - static void initialize(); - - static bool needs_resize(); - static bool resize_table(JavaThread* current); - - private: - static inline bool fast_lock_try_enter(oop obj, LockStack& lock_stack, JavaThread* current); - static bool fast_lock_spin_enter(oop obj, LockStack& lock_stack, JavaThread* current, bool observed_deflation); - - public: - static void enter_for(Handle obj, BasicLock* lock, JavaThread* locking_thread); - static void enter(Handle obj, BasicLock* lock, JavaThread* current); - static void exit(oop object, BasicLock* lock, JavaThread* current); - - static ObjectMonitor* inflate_into_object_header(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, Thread* current); - static ObjectMonitor* inflate_locked_or_imse(oop object, ObjectSynchronizer::InflateCause cause, TRAPS); - static ObjectMonitor* inflate_fast_locked_object(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current); - static ObjectMonitor* inflate_and_enter(oop object, BasicLock* lock, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current); - - static void deflate_monitor(Thread* current, oop obj, ObjectMonitor* monitor); - - static ObjectMonitor* get_monitor_from_table(Thread* current, oop obj); - - static bool contains_monitor(Thread* current, ObjectMonitor* monitor); - - static bool quick_enter(oop obj, BasicLock* Lock, JavaThread* current); -}; - -#endif // SHARE_RUNTIME_LIGHTWEIGHTSYNCHRONIZER_HPP diff --git a/src/hotspot/share/runtime/lockStack.cpp b/src/hotspot/share/runtime/lockStack.cpp index 95f72393d91..a88a84eb9f8 100644 --- a/src/hotspot/share/runtime/lockStack.cpp +++ b/src/hotspot/share/runtime/lockStack.cpp @@ -35,7 +35,7 @@ #include "runtime/safepoint.hpp" #include "runtime/stackWatermark.hpp" #include "runtime/stackWatermarkSet.inline.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/thread.hpp" #include "utilities/copy.hpp" #include "utilities/debug.hpp" @@ -82,7 +82,7 @@ void LockStack::verify(const char* msg) const { int top = to_index(_top); for (int i = 0; i < top; i++) { assert(_base[i] != nullptr, "no zapped before top"); - if (VM_Version::supports_recursive_lightweight_locking()) { + if (VM_Version::supports_recursive_fast_locking()) { oop o = _base[i]; for (; i < top - 1; i++) { // Consecutive entries may be the same diff --git a/src/hotspot/share/runtime/lockStack.inline.hpp b/src/hotspot/share/runtime/lockStack.inline.hpp index 0516a85356d..27eb07fcec8 100644 --- a/src/hotspot/share/runtime/lockStack.inline.hpp +++ b/src/hotspot/share/runtime/lockStack.inline.hpp @@ -1,7 +1,7 @@ /* * Copyright (c) 2022, Red Hat, Inc. All rights reserved. * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. - * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,11 +31,11 @@ #include "memory/iterator.hpp" #include "runtime/javaThread.hpp" -#include "runtime/lightweightSynchronizer.hpp" #include "runtime/objectMonitor.inline.hpp" #include "runtime/safepoint.hpp" #include "runtime/stackWatermark.hpp" #include "runtime/stackWatermarkSet.inline.hpp" +#include "runtime/synchronizer.hpp" #include "utilities/align.hpp" #include "utilities/globalDefinitions.hpp" @@ -87,7 +87,7 @@ inline bool LockStack::is_empty() const { } inline bool LockStack::is_recursive(oop o) const { - if (!VM_Version::supports_recursive_lightweight_locking()) { + if (!VM_Version::supports_recursive_fast_locking()) { return false; } verify("pre-is_recursive"); @@ -119,7 +119,7 @@ inline bool LockStack::is_recursive(oop o) const { } inline bool LockStack::try_recursive_enter(oop o) { - if (!VM_Version::supports_recursive_lightweight_locking()) { + if (!VM_Version::supports_recursive_fast_locking()) { return false; } verify("pre-try_recursive_enter"); @@ -145,7 +145,7 @@ inline bool LockStack::try_recursive_enter(oop o) { } inline bool LockStack::try_recursive_exit(oop o) { - if (!VM_Version::supports_recursive_lightweight_locking()) { + if (!VM_Version::supports_recursive_fast_locking()) { return false; } verify("pre-try_recursive_exit"); @@ -254,7 +254,7 @@ inline void OMCache::set_monitor(ObjectMonitor *monitor) { oop obj = monitor->object_peek(); assert(obj != nullptr, "must be alive"); - assert(monitor == LightweightSynchronizer::get_monitor_from_table(JavaThread::current(), obj), "must exist in table"); + assert(monitor == ObjectSynchronizer::get_monitor_from_table(JavaThread::current(), obj), "must exist in table"); OMCacheEntry to_insert = {obj, monitor}; diff --git a/src/hotspot/share/runtime/objectMonitor.cpp b/src/hotspot/share/runtime/objectMonitor.cpp index 6a99568ba44..ee7629ec6f5 100644 --- a/src/hotspot/share/runtime/objectMonitor.cpp +++ b/src/hotspot/share/runtime/objectMonitor.cpp @@ -43,7 +43,6 @@ #include "runtime/handles.inline.hpp" #include "runtime/interfaceSupport.inline.hpp" #include "runtime/javaThread.inline.hpp" -#include "runtime/lightweightSynchronizer.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/objectMonitor.inline.hpp" #include "runtime/orderAccess.hpp" @@ -51,6 +50,7 @@ #include "runtime/safefetch.hpp" #include "runtime/safepointMechanism.inline.hpp" #include "runtime/sharedRuntime.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/threads.hpp" #include "services/threadService.hpp" #include "utilities/debug.hpp" @@ -415,7 +415,7 @@ bool ObjectMonitor::try_lock_with_contention_mark(JavaThread* locking_thread, Ob } void ObjectMonitor::enter_for_with_contention_mark(JavaThread* locking_thread, ObjectMonitorContentionMark& contention_mark) { - // Used by LightweightSynchronizer::inflate_and_enter in deoptimization path to enter for another thread. + // Used by ObjectSynchronizer::inflate_and_enter in deoptimization path to enter for another thread. // The monitor is private to or already owned by locking_thread which must be suspended. // So this code may only contend with deflation. assert(locking_thread == Thread::current() || locking_thread->is_obj_deopt_suspend(), "must be"); @@ -856,7 +856,7 @@ bool ObjectMonitor::deflate_monitor(Thread* current) { } if (UseObjectMonitorTable) { - LightweightSynchronizer::deflate_monitor(current, obj, this); + ObjectSynchronizer::deflate_monitor(current, obj, this); } else if (obj != nullptr) { // Install the old mark word if nobody else has already done it. install_displaced_markword_in_object(obj); diff --git a/src/hotspot/share/runtime/objectMonitor.hpp b/src/hotspot/share/runtime/objectMonitor.hpp index 2da41786309..53b64f1e8a5 100644 --- a/src/hotspot/share/runtime/objectMonitor.hpp +++ b/src/hotspot/share/runtime/objectMonitor.hpp @@ -160,10 +160,10 @@ class ObjectMonitor : public CHeapObj { // Because of frequent access, the metadata field is at offset zero (0). // Enforced by the assert() in metadata_addr(). - // * Lightweight locking with UseObjectMonitorTable: + // * Locking with UseObjectMonitorTable: // Contains the _object's hashCode. - // * * Lightweight locking without UseObjectMonitorTable: - // Contains the displaced object header word - mark + // * Locking without UseObjectMonitorTable: + // Contains the displaced object header word - mark volatile uintptr_t _metadata; // metadata WeakHandle _object; // backward object pointer // Separate _metadata and _owner on different cache lines since both can diff --git a/src/hotspot/share/runtime/objectMonitor.inline.hpp b/src/hotspot/share/runtime/objectMonitor.inline.hpp index eeb451235dc..efdc33cd441 100644 --- a/src/hotspot/share/runtime/objectMonitor.inline.hpp +++ b/src/hotspot/share/runtime/objectMonitor.inline.hpp @@ -74,22 +74,22 @@ inline volatile uintptr_t* ObjectMonitor::metadata_addr() { } inline markWord ObjectMonitor::header() const { - assert(!UseObjectMonitorTable, "Lightweight locking with OM table does not use header"); + assert(!UseObjectMonitorTable, "Locking with OM table does not use header"); return markWord(metadata()); } inline void ObjectMonitor::set_header(markWord hdr) { - assert(!UseObjectMonitorTable, "Lightweight locking with OM table does not use header"); + assert(!UseObjectMonitorTable, "Locking with OM table does not use header"); set_metadata(hdr.value()); } inline intptr_t ObjectMonitor::hash() const { - assert(UseObjectMonitorTable, "Only used by lightweight locking with OM table"); + assert(UseObjectMonitorTable, "Only used when locking with OM table"); return metadata(); } inline void ObjectMonitor::set_hash(intptr_t hash) { - assert(UseObjectMonitorTable, "Only used by lightweight locking with OM table"); + assert(UseObjectMonitorTable, "Only used when locking with OM table"); set_metadata(hash); } diff --git a/src/hotspot/share/runtime/serviceThread.cpp b/src/hotspot/share/runtime/serviceThread.cpp index 03168842e36..27958885a7f 100644 --- a/src/hotspot/share/runtime/serviceThread.cpp +++ b/src/hotspot/share/runtime/serviceThread.cpp @@ -36,10 +36,10 @@ #include "prims/resolvedMethodTable.hpp" #include "runtime/handles.inline.hpp" #include "runtime/interfaceSupport.inline.hpp" -#include "runtime/lightweightSynchronizer.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" #include "runtime/serviceThread.hpp" +#include "runtime/synchronizer.hpp" #include "services/finalizerService.hpp" #include "services/gcNotifier.hpp" #include "services/lowMemoryDetector.hpp" @@ -113,7 +113,7 @@ void ServiceThread::service_thread_entry(JavaThread* jt, TRAPS) { (cldg_cleanup_work = ClassLoaderDataGraph::should_clean_metaspaces_and_reset()) | (jvmti_tagmap_work = JvmtiTagMap::has_object_free_events_and_reset()) | (oopmap_cache_work = OopMapCache::has_cleanup_work()) | - (object_monitor_table_work = LightweightSynchronizer::needs_resize()) + (object_monitor_table_work = ObjectSynchronizer::needs_resize()) ) == 0) { // Wait until notified that there is some work to do or timer expires. // Some cleanup requests don't notify the ServiceThread so work needs to be done at periodic intervals. @@ -173,7 +173,7 @@ void ServiceThread::service_thread_entry(JavaThread* jt, TRAPS) { } if (object_monitor_table_work) { - LightweightSynchronizer::resize_table(jt); + ObjectSynchronizer::resize_table(jt); } } } diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp index a980838ed76..afa4558c7ae 100644 --- a/src/hotspot/share/runtime/sharedRuntime.cpp +++ b/src/hotspot/share/runtime/sharedRuntime.cpp @@ -72,7 +72,7 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/stackWatermarkSet.hpp" #include "runtime/stubRoutines.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/timerTrace.hpp" #include "runtime/vframe.inline.hpp" #include "runtime/vframeArray.hpp" @@ -2029,7 +2029,7 @@ void SharedRuntime::monitor_exit_helper(oopDesc* obj, BasicLock* lock, JavaThrea ExceptionMark em(current); // Check if C2_MacroAssembler::fast_unlock() or - // C2_MacroAssembler::fast_unlock_lightweight() unlocked an inflated + // C2_MacroAssembler::fast_unlock() unlocked an inflated // monitor before going slow path. Since there is no safepoint // polling when calling into the VM, we can be sure that the monitor // hasn't been deallocated. diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp index 36e38b4dd35..fe95320c574 100644 --- a/src/hotspot/share/runtime/synchronizer.cpp +++ b/src/hotspot/share/runtime/synchronizer.cpp @@ -41,7 +41,6 @@ #include "runtime/handshake.hpp" #include "runtime/interfaceSupport.inline.hpp" #include "runtime/javaThread.hpp" -#include "runtime/lightweightSynchronizer.hpp" #include "runtime/lockStack.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/objectMonitor.inline.hpp" @@ -51,13 +50,16 @@ #include "runtime/safepointVerifiers.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/threads.hpp" #include "runtime/timer.hpp" +#include "runtime/timerTrace.hpp" #include "runtime/trimNativeHeap.hpp" #include "runtime/vframe.hpp" #include "runtime/vmThread.hpp" #include "utilities/align.hpp" +#include "utilities/concurrentHashTable.inline.hpp" +#include "utilities/concurrentHashTableTasks.inline.hpp" #include "utilities/dtrace.hpp" #include "utilities/events.hpp" #include "utilities/globalCounter.inline.hpp" @@ -281,7 +283,7 @@ void ObjectSynchronizer::initialize() { // Start the timer for deflations, so it does not trigger immediately. _last_async_deflation_time_ns = os::javaTimeNanos(); - LightweightSynchronizer::initialize(); + ObjectSynchronizer::create_om_table(); } MonitorList ObjectSynchronizer::_in_use_list; @@ -421,17 +423,6 @@ void ObjectSynchronizer::handle_sync_on_value_based_class(Handle obj, JavaThread } } -// ----------------------------------------------------------------------------- -// Monitor Enter/Exit - -void ObjectSynchronizer::enter_for(Handle obj, BasicLock* lock, JavaThread* locking_thread) { - // When called with locking_thread != Thread::current() some mechanism must synchronize - // the locking_thread with respect to the current thread. Currently only used when - // deoptimizing and re-locking locks. See Deoptimization::relock_objects - assert(locking_thread == Thread::current() || locking_thread->is_obj_deopt_suspend(), "must be"); - return LightweightSynchronizer::enter_for(obj, lock, locking_thread); -} - // ----------------------------------------------------------------------------- // JNI locks on java objects // NOTE: must use heavy weight monitor to handle jni monitor enter @@ -451,7 +442,7 @@ void ObjectSynchronizer::jni_enter(Handle obj, JavaThread* current) { // we have lost the race to async deflation and we simply try again. while (true) { BasicLock lock; - if (LightweightSynchronizer::inflate_and_enter(obj(), &lock, inflate_cause_jni_enter, current, current) != nullptr) { + if (ObjectSynchronizer::inflate_and_enter(obj(), &lock, inflate_cause_jni_enter, current, current) != nullptr) { break; } } @@ -463,7 +454,7 @@ void ObjectSynchronizer::jni_exit(oop obj, TRAPS) { JavaThread* current = THREAD; ObjectMonitor* monitor; - monitor = LightweightSynchronizer::inflate_locked_or_imse(obj, inflate_cause_jni_exit, CHECK); + monitor = ObjectSynchronizer::inflate_locked_or_imse(obj, inflate_cause_jni_exit, CHECK); // If this thread has locked the object, exit the monitor. We // intentionally do not use CHECK on check_owner because we must exit the // monitor even if an exception was already pending. @@ -526,7 +517,7 @@ int ObjectSynchronizer::wait(Handle obj, jlong millis, TRAPS) { } ObjectMonitor* monitor; - monitor = LightweightSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_wait, CHECK_0); + monitor = ObjectSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_wait, CHECK_0); DTRACE_MONITOR_WAIT_PROBE(monitor, obj(), current, millis); monitor->wait(millis, true, THREAD); // Not CHECK as we need following code @@ -543,7 +534,7 @@ void ObjectSynchronizer::waitUninterruptibly(Handle obj, jlong millis, TRAPS) { assert(millis >= 0, "timeout value is negative"); ObjectMonitor* monitor; - monitor = LightweightSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_wait, CHECK); + monitor = ObjectSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_wait, CHECK); monitor->wait(millis, false, THREAD); } @@ -556,7 +547,7 @@ void ObjectSynchronizer::notify(Handle obj, TRAPS) { // Not inflated so there can't be any waiters to notify. return; } - ObjectMonitor* monitor = LightweightSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_notify, CHECK); + ObjectMonitor* monitor = ObjectSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_notify, CHECK); monitor->notify(CHECK); } @@ -570,7 +561,7 @@ void ObjectSynchronizer::notifyall(Handle obj, TRAPS) { return; } - ObjectMonitor* monitor = LightweightSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_notify, CHECK); + ObjectMonitor* monitor = ObjectSynchronizer::inflate_locked_or_imse(obj(), inflate_cause_notify, CHECK); monitor->notifyAll(CHECK); } @@ -647,40 +638,15 @@ static intptr_t get_next_hash(Thread* current, oop obj) { return value; } -static intptr_t install_hash_code(Thread* current, oop obj) { - assert(UseObjectMonitorTable, "must be"); - - markWord mark = obj->mark_acquire(); - for (;;) { - intptr_t hash = mark.hash(); - if (hash != 0) { - return hash; - } - - hash = get_next_hash(current, obj); - const markWord old_mark = mark; - const markWord new_mark = old_mark.copy_set_hash(hash); - - mark = obj->cas_set_mark(new_mark, old_mark); - if (old_mark == mark) { - return hash; - } - } -} - intptr_t ObjectSynchronizer::FastHashCode(Thread* current, oop obj) { - if (UseObjectMonitorTable) { - // Since the monitor isn't in the object header, the hash can simply be - // installed in the object header. - return install_hash_code(current, obj); - } - while (true) { ObjectMonitor* monitor = nullptr; markWord temp, test; intptr_t hash; markWord mark = obj->mark_acquire(); - if (mark.is_unlocked() || mark.is_fast_locked()) { + // If UseObjectMonitorTable is set the hash can simply be installed in the + // object header, since the monitor isn't in the object header. + if (UseObjectMonitorTable || !mark.has_monitor()) { hash = mark.hash(); if (hash != 0) { // if it has a hash, just return it return hash; @@ -699,7 +665,8 @@ intptr_t ObjectSynchronizer::FastHashCode(Thread* current, oop obj) { // installed the hash just before our attempt or inflation has // occurred or... so we fall thru to inflate the monitor for // stability and then install the hash. - } else if (mark.has_monitor()) { + } else { + assert(!mark.is_unlocked() && !mark.is_fast_locked(), "invariant"); monitor = mark.monitor(); temp = monitor->header(); assert(temp.is_neutral(), "invariant: header=" INTPTR_FORMAT, temp.value()); @@ -1230,7 +1197,7 @@ size_t ObjectSynchronizer::deflate_idle_monitors() { #ifdef ASSERT if (UseObjectMonitorTable) { for (ObjectMonitor* monitor : delete_list) { - assert(!LightweightSynchronizer::contains_monitor(current, monitor), "Should have been removed"); + assert(!ObjectSynchronizer::contains_monitor(current, monitor), "Should have been removed"); } } #endif @@ -1502,3 +1469,1219 @@ void ObjectSynchronizer::log_in_use_monitor_details(outputStream* out, bool log_ out->flush(); } + +// ----------------------------------------------------------------------------- +// ConcurrentHashTable storing links from objects to ObjectMonitors +class ObjectMonitorTable : AllStatic { + struct Config { + using Value = ObjectMonitor*; + static uintx get_hash(Value const& value, bool* is_dead) { + return (uintx)value->hash(); + } + static void* allocate_node(void* context, size_t size, Value const& value) { + ObjectMonitorTable::inc_items_count(); + return AllocateHeap(size, mtObjectMonitor); + }; + static void free_node(void* context, void* memory, Value const& value) { + ObjectMonitorTable::dec_items_count(); + FreeHeap(memory); + } + }; + using ConcurrentTable = ConcurrentHashTable; + + static ConcurrentTable* _table; + static volatile size_t _items_count; + static size_t _table_size; + static volatile bool _resize; + + class Lookup : public StackObj { + oop _obj; + + public: + explicit Lookup(oop obj) : _obj(obj) {} + + uintx get_hash() const { + uintx hash = _obj->mark().hash(); + assert(hash != 0, "should have a hash"); + return hash; + } + + bool equals(ObjectMonitor** value) { + assert(*value != nullptr, "must be"); + return (*value)->object_refers_to(_obj); + } + + bool is_dead(ObjectMonitor** value) { + assert(*value != nullptr, "must be"); + return false; + } + }; + + class LookupMonitor : public StackObj { + ObjectMonitor* _monitor; + + public: + explicit LookupMonitor(ObjectMonitor* monitor) : _monitor(monitor) {} + + uintx get_hash() const { + return _monitor->hash(); + } + + bool equals(ObjectMonitor** value) { + return (*value) == _monitor; + } + + bool is_dead(ObjectMonitor** value) { + assert(*value != nullptr, "must be"); + return (*value)->object_is_dead(); + } + }; + + static void inc_items_count() { + AtomicAccess::inc(&_items_count, memory_order_relaxed); + } + + static void dec_items_count() { + AtomicAccess::dec(&_items_count, memory_order_relaxed); + } + + static double get_load_factor() { + size_t count = AtomicAccess::load(&_items_count); + return (double)count / (double)_table_size; + } + + static size_t table_size(Thread* current = Thread::current()) { + return ((size_t)1) << _table->get_size_log2(current); + } + + static size_t max_log_size() { + // TODO[OMTable]: Evaluate the max size. + // TODO[OMTable]: Need to fix init order to use Universe::heap()->max_capacity(); + // Using MaxHeapSize directly this early may be wrong, and there + // are definitely rounding errors (alignment). + const size_t max_capacity = MaxHeapSize; + const size_t min_object_size = CollectedHeap::min_dummy_object_size() * HeapWordSize; + const size_t max_objects = max_capacity / MAX2(MinObjAlignmentInBytes, checked_cast(min_object_size)); + const size_t log_max_objects = log2i_graceful(max_objects); + + return MAX2(MIN2(SIZE_BIG_LOG2, log_max_objects), min_log_size()); + } + + static size_t min_log_size() { + // ~= log(AvgMonitorsPerThreadEstimate default) + return 10; + } + + template + static size_t clamp_log_size(V log_size) { + return MAX2(MIN2(log_size, checked_cast(max_log_size())), checked_cast(min_log_size())); + } + + static size_t initial_log_size() { + const size_t estimate = log2i(MAX2(os::processor_count(), 1)) + log2i(MAX2(AvgMonitorsPerThreadEstimate, size_t(1))); + return clamp_log_size(estimate); + } + + static size_t grow_hint () { + return ConcurrentTable::DEFAULT_GROW_HINT; + } + + public: + static void create() { + _table = new ConcurrentTable(initial_log_size(), max_log_size(), grow_hint()); + _items_count = 0; + _table_size = table_size(); + _resize = false; + } + + static void verify_monitor_get_result(oop obj, ObjectMonitor* monitor) { +#ifdef ASSERT + if (SafepointSynchronize::is_at_safepoint()) { + bool has_monitor = obj->mark().has_monitor(); + assert(has_monitor == (monitor != nullptr), + "Inconsistency between markWord and ObjectMonitorTable has_monitor: %s monitor: " PTR_FORMAT, + BOOL_TO_STR(has_monitor), p2i(monitor)); + } +#endif + } + + static ObjectMonitor* monitor_get(Thread* current, oop obj) { + ObjectMonitor* result = nullptr; + Lookup lookup_f(obj); + auto found_f = [&](ObjectMonitor** found) { + assert((*found)->object_peek() == obj, "must be"); + result = *found; + }; + _table->get(current, lookup_f, found_f); + verify_monitor_get_result(obj, result); + return result; + } + + static void try_notify_grow() { + if (!_table->is_max_size_reached() && !AtomicAccess::load(&_resize)) { + AtomicAccess::store(&_resize, true); + if (Service_lock->try_lock()) { + Service_lock->notify(); + Service_lock->unlock(); + } + } + } + + static bool should_shrink() { + // Not implemented; + return false; + } + + static constexpr double GROW_LOAD_FACTOR = 0.75; + + static bool should_grow() { + return get_load_factor() > GROW_LOAD_FACTOR && !_table->is_max_size_reached(); + } + + static bool should_resize() { + return should_grow() || should_shrink() || AtomicAccess::load(&_resize); + } + + template + static bool run_task(JavaThread* current, Task& task, const char* task_name, Args&... args) { + if (task.prepare(current)) { + log_trace(monitortable)("Started to %s", task_name); + TraceTime timer(task_name, TRACETIME_LOG(Debug, monitortable, perf)); + while (task.do_task(current, args...)) { + task.pause(current); + { + ThreadBlockInVM tbivm(current); + } + task.cont(current); + } + task.done(current); + return true; + } + return false; + } + + static bool grow(JavaThread* current) { + ConcurrentTable::GrowTask grow_task(_table); + if (run_task(current, grow_task, "Grow")) { + _table_size = table_size(current); + log_info(monitortable)("Grown to size: %zu", _table_size); + return true; + } + return false; + } + + static bool clean(JavaThread* current) { + ConcurrentTable::BulkDeleteTask clean_task(_table); + auto is_dead = [&](ObjectMonitor** monitor) { + return (*monitor)->object_is_dead(); + }; + auto do_nothing = [&](ObjectMonitor** monitor) {}; + NativeHeapTrimmer::SuspendMark sm("ObjectMonitorTable"); + return run_task(current, clean_task, "Clean", is_dead, do_nothing); + } + + static bool resize(JavaThread* current) { + LogTarget(Info, monitortable) lt; + bool success = false; + + if (should_grow()) { + lt.print("Start growing with load factor %f", get_load_factor()); + success = grow(current); + } else { + if (!_table->is_max_size_reached() && AtomicAccess::load(&_resize)) { + lt.print("WARNING: Getting resize hints with load factor %f", get_load_factor()); + } + lt.print("Start cleaning with load factor %f", get_load_factor()); + success = clean(current); + } + + AtomicAccess::store(&_resize, false); + + return success; + } + + static ObjectMonitor* monitor_put_get(Thread* current, ObjectMonitor* monitor, oop obj) { + // Enter the monitor into the concurrent hashtable. + ObjectMonitor* result = monitor; + Lookup lookup_f(obj); + auto found_f = [&](ObjectMonitor** found) { + assert((*found)->object_peek() == obj, "must be"); + result = *found; + }; + bool grow; + _table->insert_get(current, lookup_f, monitor, found_f, &grow); + verify_monitor_get_result(obj, result); + if (grow) { + try_notify_grow(); + } + return result; + } + + static bool remove_monitor_entry(Thread* current, ObjectMonitor* monitor) { + LookupMonitor lookup_f(monitor); + return _table->remove(current, lookup_f); + } + + static bool contains_monitor(Thread* current, ObjectMonitor* monitor) { + LookupMonitor lookup_f(monitor); + bool result = false; + auto found_f = [&](ObjectMonitor** found) { + result = true; + }; + _table->get(current, lookup_f, found_f); + return result; + } + + static void print_on(outputStream* st) { + auto printer = [&] (ObjectMonitor** entry) { + ObjectMonitor* om = *entry; + oop obj = om->object_peek(); + st->print("monitor=" PTR_FORMAT ", ", p2i(om)); + st->print("object=" PTR_FORMAT, p2i(obj)); + assert(obj->mark().hash() == om->hash(), "hash must match"); + st->cr(); + return true; + }; + if (SafepointSynchronize::is_at_safepoint()) { + _table->do_safepoint_scan(printer); + } else { + _table->do_scan(Thread::current(), printer); + } + } +}; + +ObjectMonitorTable::ConcurrentTable* ObjectMonitorTable::_table = nullptr; +volatile size_t ObjectMonitorTable::_items_count = 0; +size_t ObjectMonitorTable::_table_size = 0; +volatile bool ObjectMonitorTable::_resize = false; + +ObjectMonitor* ObjectSynchronizer::get_or_insert_monitor_from_table(oop object, JavaThread* current, bool* inserted) { + ObjectMonitor* monitor = get_monitor_from_table(current, object); + if (monitor != nullptr) { + *inserted = false; + return monitor; + } + + ObjectMonitor* alloced_monitor = new ObjectMonitor(object); + alloced_monitor->set_anonymous_owner(); + + // Try insert monitor + monitor = add_monitor(current, alloced_monitor, object); + + *inserted = alloced_monitor == monitor; + if (!*inserted) { + delete alloced_monitor; + } + + return monitor; +} + +static void log_inflate(Thread* current, oop object, ObjectSynchronizer::InflateCause cause) { + if (log_is_enabled(Trace, monitorinflation)) { + ResourceMark rm(current); + log_trace(monitorinflation)("inflate: object=" INTPTR_FORMAT ", mark=" + INTPTR_FORMAT ", type='%s' cause=%s", p2i(object), + object->mark().value(), object->klass()->external_name(), + ObjectSynchronizer::inflate_cause_name(cause)); + } +} + +static void post_monitor_inflate_event(EventJavaMonitorInflate* event, + const oop obj, + ObjectSynchronizer::InflateCause cause) { + assert(event != nullptr, "invariant"); + const Klass* monitor_klass = obj->klass(); + if (ObjectMonitor::is_jfr_excluded(monitor_klass)) { + return; + } + event->set_monitorClass(monitor_klass); + event->set_address((uintptr_t)(void*)obj); + event->set_cause((u1)cause); + event->commit(); +} + +ObjectMonitor* ObjectSynchronizer::get_or_insert_monitor(oop object, JavaThread* current, ObjectSynchronizer::InflateCause cause) { + assert(UseObjectMonitorTable, "must be"); + + EventJavaMonitorInflate event; + + bool inserted; + ObjectMonitor* monitor = get_or_insert_monitor_from_table(object, current, &inserted); + + if (inserted) { + log_inflate(current, object, cause); + if (event.should_commit()) { + post_monitor_inflate_event(&event, object, cause); + } + + // The monitor has an anonymous owner so it is safe from async deflation. + ObjectSynchronizer::_in_use_list.add(monitor); + } + + return monitor; +} + +// Add the hashcode to the monitor to match the object and put it in the hashtable. +ObjectMonitor* ObjectSynchronizer::add_monitor(JavaThread* current, ObjectMonitor* monitor, oop obj) { + assert(UseObjectMonitorTable, "must be"); + assert(obj == monitor->object(), "must be"); + + intptr_t hash = obj->mark().hash(); + assert(hash != 0, "must be set when claiming the object monitor"); + monitor->set_hash(hash); + + return ObjectMonitorTable::monitor_put_get(current, monitor, obj); +} + +bool ObjectSynchronizer::remove_monitor(Thread* current, ObjectMonitor* monitor, oop obj) { + assert(UseObjectMonitorTable, "must be"); + assert(monitor->object_peek() == obj, "must be, cleared objects are removed by is_dead"); + + return ObjectMonitorTable::remove_monitor_entry(current, monitor); +} + +void ObjectSynchronizer::deflate_mark_word(oop obj) { + assert(UseObjectMonitorTable, "must be"); + + markWord mark = obj->mark_acquire(); + assert(!mark.has_no_hash(), "obj with inflated monitor must have had a hash"); + + while (mark.has_monitor()) { + const markWord new_mark = mark.clear_lock_bits().set_unlocked(); + mark = obj->cas_set_mark(new_mark, mark); + } +} + +void ObjectSynchronizer::create_om_table() { + if (!UseObjectMonitorTable) { + return; + } + ObjectMonitorTable::create(); +} + +bool ObjectSynchronizer::needs_resize() { + if (!UseObjectMonitorTable) { + return false; + } + return ObjectMonitorTable::should_resize(); +} + +bool ObjectSynchronizer::resize_table(JavaThread* current) { + if (!UseObjectMonitorTable) { + return true; + } + return ObjectMonitorTable::resize(current); +} + +class ObjectSynchronizer::LockStackInflateContendedLocks : private OopClosure { + private: + oop _contended_oops[LockStack::CAPACITY]; + int _length; + + void do_oop(oop* o) final { + oop obj = *o; + if (obj->mark_acquire().has_monitor()) { + if (_length > 0 && _contended_oops[_length - 1] == obj) { + // Recursive + return; + } + _contended_oops[_length++] = obj; + } + } + + void do_oop(narrowOop* o) final { + ShouldNotReachHere(); + } + + public: + LockStackInflateContendedLocks() : + _contended_oops(), + _length(0) {}; + + void inflate(JavaThread* current) { + assert(current == JavaThread::current(), "must be"); + current->lock_stack().oops_do(this); + for (int i = 0; i < _length; i++) { + ObjectSynchronizer:: + inflate_fast_locked_object(_contended_oops[i], ObjectSynchronizer::inflate_cause_vm_internal, current, current); + } + } +}; + +void ObjectSynchronizer::ensure_lock_stack_space(JavaThread* current) { + assert(current == JavaThread::current(), "must be"); + LockStack& lock_stack = current->lock_stack(); + + // Make room on lock_stack + if (lock_stack.is_full()) { + // Inflate contended objects + LockStackInflateContendedLocks().inflate(current); + if (lock_stack.is_full()) { + // Inflate the oldest object + inflate_fast_locked_object(lock_stack.bottom(), ObjectSynchronizer::inflate_cause_vm_internal, current, current); + } + } +} + +class ObjectSynchronizer::CacheSetter : StackObj { + JavaThread* const _thread; + BasicLock* const _lock; + ObjectMonitor* _monitor; + + NONCOPYABLE(CacheSetter); + + public: + CacheSetter(JavaThread* thread, BasicLock* lock) : + _thread(thread), + _lock(lock), + _monitor(nullptr) {} + + ~CacheSetter() { + // Only use the cache if using the table. + if (UseObjectMonitorTable) { + if (_monitor != nullptr) { + // If the monitor is already in the BasicLock cache then it is most + // likely in the thread cache, do not set it again to avoid reordering. + if (_monitor != _lock->object_monitor_cache()) { + _thread->om_set_monitor_cache(_monitor); + _lock->set_object_monitor_cache(_monitor); + } + } else { + _lock->clear_object_monitor_cache(); + } + } + } + + void set_monitor(ObjectMonitor* monitor) { + assert(_monitor == nullptr, "only set once"); + _monitor = monitor; + } + +}; + +// Reads first from the BasicLock cache then from the OMCache in the current thread. +// C2 fast-path may have put the monitor in the cache in the BasicLock. +inline static ObjectMonitor* read_caches(JavaThread* current, BasicLock* lock, oop object) { + ObjectMonitor* monitor = lock->object_monitor_cache(); + if (monitor == nullptr) { + monitor = current->om_get_from_monitor_cache(object); + } + return monitor; +} + +class ObjectSynchronizer::VerifyThreadState { + bool _no_safepoint; + + public: + VerifyThreadState(JavaThread* locking_thread, JavaThread* current) : _no_safepoint(locking_thread != current) { + assert(current == Thread::current(), "must be"); + assert(locking_thread == current || locking_thread->is_obj_deopt_suspend(), "locking_thread may not run concurrently"); + if (_no_safepoint) { + DEBUG_ONLY(JavaThread::current()->inc_no_safepoint_count();) + } + } + ~VerifyThreadState() { + if (_no_safepoint){ + DEBUG_ONLY(JavaThread::current()->dec_no_safepoint_count();) + } + } +}; + +inline bool ObjectSynchronizer::fast_lock_try_enter(oop obj, LockStack& lock_stack, JavaThread* current) { + markWord mark = obj->mark(); + while (mark.is_unlocked()) { + ensure_lock_stack_space(current); + assert(!lock_stack.is_full(), "must have made room on the lock stack"); + assert(!lock_stack.contains(obj), "thread must not already hold the lock"); + // Try to swing into 'fast-locked' state. + markWord locked_mark = mark.set_fast_locked(); + markWord old_mark = mark; + mark = obj->cas_set_mark(locked_mark, old_mark); + if (old_mark == mark) { + // Successfully fast-locked, push object to lock-stack and return. + lock_stack.push(obj); + return true; + } + } + return false; +} + +bool ObjectSynchronizer::fast_lock_spin_enter(oop obj, LockStack& lock_stack, JavaThread* current, bool observed_deflation) { + assert(UseObjectMonitorTable, "must be"); + // Will spin with exponential backoff with an accumulative O(2^spin_limit) spins. + const int log_spin_limit = os::is_MP() ? FastLockingSpins : 1; + const int log_min_safepoint_check_interval = 10; + + markWord mark = obj->mark(); + const auto should_spin = [&]() { + if (!mark.has_monitor()) { + // Spin while not inflated. + return true; + } else if (observed_deflation) { + // Spin while monitor is being deflated. + ObjectMonitor* monitor = ObjectSynchronizer::read_monitor(current, obj, mark); + return monitor == nullptr || monitor->is_being_async_deflated(); + } + // Else stop spinning. + return false; + }; + // Always attempt to lock once even when safepoint synchronizing. + bool should_process = false; + for (int i = 0; should_spin() && !should_process && i < log_spin_limit; i++) { + // Spin with exponential backoff. + const int total_spin_count = 1 << i; + const int inner_spin_count = MIN2(1 << log_min_safepoint_check_interval, total_spin_count); + const int outer_spin_count = total_spin_count / inner_spin_count; + for (int outer = 0; outer < outer_spin_count; outer++) { + should_process = SafepointMechanism::should_process(current); + if (should_process) { + // Stop spinning for safepoint. + break; + } + for (int inner = 1; inner < inner_spin_count; inner++) { + SpinPause(); + } + } + + if (fast_lock_try_enter(obj, lock_stack, current)) return true; + } + return false; +} + +void ObjectSynchronizer::enter_for(Handle obj, BasicLock* lock, JavaThread* locking_thread) { + // When called with locking_thread != Thread::current() some mechanism must synchronize + // the locking_thread with respect to the current thread. Currently only used when + // deoptimizing and re-locking locks. See Deoptimization::relock_objects + assert(locking_thread == Thread::current() || locking_thread->is_obj_deopt_suspend(), "must be"); + + assert(!UseObjectMonitorTable || lock->object_monitor_cache() == nullptr, "must be cleared"); + JavaThread* current = JavaThread::current(); + VerifyThreadState vts(locking_thread, current); + + if (obj->klass()->is_value_based()) { + ObjectSynchronizer::handle_sync_on_value_based_class(obj, locking_thread); + } + + LockStack& lock_stack = locking_thread->lock_stack(); + + ObjectMonitor* monitor = nullptr; + if (lock_stack.contains(obj())) { + monitor = inflate_fast_locked_object(obj(), ObjectSynchronizer::inflate_cause_monitor_enter, locking_thread, current); + bool entered = monitor->enter_for(locking_thread); + assert(entered, "recursive ObjectMonitor::enter_for must succeed"); + } else { + do { + // It is assumed that enter_for must enter on an object without contention. + monitor = inflate_and_enter(obj(), lock, ObjectSynchronizer::inflate_cause_monitor_enter, locking_thread, current); + // But there may still be a race with deflation. + } while (monitor == nullptr); + } + + assert(monitor != nullptr, "ObjectSynchronizer::enter_for must succeed"); + assert(!UseObjectMonitorTable || lock->object_monitor_cache() == nullptr, "unused. already cleared"); +} + +void ObjectSynchronizer::enter(Handle obj, BasicLock* lock, JavaThread* current) { + assert(current == JavaThread::current(), "must be"); + + if (obj->klass()->is_value_based()) { + ObjectSynchronizer::handle_sync_on_value_based_class(obj, current); + } + + CacheSetter cache_setter(current, lock); + + // Used when deflation is observed. Progress here requires progress + // from the deflator. After observing that the deflator is not + // making progress (after two yields), switch to sleeping. + SpinYield spin_yield(0, 2); + bool observed_deflation = false; + + LockStack& lock_stack = current->lock_stack(); + + if (!lock_stack.is_full() && lock_stack.try_recursive_enter(obj())) { + // Recursively fast locked + return; + } + + if (lock_stack.contains(obj())) { + ObjectMonitor* monitor = inflate_fast_locked_object(obj(), ObjectSynchronizer::inflate_cause_monitor_enter, current, current); + bool entered = monitor->enter(current); + assert(entered, "recursive ObjectMonitor::enter must succeed"); + cache_setter.set_monitor(monitor); + return; + } + + while (true) { + // Fast-locking does not use the 'lock' argument. + // Fast-lock spinning to avoid inflating for short critical sections. + // The goal is to only inflate when the extra cost of using ObjectMonitors + // is worth it. + // If deflation has been observed we also spin while deflation is ongoing. + if (fast_lock_try_enter(obj(), lock_stack, current)) { + return; + } else if (UseObjectMonitorTable && fast_lock_spin_enter(obj(), lock_stack, current, observed_deflation)) { + return; + } + + if (observed_deflation) { + spin_yield.wait(); + } + + ObjectMonitor* monitor = inflate_and_enter(obj(), lock, ObjectSynchronizer::inflate_cause_monitor_enter, current, current); + if (monitor != nullptr) { + cache_setter.set_monitor(monitor); + return; + } + + // If inflate_and_enter returns nullptr it is because a deflated monitor + // was encountered. Fallback to fast locking. The deflater is responsible + // for clearing out the monitor and transitioning the markWord back to + // fast locking. + observed_deflation = true; + } +} + +void ObjectSynchronizer::exit(oop object, BasicLock* lock, JavaThread* current) { + assert(current == Thread::current(), "must be"); + + markWord mark = object->mark(); + assert(!mark.is_unlocked(), "must be"); + + LockStack& lock_stack = current->lock_stack(); + if (mark.is_fast_locked()) { + if (lock_stack.try_recursive_exit(object)) { + // This is a recursive exit which succeeded + return; + } + if (lock_stack.is_recursive(object)) { + // Must inflate recursive locks if try_recursive_exit fails + // This happens for un-structured unlocks, could potentially + // fix try_recursive_exit to handle these. + inflate_fast_locked_object(object, ObjectSynchronizer::inflate_cause_vm_internal, current, current); + } + } + + while (mark.is_fast_locked()) { + markWord unlocked_mark = mark.set_unlocked(); + markWord old_mark = mark; + mark = object->cas_set_mark(unlocked_mark, old_mark); + if (old_mark == mark) { + // CAS successful, remove from lock_stack + size_t recursion = lock_stack.remove(object) - 1; + assert(recursion == 0, "Should not have unlocked here"); + return; + } + } + + assert(mark.has_monitor(), "must be"); + // The monitor exists + ObjectMonitor* monitor; + if (UseObjectMonitorTable) { + monitor = read_caches(current, lock, object); + if (monitor == nullptr) { + monitor = get_monitor_from_table(current, object); + } + } else { + monitor = ObjectSynchronizer::read_monitor(mark); + } + if (monitor->has_anonymous_owner()) { + assert(current->lock_stack().contains(object), "current must have object on its lock stack"); + monitor->set_owner_from_anonymous(current); + monitor->set_recursions(current->lock_stack().remove(object) - 1); + } + + monitor->exit(current); +} + +// ObjectSynchronizer::inflate_locked_or_imse is used to get an +// inflated ObjectMonitor* from contexts which require that, such as +// notify/wait and jni_exit. Fast locking keeps the invariant that it +// only inflates if it is already locked by the current thread or the current +// thread is in the process of entering. To maintain this invariant we need to +// throw a java.lang.IllegalMonitorStateException before inflating if the +// current thread is not the owner. +ObjectMonitor* ObjectSynchronizer::inflate_locked_or_imse(oop obj, ObjectSynchronizer::InflateCause cause, TRAPS) { + JavaThread* current = THREAD; + + for (;;) { + markWord mark = obj->mark_acquire(); + if (mark.is_unlocked()) { + // No lock, IMSE. + THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(), + "current thread is not owner", nullptr); + } + + if (mark.is_fast_locked()) { + if (!current->lock_stack().contains(obj)) { + // Fast locked by other thread, IMSE. + THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(), + "current thread is not owner", nullptr); + } else { + // Current thread owns the lock, must inflate + return inflate_fast_locked_object(obj, cause, current, current); + } + } + + assert(mark.has_monitor(), "must be"); + ObjectMonitor* monitor = ObjectSynchronizer::read_monitor(current, obj, mark); + if (monitor != nullptr) { + if (monitor->has_anonymous_owner()) { + LockStack& lock_stack = current->lock_stack(); + if (lock_stack.contains(obj)) { + // Current thread owns the lock but someone else inflated it. + // Fix owner and pop lock stack. + monitor->set_owner_from_anonymous(current); + monitor->set_recursions(lock_stack.remove(obj) - 1); + } else { + // Fast locked (and inflated) by other thread, or deflation in progress, IMSE. + THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(), + "current thread is not owner", nullptr); + } + } + return monitor; + } + } +} + +ObjectMonitor* ObjectSynchronizer::inflate_into_object_header(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, Thread* current) { + + // The JavaThread* locking parameter requires that the locking_thread == JavaThread::current, + // or is suspended throughout the call by some other mechanism. + // Even with fast locking the thread might be nullptr when called from a non + // JavaThread. (As may still be the case from FastHashCode). However it is only + // important for the correctness of the fast locking algorithm that the thread + // is set when called from ObjectSynchronizer::enter from the owning thread, + // ObjectSynchronizer::enter_for from any thread, or ObjectSynchronizer::exit. + EventJavaMonitorInflate event; + + for (;;) { + const markWord mark = object->mark_acquire(); + + // The mark can be in one of the following states: + // * inflated - Just return if using stack-locking. + // If using fast-locking and the ObjectMonitor owner + // is anonymous and the locking_thread owns the + // object lock, then we make the locking_thread + // the ObjectMonitor owner and remove the lock from + // the locking_thread's lock stack. + // * fast-locked - Coerce it to inflated from fast-locked. + // * unlocked - Aggressively inflate the object. + + // CASE: inflated + if (mark.has_monitor()) { + ObjectMonitor* inf = mark.monitor(); + markWord dmw = inf->header(); + assert(dmw.is_neutral(), "invariant: header=" INTPTR_FORMAT, dmw.value()); + if (inf->has_anonymous_owner() && + locking_thread != nullptr && locking_thread->lock_stack().contains(object)) { + inf->set_owner_from_anonymous(locking_thread); + size_t removed = locking_thread->lock_stack().remove(object); + inf->set_recursions(removed - 1); + } + return inf; + } + + // CASE: fast-locked + // Could be fast-locked either by the locking_thread or by some other thread. + // + // Note that we allocate the ObjectMonitor speculatively, _before_ + // attempting to set the object's mark to the new ObjectMonitor. If + // the locking_thread owns the monitor, then we set the ObjectMonitor's + // owner to the locking_thread. Otherwise, we set the ObjectMonitor's owner + // to anonymous. If we lose the race to set the object's mark to the + // new ObjectMonitor, then we just delete it and loop around again. + // + if (mark.is_fast_locked()) { + ObjectMonitor* monitor = new ObjectMonitor(object); + monitor->set_header(mark.set_unlocked()); + bool own = locking_thread != nullptr && locking_thread->lock_stack().contains(object); + if (own) { + // Owned by locking_thread. + monitor->set_owner(locking_thread); + } else { + // Owned by somebody else. + monitor->set_anonymous_owner(); + } + markWord monitor_mark = markWord::encode(monitor); + markWord old_mark = object->cas_set_mark(monitor_mark, mark); + if (old_mark == mark) { + // Success! Return inflated monitor. + if (own) { + size_t removed = locking_thread->lock_stack().remove(object); + monitor->set_recursions(removed - 1); + } + // Once the ObjectMonitor is configured and object is associated + // with the ObjectMonitor, it is safe to allow async deflation: + ObjectSynchronizer::_in_use_list.add(monitor); + + log_inflate(current, object, cause); + if (event.should_commit()) { + post_monitor_inflate_event(&event, object, cause); + } + return monitor; + } else { + delete monitor; + continue; // Interference -- just retry + } + } + + // CASE: unlocked + // TODO-FIXME: for entry we currently inflate and then try to CAS _owner. + // If we know we're inflating for entry it's better to inflate by swinging a + // pre-locked ObjectMonitor pointer into the object header. A successful + // CAS inflates the object *and* confers ownership to the inflating thread. + // In the current implementation we use a 2-step mechanism where we CAS() + // to inflate and then CAS() again to try to swing _owner from null to current. + // An inflateTry() method that we could call from enter() would be useful. + + assert(mark.is_unlocked(), "invariant: header=" INTPTR_FORMAT, mark.value()); + ObjectMonitor* m = new ObjectMonitor(object); + // prepare m for installation - set monitor to initial state + m->set_header(mark); + + if (object->cas_set_mark(markWord::encode(m), mark) != mark) { + delete m; + m = nullptr; + continue; + // interference - the markword changed - just retry. + // The state-transitions are one-way, so there's no chance of + // live-lock -- "Inflated" is an absorbing state. + } + + // Once the ObjectMonitor is configured and object is associated + // with the ObjectMonitor, it is safe to allow async deflation: + ObjectSynchronizer::_in_use_list.add(m); + + log_inflate(current, object, cause); + if (event.should_commit()) { + post_monitor_inflate_event(&event, object, cause); + } + return m; + } +} + +ObjectMonitor* ObjectSynchronizer::inflate_fast_locked_object(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current) { + VerifyThreadState vts(locking_thread, current); + assert(locking_thread->lock_stack().contains(object), "locking_thread must have object on its lock stack"); + + ObjectMonitor* monitor; + + if (!UseObjectMonitorTable) { + return inflate_into_object_header(object, cause, locking_thread, current); + } + + // Inflating requires a hash code + ObjectSynchronizer::FastHashCode(current, object); + + markWord mark = object->mark_acquire(); + assert(!mark.is_unlocked(), "Cannot be unlocked"); + + for (;;) { + // Fetch the monitor from the table + monitor = get_or_insert_monitor(object, current, cause); + + // ObjectMonitors are always inserted as anonymously owned, this thread is + // the current holder of the monitor. So unless the entry is stale and + // contains a deflating monitor it must be anonymously owned. + if (monitor->has_anonymous_owner()) { + // The monitor must be anonymously owned if it was added + assert(monitor == get_monitor_from_table(current, object), "The monitor must be found"); + // New fresh monitor + break; + } + + // If the monitor was not anonymously owned then we got a deflating monitor + // from the table. We need to let the deflator make progress and remove this + // entry before we are allowed to add a new one. + os::naked_yield(); + assert(monitor->is_being_async_deflated(), "Should be the reason"); + } + + // Set the mark word; loop to handle concurrent updates to other parts of the mark word + while (mark.is_fast_locked()) { + mark = object->cas_set_mark(mark.set_has_monitor(), mark); + } + + // Indicate that the monitor now has a known owner + monitor->set_owner_from_anonymous(locking_thread); + + // Remove the entry from the thread's lock stack + monitor->set_recursions(locking_thread->lock_stack().remove(object) - 1); + + if (locking_thread == current) { + // Only change the thread local state of the current thread. + locking_thread->om_set_monitor_cache(monitor); + } + + return monitor; +} + +ObjectMonitor* ObjectSynchronizer::inflate_and_enter(oop object, BasicLock* lock, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current) { + VerifyThreadState vts(locking_thread, current); + + // Note: In some paths (deoptimization) the 'current' thread inflates and + // enters the lock on behalf of the 'locking_thread' thread. + + ObjectMonitor* monitor = nullptr; + + if (!UseObjectMonitorTable) { + // Do the old inflate and enter. + monitor = inflate_into_object_header(object, cause, locking_thread, current); + + bool entered; + if (locking_thread == current) { + entered = monitor->enter(locking_thread); + } else { + entered = monitor->enter_for(locking_thread); + } + + // enter returns false for deflation found. + return entered ? monitor : nullptr; + } + + NoSafepointVerifier nsv; + + // Try to get the monitor from the thread-local cache. + // There's no need to use the cache if we are locking + // on behalf of another thread. + if (current == locking_thread) { + monitor = read_caches(current, lock, object); + } + + // Get or create the monitor + if (monitor == nullptr) { + // Lightweight monitors require that hash codes are installed first + ObjectSynchronizer::FastHashCode(locking_thread, object); + monitor = get_or_insert_monitor(object, current, cause); + } + + if (monitor->try_enter(locking_thread)) { + return monitor; + } + + // Holds is_being_async_deflated() stable throughout this function. + ObjectMonitorContentionMark contention_mark(monitor); + + /// First handle the case where the monitor from the table is deflated + if (monitor->is_being_async_deflated()) { + // The MonitorDeflation thread is deflating the monitor. The locking thread + // must spin until further progress has been made. + + // Clear the BasicLock cache as it may contain this monitor. + lock->clear_object_monitor_cache(); + + const markWord mark = object->mark_acquire(); + + if (mark.has_monitor()) { + // Waiting on the deflation thread to remove the deflated monitor from the table. + os::naked_yield(); + + } else if (mark.is_fast_locked()) { + // Some other thread managed to fast-lock the lock, or this is a + // recursive lock from the same thread; yield for the deflation + // thread to remove the deflated monitor from the table. + os::naked_yield(); + + } else { + assert(mark.is_unlocked(), "Implied"); + // Retry immediately + } + + // Retry + return nullptr; + } + + for (;;) { + const markWord mark = object->mark_acquire(); + // The mark can be in one of the following states: + // * inflated - If the ObjectMonitor owner is anonymous + // and the locking_thread owns the object + // lock, then we make the locking_thread + // the ObjectMonitor owner and remove the + // lock from the locking_thread's lock stack. + // * fast-locked - Coerce it to inflated from fast-locked. + // * neutral - Inflate the object. Successful CAS is locked + + // CASE: inflated + if (mark.has_monitor()) { + LockStack& lock_stack = locking_thread->lock_stack(); + if (monitor->has_anonymous_owner() && lock_stack.contains(object)) { + // The lock is fast-locked by the locking thread, + // convert it to a held monitor with a known owner. + monitor->set_owner_from_anonymous(locking_thread); + monitor->set_recursions(lock_stack.remove(object) - 1); + } + + break; // Success + } + + // CASE: fast-locked + // Could be fast-locked either by locking_thread or by some other thread. + // + if (mark.is_fast_locked()) { + markWord old_mark = object->cas_set_mark(mark.set_has_monitor(), mark); + if (old_mark != mark) { + // CAS failed + continue; + } + + // Success! Return inflated monitor. + LockStack& lock_stack = locking_thread->lock_stack(); + if (lock_stack.contains(object)) { + // The lock is fast-locked by the locking thread, + // convert it to a held monitor with a known owner. + monitor->set_owner_from_anonymous(locking_thread); + monitor->set_recursions(lock_stack.remove(object) - 1); + } + + break; // Success + } + + // CASE: neutral (unlocked) + + // Catch if the object's header is not neutral (not locked and + // not marked is what we care about here). + assert(mark.is_neutral(), "invariant: header=" INTPTR_FORMAT, mark.value()); + markWord old_mark = object->cas_set_mark(mark.set_has_monitor(), mark); + if (old_mark != mark) { + // CAS failed + continue; + } + + // Transitioned from unlocked to monitor means locking_thread owns the lock. + monitor->set_owner_from_anonymous(locking_thread); + + return monitor; + } + + if (current == locking_thread) { + // One round of spinning + if (monitor->spin_enter(locking_thread)) { + return monitor; + } + + // Monitor is contended, take the time before entering to fix the lock stack. + LockStackInflateContendedLocks().inflate(current); + } + + // enter can block for safepoints; clear the unhandled object oop + PauseNoSafepointVerifier pnsv(&nsv); + object = nullptr; + + if (current == locking_thread) { + monitor->enter_with_contention_mark(locking_thread, contention_mark); + } else { + monitor->enter_for_with_contention_mark(locking_thread, contention_mark); + } + + return monitor; +} + +void ObjectSynchronizer::deflate_monitor(Thread* current, oop obj, ObjectMonitor* monitor) { + if (obj != nullptr) { + deflate_mark_word(obj); + } + bool removed = remove_monitor(current, monitor, obj); + if (obj != nullptr) { + assert(removed, "Should have removed the entry if obj was alive"); + } +} + +ObjectMonitor* ObjectSynchronizer::get_monitor_from_table(Thread* current, oop obj) { + assert(UseObjectMonitorTable, "must be"); + return ObjectMonitorTable::monitor_get(current, obj); +} + +bool ObjectSynchronizer::contains_monitor(Thread* current, ObjectMonitor* monitor) { + assert(UseObjectMonitorTable, "must be"); + return ObjectMonitorTable::contains_monitor(current, monitor); +} + +ObjectMonitor* ObjectSynchronizer::read_monitor(markWord mark) { + return mark.monitor(); +} + +ObjectMonitor* ObjectSynchronizer::read_monitor(Thread* current, oop obj) { + return ObjectSynchronizer::read_monitor(current, obj, obj->mark()); +} + +ObjectMonitor* ObjectSynchronizer::read_monitor(Thread* current, oop obj, markWord mark) { + if (!UseObjectMonitorTable) { + return read_monitor(mark); + } else { + return ObjectSynchronizer::get_monitor_from_table(current, obj); + } +} + +bool ObjectSynchronizer::quick_enter_internal(oop obj, BasicLock* lock, JavaThread* current) { + assert(current->thread_state() == _thread_in_Java, "must be"); + assert(obj != nullptr, "must be"); + NoSafepointVerifier nsv; + + LockStack& lock_stack = current->lock_stack(); + if (lock_stack.is_full()) { + // Always go into runtime if the lock stack is full. + return false; + } + + const markWord mark = obj->mark(); + +#ifndef _LP64 + // Only for 32bit which has limited support for fast locking outside the runtime. + if (lock_stack.try_recursive_enter(obj)) { + // Recursive lock successful. + return true; + } + + if (mark.is_unlocked()) { + markWord locked_mark = mark.set_fast_locked(); + if (obj->cas_set_mark(locked_mark, mark) == mark) { + // Successfully fast-locked, push object to lock-stack and return. + lock_stack.push(obj); + return true; + } + } +#endif + + if (mark.has_monitor()) { + ObjectMonitor* monitor; + if (UseObjectMonitorTable) { + monitor = read_caches(current, lock, obj); + } else { + monitor = ObjectSynchronizer::read_monitor(mark); + } + + if (monitor == nullptr) { + // Take the slow-path on a cache miss. + return false; + } + + if (UseObjectMonitorTable) { + // Set the monitor regardless of success. + // Either we successfully lock on the monitor, or we retry with the + // monitor in the slow path. If the monitor gets deflated, it will be + // cleared, either by the CacheSetter if we fast lock in enter or in + // inflate_and_enter when we see that the monitor is deflated. + lock->set_object_monitor_cache(monitor); + } + + if (monitor->spin_enter(current)) { + return true; + } + } + + // Slow-path. + return false; +} + +bool ObjectSynchronizer::quick_enter(oop obj, BasicLock* lock, JavaThread* current) { + assert(current->thread_state() == _thread_in_Java, "invariant"); + NoSafepointVerifier nsv; + if (obj == nullptr) return false; // Need to throw NPE + + if (obj->klass()->is_value_based()) { + return false; + } + + return ObjectSynchronizer::quick_enter_internal(obj, lock, current); +} diff --git a/src/hotspot/share/runtime/synchronizer.hpp b/src/hotspot/share/runtime/synchronizer.hpp index 2337569176e..a10e44b3092 100644 --- a/src/hotspot/share/runtime/synchronizer.hpp +++ b/src/hotspot/share/runtime/synchronizer.hpp @@ -94,8 +94,8 @@ public: // deoptimization at monitor exit. Hence, it does not take a Handle argument. // This is the "slow path" version of monitor enter and exit. - static inline void enter(Handle obj, BasicLock* lock, JavaThread* current); - static inline void exit(oop obj, BasicLock* lock, JavaThread* current); + static void enter(Handle obj, BasicLock* lock, JavaThread* current); + static void exit(oop obj, BasicLock* lock, JavaThread* current); // Used to enter a monitor for another thread. This requires that the // locking_thread is suspended, and that entering on a potential @@ -115,7 +115,7 @@ public: static void notifyall(Handle obj, TRAPS); static bool quick_notify(oopDesc* obj, JavaThread* current, bool All); - static inline bool quick_enter(oop obj, BasicLock* Lock, JavaThread* current); + static bool quick_enter(oop obj, BasicLock* Lock, JavaThread* current); // Special internal-use-only method for use by JVM infrastructure // that needs to wait() on a java-level object but that can't risk @@ -125,9 +125,9 @@ public: public: static const char* inflate_cause_name(const InflateCause cause); - inline static ObjectMonitor* read_monitor(markWord mark); - inline static ObjectMonitor* read_monitor(Thread* current, oop obj); - inline static ObjectMonitor* read_monitor(Thread* current, oop obj, markWord mark); + static ObjectMonitor* read_monitor(markWord mark); + static ObjectMonitor* read_monitor(Thread* current, oop obj); + static ObjectMonitor* read_monitor(Thread* current, oop obj, markWord mark); // Returns the identity hash value for an oop // NOTE: It may cause monitor inflation @@ -195,7 +195,6 @@ public: private: friend class SynchronizerTest; - friend class LightweightSynchronizer; static MonitorList _in_use_list; static volatile bool _is_async_deflation_requested; @@ -209,6 +208,44 @@ public: static u_char* get_gvars_stw_random_addr(); static void handle_sync_on_value_based_class(Handle obj, JavaThread* locking_thread); + + static ObjectMonitor* get_or_insert_monitor_from_table(oop object, JavaThread* current, bool* inserted); + static ObjectMonitor* get_or_insert_monitor(oop object, JavaThread* current, ObjectSynchronizer::InflateCause cause); + + static ObjectMonitor* add_monitor(JavaThread* current, ObjectMonitor* monitor, oop obj); + static bool remove_monitor(Thread* current, ObjectMonitor* monitor, oop obj); + + static void deflate_mark_word(oop object); + + static void ensure_lock_stack_space(JavaThread* current); + + class CacheSetter; + class LockStackInflateContendedLocks; + class VerifyThreadState; + + static void create_om_table(); + + public: + static bool needs_resize(); + static bool resize_table(JavaThread* current); + + private: + static inline bool fast_lock_try_enter(oop obj, LockStack& lock_stack, JavaThread* current); + static bool fast_lock_spin_enter(oop obj, LockStack& lock_stack, JavaThread* current, bool observed_deflation); + + public: + static ObjectMonitor* inflate_into_object_header(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, Thread* current); + static ObjectMonitor* inflate_locked_or_imse(oop object, ObjectSynchronizer::InflateCause cause, TRAPS); + static ObjectMonitor* inflate_fast_locked_object(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current); + static ObjectMonitor* inflate_and_enter(oop object, BasicLock* lock, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, JavaThread* current); + + static void deflate_monitor(Thread* current, oop obj, ObjectMonitor* monitor); + + static ObjectMonitor* get_monitor_from_table(Thread* current, oop obj); + + static bool contains_monitor(Thread* current, ObjectMonitor* monitor); + + static bool quick_enter_internal(oop obj, BasicLock* Lock, JavaThread* current); }; // ObjectLocker enforces balanced locking and can never throw an diff --git a/src/hotspot/share/runtime/synchronizer.inline.hpp b/src/hotspot/share/runtime/synchronizer.inline.hpp deleted file mode 100644 index 7bcbd91eda7..00000000000 --- a/src/hotspot/share/runtime/synchronizer.inline.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_RUNTIME_SYNCHRONIZER_INLINE_HPP -#define SHARE_RUNTIME_SYNCHRONIZER_INLINE_HPP - -#include "runtime/synchronizer.hpp" - -#include "runtime/lightweightSynchronizer.hpp" -#include "runtime/safepointVerifiers.hpp" - -inline ObjectMonitor* ObjectSynchronizer::read_monitor(markWord mark) { - return mark.monitor(); -} - -inline ObjectMonitor* ObjectSynchronizer::read_monitor(Thread* current, oop obj) { - return ObjectSynchronizer::read_monitor(current, obj, obj->mark()); -} - -inline ObjectMonitor* ObjectSynchronizer::read_monitor(Thread* current, oop obj, markWord mark) { - if (!UseObjectMonitorTable) { - return read_monitor(mark); - } else { - return LightweightSynchronizer::get_monitor_from_table(current, obj); - } -} - -inline void ObjectSynchronizer::enter(Handle obj, BasicLock* lock, JavaThread* current) { - assert(current == Thread::current(), "must be"); - - LightweightSynchronizer::enter(obj, lock, current); -} - -inline bool ObjectSynchronizer::quick_enter(oop obj, BasicLock* lock, JavaThread* current) { - assert(current->thread_state() == _thread_in_Java, "invariant"); - NoSafepointVerifier nsv; - if (obj == nullptr) return false; // Need to throw NPE - - if (obj->klass()->is_value_based()) { - return false; - } - - return LightweightSynchronizer::quick_enter(obj, lock, current); -} - -inline void ObjectSynchronizer::exit(oop object, BasicLock* lock, JavaThread* current) { - LightweightSynchronizer::exit(object, lock, current); -} - -#endif // SHARE_RUNTIME_SYNCHRONIZER_INLINE_HPP diff --git a/src/hotspot/share/runtime/vframe.cpp b/src/hotspot/share/runtime/vframe.cpp index 74d42b7dc9d..604ff1f751a 100644 --- a/src/hotspot/share/runtime/vframe.cpp +++ b/src/hotspot/share/runtime/vframe.cpp @@ -48,7 +48,7 @@ #include "runtime/signature.hpp" #include "runtime/stackFrameStream.inline.hpp" #include "runtime/stubRoutines.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/vframe.inline.hpp" #include "runtime/vframe_hp.hpp" #include "runtime/vframeArray.hpp" diff --git a/src/hotspot/share/services/threadService.cpp b/src/hotspot/share/services/threadService.cpp index 547ca4e51d5..48f4eb16cf1 100644 --- a/src/hotspot/share/services/threadService.cpp +++ b/src/hotspot/share/services/threadService.cpp @@ -48,7 +48,7 @@ #include "runtime/javaThread.inline.hpp" #include "runtime/jniHandles.inline.hpp" #include "runtime/objectMonitor.inline.hpp" -#include "runtime/synchronizer.inline.hpp" +#include "runtime/synchronizer.hpp" #include "runtime/thread.inline.hpp" #include "runtime/threads.hpp" #include "runtime/threadSMR.inline.hpp" diff --git a/test/hotspot/gtest/runtime/test_lockStack.cpp b/test/hotspot/gtest/runtime/test_lockStack.cpp index 6755541adb0..c61b6db6023 100644 --- a/test/hotspot/gtest/runtime/test_lockStack.cpp +++ b/test/hotspot/gtest/runtime/test_lockStack.cpp @@ -63,7 +63,7 @@ public: } while (false) TEST_VM_F(LockStackTest, is_recursive) { - if (!VM_Version::supports_recursive_lightweight_locking()) { + if (!VM_Version::supports_recursive_fast_locking()) { return; } @@ -130,7 +130,7 @@ TEST_VM_F(LockStackTest, is_recursive) { } TEST_VM_F(LockStackTest, try_recursive_enter) { - if (!VM_Version::supports_recursive_lightweight_locking()) { + if (!VM_Version::supports_recursive_fast_locking()) { return; } @@ -197,7 +197,7 @@ TEST_VM_F(LockStackTest, try_recursive_enter) { } TEST_VM_F(LockStackTest, contains) { - const bool test_recursive = VM_Version::supports_recursive_lightweight_locking(); + const bool test_recursive = VM_Version::supports_recursive_fast_locking(); JavaThread* THREAD = JavaThread::current(); // the thread should be in vm to use locks @@ -259,7 +259,7 @@ TEST_VM_F(LockStackTest, contains) { } TEST_VM_F(LockStackTest, remove) { - const bool test_recursive = VM_Version::supports_recursive_lightweight_locking(); + const bool test_recursive = VM_Version::supports_recursive_fast_locking(); JavaThread* THREAD = JavaThread::current(); // the thread should be in vm to use locks diff --git a/test/hotspot/jtreg/runtime/Monitor/TestRecursiveLocking.java b/test/hotspot/jtreg/runtime/Monitor/TestRecursiveLocking.java index bea7a41ae2b..9782824ef0f 100644 --- a/test/hotspot/jtreg/runtime/Monitor/TestRecursiveLocking.java +++ b/test/hotspot/jtreg/runtime/Monitor/TestRecursiveLocking.java @@ -202,7 +202,7 @@ public class TestRecursiveLocking { assertNotInflated(); } else { // Second time we want to lock A, the lock stack - // looks like this [A, B]. Lightweight locking + // looks like this [A, B]. Fast locking // doesn't allow interleaving ([A, B, A]), instead // it inflates A and removes it from the lock // stack. Which leaves us with only [B] on the @@ -220,11 +220,10 @@ public class TestRecursiveLocking { counter++; - // Legacy tolerates endless recursions. While testing - // lightweight we don't go deeper than the size of the - // lock stack, which in this test case will be filled - // with a number of B-elements. See comment in runA() - // above for more info. + // Legacy tolerates endless recursions. While testing we + // don't go deeper than the size of the lock stack, which + // in this test case will be filled with a number of + // B-elements. See comment in runA() above for more info. assertNotInflated(); if (depth == 1) { diff --git a/test/hotspot/jtreg/runtime/lockStack/TestLockStackCapacity.java b/test/hotspot/jtreg/runtime/lockStack/TestLockStackCapacity.java index f3f1f9c91a6..37568fd3434 100644 --- a/test/hotspot/jtreg/runtime/lockStack/TestLockStackCapacity.java +++ b/test/hotspot/jtreg/runtime/lockStack/TestLockStackCapacity.java @@ -24,7 +24,7 @@ /* * @test TestLockStackCapacity - * @summary Tests the interaction between recursive lightweight locking and + * @summary Tests the interaction between recursive fast locking and * when the lock stack capacity is exceeded. * @requires vm.flagless * @library /testlibrary /test/lib @@ -93,8 +93,8 @@ public class TestLockStackCapacity { } public static void main(String... args) throws Exception { - if (!WB.supportsRecursiveLightweightLocking()) { - throw new SkippedException("Test only valid if lightweight locking supports recursion"); + if (!WB.supportsRecursiveFastLocking()) { + throw new SkippedException("Test only valid if fast locking supports recursion"); } SynchronizedObject.runTest(); diff --git a/test/jdk/com/sun/jdi/EATests.java b/test/jdk/com/sun/jdi/EATests.java index 321855b4969..cb51e91021b 100644 --- a/test/jdk/com/sun/jdi/EATests.java +++ b/test/jdk/com/sun/jdi/EATests.java @@ -97,7 +97,7 @@ * -Xlog:monitorinflation=trace:file=monitorinflation.log * * @bug 8341819 - * @comment Regression test for re-locking racing with deflation with lightweight locking. + * @comment Regression test for re-locking racing with deflation with fast locking. * @run driver EATests * -XX:+UnlockDiagnosticVMOptions * -Xms256m -Xmx256m @@ -237,7 +237,7 @@ class EATestsTarget { // Relocking test cases new EARelockingSimpleTarget() .run(); - new EARelockingWithManyLightweightLocksTarget() .run(); + new EARelockingWithManyFastLocksTarget() .run(); new EARelockingSimpleWithAccessInOtherThreadTarget() .run(); new EARelockingSimpleWithAccessInOtherThread_02_DynamicCall_Target() .run(); new EARelockingRecursiveTarget() .run(); @@ -363,7 +363,7 @@ public class EATests extends TestScaffold { // Relocking test cases new EARelockingSimple() .run(this); - new EARelockingWithManyLightweightLocks() .run(this); + new EARelockingWithManyFastLocks() .run(this); new EARelockingSimpleWithAccessInOtherThread() .run(this); new EARelockingSimpleWithAccessInOtherThread_02_DynamicCall() .run(this); new EARelockingRecursive() .run(this); @@ -1750,12 +1750,11 @@ class EARelockingSimpleTarget extends EATestCaseBaseTarget { /** * Like {@link EARelockingSimple}. The difference is that there are many - * lightweight locked objects when the relocking is done. With - * lightweight the lock stack of the thread will be full because of - * this. + * fast locked objects when the relocking is done, which means that the + * lock stack of the thread will be full because of this. */ -class EARelockingWithManyLightweightLocks extends EATestCaseBaseDebugger { +class EARelockingWithManyFastLocks extends EATestCaseBaseDebugger { public void runTestCase() throws Exception { BreakpointEvent bpe = resumeTo(TARGET_TESTCASE_BASE_NAME, "dontinline_brkpt", "()V"); @@ -1765,7 +1764,7 @@ class EARelockingWithManyLightweightLocks extends EATestCaseBaseDebugger { } } -class EARelockingWithManyLightweightLocksTarget extends EATestCaseBaseTarget { +class EARelockingWithManyFastLocksTarget extends EATestCaseBaseTarget { static class Lock { } @@ -2260,7 +2259,7 @@ class EARelockingArgEscapeLWLockedInCalleeFrame_2Target extends EATestCaseBaseTa /** * Similar to {@link EARelockingArgEscapeLWLockedInCalleeFrame_2Target}. It does - * not use recursive locking and exposed a bug in the lightweight-locking implementation. + * not use recursive locking and exposed a bug in the fast-locking implementation. */ class EARelockingArgEscapeLWLockedInCalleeFrameNoRecursive extends EATestCaseBaseDebugger { diff --git a/test/lib/jdk/test/whitebox/WhiteBox.java b/test/lib/jdk/test/whitebox/WhiteBox.java index e989b0aca88..558feeec78f 100644 --- a/test/lib/jdk/test/whitebox/WhiteBox.java +++ b/test/lib/jdk/test/whitebox/WhiteBox.java @@ -124,7 +124,7 @@ public class WhiteBox { public native int getLockStackCapacity(); - public native boolean supportsRecursiveLightweightLocking(); + public native boolean supportsRecursiveFastLocking(); public native void forceSafepoint(); From c173d416f749348bee42e1a9436a999700d0f0e8 Mon Sep 17 00:00:00 2001 From: Boris Ulasevich Date: Thu, 6 Nov 2025 12:56:37 +0000 Subject: [PATCH 060/512] 8359256: AArch64: Use SHA3 GPR intrinsic where it's faster Reviewed-by: eastigeevich, phh --- src/hotspot/cpu/aarch64/globals_aarch64.hpp | 2 +- .../cpu/aarch64/vm_version_aarch64.cpp | 30 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/hotspot/cpu/aarch64/globals_aarch64.hpp b/src/hotspot/cpu/aarch64/globals_aarch64.hpp index 8e520314c8b..107919b2cbd 100644 --- a/src/hotspot/cpu/aarch64/globals_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/globals_aarch64.hpp @@ -95,7 +95,7 @@ define_pd_global(intx, InlineSmallCode, 1000); "Use simplest and shortest implementation for array equals") \ product(bool, UseSIMDForBigIntegerShiftIntrinsics, true, \ "Use SIMD instructions for left/right shift of BigInteger") \ - product(bool, UseSIMDForSHA3Intrinsic, true, \ + product(bool, UseSIMDForSHA3Intrinsic, false, \ "Use SIMD SHA3 instructions for SHA3 intrinsic") \ product(bool, AvoidUnalignedAccesses, false, \ "Avoid generating unaligned memory accesses") \ diff --git a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp index a04e9defa4b..b47bfe6a89f 100644 --- a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp @@ -375,18 +375,24 @@ void VM_Version::initialize() { FLAG_SET_DEFAULT(UseSHA256Intrinsics, false); } - if (UseSHA && VM_Version::supports_sha3()) { - // Auto-enable UseSHA3Intrinsics on hardware with performance benefit. - // Note that the evaluation of UseSHA3Intrinsics shows better performance - // on Apple silicon but worse performance on Neoverse V1 and N2. - if (_cpu == CPU_APPLE) { // Apple silicon - if (FLAG_IS_DEFAULT(UseSHA3Intrinsics)) { - FLAG_SET_DEFAULT(UseSHA3Intrinsics, true); - } - } - } else if (UseSHA3Intrinsics && UseSIMDForSHA3Intrinsic) { - warning("Intrinsics for SHA3-224, SHA3-256, SHA3-384 and SHA3-512 crypto hash functions not available on this CPU."); - FLAG_SET_DEFAULT(UseSHA3Intrinsics, false); + if (UseSHA && VM_Version::supports_sha3() && _cpu == CPU_APPLE && FLAG_IS_DEFAULT(UseSIMDForSHA3Intrinsic)) { + // Note: SIMD faster on Apple, worse on Neoverse V1, V2 and N2. + FLAG_SET_DEFAULT(UseSIMDForSHA3Intrinsic, true); + } + + // Enable SHA-3 intrinsics (SIMD or GPR). The GPR path does not require SHA instructions. + if (FLAG_IS_DEFAULT(UseSHA3Intrinsics)) { + FLAG_SET_DEFAULT(UseSHA3Intrinsics, true); + } + + if (!UseSHA3Intrinsics && UseSIMDForSHA3Intrinsic) { + // Keep flags consistent: if SHA3 intrinsics are off, disable the SHA3 SIMD variant. + FLAG_SET_DEFAULT(UseSIMDForSHA3Intrinsic, false); + } + + if (!VM_Version::supports_sha3() && UseSIMDForSHA3Intrinsic) { + warning("SHA3 instructions are not available on this CPU"); + FLAG_SET_DEFAULT(UseSIMDForSHA3Intrinsic, false); } if (UseSHA && VM_Version::supports_sha512()) { From df414e0d19c1ed68f151d84dbb481a9dd6c65539 Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Thu, 6 Nov 2025 13:39:57 +0000 Subject: [PATCH 061/512] 8370884: JFR: Overflow in aggregators Reviewed-by: mgronlun --- .../jdk/jfr/internal/query/Function.java | 70 +++++++++++++++---- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/query/Function.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/query/Function.java index f01105c698c..4c921ba4d87 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/query/Function.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/query/Function.java @@ -34,6 +34,7 @@ import java.util.LinkedHashSet; import java.util.Set; abstract class Function { + private static final long NANOS_PER_SECOND = 1_000_000_000L; interface FunctionFactory { Function newFunction(); @@ -164,14 +165,30 @@ abstract class Function { private static final class AverageDuration extends Function { private long seconds; private long nanos; - private int count; + private long count; + private boolean hasOverflowed; @Override public void add(Object value) { - if (value instanceof Duration duration) { - seconds += duration.getSeconds(); - nanos += duration.getNano(); - count++; + if (hasOverflowed) { + return; + } + if (value instanceof Duration d) { + try { + // Code copied from Duration::plus + long secondsToAdd = d.getSeconds(); + long nanosToAdd = d.getNano(); + if ((secondsToAdd | nanosToAdd) == 0) { + return; + } + long s = Math.addExact(seconds, secondsToAdd); + seconds = Math.addExact(s, nanosToAdd / NANOS_PER_SECOND); + nanos = nanos + nanosToAdd % NANOS_PER_SECOND; + count++; + } catch (ArithmeticException ae) { + hasOverflowed = true; + count = 0; + } } } @@ -345,13 +362,29 @@ abstract class Function { private long seconds; private long nanos; private boolean hasValue; + private boolean hasOverflowed; @Override public void add(Object value) { + if (hasOverflowed) { + return; + } if (value instanceof Duration n) { - seconds += n.getSeconds(); - nanos += n.getNano(); - hasValue = true; + try { + // Code copied from Duration::plus + long secondsToAdd = n.getSeconds(); + long nanosToAdd = n.getNano(); + if ((secondsToAdd | nanosToAdd) == 0) { + return; + } + long s = Math.addExact(seconds, secondsToAdd); + seconds = Math.addExact(s, nanosToAdd / NANOS_PER_SECOND); + nanos = nanos + nanosToAdd % NANOS_PER_SECOND; + hasValue = true; + } catch (ArithmeticException ae) { + hasOverflowed = true; + hasValue = false; + } } } @@ -363,13 +396,22 @@ abstract class Function { private static final class SumLong extends Function { private boolean hasValue = false; + private boolean hasOverflowed; private long sum = 0; @Override public void add(Object value) { + if (hasOverflowed) { + return; + } if (value instanceof Number n) { - sum += n.longValue(); - hasValue = true; + try { + sum = Math.addExact(sum, n.longValue()); + hasValue = true; + } catch (ArithmeticException ae) { + hasOverflowed = true; + hasValue = false; + } } } @@ -436,7 +478,11 @@ abstract class Function { return null; } if (isIntegral(first) && isIntegral(last)) { - return last.longValue() - first.longValue(); + try { + return Math.subtractExact(last.longValue(), first.longValue()); + } catch (ArithmeticException ae) { + return null; + } } if (first instanceof Float f && last instanceof Float l) { return l - f; @@ -528,7 +574,7 @@ abstract class Function { @Override public void add(Object value) { if (value instanceof Duration duration) { - long nanos = 1_000_000_000L * duration.getSeconds() + duration.getNano(); + double nanos = 1_000_000_000.0 * duration.getSeconds() + duration.getNano(); function.add(nanos); } } From 2d924ad3584a0ea8682f47c742dcdfd3be14937d Mon Sep 17 00:00:00 2001 From: Kerem Kat Date: Thu, 6 Nov 2025 15:00:37 +0000 Subject: [PATCH 062/512] 8351194: Clean up Hotspot SA after 32-bit x86 removal Reviewed-by: cjplummer, shade, ayang, dholmes --- src/jdk.hotspot.agent/doc/clhsdb.html | 2 +- src/jdk.hotspot.agent/doc/hsdb.html | 2 +- .../native/libsaproc/LinuxDebuggerLocal.cpp | 34 +-- .../linux/native/libsaproc/ps_core.c | 12 - .../macosx/native/libsaproc/ps_core.c | 12 - .../share/classes/sun/jvm/hotspot/HSDB.java | 2 +- .../classes/sun/jvm/hotspot/HotSpotAgent.java | 17 +- .../sun/jvm/hotspot/debugger/Debugger.java | 2 +- .../debugger/MachineDescriptionIntelX86.java | 39 --- .../hotspot/debugger/bsd/BsdCDebugger.java | 11 +- .../debugger/bsd/BsdThreadContextFactory.java | 5 +- .../debugger/bsd/x86/BsdX86CFrame.java | 79 ------ .../debugger/bsd/x86/BsdX86ThreadContext.java | 46 ---- .../sun/jvm/hotspot/debugger/cdbg/CFrame.java | 2 +- .../debugger/linux/LinuxCDebugger.java | 11 +- .../linux/LinuxThreadContextFactory.java | 5 +- .../debugger/linux/x86/LinuxX86CFrame.java | 92 ------- .../linux/x86/LinuxX86ThreadContext.java | 46 ---- .../debugger/remote/RemoteDebuggerClient.java | 5 +- .../debugger/remote/x86/RemoteX86Thread.java | 53 ----- .../remote/x86/RemoteX86ThreadContext.java | 50 ---- .../remote/x86/RemoteX86ThreadFactory.java | 44 ---- .../win32/coff/DebugVC50X86RegisterEnums.java | 111 --------- .../debugger/windbg/WindbgDebugger.java | 5 - .../debugger/windbg/WindbgDebuggerLocal.java | 4 +- .../debugger/x86/X86ThreadContext.java | 129 ---------- .../hotspot/runtime/StackValueCollection.java | 2 +- .../sun/jvm/hotspot/runtime/Threads.java | 10 +- .../classes/sun/jvm/hotspot/runtime/VM.java | 4 +- .../runtime/amd64/AMD64CurrentFrameGuess.java | 6 +- .../X86Frame.java => amd64/AMD64Frame.java} | 74 +++--- .../AMD64RegisterMap.java} | 10 +- .../bsd_amd64/BsdAMD64JavaThreadPDAccess.java | 11 +- .../hotspot/runtime/bsd_x86/BsdSignals.java | 70 ------ .../bsd_x86/BsdX86JavaThreadPDAccess.java | 133 ----------- .../LinuxAMD64JavaThreadPDAccess.java | 11 +- .../runtime/linux_x86/LinuxSignals.java | 71 ------ .../linux_x86/LinuxX86JavaThreadPDAccess.java | 133 ----------- .../Win32AMD64JavaThreadPDAccess.java | 13 +- .../runtime/x86/X86CurrentFrameGuess.java | 225 ------------------ .../runtime/x86/X86JavaCallWrapper.java | 58 ----- .../jvm/hotspot/ui/AnnotatedMemoryPanel.java | 2 +- .../jvm/hotspot/utilities/PlatformInfo.java | 9 +- 43 files changed, 84 insertions(+), 1578 deletions(-) delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIntelX86.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86ThreadContext.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86ThreadContext.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86Thread.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadContext.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadFactory.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/win32/coff/DebugVC50X86RegisterEnums.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/x86/X86ThreadContext.java rename src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/{x86/X86Frame.java => amd64/AMD64Frame.java} (88%) rename src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/{x86/X86RegisterMap.java => amd64/AMD64RegisterMap.java} (85%) delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdSignals.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdX86JavaThreadPDAccess.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxSignals.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxX86JavaThreadPDAccess.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86CurrentFrameGuess.java delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86JavaCallWrapper.java diff --git a/src/jdk.hotspot.agent/doc/clhsdb.html b/src/jdk.hotspot.agent/doc/clhsdb.html index a225530774f..bd436f1dfef 100644 --- a/src/jdk.hotspot.agent/doc/clhsdb.html +++ b/src/jdk.hotspot.agent/doc/clhsdb.html @@ -32,7 +32,7 @@ Available commands: class name find a Java class from debuggee and print oop classes print all loaded Java classes with Klass* detach detach SA from current target - dis address [ length ] disassemble (x86) specified number of instructions from given address + dis address [ length ] disassemble (requires hsdis) specified number of instructions from given address dissemble address disassemble nmethod dumpcfg -a | id Dump the PhaseCFG for every compiler thread that has one live dumpclass { address | name } [ directory ] dump .class file for given Klass* or class name diff --git a/src/jdk.hotspot.agent/doc/hsdb.html b/src/jdk.hotspot.agent/doc/hsdb.html index 3470d2806e0..ba47558cf6b 100644 --- a/src/jdk.hotspot.agent/doc/hsdb.html +++ b/src/jdk.hotspot.agent/doc/hsdb.html @@ -31,7 +31,7 @@ HSDB was launched without debuggee, empty screen is shown.

  • Object Histogram and inspection of objects and liveness analysis therein.
  • Class Browser - view Java classes, bytecode disassembly, or create .class files for selected classes -
  • native disassembly (x86 only) and nmethod disassembly with annotations for safepoint details. +
  • native disassembly (requires hsdis) and nmethod disassembly with annotations for safepoint details.
  • view -XX flags, System properties, VM version of debuggee

    Windows sub-menu options include:

    diff --git a/src/jdk.hotspot.agent/linux/native/libsaproc/LinuxDebuggerLocal.cpp b/src/jdk.hotspot.agent/linux/native/libsaproc/LinuxDebuggerLocal.cpp index bd696fd2a25..4b8c5e55f63 100644 --- a/src/jdk.hotspot.agent/linux/native/libsaproc/LinuxDebuggerLocal.cpp +++ b/src/jdk.hotspot.agent/linux/native/libsaproc/LinuxDebuggerLocal.cpp @@ -40,14 +40,6 @@ #define amd64 1 #endif -#if defined(i386) && !defined(i586) -#define i586 1 -#endif - -#ifdef i586 -#include "sun_jvm_hotspot_debugger_x86_X86ThreadContext.h" -#endif - #ifdef amd64 #include "sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext.h" #endif @@ -411,7 +403,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo return (err == PS_OK)? array : 0; } -#if defined(i586) || defined(amd64) || defined(ppc64) || defined(ppc64le) || defined(aarch64) || defined(riscv64) +#if defined(amd64) || defined(ppc64) || defined(ppc64le) || defined(aarch64) || defined(riscv64) extern "C" JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0 (JNIEnv *env, jobject this_obj, jint lwp_id) { @@ -433,9 +425,6 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo } #undef NPRGREG -#ifdef i586 -#define NPRGREG sun_jvm_hotspot_debugger_x86_X86ThreadContext_NPRGREG -#endif #ifdef amd64 #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG #endif @@ -456,27 +445,6 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo #undef REG_INDEX -#ifdef i586 -#define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg - - regs[REG_INDEX(GS)] = (uintptr_t) gregs.xgs; - regs[REG_INDEX(FS)] = (uintptr_t) gregs.xfs; - regs[REG_INDEX(ES)] = (uintptr_t) gregs.xes; - regs[REG_INDEX(DS)] = (uintptr_t) gregs.xds; - regs[REG_INDEX(EDI)] = (uintptr_t) gregs.edi; - regs[REG_INDEX(ESI)] = (uintptr_t) gregs.esi; - regs[REG_INDEX(FP)] = (uintptr_t) gregs.ebp; - regs[REG_INDEX(SP)] = (uintptr_t) gregs.esp; - regs[REG_INDEX(EBX)] = (uintptr_t) gregs.ebx; - regs[REG_INDEX(EDX)] = (uintptr_t) gregs.edx; - regs[REG_INDEX(ECX)] = (uintptr_t) gregs.ecx; - regs[REG_INDEX(EAX)] = (uintptr_t) gregs.eax; - regs[REG_INDEX(PC)] = (uintptr_t) gregs.eip; - regs[REG_INDEX(CS)] = (uintptr_t) gregs.xcs; - regs[REG_INDEX(SS)] = (uintptr_t) gregs.xss; - -#endif /* i586 */ - #ifdef amd64 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_##reg diff --git a/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c b/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c index 9c4f0b0d357..899d42152d1 100644 --- a/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c +++ b/src/jdk.hotspot.agent/linux/native/libsaproc/ps_core.c @@ -200,18 +200,6 @@ static bool core_handle_prstatus(struct ps_prochandle* ph, const char* buf, size if (is_debug()) { print_debug("integer regset\n"); -#ifdef i386 - // print the regset - print_debug("\teax = 0x%x\n", newthr->regs.eax); - print_debug("\tebx = 0x%x\n", newthr->regs.ebx); - print_debug("\tecx = 0x%x\n", newthr->regs.ecx); - print_debug("\tedx = 0x%x\n", newthr->regs.edx); - print_debug("\tesp = 0x%x\n", newthr->regs.esp); - print_debug("\tebp = 0x%x\n", newthr->regs.ebp); - print_debug("\tesi = 0x%x\n", newthr->regs.esi); - print_debug("\tedi = 0x%x\n", newthr->regs.edi); - print_debug("\teip = 0x%x\n", newthr->regs.eip); -#endif #if defined(amd64) || defined(x86_64) // print the regset diff --git a/src/jdk.hotspot.agent/macosx/native/libsaproc/ps_core.c b/src/jdk.hotspot.agent/macosx/native/libsaproc/ps_core.c index 149997dc4bb..20fe2ffb17e 100644 --- a/src/jdk.hotspot.agent/macosx/native/libsaproc/ps_core.c +++ b/src/jdk.hotspot.agent/macosx/native/libsaproc/ps_core.c @@ -814,18 +814,6 @@ static bool core_handle_prstatus(struct ps_prochandle* ph, const char* buf, size if (is_debug()) { print_debug("integer regset\n"); -#if defined(i586) || defined(i386) - // print the regset - print_debug("\teax = 0x%x\n", newthr->regs.r_eax); - print_debug("\tebx = 0x%x\n", newthr->regs.r_ebx); - print_debug("\tecx = 0x%x\n", newthr->regs.r_ecx); - print_debug("\tedx = 0x%x\n", newthr->regs.r_edx); - print_debug("\tesp = 0x%x\n", newthr->regs.r_esp); - print_debug("\tebp = 0x%x\n", newthr->regs.r_ebp); - print_debug("\tesi = 0x%x\n", newthr->regs.r_esi); - print_debug("\tedi = 0x%x\n", newthr->regs.r_edi); - print_debug("\teip = 0x%x\n", newthr->regs.r_eip); -#endif #if defined(amd64) || defined(x86_64) // print the regset diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java index d8c4d1a781e..897ea5da85f 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java @@ -1007,7 +1007,7 @@ public class HSDB implements ObjectHistogramPanel.Listener, SAListener { curFrame.getFP(), anno)); } else { - // For C2, which has null frame pointers on x86/amd64/aarch64 + // For C2, which has null frame pointers on amd64/aarch64 CodeBlob cb = VM.getVM().getCodeCache().findBlob(curFrame.getPC()); Address sp = curFrame.getSP(); if (Assert.ASSERTS_ENABLED) { diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HotSpotAgent.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HotSpotAgent.java index ff14e99f3b9..4ffd0434e86 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HotSpotAgent.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HotSpotAgent.java @@ -37,7 +37,6 @@ import sun.jvm.hotspot.debugger.MachineDescriptionAMD64; import sun.jvm.hotspot.debugger.MachineDescriptionPPC64; import sun.jvm.hotspot.debugger.MachineDescriptionAArch64; import sun.jvm.hotspot.debugger.MachineDescriptionRISCV64; -import sun.jvm.hotspot.debugger.MachineDescriptionIntelX86; import sun.jvm.hotspot.debugger.NoSuchSymbolException; import sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal; import sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal; @@ -522,14 +521,12 @@ public class HotSpotAgent { private void setupDebuggerWin32() { setupJVMLibNamesWin32(); - if (cpu.equals("x86")) { - machDesc = new MachineDescriptionIntelX86(); - } else if (cpu.equals("amd64")) { + if (cpu.equals("amd64")) { machDesc = new MachineDescriptionAMD64(); } else if (cpu.equals("aarch64")) { machDesc = new MachineDescriptionAArch64(); } else { - throw new DebuggerException("Win32 supported under x86, amd64 and aarch64 only"); + throw new DebuggerException("Win32 supported under amd64 and aarch64 only"); } // Note we do not use a cache for the local debugger in server @@ -554,9 +551,7 @@ public class HotSpotAgent { private void setupDebuggerLinux() { setupJVMLibNamesLinux(); - if (cpu.equals("x86")) { - machDesc = new MachineDescriptionIntelX86(); - } else if (cpu.equals("amd64")) { + if (cpu.equals("amd64")) { machDesc = new MachineDescriptionAMD64(); } else if (cpu.equals("ppc64")) { machDesc = new MachineDescriptionPPC64(); @@ -592,12 +587,10 @@ public class HotSpotAgent { private void setupDebuggerBsd() { setupJVMLibNamesBsd(); - if (cpu.equals("x86")) { - machDesc = new MachineDescriptionIntelX86(); - } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { + if (cpu.equals("amd64") || cpu.equals("x86_64")) { machDesc = new MachineDescriptionAMD64(); } else { - throw new DebuggerException("BSD only supported on x86/x86_64. Current arch: " + cpu); + throw new DebuggerException("BSD only supported on x86_64. Current arch: " + cpu); } BsdDebuggerLocal dbg = new BsdDebuggerLocal(machDesc, !isServer); diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/Debugger.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/Debugger.java index 36b73d66a05..81e620ff1fb 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/Debugger.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/Debugger.java @@ -78,7 +78,7 @@ public interface Debugger extends SymbolLookup, ThreadAccess { /** Support for remote debugging. Get the name of the CPU type on which this debugger is running (to be able to properly configure - the local system). Typical return value is "x86"; see + the local system). Typical return value is "amd64"; see utilities/PlatformInfo.java. */ public String getCPU() throws DebuggerException; diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIntelX86.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIntelX86.java deleted file mode 100644 index c74a37c05be..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionIntelX86.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2000, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger; - -public class MachineDescriptionIntelX86 extends MachineDescriptionTwosComplement implements MachineDescription { - public long getAddressSize() { - return 4; - } - - public boolean isBigEndian() { - return false; - } - - public boolean supports32bitAlignmentOf64bitTypes() { - return true; - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java index d8fb562bfcc..c119e374d66 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdCDebugger.java @@ -29,10 +29,8 @@ import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.cdbg.*; -import sun.jvm.hotspot.debugger.x86.*; import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.aarch64.*; -import sun.jvm.hotspot.debugger.bsd.x86.*; import sun.jvm.hotspot.debugger.bsd.amd64.*; import sun.jvm.hotspot.debugger.bsd.aarch64.*; import sun.jvm.hotspot.utilities.*; @@ -86,14 +84,7 @@ class BsdCDebugger implements CDebugger { public CFrame topFrameForThread(ThreadProxy thread) throws DebuggerException { String cpu = dbg.getCPU(); - if (cpu.equals("x86")) { - X86ThreadContext context = (X86ThreadContext) thread.getContext(); - Address ebp = context.getRegisterAsAddress(X86ThreadContext.EBP); - if (ebp == null) return null; - Address pc = context.getRegisterAsAddress(X86ThreadContext.EIP); - if (pc == null) return null; - return new BsdX86CFrame(dbg, ebp, pc); - } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { + if (cpu.equals("amd64") || cpu.equals("x86_64")) { AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); Address rbp = context.getRegisterAsAddress(AMD64ThreadContext.RBP); if (rbp == null) return null; diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java index 48126ec6695..c4a3a4850ff 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/BsdThreadContextFactory.java @@ -27,14 +27,11 @@ package sun.jvm.hotspot.debugger.bsd; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.bsd.aarch64.*; import sun.jvm.hotspot.debugger.bsd.amd64.*; -import sun.jvm.hotspot.debugger.bsd.x86.*; class BsdThreadContextFactory { static ThreadContext createThreadContext(BsdDebugger dbg) { String cpu = dbg.getCPU(); - if (cpu.equals("x86")) { - return new BsdX86ThreadContext(dbg); - } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { + if (cpu.equals("amd64") || cpu.equals("x86_64")) { return new BsdAMD64ThreadContext(dbg); } else if (cpu.equals("aarch64")) { return new BsdAARCH64ThreadContext(dbg); diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java deleted file mode 100644 index 1e8d83b289f..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.bsd.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.bsd.*; -import sun.jvm.hotspot.debugger.cdbg.*; -import sun.jvm.hotspot.debugger.cdbg.basic.*; -import sun.jvm.hotspot.debugger.x86.*; - -public final class BsdX86CFrame extends BasicCFrame { - // package/class internals only - public BsdX86CFrame(BsdDebugger dbg, Address ebp, Address pc) { - super(dbg.getCDebugger()); - this.ebp = ebp; - this.pc = pc; - this.dbg = dbg; - } - - // override base class impl to avoid ELF parsing - public ClosestSymbol closestSymbolToPC() { - // try native lookup in debugger. - return dbg.lookup(dbg.getAddressValue(pc())); - } - - public Address pc() { - return pc; - } - - public Address localVariableBase() { - return ebp; - } - - public CFrame sender(ThreadProxy thread) { - X86ThreadContext context = (X86ThreadContext) thread.getContext(); - Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); - - if ( (ebp == null) || ebp.lessThan(esp) ) { - return null; - } - - Address nextEBP = ebp.getAddressAt( 0 * ADDRESS_SIZE); - if (nextEBP == null) { - return null; - } - Address nextPC = ebp.getAddressAt( 1 * ADDRESS_SIZE); - if (nextPC == null) { - return null; - } - return new BsdX86CFrame(dbg, nextEBP, nextPC); - } - - private static final int ADDRESS_SIZE = 4; - private Address pc; - private Address ebp; - private BsdDebugger dbg; -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86ThreadContext.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86ThreadContext.java deleted file mode 100644 index 8eaca2b7d79..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86ThreadContext.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.bsd.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.x86.*; -import sun.jvm.hotspot.debugger.bsd.*; - -public class BsdX86ThreadContext extends X86ThreadContext { - private BsdDebugger debugger; - - public BsdX86ThreadContext(BsdDebugger debugger) { - super(); - this.debugger = debugger; - } - - public void setRegisterAsAddress(int index, Address value) { - setRegister(index, debugger.getAddressValue(value)); - } - - public Address getRegisterAsAddress(int index) { - return debugger.newAddress(getRegister(index)); - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java index 13951447903..47f41fe1383 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java @@ -64,7 +64,7 @@ public interface CFrame { /** Gets the base pointer in this frame from which local variable offsets in the debug info are based. Typically this is the - base-of-frame pointer (EBP on x86, FP/I6 on SPARC). */ + base-of-frame pointer (RBP on amd64, FP/I6 on SPARC). */ public Address localVariableBase(); /** Visit all local variables in this frame if debug information is diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java index c100c160947..894e31949b2 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java @@ -30,12 +30,10 @@ import java.util.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.cdbg.*; -import sun.jvm.hotspot.debugger.x86.*; import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.aarch64.*; import sun.jvm.hotspot.debugger.riscv64.*; import sun.jvm.hotspot.debugger.ppc64.*; -import sun.jvm.hotspot.debugger.linux.x86.*; import sun.jvm.hotspot.debugger.linux.amd64.*; import sun.jvm.hotspot.debugger.linux.ppc64.*; import sun.jvm.hotspot.debugger.linux.aarch64.*; @@ -81,14 +79,7 @@ class LinuxCDebugger implements CDebugger { public CFrame topFrameForThread(ThreadProxy thread) throws DebuggerException { String cpu = dbg.getCPU(); - if (cpu.equals("x86")) { - X86ThreadContext context = (X86ThreadContext) thread.getContext(); - Address ebp = context.getRegisterAsAddress(X86ThreadContext.EBP); - if (ebp == null) return null; - Address pc = context.getRegisterAsAddress(X86ThreadContext.EIP); - if (pc == null) return null; - return new LinuxX86CFrame(dbg, ebp, pc); - } else if (cpu.equals("amd64")) { + if (cpu.equals("amd64")) { AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); Address pc = context.getRegisterAsAddress(AMD64ThreadContext.RIP); if (pc == null) return null; diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxThreadContextFactory.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxThreadContextFactory.java index 69a34fe2afa..88863e76285 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxThreadContextFactory.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/LinuxThreadContextFactory.java @@ -27,15 +27,12 @@ package sun.jvm.hotspot.debugger.linux; import java.lang.reflect.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.linux.amd64.*; -import sun.jvm.hotspot.debugger.linux.x86.*; import sun.jvm.hotspot.debugger.linux.ppc64.*; class LinuxThreadContextFactory { static ThreadContext createThreadContext(LinuxDebugger dbg) { String cpu = dbg.getCPU(); - if (cpu.equals("x86")) { - return new LinuxX86ThreadContext(dbg); - } else if (cpu.equals("amd64")) { + if (cpu.equals("amd64")) { return new LinuxAMD64ThreadContext(dbg); } else if (cpu.equals("ppc64")) { return new LinuxPPC64ThreadContext(dbg); diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java deleted file mode 100644 index 3834eb41a36..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.linux.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.linux.*; -import sun.jvm.hotspot.debugger.cdbg.*; -import sun.jvm.hotspot.debugger.cdbg.basic.*; -import sun.jvm.hotspot.debugger.x86.*; - -public final class LinuxX86CFrame extends BasicCFrame { - // package/class internals only - public LinuxX86CFrame(LinuxDebugger dbg, Address ebp, Address pc) { - super(dbg.getCDebugger()); - this.ebp = ebp; - this.pc = pc; - this.dbg = dbg; - } - - // override base class impl to avoid ELF parsing - public ClosestSymbol closestSymbolToPC() { - // try native lookup in debugger. - return dbg.lookup(dbg.getAddressValue(pc())); - } - - public Address pc() { - return pc; - } - - public Address localVariableBase() { - return ebp; - } - - public CFrame sender(ThreadProxy thread) { - X86ThreadContext context = (X86ThreadContext) thread.getContext(); - /* - * Native code fills in the stack pointer register value using index - * X86ThreadContext.SP. - * See file LinuxDebuggerLocal.c macro REG_INDEX(reg). - * - * Be sure to use SP, or UESP which is aliased to SP in Java code, - * for the frame pointer validity check. - */ - Address esp = context.getRegisterAsAddress(X86ThreadContext.SP); - - if ( (ebp == null) || ebp.lessThan(esp) ) { - return null; - } - - // Check alignment of ebp - if ( dbg.getAddressValue(ebp) % ADDRESS_SIZE != 0) { - return null; - } - - Address nextEBP = ebp.getAddressAt( 0 * ADDRESS_SIZE); - if (nextEBP == null || nextEBP.lessThanOrEqual(ebp)) { - return null; - } - Address nextPC = ebp.getAddressAt( 1 * ADDRESS_SIZE); - if (nextPC == null) { - return null; - } - return new LinuxX86CFrame(dbg, nextEBP, nextPC); - } - - private static final int ADDRESS_SIZE = 4; - private Address pc; - private Address ebp; - private LinuxDebugger dbg; -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86ThreadContext.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86ThreadContext.java deleted file mode 100644 index 5ba323356fe..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86ThreadContext.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.linux.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.x86.*; -import sun.jvm.hotspot.debugger.linux.*; - -public class LinuxX86ThreadContext extends X86ThreadContext { - private LinuxDebugger debugger; - - public LinuxX86ThreadContext(LinuxDebugger debugger) { - super(); - this.debugger = debugger; - } - - public void setRegisterAsAddress(int index, Address value) { - setRegister(index, debugger.getAddressValue(value)); - } - - public Address getRegisterAsAddress(int index) { - return debugger.newAddress(getRegister(index)); - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java index d4a7c17dc85..3833680d96c 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java @@ -30,7 +30,6 @@ import java.lang.reflect.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.cdbg.*; -import sun.jvm.hotspot.debugger.remote.x86.*; import sun.jvm.hotspot.debugger.remote.amd64.*; import sun.jvm.hotspot.debugger.remote.ppc64.*; @@ -55,9 +54,7 @@ public class RemoteDebuggerClient extends DebuggerBase implements JVMDebugger { int cachePageSize = 4096; int cacheNumPages = parseCacheNumPagesProperty(cacheSize / cachePageSize); String cpu = remoteDebugger.getCPU(); - if (cpu.equals("x86")) { - threadFactory = new RemoteX86ThreadFactory(this); - } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { + if (cpu.equals("amd64") || cpu.equals("x86_64")) { threadFactory = new RemoteAMD64ThreadFactory(this); } else if (cpu.equals("ppc64")) { threadFactory = new RemotePPC64ThreadFactory(this); diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86Thread.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86Thread.java deleted file mode 100644 index f591900283c..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86Thread.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.remote.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.x86.*; -import sun.jvm.hotspot.debugger.remote.*; -import sun.jvm.hotspot.utilities.*; - -public class RemoteX86Thread extends RemoteThread { - public RemoteX86Thread(RemoteDebuggerClient debugger, Address addr) { - super(debugger, addr); - } - - public RemoteX86Thread(RemoteDebuggerClient debugger, long id) { - super(debugger, id); - } - - public ThreadContext getContext() throws IllegalThreadStateException { - RemoteX86ThreadContext context = new RemoteX86ThreadContext(debugger); - long[] regs = (addr != null)? debugger.getThreadIntegerRegisterSet(addr) : - debugger.getThreadIntegerRegisterSet(id); - if (Assert.ASSERTS_ENABLED) { - Assert.that(regs.length == X86ThreadContext.NPRGREG, "size of register set must match"); - } - for (int i = 0; i < regs.length; i++) { - context.setRegister(i, regs[i]); - } - return context; - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadContext.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadContext.java deleted file mode 100644 index e5bbe9647a9..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadContext.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.remote.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.x86.*; -import sun.jvm.hotspot.debugger.remote.*; - -public class RemoteX86ThreadContext extends X86ThreadContext { - private RemoteDebuggerClient debugger; - - public RemoteX86ThreadContext(RemoteDebuggerClient debugger) { - super(); - this.debugger = debugger; - } - - /** This can't be implemented in this class since we would have to - tie the implementation to, for example, the debugging system */ - public void setRegisterAsAddress(int index, Address value) { - setRegister(index, debugger.getAddressValue(value)); - } - - /** This can't be implemented in this class since we would have to - tie the implementation to, for example, the debugging system */ - public Address getRegisterAsAddress(int index) { - return debugger.newAddress(getRegister(index)); - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadFactory.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadFactory.java deleted file mode 100644 index f8a8f247318..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/remote/x86/RemoteX86ThreadFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.remote.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.remote.*; - -public class RemoteX86ThreadFactory implements RemoteThreadFactory { - private RemoteDebuggerClient debugger; - - public RemoteX86ThreadFactory(RemoteDebuggerClient debugger) { - this.debugger = debugger; - } - - public ThreadProxy createThreadWrapper(Address threadIdentifierAddr) { - return new RemoteX86Thread(debugger, threadIdentifierAddr); - } - - public ThreadProxy createThreadWrapper(long id) { - return new RemoteX86Thread(debugger, id); - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/win32/coff/DebugVC50X86RegisterEnums.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/win32/coff/DebugVC50X86RegisterEnums.java deleted file mode 100644 index 9793f20deb8..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/win32/coff/DebugVC50X86RegisterEnums.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.win32.coff; - -public interface DebugVC50X86RegisterEnums { - /** 8-bit registers */ - public static final int NONE = 0; - public static final int AL = 1; - public static final int CL = 2; - public static final int DL = 3; - public static final int BL = 4; - public static final int AH = 5; - public static final int CH = 6; - public static final int DH = 7; - public static final int BH = 8; - - /** 16-bit registers */ - public static final int AX = 9; - public static final int CX = 10; - public static final int DX = 11; - public static final int BX = 12; - public static final int SP = 13; - public static final int BP = 14; - public static final int SI = 15; - public static final int DI = 16; - - /** 32-bit registers */ - public static final int EAX = 17; - public static final int ECX = 18; - public static final int EDX = 19; - public static final int EBX = 20; - public static final int ESP = 21; - public static final int EBP = 22; - public static final int ESI = 23; - public static final int EDI = 24; - - /** Segment registers */ - public static final int ES = 25; - public static final int CS = 26; - public static final int SS = 27; - public static final int DS = 28; - public static final int FS = 29; - public static final int GS = 30; - - /** Special cases */ - public static final int IP = 31; - public static final int FLAGS = 32; - public static final int EIP = 33; - public static final int EFLAGS = 34; - - /** PCODE Registers */ - public static final int TEMP = 40; - public static final int TEMPH = 41; - public static final int QUOTE = 42; - - /** System Registers */ - public static final int CR0 = 80; - public static final int CR1 = 81; - public static final int CR2 = 82; - public static final int CR3 = 83; - public static final int DR0 = 90; - public static final int DR1 = 91; - public static final int DR2 = 92; - public static final int DR3 = 93; - public static final int DR4 = 94; - public static final int DR5 = 95; - public static final int DR6 = 96; - public static final int DR7 = 97; - - /** Register extensions for 80x87 */ - public static final int ST0 = 128; - public static final int ST1 = 129; - public static final int ST2 = 130; - public static final int ST3 = 131; - public static final int ST4 = 132; - public static final int ST5 = 133; - public static final int ST6 = 134; - public static final int ST7 = 135; - public static final int CONTROL = 136; - public static final int STATUS = 137; - public static final int TAG = 138; - public static final int FPIP = 139; - public static final int FPCS = 140; - public static final int FPDO = 141; - public static final int FPDS = 142; - public static final int ISEM = 143; - public static final int FPEIP = 144; - public static final int FPEDO = 145; -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebugger.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebugger.java index 86ca82ea33f..6fbea538488 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebugger.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebugger.java @@ -49,11 +49,6 @@ public interface WindbgDebugger extends JVMDebugger { public WindbgAddress readCompKlassAddress(long address) throws DebuggerException; public WindbgOopHandle readOopHandle(long address) throws DebuggerException; public WindbgOopHandle readCompOopHandle(long address) throws DebuggerException; - - // The returned array of register contents is guaranteed to be in - // the same order as in the DbxDebugger for Solaris/x86 or amd64; that is, - // the indices match those in debugger/x86/X86ThreadContext.java or - // debugger/amd64/AMD64ThreadContext.java. public long[] getThreadIntegerRegisterSet(long threadId) throws DebuggerException; public long getThreadIdFromSysId(long sysId) throws DebuggerException; diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebuggerLocal.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebuggerLocal.java index 07704671fd4..b45dbd23405 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebuggerLocal.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgDebuggerLocal.java @@ -523,9 +523,7 @@ public class WindbgDebuggerLocal extends DebuggerBase implements WindbgDebugger // Only add the search path for the current CPU architecture: String cpu = PlatformInfo.getCPU(); - if (cpu.equals("x86")) { - searchList.add(DTFWHome + " (x86)"); - } else if (cpu.equals("amd64")) { + if (cpu.equals("amd64")) { searchList.add(DTFWHome + " (x64)"); } // The last place to search is the system directory: diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/x86/X86ThreadContext.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/x86/X86ThreadContext.java deleted file mode 100644 index e37e51cebbe..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/x86/X86ThreadContext.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.debugger.x86; - -import java.lang.annotation.Native; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.cdbg.*; - -/** Specifies the thread context on x86 platforms; only a sub-portion - of the context is guaranteed to be present on all operating - systems. */ - -public abstract class X86ThreadContext implements ThreadContext { - // Taken from /usr/include/ia32/sys/reg.h on Solaris/x86 - - // NOTE: the indices for the various registers must be maintained as - // listed across various operating systems. However, only a small - // subset of the registers' values are guaranteed to be present (and - // must be present for the SA's stack walking to work): EAX, EBX, - // ECX, EDX, ESI, EDI, EBP, ESP, and EIP. - - // One instance of the Native annotation is enough to trigger header generation - // for this file. - @Native - public static final int GS = 0; - public static final int FS = 1; - public static final int ES = 2; - public static final int DS = 3; - public static final int EDI = 4; - public static final int ESI = 5; - public static final int EBP = 6; - public static final int ESP = 7; - public static final int EBX = 8; - public static final int EDX = 9; - public static final int ECX = 10; - public static final int EAX = 11; - public static final int TRAPNO = 12; - public static final int ERR = 13; - public static final int EIP = 14; - public static final int CS = 15; - public static final int EFL = 16; - public static final int UESP = 17; - public static final int SS = 18; - // Additional state (not in reg.h) for debug registers - public static final int DR0 = 19; - public static final int DR1 = 20; - public static final int DR2 = 21; - public static final int DR3 = 22; - public static final int DR6 = 23; - public static final int DR7 = 24; - - - public static final int PC = EIP; - public static final int FP = EBP; - public static final int SP = UESP; - public static final int PS = EFL; - public static final int R0 = EAX; - public static final int R1 = EDX; - - public static final int NPRGREG = 25; - - private static final String[] regNames = { - "GS", "FS", "ES", "DS", - "EDI", "ESI", "EBP", "ESP", - "EBX", "EDX", "ECX", "EAX", - "TRAPNO", "ERR", "EIP", "CS", - "EFLAGS", "UESP", "SS", - "DR0", "DR1", "DR2", "DR3", - "DR6", "DR7" - }; - - // Ought to be int on x86 but we're stuck - private long[] data; - - public X86ThreadContext() { - data = new long[NPRGREG]; - } - - public int getNumRegisters() { - return NPRGREG; - } - - public String getRegisterName(int index) { - return regNames[index]; - } - - public void setRegister(int index, long value) { - data[index] = value; - } - - public long getRegister(int index) { - return data[index]; - } - - public CFrame getTopFrame(Debugger dbg) { - return null; - } - - /** This can't be implemented in this class since we would have to - tie the implementation to, for example, the debugging system */ - public abstract void setRegisterAsAddress(int index, Address value); - - /** This can't be implemented in this class since we would have to - tie the implementation to, for example, the debugging system */ - public abstract Address getRegisterAsAddress(int index); -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/StackValueCollection.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/StackValueCollection.java index 566b527b88a..a2808bfff31 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/StackValueCollection.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/StackValueCollection.java @@ -41,7 +41,7 @@ public class StackValueCollection { public StackValue get(int i) { return list.get(i); } // Get typed locals/expressions - // FIXME: must figure out whether word swapping is necessary on x86 + // FIXME: must figure out whether word swapping is necessary on amd64 public boolean booleanAt(int slot) { return (int)get(slot).getInteger() != 0; } public byte byteAt(int slot) { return (byte) get(slot).getInteger(); } public char charAt(int slot) { return (char) get(slot).getInteger(); } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Threads.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Threads.java index 6acacc28722..04c4c944517 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Threads.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Threads.java @@ -30,12 +30,10 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.runtime.win32_amd64.Win32AMD64JavaThreadPDAccess; import sun.jvm.hotspot.runtime.win32_aarch64.Win32AARCH64JavaThreadPDAccess; -import sun.jvm.hotspot.runtime.linux_x86.LinuxX86JavaThreadPDAccess; import sun.jvm.hotspot.runtime.linux_amd64.LinuxAMD64JavaThreadPDAccess; import sun.jvm.hotspot.runtime.linux_aarch64.LinuxAARCH64JavaThreadPDAccess; import sun.jvm.hotspot.runtime.linux_riscv64.LinuxRISCV64JavaThreadPDAccess; import sun.jvm.hotspot.runtime.linux_ppc64.LinuxPPC64JavaThreadPDAccess; -import sun.jvm.hotspot.runtime.bsd_x86.BsdX86JavaThreadPDAccess; import sun.jvm.hotspot.runtime.bsd_amd64.BsdAMD64JavaThreadPDAccess; import sun.jvm.hotspot.runtime.bsd_aarch64.BsdAARCH64JavaThreadPDAccess; import sun.jvm.hotspot.utilities.*; @@ -101,9 +99,7 @@ public class Threads { access = new Win32AARCH64JavaThreadPDAccess(); } } else if (os.equals("linux")) { - if (cpu.equals("x86")) { - access = new LinuxX86JavaThreadPDAccess(); - } else if (cpu.equals("amd64")) { + if (cpu.equals("amd64")) { access = new LinuxAMD64JavaThreadPDAccess(); } else if (cpu.equals("ppc64")) { access = new LinuxPPC64JavaThreadPDAccess(); @@ -123,9 +119,7 @@ public class Threads { } } } else if (os.equals("bsd")) { - if (cpu.equals("x86")) { - access = new BsdX86JavaThreadPDAccess(); - } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { + if (cpu.equals("amd64") || cpu.equals("x86_64")) { access = new BsdAMD64JavaThreadPDAccess(); } } else if (os.equals("darwin")) { diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java index c558374d23c..dc27a4fc59e 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/VM.java @@ -879,9 +879,7 @@ public class VM { } /** Indicates whether a given program counter is in Java code. This - includes but is not spanned by the interpreter and code cache. - Only used in the debugging system, for implementing - JavaThread.currentFrameGuess() on x86. */ + includes but is not spanned by the interpreter and code cache. */ public boolean isJavaPCDbg(Address addr) { // FIXME: this is not a complete enough set: must include areas // like vtable stubs diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64CurrentFrameGuess.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64CurrentFrameGuess.java index 29df979e13e..e85973773dc 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64CurrentFrameGuess.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64CurrentFrameGuess.java @@ -30,7 +30,7 @@ import sun.jvm.hotspot.code.*; import sun.jvm.hotspot.interpreter.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.runtime.x86.*; +import sun.jvm.hotspot.runtime.amd64.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; @@ -67,7 +67,7 @@ public class AMD64CurrentFrameGuess { private boolean validateInterpreterFrame(Address sp, Address fp, Address pc) { VM vm = VM.getVM(); - X86Frame f = new X86Frame(sp, fp, pc); + AMD64Frame f = new AMD64Frame(sp, fp, pc); // First validate that frame->method is really a Method* Method method = null; @@ -263,7 +263,7 @@ public class AMD64CurrentFrameGuess { offset += vm.getAddressSize()) { try { Address curSP = sp.addOffsetTo(offset); - Frame frame = new X86Frame(curSP, null, pc); + Frame frame = new AMD64Frame(curSP, null, pc); RegisterMap map = thread.newRegisterMap(false); while (frame != null) { if (frame.isEntryFrame() && frame.entryFrameIsFirst()) { diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64Frame.java similarity index 88% rename from src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java rename to src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64Frame.java index 2d972d3df17..360f62a253d 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64Frame.java @@ -22,7 +22,7 @@ * */ -package sun.jvm.hotspot.runtime.x86; +package sun.jvm.hotspot.runtime.amd64; import java.util.*; import sun.jvm.hotspot.code.*; @@ -36,12 +36,12 @@ import sun.jvm.hotspot.utilities.Observable; import sun.jvm.hotspot.utilities.Observer; /** Specialization of and implementation of abstract methods of the - Frame class for the x86 family of CPUs. */ + Frame class for the x86_64 family of CPUs. */ -public class X86Frame extends Frame { +public class AMD64Frame extends Frame { private static final boolean DEBUG; static { - DEBUG = System.getProperty("sun.jvm.hotspot.runtime.x86.X86Frame.DEBUG") != null; + DEBUG = System.getProperty("sun.jvm.hotspot.runtime.amd64.AMD64Frame.DEBUG") != null; } // All frames @@ -99,7 +99,7 @@ public class X86Frame extends Frame { private Address raw_unextendedSP; private Address live_bcp; - private X86Frame() { + private AMD64Frame() { } private void initFrame(Address raw_sp, Address raw_fp, Address pc, Address raw_unextendedSp, Address live_bcp) { @@ -122,44 +122,44 @@ public class X86Frame extends Frame { } - public X86Frame(Address raw_sp, Address raw_fp, Address pc) { + public AMD64Frame(Address raw_sp, Address raw_fp, Address pc) { initFrame(raw_sp, raw_fp, pc, null, null); if (DEBUG) { - System.out.println("X86Frame(sp, fp, pc): " + this); + System.out.println("AMD64Frame(sp, fp, pc): " + this); dumpStack(); } } - public X86Frame(Address raw_sp, Address raw_fp) { + public AMD64Frame(Address raw_sp, Address raw_fp) { initFrame(raw_sp, raw_fp, null, null, null); if (DEBUG) { - System.out.println("X86Frame(sp, fp): " + this); + System.out.println("AMD64Frame(sp, fp): " + this); dumpStack(); } } - public X86Frame(Address raw_sp, Address raw_unextendedSp, Address raw_fp, Address pc) { + public AMD64Frame(Address raw_sp, Address raw_unextendedSp, Address raw_fp, Address pc) { initFrame(raw_sp, raw_fp, pc, raw_unextendedSp, null); if (DEBUG) { - System.out.println("X86Frame(sp, unextendedSP, fp, pc): " + this); + System.out.println("AMD64Frame(sp, unextendedSP, fp, pc): " + this); dumpStack(); } } - public X86Frame(Address raw_sp, Address raw_fp, Address pc, Address raw_unextendedSp, Address live_bcp) { + public AMD64Frame(Address raw_sp, Address raw_fp, Address pc, Address raw_unextendedSp, Address live_bcp) { initFrame(raw_sp, raw_fp, pc, raw_unextendedSp, live_bcp); if (DEBUG) { - System.out.println("X86Frame(sp, fp, pc, unextendedSP, live_bcp): " + this); + System.out.println("AMD64Frame(sp, fp, pc, unextendedSP, live_bcp): " + this); dumpStack(); } } public Object clone() { - X86Frame frame = new X86Frame(); + AMD64Frame frame = new AMD64Frame(); frame.raw_sp = raw_sp; frame.raw_unextendedSP = raw_unextendedSP; frame.raw_fp = raw_fp; @@ -174,11 +174,11 @@ public class X86Frame extends Frame { return false; } - if (!(arg instanceof X86Frame)) { + if (!(arg instanceof AMD64Frame)) { return false; } - X86Frame other = (X86Frame) arg; + AMD64Frame other = (AMD64Frame) arg; return (AddressOps.equal(getSP(), other.getSP()) && AddressOps.equal(getUnextendedSP(), other.getUnextendedSP()) && @@ -206,7 +206,7 @@ public class X86Frame extends Frame { public Address getSP() { return raw_sp; } public Address getID() { return raw_sp; } - // FIXME: not implemented yet (should be done for Solaris/X86) + // FIXME: not implemented yet (should be done for Solaris) public boolean isSignalHandlerFrameDbg() { return false; } public int getSignalNumberDbg() { return 0; } public String getSignalNameDbg() { return null; } @@ -248,7 +248,7 @@ public class X86Frame extends Frame { // void patch_pc(Thread* thread, address pc); public Frame sender(RegisterMap regMap, CodeBlob cb) { - X86RegisterMap map = (X86RegisterMap) regMap; + AMD64RegisterMap map = (AMD64RegisterMap) regMap; if (Assert.ASSERTS_ENABLED) { Assert.that(map != null, "map must be set"); @@ -281,10 +281,10 @@ public class X86Frame extends Frame { // Must be native-compiled frame, i.e. the marshaling code for native // methods that exists in the core system. - return new X86Frame(getSenderSP(), getLink(), getSenderPC()); + return new AMD64Frame(getSenderSP(), getLink(), getSenderPC()); } - private Frame senderForEntryFrame(X86RegisterMap map) { + private Frame senderForEntryFrame(AMD64RegisterMap map) { if (DEBUG) { System.out.println("senderForEntryFrame"); } @@ -293,16 +293,16 @@ public class X86Frame extends Frame { } // Java frame called from C; skip all C frames and return top C // frame of that chunk as the sender - X86JavaCallWrapper jcw = (X86JavaCallWrapper) getEntryFrameCallWrapper(); + AMD64JavaCallWrapper jcw = (AMD64JavaCallWrapper) getEntryFrameCallWrapper(); if (Assert.ASSERTS_ENABLED) { Assert.that(!entryFrameIsFirst(), "next Java fp must be non zero"); Assert.that(jcw.getLastJavaSP().greaterThan(getSP()), "must be above this frame on stack"); } - X86Frame fr; + AMD64Frame fr; if (jcw.getLastJavaPC() != null) { - fr = new X86Frame(jcw.getLastJavaSP(), jcw.getLastJavaFP(), jcw.getLastJavaPC()); + fr = new AMD64Frame(jcw.getLastJavaSP(), jcw.getLastJavaFP(), jcw.getLastJavaPC()); } else { - fr = new X86Frame(jcw.getLastJavaSP(), jcw.getLastJavaFP()); + fr = new AMD64Frame(jcw.getLastJavaSP(), jcw.getLastJavaFP()); } map.clear(); if (Assert.ASSERTS_ENABLED) { @@ -311,7 +311,7 @@ public class X86Frame extends Frame { return fr; } - private Frame senderForUpcallStub(X86RegisterMap map, UpcallStub stub) { + private Frame senderForUpcallStub(AMD64RegisterMap map, UpcallStub stub) { if (DEBUG) { System.out.println("senderForUpcallStub"); } @@ -326,11 +326,11 @@ public class X86Frame extends Frame { if (Assert.ASSERTS_ENABLED) { Assert.that(lastJavaSP.greaterThan(getSP()), "must be above this frame on stack"); } - X86Frame fr; + AMD64Frame fr; if (lastJavaPC != null) { - fr = new X86Frame(lastJavaSP, lastJavaFP, lastJavaPC); + fr = new AMD64Frame(lastJavaSP, lastJavaFP, lastJavaPC); } else { - fr = new X86Frame(lastJavaSP, lastJavaFP); + fr = new AMD64Frame(lastJavaSP, lastJavaFP); } map.clear(); if (Assert.ASSERTS_ENABLED) { @@ -339,7 +339,7 @@ public class X86Frame extends Frame { return fr; } - private Frame senderForInterpreterFrame(X86RegisterMap map) { + private Frame senderForInterpreterFrame(AMD64RegisterMap map) { if (DEBUG) { System.out.println("senderForInterpreterFrame"); } @@ -355,32 +355,28 @@ public class X86Frame extends Frame { if (map.getUpdateMap()) updateMapWithSavedLink(map, addressOfStackSlot(LINK_OFFSET)); - return new X86Frame(sp, unextendedSP, getLink(), getSenderPC()); + return new AMD64Frame(sp, unextendedSP, getLink(), getSenderPC()); } private void updateMapWithSavedLink(RegisterMap map, Address savedFPAddr) { map.setLocation(rbp, savedFPAddr); } - private Frame senderForContinuationStub(X86RegisterMap map, CodeBlob cb) { + private Frame senderForContinuationStub(AMD64RegisterMap map, CodeBlob cb) { var contEntry = map.getThread().getContEntry(); Address senderSP = contEntry.getEntrySP(); Address senderPC = contEntry.getEntryPC(); Address senderFP = contEntry.getEntryFP(); - return new X86Frame(senderSP, senderFP, senderPC); + return new AMD64Frame(senderSP, senderFP, senderPC); } - private Frame senderForCompiledFrame(X86RegisterMap map, CodeBlob cb) { + private Frame senderForCompiledFrame(AMD64RegisterMap map, CodeBlob cb) { if (DEBUG) { System.out.println("senderForCompiledFrame"); } - // - // NOTE: some of this code is (unfortunately) duplicated in X86CurrentFrameGuess - // - if (Assert.ASSERTS_ENABLED) { Assert.that(map != null, "map must be set"); } @@ -414,7 +410,7 @@ public class X86Frame extends Frame { updateMapWithSavedLink(map, savedFPAddr); } - return new X86Frame(senderSP, savedFPAddr.getAddressAt(0), senderPC); + return new AMD64Frame(senderSP, savedFPAddr.getAddressAt(0), senderPC); } protected boolean hasSenderPD() { @@ -545,7 +541,7 @@ public class X86Frame extends Frame { // Entry frames public JavaCallWrapper getEntryFrameCallWrapper() { - return new X86JavaCallWrapper(addressOfStackSlot(ENTRY_FRAME_CALL_WRAPPER_OFFSET).getAddressAt(0)); + return new AMD64JavaCallWrapper(addressOfStackSlot(ENTRY_FRAME_CALL_WRAPPER_OFFSET).getAddressAt(0)); } protected Address addressOfSavedOopResult() { diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86RegisterMap.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64RegisterMap.java similarity index 85% rename from src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86RegisterMap.java rename to src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64RegisterMap.java index 4cde2902043..b1ae1e8a001 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86RegisterMap.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/amd64/AMD64RegisterMap.java @@ -22,24 +22,24 @@ * */ -package sun.jvm.hotspot.runtime.x86; +package sun.jvm.hotspot.runtime.amd64; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.runtime.*; -public class X86RegisterMap extends RegisterMap { +public class AMD64RegisterMap extends RegisterMap { /** This is the only public constructor */ - public X86RegisterMap(JavaThread thread, boolean updateMap) { + public AMD64RegisterMap(JavaThread thread, boolean updateMap) { super(thread, updateMap); } - protected X86RegisterMap(RegisterMap map) { + protected AMD64RegisterMap(RegisterMap map) { super(map); } public Object clone() { - X86RegisterMap retval = new X86RegisterMap(this); + AMD64RegisterMap retval = new AMD64RegisterMap(this); return retval; } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_amd64/BsdAMD64JavaThreadPDAccess.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_amd64/BsdAMD64JavaThreadPDAccess.java index 3f7d923a564..a2cdac72add 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_amd64/BsdAMD64JavaThreadPDAccess.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_amd64/BsdAMD64JavaThreadPDAccess.java @@ -32,7 +32,6 @@ import sun.jvm.hotspot.debugger.bsd.BsdDebugger; import sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.runtime.amd64.*; -import sun.jvm.hotspot.runtime.x86.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; import sun.jvm.hotspot.utilities.Observable; @@ -87,11 +86,11 @@ public class BsdAMD64JavaThreadPDAccess implements JavaThreadPDAccess { if (fp == null) { return null; // no information } - return new X86Frame(thread.getLastJavaSP(), fp); + return new AMD64Frame(thread.getLastJavaSP(), fp); } public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) { - return new X86RegisterMap(thread, updateMap); + return new AMD64RegisterMap(thread, updateMap); } public Frame getCurrentFrameGuess(JavaThread thread, Address addr) { @@ -102,13 +101,13 @@ public class BsdAMD64JavaThreadPDAccess implements JavaThreadPDAccess { return null; } if (guesser.getPC() == null) { - return new X86Frame(guesser.getSP(), guesser.getFP()); + return new AMD64Frame(guesser.getSP(), guesser.getFP()); } else if (VM.getVM().getInterpreter().contains(guesser.getPC())) { // pass the value of R13 which contains the bcp for the top level frame Address bcp = context.getRegisterAsAddress(AMD64ThreadContext.R13); - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC(), null, bcp); + return new AMD64Frame(guesser.getSP(), guesser.getFP(), guesser.getPC(), null, bcp); } else { - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); + return new AMD64Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); } } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdSignals.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdSignals.java deleted file mode 100644 index 703a09747ae..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdSignals.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.runtime.bsd_x86; - -public class BsdSignals { - private static String[] signalNames = { - "", /* No signal 0 */ - "SIGHUP", /* hangup */ - "SIGINT", /* interrupt */ - "SIGQUIT", /* quit */ - "SIGILL", /* illegal instr. (not reset when caught) */ - "SIGTRAP", /* trace trap (not reset when caught) */ - "SIGABRT", /* abort() */ - "SIGEMT", /* EMT instruction */ - "SIGFPE", /* floating point exception */ - "SIGKILL", /* kill (cannot be caught or ignored) */ - "SIGBUS", /* bus error */ - "SIGSEGV", /* segmentation violation */ - "SIGSYS", /* non-existent system call invoked */ - "SIGPIPE", /* write on a pipe with no one to read it */ - "SIGALRM", /* alarm clock */ - "SIGTERM", /* software termination signal from kill */ - "SIGURG", /* urgent condition on IO channel */ - "SIGSTOP", /* sendable stop signal not from tty */ - "SIGTSTP", /* stop signal from tty */ - "SIGCONT", /* continue a stopped process */ - "SIGCHLD", /* to parent on child stop or exit */ - "SIGTTIN", /* to readers pgrp upon background tty read */ - "SIGTTOU", /* like TTIN if (tp->t_local<OSTOP) */ - "SIGIO", /* input/output possible signal */ - "SIGXCPU", /* exceeded CPU time limit */ - "SIGXFSZ", /* exceeded file size limit */ - "SIGVTALRM", /* virtual time alarm */ - "SIGPROF", /* profiling time alarm */ - "SIGWINCH", /* window size changes */ - "SIGINFO", /* information request */ - "SIGUSR1", /* user defined signal 1 */ - "SIGUSR2" /* user defined signal 2 */ - }; - - public static String getSignalName(int sigNum) { - if ((sigNum <= 0) || (sigNum >= signalNames.length)) { - // Probably best to fail in a non-destructive way - return ""; - } - return signalNames[sigNum]; - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdX86JavaThreadPDAccess.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdX86JavaThreadPDAccess.java deleted file mode 100644 index f4e2ab49f7e..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/bsd_x86/BsdX86JavaThreadPDAccess.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2002, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.runtime.bsd_x86; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.x86.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.runtime.x86.*; -import sun.jvm.hotspot.types.*; -import sun.jvm.hotspot.utilities.*; -import sun.jvm.hotspot.utilities.Observable; -import sun.jvm.hotspot.utilities.Observer; - -public class BsdX86JavaThreadPDAccess implements JavaThreadPDAccess { - private static AddressField lastJavaFPField; - private static AddressField osThreadField; - - // Field from OSThread - private static CIntegerField osThreadThreadIDField; - - // This is currently unneeded but is being kept in case we change - // the currentFrameGuess algorithm - private static final long GUESS_SCAN_RANGE = 128 * 1024; - - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("JavaThread"); - osThreadField = type.getAddressField("_osthread"); - - Type anchorType = db.lookupType("JavaFrameAnchor"); - lastJavaFPField = anchorType.getAddressField("_last_Java_fp"); - - Type osThreadType = db.lookupType("OSThread"); - osThreadThreadIDField = osThreadType.getCIntegerField("_thread_id"); - } - - public Address getLastJavaFP(Address addr) { - return lastJavaFPField.getValue(addr.addOffsetTo(sun.jvm.hotspot.runtime.JavaThread.getAnchorField().getOffset())); - } - - public Address getLastJavaPC(Address addr) { - return null; - } - - public Address getBaseOfStackPointer(Address addr) { - return null; - } - - public Frame getLastFramePD(JavaThread thread, Address addr) { - Address fp = thread.getLastJavaFP(); - if (fp == null) { - return null; // no information - } - return new X86Frame(thread.getLastJavaSP(), fp); - } - - public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) { - return new X86RegisterMap(thread, updateMap); - } - - public Frame getCurrentFrameGuess(JavaThread thread, Address addr) { - ThreadProxy t = getThreadProxy(addr); - X86ThreadContext context = (X86ThreadContext) t.getContext(); - X86CurrentFrameGuess guesser = new X86CurrentFrameGuess(context, thread); - if (!guesser.run(GUESS_SCAN_RANGE)) { - return null; - } - if (guesser.getPC() == null) { - return new X86Frame(guesser.getSP(), guesser.getFP()); - } else { - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); - } - } - - public void printThreadIDOn(Address addr, PrintStream tty) { - tty.print(getThreadProxy(addr)); - } - - public void printInfoOn(Address threadAddr, PrintStream tty) { - tty.print("Thread id: "); - printThreadIDOn(threadAddr, tty); -// tty.println("\nPostJavaState: " + getPostJavaState(threadAddr)); - } - - public Address getLastSP(Address addr) { - ThreadProxy t = getThreadProxy(addr); - X86ThreadContext context = (X86ThreadContext) t.getContext(); - return context.getRegisterAsAddress(X86ThreadContext.ESP); - } - - public ThreadProxy getThreadProxy(Address addr) { - // Addr is the address of the JavaThread. - // Fetch the OSThread (for now and for simplicity, not making a - // separate "OSThread" class in this package) - Address osThreadAddr = osThreadField.getValue(addr); - // Get the address of the _thread_id from the OSThread - Address threadIdAddr = osThreadAddr.addOffsetTo(osThreadThreadIDField.getOffset()); - - JVMDebugger debugger = VM.getVM().getDebugger(); - return debugger.getThreadForIdentifierAddress(threadIdAddr); - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_amd64/LinuxAMD64JavaThreadPDAccess.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_amd64/LinuxAMD64JavaThreadPDAccess.java index 2737cc84fe4..f8672066189 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_amd64/LinuxAMD64JavaThreadPDAccess.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_amd64/LinuxAMD64JavaThreadPDAccess.java @@ -30,7 +30,6 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.runtime.amd64.*; -import sun.jvm.hotspot.runtime.x86.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; import sun.jvm.hotspot.utilities.Observable; @@ -83,11 +82,11 @@ public class LinuxAMD64JavaThreadPDAccess implements JavaThreadPDAccess { if (fp == null) { return null; // no information } - return new X86Frame(thread.getLastJavaSP(), fp); + return new AMD64Frame(thread.getLastJavaSP(), fp); } public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) { - return new X86RegisterMap(thread, updateMap); + return new AMD64RegisterMap(thread, updateMap); } public Frame getCurrentFrameGuess(JavaThread thread, Address addr) { @@ -98,13 +97,13 @@ public class LinuxAMD64JavaThreadPDAccess implements JavaThreadPDAccess { return null; } if (guesser.getPC() == null) { - return new X86Frame(guesser.getSP(), guesser.getFP()); + return new AMD64Frame(guesser.getSP(), guesser.getFP()); } else if (VM.getVM().getInterpreter().contains(guesser.getPC())) { // pass the value of R13 which contains the bcp for the top level frame Address bcp = context.getRegisterAsAddress(AMD64ThreadContext.R13); - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC(), null, bcp); + return new AMD64Frame(guesser.getSP(), guesser.getFP(), guesser.getPC(), null, bcp); } else { - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); + return new AMD64Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); } } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxSignals.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxSignals.java deleted file mode 100644 index 71854d58027..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxSignals.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.runtime.linux_x86; - -public class LinuxSignals { - private static String[] signalNames = { - "", /* No signal 0 */ - "SIGHUP", /* hangup */ - "SIGINT", /* interrupt (rubout) */ - "SIGQUIT", /* quit (ASCII FS) */ - "SIGILL", /* illegal instruction (not reset when caught) */ - "SIGTRAP", /* trace trap (not reset when caught) */ - "SIGABRT", /* used by abort, replace SIGIOT in the future */ - "SIGIOT", - "SIGBUS", - "SIGFPE", /* floating point exception */ - "SIGKILL", /* kill (cannot be caught or ignored) */ - "SIGUSR1", /* user defined signal 1 */ - "SIGSEGV", /* segmentation violation */ - "SIGUSR2", /* user defined signal 2 */ - "SIGPIPE", /* write on a pipe with no one to read it */ - "SIGALRM", /* alarm clock */ - "SIGTERM", /* software termination signal from kill */ - "SIGSTKFLT", - "SIGCHLD", /* child status change alias */ - "SIGCONT", /* stopped process has been continued */ - "SIGSTOP", /* stop (cannot be caught or ignored) */ - "SIGTSTP", /* user stop requested from tty */ - "SIGTTIN", /* background tty read attempted */ - "SIGTTOU", /* background tty write attempted */ - "SIGURG", /* urgent socket condition */ - "SIGXCPU", /* exceeded cpu limit */ - "SIGXFSZ", /* exceeded file size limit */ - "SIGVTALRM", /* virtual timer expired */ - "SIGPROF", /* profiling timer expired */ - "SIGWINCH", /* window size change */ - "SIGPOLL", /* pollable event occurred */ - "SIGPWR", /* power-fail restart */ - "SIGSYS" - }; - - public static String getSignalName(int sigNum) { - if ((sigNum <= 0) || (sigNum >= signalNames.length)) { - // Probably best to fail in a non-destructive way - return ""; - } - return signalNames[sigNum]; - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxX86JavaThreadPDAccess.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxX86JavaThreadPDAccess.java deleted file mode 100644 index 6224de03141..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/linux_x86/LinuxX86JavaThreadPDAccess.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.runtime.linux_x86; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.x86.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.runtime.x86.*; -import sun.jvm.hotspot.types.*; -import sun.jvm.hotspot.utilities.*; -import sun.jvm.hotspot.utilities.Observable; -import sun.jvm.hotspot.utilities.Observer; - -public class LinuxX86JavaThreadPDAccess implements JavaThreadPDAccess { - private static AddressField lastJavaFPField; - private static AddressField osThreadField; - - // Field from OSThread - private static CIntegerField osThreadThreadIDField; - - // This is currently unneeded but is being kept in case we change - // the currentFrameGuess algorithm - private static final long GUESS_SCAN_RANGE = 128 * 1024; - - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("JavaThread"); - osThreadField = type.getAddressField("_osthread"); - - Type anchorType = db.lookupType("JavaFrameAnchor"); - lastJavaFPField = anchorType.getAddressField("_last_Java_fp"); - - Type osThreadType = db.lookupType("OSThread"); - osThreadThreadIDField = osThreadType.getCIntegerField("_thread_id"); - } - - public Address getLastJavaFP(Address addr) { - return lastJavaFPField.getValue(addr.addOffsetTo(sun.jvm.hotspot.runtime.JavaThread.getAnchorField().getOffset())); - } - - public Address getLastJavaPC(Address addr) { - return null; - } - - public Address getBaseOfStackPointer(Address addr) { - return null; - } - - public Frame getLastFramePD(JavaThread thread, Address addr) { - Address fp = thread.getLastJavaFP(); - if (fp == null) { - return null; // no information - } - return new X86Frame(thread.getLastJavaSP(), fp); - } - - public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) { - return new X86RegisterMap(thread, updateMap); - } - - public Frame getCurrentFrameGuess(JavaThread thread, Address addr) { - ThreadProxy t = getThreadProxy(addr); - X86ThreadContext context = (X86ThreadContext) t.getContext(); - X86CurrentFrameGuess guesser = new X86CurrentFrameGuess(context, thread); - if (!guesser.run(GUESS_SCAN_RANGE)) { - return null; - } - if (guesser.getPC() == null) { - return new X86Frame(guesser.getSP(), guesser.getFP()); - } else { - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); - } - } - - public void printThreadIDOn(Address addr, PrintStream tty) { - tty.print(getThreadProxy(addr)); - } - - public void printInfoOn(Address threadAddr, PrintStream tty) { - tty.print("Thread id: "); - printThreadIDOn(threadAddr, tty); -// tty.println("\nPostJavaState: " + getPostJavaState(threadAddr)); - } - - public Address getLastSP(Address addr) { - ThreadProxy t = getThreadProxy(addr); - X86ThreadContext context = (X86ThreadContext) t.getContext(); - return context.getRegisterAsAddress(X86ThreadContext.SP); - } - - public ThreadProxy getThreadProxy(Address addr) { - // Addr is the address of the JavaThread. - // Fetch the OSThread (for now and for simplicity, not making a - // separate "OSThread" class in this package) - Address osThreadAddr = osThreadField.getValue(addr); - // Get the address of the _thread_id from the OSThread - Address threadIdAddr = osThreadAddr.addOffsetTo(osThreadThreadIDField.getOffset()); - - JVMDebugger debugger = VM.getVM().getDebugger(); - return debugger.getThreadForIdentifierAddress(threadIdAddr); - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/win32_amd64/Win32AMD64JavaThreadPDAccess.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/win32_amd64/Win32AMD64JavaThreadPDAccess.java index f6975d836c1..a573b9a383a 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/win32_amd64/Win32AMD64JavaThreadPDAccess.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/win32_amd64/Win32AMD64JavaThreadPDAccess.java @@ -30,7 +30,6 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.runtime.amd64.*; -import sun.jvm.hotspot.runtime.x86.*; import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; import sun.jvm.hotspot.utilities.Observable; @@ -88,14 +87,14 @@ public class Win32AMD64JavaThreadPDAccess implements JavaThreadPDAccess { } Address pc = thread.getLastJavaPC(); if ( pc != null ) { - return new X86Frame(thread.getLastJavaSP(), fp, pc); + return new AMD64Frame(thread.getLastJavaSP(), fp, pc); } else { - return new X86Frame(thread.getLastJavaSP(), fp); + return new AMD64Frame(thread.getLastJavaSP(), fp); } } public RegisterMap newRegisterMap(JavaThread thread, boolean updateMap) { - return new X86RegisterMap(thread, updateMap); + return new AMD64RegisterMap(thread, updateMap); } public Frame getCurrentFrameGuess(JavaThread thread, Address addr) { @@ -106,13 +105,13 @@ public class Win32AMD64JavaThreadPDAccess implements JavaThreadPDAccess { return null; } if (guesser.getPC() == null) { - return new X86Frame(guesser.getSP(), guesser.getFP()); + return new AMD64Frame(guesser.getSP(), guesser.getFP()); } else if (VM.getVM().getInterpreter().contains(guesser.getPC())) { // pass the value of R13 which contains the bcp for the top level frame Address bcp = context.getRegisterAsAddress(AMD64ThreadContext.R13); - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC(), null, bcp); + return new AMD64Frame(guesser.getSP(), guesser.getFP(), guesser.getPC(), null, bcp); } else { - return new X86Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); + return new AMD64Frame(guesser.getSP(), guesser.getFP(), guesser.getPC()); } } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86CurrentFrameGuess.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86CurrentFrameGuess.java deleted file mode 100644 index 80d31c823cd..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86CurrentFrameGuess.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.runtime.x86; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.debugger.x86.*; -import sun.jvm.hotspot.code.*; -import sun.jvm.hotspot.interpreter.*; -import sun.jvm.hotspot.runtime.*; - -/**

    Should be able to be used on all x86 platforms we support - (Win32, Solaris/x86, and soon Linux) to implement JavaThread's - "currentFrameGuess()" functionality. Input is an X86ThreadContext; - output is SP, FP, and PC for an X86Frame. Instantiation of the - X86Frame is left to the caller, since we may need to subclass - X86Frame to support signal handler frames on Unix platforms.

    - -

    Algorithm is to walk up the stack within a given range (say, - 512K at most) looking for a plausible PC and SP for a Java frame, - also considering those coming in from the context. If we find a PC - that belongs to the VM (i.e., in generated code like the - interpreter or CodeCache) then we try to find an associated EBP. - We repeat this until we either find a complete frame or run out of - stack to look at.

    */ - -public class X86CurrentFrameGuess { - private X86ThreadContext context; - private JavaThread thread; - private Address spFound; - private Address fpFound; - private Address pcFound; - - private static final boolean DEBUG = System.getProperty("sun.jvm.hotspot.runtime.x86.X86Frame.DEBUG") - != null; - - public X86CurrentFrameGuess(X86ThreadContext context, - JavaThread thread) { - this.context = context; - this.thread = thread; - } - - /** Returns false if not able to find a frame within a reasonable range. */ - public boolean run(long regionInBytesToSearch) { - Address sp = context.getRegisterAsAddress(X86ThreadContext.SP); - Address pc = context.getRegisterAsAddress(X86ThreadContext.PC); - Address fp = context.getRegisterAsAddress(X86ThreadContext.FP); - if (sp == null) { - // Bail out if no last java frame eithe - if (thread.getLastJavaSP() != null) { - setValues(thread.getLastJavaSP(), thread.getLastJavaFP(), null); - return true; - } - // Bail out - return false; - } - Address end = sp.addOffsetTo(regionInBytesToSearch); - VM vm = VM.getVM(); - - setValues(null, null, null); // Assume we're not going to find anything - - if (vm.isJavaPCDbg(pc)) { - if (vm.isClientCompiler()) { - // If the topmost frame is a Java frame, we are (pretty much) - // guaranteed to have a viable EBP. We should be more robust - // than this (we have the potential for losing entire threads' - // stack traces) but need to see how much work we really have - // to do here. Searching the stack for an (SP, FP) pair is - // hard since it's easy to misinterpret inter-frame stack - // pointers as base-of-frame pointers; we also don't know the - // sizes of C1 frames (not registered in the nmethod) so can't - // derive them from ESP. - - setValues(sp, fp, pc); - return true; - } else { - if (vm.getInterpreter().contains(pc)) { - if (DEBUG) { - System.out.println("CurrentFrameGuess: choosing interpreter frame: sp = " + - sp + ", fp = " + fp + ", pc = " + pc); - } - setValues(sp, fp, pc); - return true; - } - - // For the server compiler, EBP is not guaranteed to be valid - // for compiled code. In addition, an earlier attempt at a - // non-searching algorithm (see below) failed because the - // stack pointer from the thread context was pointing - // (considerably) beyond the ostensible end of the stack, into - // garbage; walking from the topmost frame back caused a crash. - // - // This algorithm takes the current PC as a given and tries to - // find the correct corresponding SP by walking up the stack - // and repeatedly performing stackwalks (very inefficient). - // - // FIXME: there is something wrong with stackwalking across - // adapter frames...this is likely to be the root cause of the - // failure with the simpler algorithm below. - - for (long offset = 0; - offset < regionInBytesToSearch; - offset += vm.getAddressSize()) { - try { - Address curSP = sp.addOffsetTo(offset); - Frame frame = new X86Frame(curSP, null, pc); - RegisterMap map = thread.newRegisterMap(false); - while (frame != null) { - if (frame.isEntryFrame() && frame.entryFrameIsFirst()) { - // We were able to traverse all the way to the - // bottommost Java frame. - // This sp looks good. Keep it. - if (DEBUG) { - System.out.println("CurrentFrameGuess: Choosing sp = " + curSP + ", pc = " + pc); - } - setValues(curSP, null, pc); - return true; - } - Frame oldFrame = frame; - frame = frame.sender(map); - if (frame.getSP().lessThanOrEqual(oldFrame.getSP())) { - // Frame points to itself or to a location in the wrong direction. - // Break the loop and move on to next offset. - if (DEBUG) { - System.out.println("X86CurrentFrameGuess.run: frame <= oldFrame: " + frame); - } - break; - } - } - } catch (Exception e) { - if (DEBUG) { - System.out.println("CurrentFrameGuess: Exception " + e + " at offset " + offset); - } - // Bad SP. Try another. - } - } - - // Were not able to find a plausible SP to go with this PC. - // Bail out. - return false; - - /* - // Original algorithm which does not work because SP was - // pointing beyond where it should have: - - // For the server compiler, EBP is not guaranteed to be valid - // for compiled code. We see whether the PC is in the - // interpreter and take care of that, otherwise we run code - // (unfortunately) duplicated from X86Frame.senderForCompiledFrame. - - CodeCache cc = vm.getCodeCache(); - if (cc.contains(pc)) { - CodeBlob cb = cc.findBlob(pc); - - // See if we can derive a frame pointer from SP and PC - // NOTE: This is the code duplicated from X86Frame - Address saved_fp = null; - int llink_offset = cb.getLinkOffset(); - if (llink_offset >= 0) { - // Restore base-pointer, since next frame might be an interpreter frame. - Address fp_addr = sp.addOffsetTo(VM.getVM().getAddressSize() * llink_offset); - saved_fp = fp_addr.getAddressAt(0); - } - - setValues(sp, saved_fp, pc); - return true; - } - */ - } - } else { - // If the current program counter was not known to us as a Java - // PC, we currently assume that we are in the run-time system - // and attempt to look to thread-local storage for saved ESP and - // EBP. Note that if these are null (because we were, in fact, - // in Java code, i.e., vtable stubs or similar, and the SA - // didn't have enough insight into the target VM to understand - // that) then we are going to lose the entire stack trace for - // the thread, which is sub-optimal. FIXME. - - if (DEBUG) { - System.out.println("CurrentFrameGuess: choosing last Java frame: sp = " + - thread.getLastJavaSP() + ", fp = " + thread.getLastJavaFP()); - } - if (thread.getLastJavaSP() == null) { - return false; // No known Java frames on stack - } - setValues(thread.getLastJavaSP(), thread.getLastJavaFP(), null); - return true; - } - } - - public Address getSP() { return spFound; } - public Address getFP() { return fpFound; } - /** May be null if getting values from thread-local storage; take - care to call the correct X86Frame constructor to recover this if - necessary */ - public Address getPC() { return pcFound; } - - private void setValues(Address sp, Address fp, Address pc) { - spFound = sp; - fpFound = fp; - pcFound = pc; - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86JavaCallWrapper.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86JavaCallWrapper.java deleted file mode 100644 index 61a5a8415a7..00000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86JavaCallWrapper.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.runtime.x86; - -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.types.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.utilities.Observable; -import sun.jvm.hotspot.utilities.Observer; - -public class X86JavaCallWrapper extends JavaCallWrapper { - private static AddressField lastJavaFPField; - - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("JavaFrameAnchor"); - - lastJavaFPField = type.getAddressField("_last_Java_fp"); - } - - public X86JavaCallWrapper(Address addr) { - super(addr); - } - - public Address getLastJavaFP() { - return lastJavaFPField.getValue(addr.addOffsetTo(anchorField.getOffset())); - } -} diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/ui/AnnotatedMemoryPanel.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/ui/AnnotatedMemoryPanel.java index dfe18d7b161..76b8595e3b2 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/ui/AnnotatedMemoryPanel.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/ui/AnnotatedMemoryPanel.java @@ -626,7 +626,7 @@ public class AnnotatedMemoryPanel extends JPanel { public static void main(String[] args) { JFrame frame = new JFrame(); - DummyDebugger debugger = new DummyDebugger(new MachineDescriptionIntelX86()); + DummyDebugger debugger = new DummyDebugger(new MachineDescriptionAMD64()); AnnotatedMemoryPanel anno = new AnnotatedMemoryPanel(debugger); frame.getContentPane().add(anno); anno.addAnnotation(new Annotation(debugger.parseAddress("0x80000000"), diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java index f4cd4873207..53fa5204349 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java @@ -50,7 +50,7 @@ public class PlatformInfo { public static boolean knownCPU(String cpu) { final String[] KNOWN = - new String[] {"i386", "x86", "x86_64", "amd64", "ppc64", "ppc64le", "aarch64", "riscv64"}; + new String[] {"x86_64", "amd64", "ppc64", "ppc64le", "aarch64", "riscv64"}; for(String s : KNOWN) { if(s.equals(cpu)) @@ -60,8 +60,8 @@ public class PlatformInfo { return false; } - /* Returns "x86" for x86 based platforms and x86_64 for 64bit x86 - based platform. Otherwise returns the value of os.arch. If the + /* Returns "amd64" for x86_64 based platforms. + Otherwise returns the value of os.arch. If the value is not recognized as supported, an exception is thrown instead. */ @@ -74,9 +74,6 @@ public class PlatformInfo { } // Tweeks - if (cpu.equals("i386")) - return "x86"; - if (cpu.equals("x86_64")) return "amd64"; From a5864582da7e19b941bf55c294a414bc1a0c7a84 Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Thu, 6 Nov 2025 15:28:01 +0000 Subject: [PATCH 063/512] 8155591: Misleading warning when not overriding close method in interface extending AutoCloseable Reviewed-by: jlahoda --- .../com/sun/tools/javac/comp/Attr.java | 18 +- .../tools/javac/resources/compiler.properties | 5 + .../InterruptedExceptionTest.java | 3 +- .../InterruptedExceptionTest2.java | 256 ++++++++++++++++++ .../InterruptedExceptionTest2.out | 23 ++ .../TryResourceThrowsInterruptedExc.java | 7 + 6 files changed, 306 insertions(+), 6 deletions(-) create mode 100644 test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.java create mode 100644 test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.out diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 617d8ca7077..1465ea652b1 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -1982,7 +1982,7 @@ public class Attr extends JCTree.Visitor { twrResult.check(resource, resource.type); //check that resource type cannot throw InterruptedException - checkAutoCloseable(resource.pos(), localEnv, resource.type); + checkAutoCloseable(localEnv, resource, true); VarSymbol var = ((JCVariableDecl) resource).sym; @@ -2031,7 +2031,9 @@ public class Attr extends JCTree.Visitor { } } - void checkAutoCloseable(DiagnosticPosition pos, Env env, Type resource) { + void checkAutoCloseable(Env env, JCTree tree, boolean useSite) { + DiagnosticPosition pos = tree.pos(); + Type resource = tree.type; if (!resource.isErroneous() && types.asSuper(resource, syms.autoCloseableType.tsym) != null && !types.isSameType(resource, syms.autoCloseableType)) { // Don't emit warning for AutoCloseable itself @@ -2049,9 +2051,15 @@ public class Attr extends JCTree.Visitor { log.popDiagnosticHandler(discardHandler); } if (close.kind == MTH && - close.overrides(syms.autoCloseableClose, resource.tsym, types, true) && + (useSite || close.owner != syms.autoCloseableType.tsym) && + ((MethodSymbol)close).binaryOverrides(syms.autoCloseableClose, resource.tsym, types) && chk.isHandled(syms.interruptedExceptionType, types.memberType(resource, close).getThrownTypes())) { - log.warning(pos, LintWarnings.TryResourceThrowsInterruptedExc(resource)); + if (!useSite && close.owner == resource.tsym) { + log.warning(TreeInfo.diagnosticPositionFor(close, tree), + LintWarnings.TryResourceCanThrowInterruptedExc(resource)); + } else { + log.warning(pos, LintWarnings.TryResourceThrowsInterruptedExc(resource)); + } } } } @@ -5649,7 +5657,7 @@ public class Attr extends JCTree.Visitor { chk.checkImplementations(tree); //check that a resource implementing AutoCloseable cannot throw InterruptedException - checkAutoCloseable(tree.pos(), env, c.type); + checkAutoCloseable(env, tree, false); for (List l = tree.defs; l.nonEmpty(); l = l.tail) { // Attribute declaration diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index d6358f6075d..4e034ff1bc8 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -2368,6 +2368,11 @@ compiler.warn.try.resource.not.referenced=\ compiler.warn.try.resource.throws.interrupted.exc=\ auto-closeable resource {0} has a member method close() that could throw InterruptedException +# 0: type +# lint: try +compiler.warn.try.resource.can.throw.interrupted.exc=\ + close() method can throw InterruptedException in auto-closeable class {0} + # lint: unchecked compiler.warn.unchecked.assign=\ unchecked assignment: {0} to {1} diff --git a/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest.java b/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest.java index 25dae2cc668..05317b00492 100644 --- a/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest.java +++ b/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest.java @@ -228,7 +228,8 @@ public class InterruptedExceptionTest { public void report(Diagnostic diagnostic) { if (diagnostic.getKind() == Diagnostic.Kind.WARNING && - diagnostic.getCode().contains("try.resource.throws.interrupted.exc")) { + (diagnostic.getCode().contains("try.resource.throws.interrupted.exc") || + diagnostic.getCode().contains("try.resource.can.throw.interrupted.exc"))) { tryWarnFound++; } } diff --git a/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.java b/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.java new file mode 100644 index 00000000000..396823789fd --- /dev/null +++ b/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.java @@ -0,0 +1,256 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8155591 + * @summary Verify cases where no AutoCloseable InterruptedException warning should be generated + * @compile/ref=InterruptedExceptionTest2.out -XDrawDiagnostics -Xlint:try InterruptedExceptionTest2.java + */ + +import java.util.function.Supplier; + +// Here's an interface and a class that we can inherit declaring offending close() methods + +interface HasClose { + void close() throws Exception; +} + +class WithConcreteClose { + public void close() throws Exception { } +} + +abstract class WithAbstractClose { + public abstract void close() throws Exception; +} + +// Interface declaration tests + +interface InterruptedExceptionTest_I1 extends AutoCloseable { +} + +interface InterruptedExceptionTest_I2 extends AutoCloseable { + @Override void close(); +} + +interface InterruptedExceptionTest_I3 extends AutoCloseable { + @Override void close() throws InterruptedException; // warning here +} + +interface InterruptedExceptionTest_I4 extends AutoCloseable { + @Override void close() throws Exception; // warning here +} + +interface InterruptedExceptionTest_I5 extends AutoCloseable { + @Override default void close() { } +} + +interface InterruptedExceptionTest_I6 extends AutoCloseable { + @Override default void close() throws InterruptedException { } // warning here +} + +interface InterruptedExceptionTest_I7 extends AutoCloseable { + @Override default void close() throws Exception { } // warning here +} + +interface InterruptedExceptionTest_I8 extends HasClose, AutoCloseable { +} + +interface InterruptedExceptionTest_I9 extends HasClose, AutoCloseable { + @Override void close(); +} + +// Abstract class declaration tests + +abstract class InterruptedExceptionTest_C1 implements AutoCloseable { +} + +abstract class InterruptedExceptionTest_C2 implements AutoCloseable { + @Override public abstract void close(); +} + +abstract class InterruptedExceptionTest_C3 implements AutoCloseable { + @Override public abstract void close() throws InterruptedException; // warning here +} + +abstract class InterruptedExceptionTest_C4 implements AutoCloseable { + @Override public abstract void close() throws Exception; // warning here +} + +abstract class InterruptedExceptionTest_C5 implements AutoCloseable { + @Override public void close() { } +} + +abstract class InterruptedExceptionTest_C6 implements AutoCloseable { + @Override public void close() throws InterruptedException { } // warning here +} + +abstract class InterruptedExceptionTest_C7 implements AutoCloseable { + @Override public void close() throws Exception { } // warning here +} + +abstract class InterruptedExceptionTest_C8 implements HasClose, AutoCloseable { +} + +abstract class InterruptedExceptionTest_C9 implements HasClose, AutoCloseable { + @Override public void close() { } +} + +abstract class InterruptedExceptionTest_C10 extends WithConcreteClose implements AutoCloseable { // warning here +} + +abstract class InterruptedExceptionTest_C11 extends WithAbstractClose implements AutoCloseable { +} + +// Interface use site tests + +class UseSite_I1 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I1 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_I2 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I2 t = s.get()) { + t.hashCode(); + } + } +} + +class UseSite_I3 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I3 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_I4 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I4 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_I5 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I5 t = s.get()) { + t.hashCode(); + } + } +} + +class UseSite_I6 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I6 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_I7 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I7 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_I8 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I8 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_I9 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_I9 t = s.get()) { + t.hashCode(); + } + } +} + +// Abstract class use site tests + +class UseSite_C1 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C1 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_C2 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C2 t = s.get()) { + t.hashCode(); + } + } +} + +class UseSite_C3 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C3 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_C4 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C4 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_C5 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C5 t = s.get()) { + t.hashCode(); + } + } +} + +class UseSite_C6 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C6 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_C7 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C7 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_C8 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C8 t = s.get()) { // warning here + t.hashCode(); + } + } +} + +class UseSite_C9 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C9 t = s.get()) { + t.hashCode(); + } + } +} + +class UseSite_C10 { + void m(Supplier s) throws Exception { + try (InterruptedExceptionTest_C10 t = s.get()) { // warning here + t.hashCode(); + } + } +} diff --git a/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.out b/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.out new file mode 100644 index 00000000000..9aae66cea5e --- /dev/null +++ b/test/langtools/tools/javac/TryWithResources/InterruptedExceptionTest2.out @@ -0,0 +1,23 @@ +InterruptedExceptionTest2.java:34:20: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_I3 +InterruptedExceptionTest2.java:38:20: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_I4 +InterruptedExceptionTest2.java:46:28: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_I6 +InterruptedExceptionTest2.java:50:28: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_I7 +InterruptedExceptionTest2.java:70:36: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_C3 +InterruptedExceptionTest2.java:74:36: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_C4 +InterruptedExceptionTest2.java:82:27: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_C6 +InterruptedExceptionTest2.java:86:27: compiler.warn.try.resource.can.throw.interrupted.exc: InterruptedExceptionTest_C7 +InterruptedExceptionTest2.java:96:10: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C10 +InterruptedExceptionTest2.java:106:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_I1 +InterruptedExceptionTest2.java:122:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_I3 +InterruptedExceptionTest2.java:130:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_I4 +InterruptedExceptionTest2.java:146:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_I6 +InterruptedExceptionTest2.java:154:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_I7 +InterruptedExceptionTest2.java:162:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_I8 +InterruptedExceptionTest2.java:180:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C1 +InterruptedExceptionTest2.java:196:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C3 +InterruptedExceptionTest2.java:204:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C4 +InterruptedExceptionTest2.java:220:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C6 +InterruptedExceptionTest2.java:228:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C7 +InterruptedExceptionTest2.java:236:42: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C8 +InterruptedExceptionTest2.java:252:43: compiler.warn.try.resource.throws.interrupted.exc: InterruptedExceptionTest_C10 +22 warnings diff --git a/test/langtools/tools/javac/diags/examples/TryResourceThrowsInterruptedExc.java b/test/langtools/tools/javac/diags/examples/TryResourceThrowsInterruptedExc.java index c22992c991e..6d24a6c2a83 100644 --- a/test/langtools/tools/javac/diags/examples/TryResourceThrowsInterruptedExc.java +++ b/test/langtools/tools/javac/diags/examples/TryResourceThrowsInterruptedExc.java @@ -22,8 +22,15 @@ */ // key: compiler.warn.try.resource.throws.interrupted.exc +// key: compiler.warn.try.resource.can.throw.interrupted.exc // options: -Xlint:try class TryResourceThrowsInterruptedException implements AutoCloseable { public void close() throws InterruptedException {} + { + try (var t = new TryResourceThrowsInterruptedException()) { + t.hashCode(); + } catch (InterruptedException e) { + } + } } From 1321186547bddd3f8615cf5d110489ec383f47ab Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Thu, 6 Nov 2025 16:01:10 +0000 Subject: [PATCH 064/512] 8367943: PipedOutputStream write(0, 0) successful after close() Reviewed-by: rriggs, jpai --- .../classes/java/io/PipedOutputStream.java | 11 +++--- .../io/PipedOutputStream/WriteAfterClose.java | 39 ++++++++++++------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/java.base/share/classes/java/io/PipedOutputStream.java b/src/java.base/share/classes/java/io/PipedOutputStream.java index bfa8f0bbb5a..4e33741721c 100644 --- a/src/java.base/share/classes/java/io/PipedOutputStream.java +++ b/src/java.base/share/classes/java/io/PipedOutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -129,16 +129,17 @@ public class PipedOutputStream extends OutputStream { /** * Writes {@code len} bytes from the specified byte array * starting at offset {@code off} to this piped output stream. - * This method blocks until all the bytes are written to the output - * stream. + * If {@code len} is not zero, this method blocks until all the + * bytes are written to the output stream. * * @param b {@inheritDoc} * @param off {@inheritDoc} * @param len {@inheritDoc} + * @throws IndexOutOfBoundsException {@inheritDoc} * @throws IOException if the pipe is broken, * {@link #connect(java.io.PipedInputStream) unconnected}, - * closed, or if an I/O error occurs. - * @throws IndexOutOfBoundsException {@inheritDoc} + * closed and {@code len} is greater than zero, + * or if an I/O error occurs. */ @Override public void write(byte[] b, int off, int len) throws IOException { diff --git a/test/jdk/java/io/PipedOutputStream/WriteAfterClose.java b/test/jdk/java/io/PipedOutputStream/WriteAfterClose.java index e0dfbcf169f..3314541bb97 100644 --- a/test/jdk/java/io/PipedOutputStream/WriteAfterClose.java +++ b/test/jdk/java/io/PipedOutputStream/WriteAfterClose.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,25 +22,34 @@ */ /* @test - @bug 4143704 - @summary Test if write throws exception after reader - closes the pipe. -*/ + * @bug 4143704 8367943 + * @summary Test if write throws exception after reader closes the pipe. + */ - - -import java.io.*; +import java.io.IOException; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; public class WriteAfterClose { public static void main(String argv[]) throws Exception { - PipedInputStream in = new PipedInputStream(); - PipedOutputStream out = new PipedOutputStream(in); + try (PipedInputStream in = new PipedInputStream(); + PipedOutputStream out = new PipedOutputStream(in)) { + in.close(); + try { + out.write('a'); + throw new Exception("Should not allow write after close"); + } catch (IOException e) { + } + } - in.close(); - try { - out.write('a'); - throw new Exception("Should not allow write after close"); - } catch (IOException e) { + try (PipedInputStream in = new PipedInputStream(); + PipedOutputStream out = new PipedOutputStream(in)) { + out.close(); + try { + out.write(new byte[7], 3, 0); + } catch (IOException e) { + throw new Exception("Should not fail 0-length write after close"); + } } } } From 1f08a3ede2445fb05d9700a1293d681ca89cbf5b Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Thu, 6 Nov 2025 16:01:37 +0000 Subject: [PATCH 065/512] 8355342: File.getCanonicalPath on Java 24 resolves paths on network drives to UNC format Reviewed-by: alanb --- .../classes/java/io/WinNTFileSystem.java | 17 +--- .../native/libjava/WinNTFileSystem_md.c | 35 ++----- .../windows/native/libjava/canonicalize_md.c | 97 ++++++++++++++++--- test/jdk/java/io/File/GetCanonicalPath.java | 51 +++++++++- 4 files changed, 141 insertions(+), 59 deletions(-) diff --git a/src/java.base/windows/classes/java/io/WinNTFileSystem.java b/src/java.base/windows/classes/java/io/WinNTFileSystem.java index e053f7f004c..5066374c0c9 100644 --- a/src/java.base/windows/classes/java/io/WinNTFileSystem.java +++ b/src/java.base/windows/classes/java/io/WinNTFileSystem.java @@ -482,27 +482,12 @@ final class WinNTFileSystem extends FileSystem { return path; return "" + ((char) (c-32)) + ':' + '\\'; } - String canonicalPath = canonicalize0(path); - String finalPath = null; - try { - finalPath = getFinalPath(canonicalPath); - } catch (IOException ignored) { - finalPath = canonicalPath; - } - return finalPath; + return canonicalize0(path); } private native String canonicalize0(String path) throws IOException; - private String getFinalPath(String path) throws IOException { - return getFinalPath0(path); - } - - private native String getFinalPath0(String path) - throws IOException; - - /* -- Attribute accessors -- */ @Override diff --git a/src/java.base/windows/native/libjava/WinNTFileSystem_md.c b/src/java.base/windows/native/libjava/WinNTFileSystem_md.c index 974d5c11d7e..2834a449502 100644 --- a/src/java.base/windows/native/libjava/WinNTFileSystem_md.c +++ b/src/java.base/windows/native/libjava/WinNTFileSystem_md.c @@ -59,7 +59,7 @@ Java_java_io_WinNTFileSystem_initIDs(JNIEnv *env, jclass cls) /* -- Path operations -- */ -extern int wcanonicalize(const WCHAR *path, WCHAR *out, int len); +extern WCHAR* wcanonicalize(const WCHAR *path, WCHAR *out, int len); /** * Retrieves the fully resolved (final) path for the given path or NULL @@ -274,18 +274,23 @@ Java_java_io_WinNTFileSystem_canonicalize0(JNIEnv *env, jobject this, */ int len = (int)wcslen(path); len += currentDirLength(path, len); + WCHAR* fp; if (len > MAX_PATH_LENGTH - 1) { WCHAR *cp = (WCHAR*)malloc(len * sizeof(WCHAR)); if (cp != NULL) { - if (wcanonicalize(path, cp, len) >= 0) { - rv = (*env)->NewString(env, cp, (jsize)wcslen(cp)); + if ((fp = wcanonicalize(path, cp, len)) != NULL) { + rv = (*env)->NewString(env, fp, (jsize)wcslen(fp)); + if (fp != cp) + free(fp); } free(cp); } else { JNU_ThrowOutOfMemoryError(env, "native memory allocation failed"); } - } else if (wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH) >= 0) { - rv = (*env)->NewString(env, canonicalPath, (jsize)wcslen(canonicalPath)); + } else if ((fp = wcanonicalize(path, canonicalPath, MAX_PATH_LENGTH)) != NULL) { + rv = (*env)->NewString(env, fp, (jsize)wcslen(fp)); + if (fp != canonicalPath) + free(fp); } } END_UNICODE_STRING(env, path); if (rv == NULL && !(*env)->ExceptionCheck(env)) { @@ -294,26 +299,6 @@ Java_java_io_WinNTFileSystem_canonicalize0(JNIEnv *env, jobject this, return rv; } - -JNIEXPORT jstring JNICALL -Java_java_io_WinNTFileSystem_getFinalPath0(JNIEnv* env, jobject this, jstring pathname) { - jstring rv = NULL; - - WITH_UNICODE_STRING(env, pathname, path) { - WCHAR* finalPath = getFinalPath(env, path); - if (finalPath != NULL) { - rv = (*env)->NewString(env, finalPath, (jsize)wcslen(finalPath)); - free(finalPath); - } - } END_UNICODE_STRING(env, path); - - if (rv == NULL && !(*env)->ExceptionCheck(env)) { - JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); - } - - return rv; -} - /* -- Attribute accessors -- */ /* Check whether or not the file name in "path" is a Windows reserved diff --git a/src/java.base/windows/native/libjava/canonicalize_md.c b/src/java.base/windows/native/libjava/canonicalize_md.c index 3719ec75d11..8596521509c 100644 --- a/src/java.base/windows/native/libjava/canonicalize_md.c +++ b/src/java.base/windows/native/libjava/canonicalize_md.c @@ -36,6 +36,7 @@ #include #include +#include #include /* We should also include jdk_util.h here, for the prototype of JDK_Canonicalize. @@ -82,9 +83,9 @@ wnextsep(WCHAR *start) /* Tell whether the given string contains any wildcard characters */ static int -wwild(WCHAR *start) +wwild(const WCHAR *start) { - WCHAR *p = start; + WCHAR *p = (WCHAR*)start; int c; while (c = *p) { if ((c == L'*') || (c == L'?')) @@ -146,12 +147,59 @@ lastErrorReportable() return 1; } -/* Convert a pathname to canonical form. The input orig_path is assumed to - have been converted to native form already, via JVM_NativePath(). This is - necessary because _fullpath() rejects duplicate separator characters on - Win95, though it accepts them on NT. */ -int -wcanonicalize(WCHAR *orig_path, WCHAR *result, int size) +// +// Return the final path of 'path'. If 'finalPath' is long enough, the final +// path is placed in it. If not, a new character array is allocated for the +// return value. If the return value does not equal the original 'finalPath' +// value, then the calling code might need to free the memory of the +// parameter. Non-NULL is returned on success, NULL on error. +// +WCHAR* getFinalPath(WCHAR* path, WCHAR* finalPath, DWORD size) +{ + HANDLE h = CreateFileW(path, + FILE_READ_ATTRIBUTES, + FILE_SHARE_DELETE | + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + NULL); + + if (h != INVALID_HANDLE_VALUE) { + DWORD len = GetFinalPathNameByHandleW(h, finalPath, size, 0); + if (len >= size) { + if ((finalPath = (WCHAR*)malloc(len * sizeof(WCHAR))) == NULL) + return NULL; + len = GetFinalPathNameByHandleW(h, finalPath, len, 0); + } + CloseHandle(h); + if (len != 0) { + if (finalPath[0] == L'\\' && finalPath[1] == L'\\' && + finalPath[2] == L'?' && finalPath[3] == L'\\') + { + // Strip prefix (should be \\?\ or \\?\UNC) + int isUnc = (finalPath[4] == L'U' && + finalPath[5] == L'N' && + finalPath[6] == L'C'); + int prefixLen = (isUnc) ? 7 : 4; + // the amount to copy includes terminator + int amountToCopy = len - prefixLen + 1; + wmemmove(finalPath, finalPath + prefixLen, amountToCopy); + } + + return finalPath; + } + } + + return NULL; +} + +/* Convert a pathname to canonical form. If a reparse point is encountered + while traversing the path, then the final path is derived from the full path + and returned as the canonical pathname. + */ +WCHAR* +wcanonicalize(const WCHAR *orig_path, WCHAR *result, int size) { WIN32_FIND_DATAW fd; HANDLE h; @@ -161,11 +209,11 @@ wcanonicalize(WCHAR *orig_path, WCHAR *result, int size) /* Reject paths that contain wildcards */ if (wwild(orig_path)) { errno = EINVAL; - return -1; + return NULL; } if ((path = (WCHAR*)malloc(size * sizeof(WCHAR))) == NULL) - return -1; + return NULL; /* Collapse instances of "foo\.." and ensure absoluteness. Note that contrary to the documentation, the _fullpath procedure does not require @@ -237,6 +285,18 @@ wcanonicalize(WCHAR *orig_path, WCHAR *result, int size) if (h != INVALID_HANDLE_VALUE) { /* Lookup succeeded; append true name to result and continue */ FindClose(h); + + // If a reparse point is encountered, get the final path. + if ((fd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0) { + // Do not fail if the final path cannot be obtained as the + // canonicalization may still be otherwise correct + WCHAR* fp = NULL; + if ((fp = getFinalPath(path, result, size)) != NULL) { + free(path); + return fp; + } + } + if (!(dst = wcp(dst, dend, L'\\', fd.cFileName, fd.cFileName + wcslen(fd.cFileName)))){ goto err; @@ -261,11 +321,11 @@ wcanonicalize(WCHAR *orig_path, WCHAR *result, int size) } *dst = L'\0'; free(path); - return 0; + return result; err: free(path); - return -1; + return NULL; } /* Non-Wide character version of canonicalize. @@ -274,6 +334,7 @@ JNIEXPORT int JDK_Canonicalize(const char *orig, char *out, int len) { wchar_t* wpath = NULL; wchar_t* wresult = NULL; + wchar_t* wcanon = NULL; int wpath_len; int ret = -1; @@ -297,12 +358,12 @@ JDK_Canonicalize(const char *orig, char *out, int len) { goto finish; } - if (wcanonicalize(wpath, wresult, len) != 0) { + if ((wcanon = wcanonicalize(wpath, wresult, len)) == NULL) { goto finish; } if (WideCharToMultiByte(CP_ACP, 0, - wresult, -1, out, len, NULL, NULL) == 0) { + wcanon, -1, out, len, NULL, NULL) == 0) { goto finish; } @@ -310,8 +371,12 @@ JDK_Canonicalize(const char *orig, char *out, int len) { ret = 0; finish: - free(wresult); - free(wpath); + if (wcanon != NULL && wcanon != wresult) + free(wcanon); + if (wresult != NULL) + free(wresult); + if (wpath != NULL) + free(wpath); return ret; } diff --git a/test/jdk/java/io/File/GetCanonicalPath.java b/test/jdk/java/io/File/GetCanonicalPath.java index d69e90fbbfc..14ef90260fc 100644 --- a/test/jdk/java/io/File/GetCanonicalPath.java +++ b/test/jdk/java/io/File/GetCanonicalPath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ /* @test - * @bug 4899022 8003887 + * @bug 4899022 8003887 8355342 * @summary Look for erroneous representation of drive letter * @run junit GetCanonicalPath */ @@ -33,6 +33,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.stream.Stream; import org.junit.jupiter.api.Assumptions; @@ -127,6 +128,52 @@ public class GetCanonicalPath { assertFalse(path.length() > 3, "Drive letter incorrectly represented"); } + @Test + @EnabledOnOs(OS.WINDOWS) + void mappedDrive() throws IOException { + // find the first unused drive letter + char drive = '['; + var roots = Set.of(new File(".").listRoots()); + for (int i = 4; i < 26; i++) { + char c = (char)('A' + i); + if (!roots.contains(new File(c + ":\\"))) { + drive = c; + break; + } + } + assertFalse(drive == '['); // '[' is next after 'Z' + + // map the first unused drive letter to the cwd + String cwd = System.getProperty("user.dir"); + Runtime rt = Runtime.getRuntime(); + String share = + "\\\\localhost\\" + cwd.charAt(0) + "$" + cwd.substring(2); + try { + Process p = rt.exec(new String[] {"net", "use", drive + ":", share}); + assertEquals(0, p.waitFor()); + } catch (InterruptedException x) { + fail(x); + } + + // check that the canonical path name and its content are as expected + try { + final String filename = "file.txt"; + final String text = "This is some text"; + Files.writeString(Path.of(share, filename), text); + File file = new File(drive + ":\\" + filename); + String canonicalPath = file.getCanonicalPath(); + assertEquals(drive + ":\\" + filename, canonicalPath); + assertEquals(text, Files.readString(Path.of(canonicalPath))); + } finally { + try { + Process p = rt.exec(new String[] {"net", "use", drive + ":", "/Delete"}); + assertEquals(0, p.waitFor()); + } catch (InterruptedException x) { + fail(x); + } + } + } + // Create a File with the given pathname and return the File as a Path private static Path createFile(String pathname) throws IOException { File file = new File(pathname); From c272aca8a0a2720365159684bed35c0c31e8778f Mon Sep 17 00:00:00 2001 From: EunHyunsu Date: Thu, 6 Nov 2025 16:13:34 +0000 Subject: [PATCH 066/512] 8371091: Improve the exception message of NullPointerException thrown by the methods in the default implementation of HttpRequest.Builder Reviewed-by: dfuchs --- .../net/http/HttpRequestBuilderImpl.java | 8 ++-- .../net/httpclient/RequestBuilderTest.java | 37 +++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java b/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java index c68965626b7..ef0e2b152bb 100644 --- a/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java +++ b/src/java.net.http/share/classes/jdk/internal/net/http/HttpRequestBuilderImpl.java @@ -203,7 +203,7 @@ public class HttpRequestBuilderImpl implements HttpRequest.Builder { @Override public HttpRequest.Builder POST(BodyPublisher body) { - return method0("POST", requireNonNull(body)); + return method0("POST", requireNonNull(body, "BodyPublisher must be non-null")); } @Override @@ -218,12 +218,12 @@ public class HttpRequestBuilderImpl implements HttpRequest.Builder { @Override public HttpRequest.Builder PUT(BodyPublisher body) { - return method0("PUT", requireNonNull(body)); + return method0("PUT", requireNonNull(body, "BodyPublisher must be non-null")); } @Override public HttpRequest.Builder method(String method, BodyPublisher body) { - requireNonNull(method); + requireNonNull(method, "HTTP method must be non-null"); if (method.isEmpty()) throw newIAE("illegal method "); if (method.equals("CONNECT")) @@ -234,7 +234,7 @@ public class HttpRequestBuilderImpl implements HttpRequest.Builder { .replace("\r", "\\r") .replace("\t", "\\t") + "\""); - return method0(method, requireNonNull(body)); + return method0(method, requireNonNull(body, "BodyPublisher must be non-null")); } private HttpRequest.Builder method0(String method, BodyPublisher body) { diff --git a/test/jdk/java/net/httpclient/RequestBuilderTest.java b/test/jdk/java/net/httpclient/RequestBuilderTest.java index 97f4793d63c..a83c12f592e 100644 --- a/test/jdk/java/net/httpclient/RequestBuilderTest.java +++ b/test/jdk/java/net/httpclient/RequestBuilderTest.java @@ -486,4 +486,41 @@ public class RequestBuilderTest { assertNotEquals(builder.build(), newBuilder(uri).header("x", "Z").build()); assertNotEquals(builder.build(), newBuilder(uri).header("z", "y").build()); } + + @Test + public void testNullMessages() { + HttpRequest.Builder builder = HttpRequest.newBuilder(); + + try { + builder.method(null, null); + fail("builder.method(null, null) should have thrown NullPointerException"); + } catch (NullPointerException e) { + assertTrue(e.getMessage().contains("HTTP method"), + "Expected exception message to contain 'HTTP method', but got: " + e.getMessage()); + } + + try { + builder.POST(null); + fail("builder.POST(null) should have thrown NullPointerException"); + } catch (NullPointerException e) { + assertTrue(e.getMessage().contains("BodyPublisher"), + "Expected exception message to contain 'BodyPublisher', but got: " + e.getMessage()); + } + + try { + builder.PUT(null); + fail("builder.PUT(null) should have thrown NullPointerException"); + } catch (NullPointerException e) { + assertTrue(e.getMessage().contains("BodyPublisher"), + "Expected exception message to contain 'BodyPublisher', but got: " + e.getMessage()); + } + + try { + builder.method("PATCH", null); + fail("builder.method(\"PATCH\", null) should have thrown NullPointerException"); + } catch (NullPointerException e) { + assertTrue(e.getMessage().contains("BodyPublisher"), + "Expected exception message to contain 'BodyPublisher', but got: " + e.getMessage()); + } + } } From 0026967e030fd4557b5365870d55f863fe2a4512 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Thu, 6 Nov 2025 17:12:49 +0000 Subject: [PATCH 067/512] 8370420: HostLocaleProviderAdapter_md.c from libjava can use GetLocaleInfoEx, GetCalendarInfoEx, EnumCalendarInfoExEx directly Reviewed-by: naoto, mbaesken, bpb --- .../HostLocaleProviderAdapterImpl.java | 29 +++---- .../libjava/HostLocaleProviderAdapter_md.c | 82 ++++--------------- 2 files changed, 27 insertions(+), 84 deletions(-) diff --git a/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java b/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java index abc62d79bb1..5aa8431d859 100644 --- a/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java +++ b/src/java.base/windows/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -116,22 +116,18 @@ public class HostLocaleProviderAdapterImpl { private static final String nativeDisplayLanguage; static { Set tmpSet = new HashSet<>(); - if (initialize()) { - // Assuming the default locales do not include any extensions, so - // no stripping is needed here. - Control c = Control.getNoFallbackControl(Control.FORMAT_DEFAULT); - String displayLocale = getDefaultLocale(CAT_DISPLAY); - Locale l = Locale.forLanguageTag(displayLocale.replace('_', '-')); - tmpSet.addAll(c.getCandidateLocales("", l)); - nativeDisplayLanguage = l.getLanguage(); + // Assuming the default locales do not include any extensions, so + // no stripping is needed here. + Control c = Control.getNoFallbackControl(Control.FORMAT_DEFAULT); + String displayLocale = getDefaultLocale(CAT_DISPLAY); + Locale l = Locale.forLanguageTag(displayLocale.replace('_', '-')); + tmpSet.addAll(c.getCandidateLocales("", l)); + nativeDisplayLanguage = l.getLanguage(); - String formatLocale = getDefaultLocale(CAT_FORMAT); - if (!formatLocale.equals(displayLocale)) { - l = Locale.forLanguageTag(formatLocale.replace('_', '-')); - tmpSet.addAll(c.getCandidateLocales("", l)); - } - } else { - nativeDisplayLanguage = ""; + String formatLocale = getDefaultLocale(CAT_FORMAT); + if (!formatLocale.equals(displayLocale)) { + l = Locale.forLanguageTag(formatLocale.replace('_', '-')); + tmpSet.addAll(c.getCandidateLocales("", l)); } supportedLocaleSet = Collections.unmodifiableSet(tmpSet); } @@ -850,7 +846,6 @@ public class HostLocaleProviderAdapterImpl { // native methods // initialize - private static native boolean initialize(); private static native String getDefaultLocale(int cat); // For DateFormatProvider diff --git a/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c b/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c index bf399a68894..b50dca85bf7 100644 --- a/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c +++ b/src/java.base/windows/native/libjava/HostLocaleProviderAdapter_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,15 +39,6 @@ #define CALENDAR_STYLE_SHORT_MASK 0x00000001 // Calendar.SHORT #define CALENDAR_STYLE_STANDALONE_MASK 0x00008000 // Calendar.STANDALONE -// global variables -typedef int (WINAPI *PGLIE)(const jchar *, LCTYPE, LPWSTR, int); -typedef int (WINAPI *PGCIE)(const jchar *, CALID, LPCWSTR, CALTYPE, LPWSTR, int, LPDWORD); -typedef int (WINAPI *PECIEE)(CALINFO_ENUMPROCEXEX, const jchar *, CALID, LPCWSTR, CALTYPE, LPARAM); -PGLIE pGetLocaleInfoEx; -PGCIE pGetCalendarInfoEx; -PECIEE pEnumCalendarInfoExEx; -BOOL initialized = FALSE; - // prototypes int getLocaleInfoWrapper(const jchar *langtag, LCTYPE type, LPWSTR data, int buflen); int getCalendarInfoWrapper(const jchar *langtag, CALID id, LPCWSTR reserved, CALTYPE type, LPWSTR data, int buflen, LPDWORD val); @@ -178,31 +169,6 @@ WCHAR * fixes[2][2][3][16] = } }; -/* - * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl - * Method: initialize - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_initialize - (JNIEnv *env, jclass cls) { - if (!initialized) { - pGetLocaleInfoEx = (PGLIE)GetProcAddress( - GetModuleHandle("kernel32.dll"), - "GetLocaleInfoEx"); - pGetCalendarInfoEx = (PGCIE)GetProcAddress( - GetModuleHandle("kernel32.dll"), - "GetCalendarInfoEx"); - pEnumCalendarInfoExEx = (PECIEE)GetProcAddress( - GetModuleHandle("kernel32.dll"), - "EnumCalendarInfoExEx"); - initialized =TRUE; - } - - return pGetLocaleInfoEx != NULL && - pGetCalendarInfoEx != NULL && - pEnumCalendarInfoExEx != NULL; -} - /* * Class: sun_util_locale_provider_HostLocaleProviderAdapterImpl * Method: getDefaultLocale @@ -768,34 +734,20 @@ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapte } int getLocaleInfoWrapper(const jchar *langtag, LCTYPE type, LPWSTR data, int buflen) { - if (pGetLocaleInfoEx) { - if (wcscmp(L"und", (LPWSTR)langtag) == 0) { - // defaults to "en" - return pGetLocaleInfoEx(L"en", type, data, buflen); - } else { - return pGetLocaleInfoEx((LPWSTR)langtag, type, data, buflen); - } + if (wcscmp(L"und", (LPWSTR)langtag) == 0) { + // defaults to "en" + return GetLocaleInfoEx(L"en", type, data, buflen); } else { - // If we ever wanted to support WinXP, we will need extra module from - // MS... - // return GetLocaleInfo(DownlevelLocaleNameToLCID(langtag, 0), type, data, buflen); - return 0; + return GetLocaleInfoEx((LPWSTR)langtag, type, data, buflen); } } int getCalendarInfoWrapper(const jchar *langtag, CALID id, LPCWSTR reserved, CALTYPE type, LPWSTR data, int buflen, LPDWORD val) { - if (pGetCalendarInfoEx) { - if (wcscmp(L"und", (LPWSTR)langtag) == 0) { - // defaults to "en" - return pGetCalendarInfoEx(L"en", id, reserved, type, data, buflen, val); - } else { - return pGetCalendarInfoEx((LPWSTR)langtag, id, reserved, type, data, buflen, val); - } + if (wcscmp(L"und", (LPWSTR)langtag) == 0) { + // defaults to "en" + return GetCalendarInfoEx(L"en", id, reserved, type, data, buflen, val); } else { - // If we ever wanted to support WinXP, we will need extra module from - // MS... - // return GetCalendarInfo(DownlevelLocaleNameToLCID(langtag, 0), ...); - return 0; + return GetCalendarInfoEx((LPWSTR)langtag, id, reserved, type, data, buflen, val); } } @@ -1000,17 +952,13 @@ void getFixPart(const jchar * langtag, const jint numberStyle, BOOL positive, BO } int enumCalendarInfoWrapper(const jchar *langtag, CALID calid, CALTYPE type, LPWSTR buf, int buflen) { - if (pEnumCalendarInfoExEx) { - if (wcscmp(L"und", (LPWSTR)langtag) == 0) { - // defaults to "en" - return pEnumCalendarInfoExEx(&EnumCalendarInfoProc, L"en", - calid, NULL, type, (LPARAM)buf); - } else { - return pEnumCalendarInfoExEx(&EnumCalendarInfoProc, langtag, - calid, NULL, type, (LPARAM)buf); - } + if (wcscmp(L"und", (LPWSTR)langtag) == 0) { + // defaults to "en" + return EnumCalendarInfoExEx(&EnumCalendarInfoProc, L"en", + calid, NULL, type, (LPARAM)buf); } else { - return 0; + return EnumCalendarInfoExEx(&EnumCalendarInfoProc, langtag, + calid, NULL, type, (LPARAM)buf); } } From 4445a8e3f5cac6738b7984716c867dcf9780fe0a Mon Sep 17 00:00:00 2001 From: Nityanand Rai Date: Thu, 6 Nov 2025 17:25:59 +0000 Subject: [PATCH 068/512] 8369323: Fix typos in vmTestbase/.../Concurrent.java Reviewed-by: wkemper, phh, lmesnik, shade, syan --- .../vm/gc/concurrent/Concurrent.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/hotspot/jtreg/vmTestbase/vm/gc/concurrent/Concurrent.java b/test/hotspot/jtreg/vmTestbase/vm/gc/concurrent/Concurrent.java index 5fa7fe3e1d8..1ea07c8e4b2 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/gc/concurrent/Concurrent.java +++ b/test/hotspot/jtreg/vmTestbase/vm/gc/concurrent/Concurrent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,7 +79,7 @@ class Forest { treeHeight = Memory.balancedTreeHeightFromMemory(size / ntrees, (int) new TreeNode(nodeGarbageSize).getTotalSize()); } - log.debug("The expected forest paramteres: tree height = " + treeHeight + " number of trees = " + ntrees + log.debug("The expected forest parameters: tree height = " + treeHeight + " number of trees = " + ntrees + " size = " + new TreeNode(nodeGarbageSize).getTotalSize()); Tree[] localTrees = new Tree[ntrees * 4]; Lock[] localLocks = new Lock[ntrees * 4]; @@ -104,7 +104,7 @@ class Forest { instance.where = new AtomicCycleInteger(instance.trees.length); instance.nodeGarbageSize = nodeGarbageSize; - log.debug("The forest real paramteres: tree height = " + treeHeight + " number of trees = " + instance.trees.length + log.debug("The forest real parameters: tree height = " + treeHeight + " number of trees = " + instance.trees.length + " number of nodes = " + allNodesCount); log.debug("Approximate node size = " + nodeSize + " calc = " + instance.trees[0].getRoot().getSize()); return instance; @@ -140,12 +140,12 @@ class Forest { int h2 = root.getShortestPath(); if ((h1 != treeHeight) || (h2 != treeHeight)) { throw new TestFailure("The tree is not balanced expected " + treeHeight - + " value = " + h1 + " shortedtPath = " + h2); + + " value = " + h1 + " shortestPath = " + h2); } } // Swap subtrees in 2 trees, the path is used - // as sequence of 1-0 to select subtree (left-reight sequence) + // as sequence of 1-0 to select subtree (left-right sequence) static void swapSubtrees(Tree t1, Tree t2, int depth, int path) { TreeNode tn1 = t1.getRoot(); TreeNode tn2 = t2.getRoot(); @@ -210,7 +210,7 @@ class Forest { } } - // the index in tree array which should be chnaged during next regeneration + // the index in tree array which should be changed during next regeneration AtomicCycleInteger where = null; // generate new full and partial trees in our forest @@ -276,10 +276,10 @@ public class Concurrent extends ThreadedGCTest implements GarbageProducerAware, // Heap as tree Forest forest; - // GP for old gargbage production + // GP for old garbage production GarbageProducer gpOld; - // GP for young gargbage production + // GP for young garbage production GarbageProducer gpYoung; MemoryStrategy ms; @@ -322,7 +322,7 @@ public class Concurrent extends ThreadedGCTest implements GarbageProducerAware, // young garbage in percent and absolute private static int youngPercent = 0; long youngGarbageSize; - // mutation rate (parcent and absolute trees) + // mutation rate (percent and absolute trees) private static int ptrMutRate = 50; long mutateTrees; // percent of heap to occupy by forest (long live garbage) From 9cc542ebcb81552fe8c32a8cc3c63332853e5127 Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Thu, 6 Nov 2025 18:57:52 +0000 Subject: [PATCH 069/512] 8370850: Shenandoah: Simplify collector allocation to save unnecessary region iteration Reviewed-by: wkemper --- .../share/gc/shenandoah/shenandoahFreeSet.cpp | 74 +++++++------------ .../share/gc/shenandoah/shenandoahFreeSet.hpp | 17 ++--- 2 files changed, 32 insertions(+), 59 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.cpp b/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.cpp index 8dccf5a057c..0deb3b5ba4c 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.cpp @@ -1265,22 +1265,13 @@ void ShenandoahFreeSet::add_promoted_in_place_region_to_old_collector(Shenandoah _partitions.assert_bounds(true); } -HeapWord* ShenandoahFreeSet::allocate_from_partition_with_affiliation(ShenandoahAffiliation affiliation, - ShenandoahAllocRequest& req, bool& in_new_region) { - - shenandoah_assert_heaplocked(); - ShenandoahFreeSetPartitionId which_partition = req.is_old()? ShenandoahFreeSetPartitionId::OldCollector: ShenandoahFreeSetPartitionId::Collector; - if (_partitions.alloc_from_left_bias(which_partition)) { - ShenandoahLeftRightIterator iterator(&_partitions, which_partition, affiliation == ShenandoahAffiliation::FREE); - return allocate_with_affiliation(iterator, affiliation, req, in_new_region); - } else { - ShenandoahRightLeftIterator iterator(&_partitions, which_partition, affiliation == ShenandoahAffiliation::FREE); - return allocate_with_affiliation(iterator, affiliation, req, in_new_region); - } -} - template -HeapWord* ShenandoahFreeSet::allocate_with_affiliation(Iter& iterator, ShenandoahAffiliation affiliation, ShenandoahAllocRequest& req, bool& in_new_region) { +HeapWord* ShenandoahFreeSet::allocate_with_affiliation(Iter& iterator, + ShenandoahAffiliation affiliation, + ShenandoahAllocRequest& req, + bool& in_new_region) { + assert(affiliation != ShenandoahAffiliation::FREE, "Must not"); + ShenandoahHeapRegion* free_region = nullptr; for (idx_t idx = iterator.current(); iterator.has_next(); idx = iterator.next()) { ShenandoahHeapRegion* r = _heap->get_region(idx); if (r->affiliation() == affiliation) { @@ -1288,8 +1279,16 @@ HeapWord* ShenandoahFreeSet::allocate_with_affiliation(Iter& iterator, Shenandoa if (result != nullptr) { return result; } + } else if (free_region == nullptr && r->affiliation() == FREE) { + free_region = r; } } + // Failed to allocate within any affiliated region, try the first free region in the partition. + if (free_region != nullptr) { + HeapWord* result = try_allocate_in(free_region, req, in_new_region); + assert(result != nullptr, "Allocate in free region in the partition always succeed."); + return result; + } log_debug(gc, free)("Could not allocate collector region with affiliation: %s for request " PTR_FORMAT, shenandoah_affiliation_name(affiliation), p2i(&req)); return nullptr; @@ -1391,20 +1390,19 @@ HeapWord* ShenandoahFreeSet::allocate_from_regions(Iter& iterator, ShenandoahAll } HeapWord* ShenandoahFreeSet::allocate_for_collector(ShenandoahAllocRequest &req, bool &in_new_region) { - // Fast-path: try to allocate in the collector view first - HeapWord* result; - result = allocate_from_partition_with_affiliation(req.affiliation(), req, in_new_region); - if (result != nullptr) { - return result; + shenandoah_assert_heaplocked(); + ShenandoahFreeSetPartitionId which_partition = req.is_old()? ShenandoahFreeSetPartitionId::OldCollector: ShenandoahFreeSetPartitionId::Collector; + HeapWord* result = nullptr; + if (_partitions.alloc_from_left_bias(which_partition)) { + ShenandoahLeftRightIterator iterator(&_partitions, which_partition); + result = allocate_with_affiliation(iterator, req.affiliation(), req, in_new_region); + } else { + ShenandoahRightLeftIterator iterator(&_partitions, which_partition); + result = allocate_with_affiliation(iterator, req.affiliation(), req, in_new_region); } - bool allow_new_region = can_allocate_in_new_region(req); - if (allow_new_region) { - // Try a free region that is dedicated to GC allocations. - result = allocate_from_partition_with_affiliation(ShenandoahAffiliation::FREE, req, in_new_region); - if (result != nullptr) { - return result; - } + if (result != nullptr) { + return result; } // No dice. Can we borrow space from mutator view? @@ -1412,17 +1410,7 @@ HeapWord* ShenandoahFreeSet::allocate_for_collector(ShenandoahAllocRequest &req, return nullptr; } - if (!allow_new_region && req.is_old() && (_heap->young_generation()->free_unaffiliated_regions() > 0)) { - // This allows us to flip a mutator region to old_collector - allow_new_region = true; - } - - // We should expand old-gen if this can prevent an old-gen evacuation failure. We don't care so much about - // promotion failures since they can be mitigated in a subsequent GC pass. Would be nice to know if this - // allocation request is for evacuation or promotion. Individual threads limit their use of PLAB memory for - // promotions, so we already have an assurance that any additional memory set aside for old-gen will be used - // only for old-gen evacuations. - if (allow_new_region) { + if (_partitions.get_empty_region_counts(ShenandoahFreeSetPartitionId::Mutator) > 0) { // Try to steal an empty region from the mutator view. result = try_allocate_from_mutator(req, in_new_region); } @@ -1432,16 +1420,6 @@ HeapWord* ShenandoahFreeSet::allocate_for_collector(ShenandoahAllocRequest &req, return result; } -bool ShenandoahFreeSet::can_allocate_in_new_region(const ShenandoahAllocRequest& req) { - if (!_heap->mode()->is_generational()) { - return true; - } - - assert(req.is_old() || req.is_young(), "Should request affiliation"); - return (req.is_old() && _heap->old_generation()->free_unaffiliated_regions() > 0) - || (req.is_young() && _heap->young_generation()->free_unaffiliated_regions() > 0); -} - HeapWord* ShenandoahFreeSet::try_allocate_from_mutator(ShenandoahAllocRequest& req, bool& in_new_region) { // The collector prefers to keep longer lived regions toward the right side of the heap, so it always // searches for regions from right to left here. diff --git a/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.hpp b/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.hpp index 11d93bf094a..5cc9eab7b4b 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahFreeSet.hpp @@ -446,11 +446,6 @@ private: HeapWord* allocate_aligned_plab(size_t size, ShenandoahAllocRequest& req, ShenandoahHeapRegion* r); - // Return the address of memory allocated, setting in_new_region to true iff the allocation is taken - // from a region that was previously empty. Return nullptr if memory could not be allocated. - inline HeapWord* allocate_from_partition_with_affiliation(ShenandoahAffiliation affiliation, - ShenandoahAllocRequest& req, bool& in_new_region); - // We re-evaluate the left-to-right allocation bias whenever _alloc_bias_weight is less than zero. Each time // we allocate an object, we decrement the count of this value. Each time we re-evaluate whether to allocate // from right-to-left or left-to-right, we reset the value of this counter to _InitialAllocBiasWeight. @@ -601,13 +596,13 @@ private: // Handle allocation for collector (for evacuation). HeapWord* allocate_for_collector(ShenandoahAllocRequest& req, bool& in_new_region); - // Search for allocation in region with same affiliation as request, using given iterator. + // Search for allocation in region with same affiliation as request, using given iterator, + // or affiliate the first usable FREE region with given affiliation and allocate in. template - HeapWord* allocate_with_affiliation(Iter& iterator, ShenandoahAffiliation affiliation, - ShenandoahAllocRequest& req, bool& in_new_region); - - // Return true if the respective generation for this request has free regions. - bool can_allocate_in_new_region(const ShenandoahAllocRequest& req); + HeapWord* allocate_with_affiliation(Iter& iterator, + ShenandoahAffiliation affiliation, + ShenandoahAllocRequest& req, + bool& in_new_region); // Attempt to allocate memory for an evacuation from the mutator's partition. HeapWord* try_allocate_from_mutator(ShenandoahAllocRequest& req, bool& in_new_region); From cad73d39762974776dd6fda5efe4e2a271d69f14 Mon Sep 17 00:00:00 2001 From: William Kemper Date: Thu, 6 Nov 2025 19:37:44 +0000 Subject: [PATCH 070/512] 8370041: GenShen: Filter young pointers from thread local SATB buffers when only marking old Reviewed-by: ysr, kdnilsen --- .../gc/shenandoah/shenandoahClosures.hpp | 12 +- .../shenandoah/shenandoahClosures.inline.hpp | 4 + .../gc/shenandoah/shenandoahConcurrentGC.cpp | 92 +++++++------- .../shenandoah/shenandoahConcurrentMark.cpp | 16 +-- .../gc/shenandoah/shenandoahDegeneratedGC.cpp | 23 ++-- .../shenandoah/shenandoahGenerationalHeap.cpp | 6 - .../share/gc/shenandoah/shenandoahHeap.cpp | 4 + .../gc/shenandoah/shenandoahOldGeneration.cpp | 117 +----------------- .../gc/shenandoah/shenandoahOldGeneration.hpp | 37 +++--- .../shenandoah/shenandoahSATBMarkQueueSet.cpp | 27 +++- .../shenandoah/shenandoahSATBMarkQueueSet.hpp | 20 ++- 11 files changed, 134 insertions(+), 224 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahClosures.hpp b/src/hotspot/share/gc/shenandoah/shenandoahClosures.hpp index 0c223ee3128..fefed0340c4 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahClosures.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahClosures.hpp @@ -24,7 +24,6 @@ #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHCLOSURES_HPP #define SHARE_GC_SHENANDOAH_SHENANDOAHCLOSURES_HPP -#include "code/nmethod.hpp" #include "gc/shared/stringdedup/stringDedup.hpp" #include "gc/shenandoah/shenandoahGenerationType.hpp" #include "gc/shenandoah/shenandoahTaskqueue.hpp" @@ -230,6 +229,17 @@ public: }; +class ShenandoahFlushSATB : public ThreadClosure { +private: + SATBMarkQueueSet& _satb_qset; + +public: + explicit ShenandoahFlushSATB(SATBMarkQueueSet& satb_qset) : _satb_qset(satb_qset) {} + + inline void do_thread(Thread* thread) override; +}; + + // // ========= Utilities // diff --git a/src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp index 427eaad26ce..e8d25b1e5a9 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahClosures.inline.hpp @@ -253,6 +253,10 @@ inline void ShenandoahConcUpdateRefsClosure::work(T* p) { _heap->conc_update_with_forwarded(p); } +inline void ShenandoahFlushSATB::do_thread(Thread* thread) { + // Transfer any partial buffer to the qset for completed buffer processing. + _satb_qset.flush_queue(ShenandoahThreadLocalData::satb_mark_queue(thread)); +} // // ========= Utilities diff --git a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp index 9613422496a..cee8727a3f4 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp @@ -279,21 +279,6 @@ bool ShenandoahConcurrentGC::complete_abbreviated_cycle() { heap->update_region_ages(_generation->complete_marking_context()); } - if (!heap->is_concurrent_old_mark_in_progress()) { - heap->concurrent_final_roots(); - } else { - // Since the cycle was shortened for having enough immediate garbage, this will be - // the last phase before concurrent marking of old resumes. We must be sure - // that old mark threads don't see any pointers to garbage in the SATB queues. Even - // though nothing was evacuated, overwriting unreachable weak roots with null may still - // put pointers to regions that become trash in the SATB queues. The following will - // piggyback flushing the thread local SATB queues on the same handshake that propagates - // the gc state change. - ShenandoahSATBMarkQueueSet& satb_queues = ShenandoahBarrierSet::satb_mark_queue_set(); - ShenandoahFlushSATBHandshakeClosure complete_thread_local_satb_buffers(satb_queues); - heap->concurrent_final_roots(&complete_thread_local_satb_buffers); - heap->old_generation()->concurrent_transfer_pointers_from_satb(); - } return true; } @@ -684,16 +669,10 @@ void ShenandoahConcurrentGC::op_init_mark() { assert(!heap->has_forwarded_objects(), "No forwarded objects on this path"); if (heap->mode()->is_generational()) { - if (_generation->is_global()) { heap->old_generation()->cancel_gc(); - } else if (heap->is_concurrent_old_mark_in_progress()) { - // Purge the SATB buffers, transferring any valid, old pointers to the - // old generation mark queue. Any pointers in a young region will be - // abandoned. - ShenandoahGCPhase phase(ShenandoahPhaseTimings::init_transfer_satb); - heap->old_generation()->transfer_pointers_from_satb(); } + { // After we swap card table below, the write-table is all clean, and the read table holds // cards dirty prior to the start of GC. Young and bootstrap collection will update @@ -1131,7 +1110,7 @@ private: ShenandoahNonConcUpdateRefsClosure _cl; public: ShenandoahUpdateThreadHandshakeClosure(); - void do_thread(Thread* thread); + void do_thread(Thread* thread) override; }; ShenandoahUpdateThreadHandshakeClosure::ShenandoahUpdateThreadHandshakeClosure() : @@ -1146,9 +1125,49 @@ void ShenandoahUpdateThreadHandshakeClosure::do_thread(Thread* thread) { } } +class ShenandoahUpdateThreadRootsAndFlushOldSatbBuffers final : public HandshakeClosure { + // When Shenandoah is marking the old generation, it is possible for the SATB barrier + // to pick up overwritten pointers that point into a cset region. If these pointers + // are accessed by mark threads, they will crash. Once update refs has completed, it is + // no longer possible for a mutator thread to overwrite a pointer into a cset region. + // + // Therefore, at the end of update refs, we use this closure to update the thread roots + // and 'complete' all the thread local SATB buffers. Completing these will filter out + // anything that has already been marked or anything that points to a region which is + // not old. We do not need to worry about ABA situations where a region may become old + // after the pointer is enqueued but before it is filtered. There are only two ways a + // region may become old: + // 1. The region is promoted in place. This is safe because such regions will never + // be in the collection set. If this happens, the pointer will be preserved, essentially + // becoming part of the old snapshot. + // 2. The region is allocated during evacuation of old. This is also not a concern because + // we haven't yet finished marking old so no mixed evacuations will happen. + ShenandoahUpdateThreadHandshakeClosure _update_roots; + ShenandoahFlushSATB _flush_all_satb; + +public: + ShenandoahUpdateThreadRootsAndFlushOldSatbBuffers() : + HandshakeClosure("Shenandoah Update Thread Roots and Flush SATB"), + _flush_all_satb(ShenandoahBarrierSet::satb_mark_queue_set()) { + assert(ShenandoahBarrierSet::satb_mark_queue_set().get_filter_out_young(), + "Should be filtering pointers outside of old during old marking"); + } + + void do_thread(Thread* thread) override { + _update_roots.do_thread(thread); + _flush_all_satb.do_thread(thread); + } +}; + void ShenandoahConcurrentGC::op_update_thread_roots() { - ShenandoahUpdateThreadHandshakeClosure cl; - Handshake::execute(&cl); + ShenandoahHeap* const heap = ShenandoahHeap::heap(); + if (heap->is_concurrent_old_mark_in_progress()) { + ShenandoahUpdateThreadRootsAndFlushOldSatbBuffers cl; + Handshake::execute(&cl); + } else { + ShenandoahUpdateThreadHandshakeClosure cl; + Handshake::execute(&cl); + } } void ShenandoahConcurrentGC::op_final_update_refs() { @@ -1177,23 +1196,6 @@ void ShenandoahConcurrentGC::op_final_update_refs() { heap->set_has_forwarded_objects(false); if (heap->mode()->is_generational() && heap->is_concurrent_old_mark_in_progress()) { - // When the SATB barrier is left on to support concurrent old gen mark, it may pick up writes to - // objects in the collection set. After those objects are evacuated, the pointers in the - // SATB are no longer safe. Once we have finished update references, we are guaranteed that - // no more writes to the collection set are possible. - // - // This will transfer any old pointers in _active_ regions from the SATB to the old gen - // mark queues. All other pointers will be discarded. This would also discard any pointers - // in old regions that were included in a mixed evacuation. We aren't using the SATB filter - // methods here because we cannot control when they execute. If the SATB filter runs _after_ - // a region has been recycled, we will not be able to detect the bad pointer. - // - // We are not concerned about skipping this step in abbreviated cycles because regions - // with no live objects cannot have been written to and so cannot have entries in the SATB - // buffers. - ShenandoahGCPhase phase(ShenandoahPhaseTimings::final_update_refs_transfer_satb); - heap->old_generation()->transfer_pointers_from_satb(); - // Aging_cycle is only relevant during evacuation cycle for individual objects and during final mark for // entire regions. Both of these relevant operations occur before final update refs. ShenandoahGenerationalHeap::heap()->set_aging_cycle(false); @@ -1228,13 +1230,13 @@ bool ShenandoahConcurrentGC::entry_final_roots() { ShenandoahWorkerPolicy::calc_workers_for_conc_evac(), msg); - if (!heap->mode()->is_generational()) { - heap->concurrent_final_roots(); - } else { + if (heap->mode()->is_generational()) { if (!complete_abbreviated_cycle()) { return false; } } + + heap->concurrent_final_roots(); return true; } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp index 7a195f64cbd..367a15abfa4 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp @@ -66,20 +66,6 @@ public: } }; -class ShenandoahSATBAndRemarkThreadsClosure : public ThreadClosure { -private: - SATBMarkQueueSet& _satb_qset; - -public: - explicit ShenandoahSATBAndRemarkThreadsClosure(SATBMarkQueueSet& satb_qset) : - _satb_qset(satb_qset) {} - - void do_thread(Thread* thread) override { - // Transfer any partial buffer to the qset for completed buffer processing. - _satb_qset.flush_queue(ShenandoahThreadLocalData::satb_mark_queue(thread)); - } -}; - template class ShenandoahFinalMarkingTask : public WorkerTask { private: @@ -109,7 +95,7 @@ public: while (satb_mq_set.apply_closure_to_completed_buffer(&cl)) {} assert(!heap->has_forwarded_objects(), "Not expected"); - ShenandoahSATBAndRemarkThreadsClosure tc(satb_mq_set); + ShenandoahFlushSATB tc(satb_mq_set); Threads::possibly_parallel_threads_do(true /* is_par */, &tc); } _cm->mark_loop(worker_id, _terminator, GENERATION, false /*not cancellable*/, diff --git a/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp b/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp index 53b83edd47b..cd079d29afe 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp @@ -101,12 +101,16 @@ void ShenandoahDegenGC::op_degenerated() { heap->old_generation()->card_scan()->mark_write_table_as_clean(); } -#ifdef ASSERT if (heap->mode()->is_generational()) { - ShenandoahOldGeneration* old_generation = heap->old_generation(); + const ShenandoahOldGeneration* old_generation = heap->old_generation(); if (!heap->is_concurrent_old_mark_in_progress()) { // If we are not marking the old generation, there should be nothing in the old mark queues assert(old_generation->task_queues()->is_empty(), "Old gen task queues should be empty"); + } else { + // This is still necessary for degenerated cycles because the degeneration point may occur + // after final mark of the young generation. See ShenandoahConcurrentGC::op_final_update_refs for + // a more detailed explanation. + old_generation->transfer_pointers_from_satb(); } if (_generation->is_global()) { @@ -118,7 +122,6 @@ void ShenandoahDegenGC::op_degenerated() { "Old generation cannot be in state: %s", old_generation->state_name()); } } -#endif ShenandoahMetricsSnapshot metrics(heap->free_set()); @@ -166,15 +169,6 @@ void ShenandoahDegenGC::op_degenerated() { _generation->cancel_marking(); } - if (heap->is_concurrent_mark_in_progress()) { - // If either old or young marking is in progress, the SATB barrier will be enabled. - // The SATB buffer may hold a mix of old and young pointers. The old pointers need to be - // transferred to the old generation mark queues and the young pointers are NOT part - // of this snapshot, so they must be dropped here. It is safe to drop them here because - // we will rescan the roots on this safepoint. - heap->old_generation()->transfer_pointers_from_satb(); - } - if (_degen_point == ShenandoahDegenPoint::_degenerated_roots) { // We only need this if the concurrent cycle has already swapped the card tables. // Marking will use the 'read' table, but interesting pointers may have been @@ -193,8 +187,9 @@ void ShenandoahDegenGC::op_degenerated() { case _degenerated_mark: // No fallthrough. Continue mark, handed over from concurrent mark if // concurrent mark has yet completed - if (_degen_point == ShenandoahDegenPoint::_degenerated_mark && - heap->is_concurrent_mark_in_progress()) { + if (_degen_point == ShenandoahDegenPoint::_degenerated_mark && heap->is_concurrent_mark_in_progress()) { + assert(!ShenandoahBarrierSet::satb_mark_queue_set().get_filter_out_young(), + "Should not be filtering out young pointers when concurrent mark degenerates"); op_finish_mark(); } assert(!heap->cancelled_gc(), "STW mark can not OOM"); diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp index 28053dffd5a..e582ea6b189 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahGenerationalHeap.cpp @@ -1040,12 +1040,6 @@ void ShenandoahGenerationalHeap::final_update_refs_update_region_states() { void ShenandoahGenerationalHeap::complete_degenerated_cycle() { shenandoah_assert_heaplocked_or_safepoint(); - if (is_concurrent_old_mark_in_progress()) { - // This is still necessary for degenerated cycles because the degeneration point may occur - // after final mark of the young generation. See ShenandoahConcurrentGC::op_final_update_refs for - // a more detailed explanation. - old_generation()->transfer_pointers_from_satb(); - } // In case degeneration interrupted concurrent evacuation or update references, we need to clean up // transient state. Otherwise, these actions have no effect. reset_generation_reserves(); diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index 5b353ee2103..38f055c34b6 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -2028,6 +2028,10 @@ void ShenandoahHeap::prepare_update_heap_references() { void ShenandoahHeap::propagate_gc_state_to_all_threads() { assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Must be at Shenandoah safepoint"); if (_gc_state_changed) { + // If we are only marking old, we do not need to process young pointers + ShenandoahBarrierSet::satb_mark_queue_set().set_filter_out_young( + is_concurrent_old_mark_in_progress() && !is_concurrent_young_mark_in_progress() + ); ShenandoahGCStatePropagatorHandshakeClosure propagator(_gc_state.raw_value()); Threads::threads_do(&propagator); _gc_state_changed = false; diff --git a/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp b/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp index 1f474baef46..338c99c7c55 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp @@ -44,113 +44,17 @@ #include "runtime/threads.hpp" #include "utilities/events.hpp" -class ShenandoahFlushAllSATB : public ThreadClosure { -private: - SATBMarkQueueSet& _satb_qset; - -public: - explicit ShenandoahFlushAllSATB(SATBMarkQueueSet& satb_qset) : - _satb_qset(satb_qset) {} - - void do_thread(Thread* thread) override { - // Transfer any partial buffer to the qset for completed buffer processing. - _satb_qset.flush_queue(ShenandoahThreadLocalData::satb_mark_queue(thread)); - } -}; - -class ShenandoahProcessOldSATB : public SATBBufferClosure { -private: - ShenandoahObjToScanQueue* _queue; - ShenandoahHeap* _heap; - ShenandoahMarkingContext* const _mark_context; - size_t _trashed_oops; - -public: - explicit ShenandoahProcessOldSATB(ShenandoahObjToScanQueue* q) : - _queue(q), - _heap(ShenandoahHeap::heap()), - _mark_context(_heap->marking_context()), - _trashed_oops(0) {} - - void do_buffer(void** buffer, size_t size) override { - assert(size == 0 || !_heap->has_forwarded_objects() || _heap->is_concurrent_old_mark_in_progress(), "Forwarded objects are not expected here"); - for (size_t i = 0; i < size; ++i) { - oop *p = (oop *) &buffer[i]; - ShenandoahHeapRegion* region = _heap->heap_region_containing(*p); - if (region->is_old() && region->is_active()) { - ShenandoahMark::mark_through_ref(p, _queue, nullptr, _mark_context, false); - } else { - _trashed_oops++; - } - } - } - - size_t trashed_oops() const { - return _trashed_oops; - } -}; - class ShenandoahPurgeSATBTask : public WorkerTask { -private: - ShenandoahObjToScanQueueSet* _mark_queues; - // Keep track of the number of oops that are not transferred to mark queues. - // This is volatile because workers update it, but the vm thread reads it. - volatile size_t _trashed_oops; - public: - explicit ShenandoahPurgeSATBTask(ShenandoahObjToScanQueueSet* queues) : - WorkerTask("Purge SATB"), - _mark_queues(queues), - _trashed_oops(0) { + explicit ShenandoahPurgeSATBTask() : WorkerTask("Purge SATB") { Threads::change_thread_claim_token(); } - ~ShenandoahPurgeSATBTask() { - if (_trashed_oops > 0) { - log_debug(gc)("Purged %zu oops from old generation SATB buffers", _trashed_oops); - } - } - void work(uint worker_id) override { ShenandoahParallelWorkerSession worker_session(worker_id); ShenandoahSATBMarkQueueSet &satb_queues = ShenandoahBarrierSet::satb_mark_queue_set(); - ShenandoahFlushAllSATB flusher(satb_queues); + ShenandoahFlushSATB flusher(satb_queues); Threads::possibly_parallel_threads_do(true /* is_par */, &flusher); - - ShenandoahObjToScanQueue* mark_queue = _mark_queues->queue(worker_id); - ShenandoahProcessOldSATB processor(mark_queue); - while (satb_queues.apply_closure_to_completed_buffer(&processor)) {} - - AtomicAccess::add(&_trashed_oops, processor.trashed_oops()); - } -}; - -class ShenandoahTransferOldSATBTask : public WorkerTask { - ShenandoahSATBMarkQueueSet& _satb_queues; - ShenandoahObjToScanQueueSet* _mark_queues; - // Keep track of the number of oops that are not transferred to mark queues. - // This is volatile because workers update it, but the control thread reads it. - volatile size_t _trashed_oops; - -public: - explicit ShenandoahTransferOldSATBTask(ShenandoahSATBMarkQueueSet& satb_queues, ShenandoahObjToScanQueueSet* mark_queues) : - WorkerTask("Transfer SATB"), - _satb_queues(satb_queues), - _mark_queues(mark_queues), - _trashed_oops(0) {} - - ~ShenandoahTransferOldSATBTask() { - if (_trashed_oops > 0) { - log_debug(gc)("Purged %zu oops from old generation SATB buffers", _trashed_oops); - } - } - - void work(uint worker_id) override { - ShenandoahObjToScanQueue* mark_queue = _mark_queues->queue(worker_id); - ShenandoahProcessOldSATB processor(mark_queue); - while (_satb_queues.apply_closure_to_completed_buffer(&processor)) {} - - AtomicAccess::add(&_trashed_oops, processor.trashed_oops()); } }; @@ -463,26 +367,11 @@ bool ShenandoahOldGeneration::coalesce_and_fill() { } } -void ShenandoahOldGeneration::concurrent_transfer_pointers_from_satb() const { - const ShenandoahHeap* heap = ShenandoahHeap::heap(); - assert(heap->is_concurrent_old_mark_in_progress(), "Only necessary during old marking."); - log_debug(gc)("Transfer SATB buffers"); - - // Step 1. All threads need to 'complete' partially filled, thread local SATB buffers. This - // is accomplished in ShenandoahConcurrentGC::complete_abbreviated_cycle using a Handshake - // operation. - // Step 2. Use worker threads to transfer oops from old, active regions in the completed - // SATB buffers to old generation mark queues. - ShenandoahSATBMarkQueueSet& satb_queues = ShenandoahBarrierSet::satb_mark_queue_set(); - ShenandoahTransferOldSATBTask transfer_task(satb_queues, task_queues()); - heap->workers()->run_task(&transfer_task); -} - void ShenandoahOldGeneration::transfer_pointers_from_satb() const { const ShenandoahHeap* heap = ShenandoahHeap::heap(); assert(heap->is_concurrent_old_mark_in_progress(), "Only necessary during old marking."); log_debug(gc)("Transfer SATB buffers"); - ShenandoahPurgeSATBTask purge_satb_task(task_queues()); + ShenandoahPurgeSATBTask purge_satb_task; heap->workers()->run_task(&purge_satb_task); } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.hpp b/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.hpp index 028ee18554c..cd78ed4ef5e 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.hpp @@ -228,26 +228,27 @@ public: // Cancels old gc and transitions to the idle state void cancel_gc(); - // We leave the SATB barrier on for the entirety of the old generation - // marking phase. In some cases, this can cause a write to a perfectly - // reachable oop to enqueue a pointer that later becomes garbage (because - // it points at an object that is later chosen for the collection set). There are - // also cases where the referent of a weak reference ends up in the SATB - // and is later collected. In these cases the oop in the SATB buffer becomes - // invalid and the _next_ cycle will crash during its marking phase. To - // avoid this problem, we "purge" the SATB buffers during the final update - // references phase if (and only if) an old generation mark is in progress. - // At this stage we can safely determine if any of the oops in the SATB - // buffer belong to trashed regions (before they are recycled). As it - // happens, flushing a SATB queue also filters out oops which have already - // been marked - which is the case for anything that is being evacuated - // from the collection set. + // The SATB barrier will be "enabled" until old marking completes. This means it is + // possible for an entire young collection cycle to execute while the SATB barrier is enabled. + // Consider a situation like this, where we have a pointer 'B' at an object 'A' which is in + // the young collection set: // - // Alternatively, we could inspect the state of the heap and the age of the - // object at the barrier, but we reject this approach because it is likely - // the performance impact would be too severe. + // +--Young, CSet------+ +--Young, Regular----+ + // | | | | + // | | | | + // | A <--------------------+ B | + // | | | | + // | | | | + // +-------------------+ +--------------------+ + // + // If a mutator thread overwrites pointer B, the SATB barrier will dutifully enqueue + // object A. However, this object will be trashed when the young cycle completes. We must, + // therefore, filter this object from the SATB buffer before any old mark threads see it. + // We do this with a handshake before final-update-refs (see shenandoahConcurrentGC.cpp). + // + // This method is here only for degenerated cycles. A concurrent cycle may be cancelled before + // we have a chance to execute the handshake to flush the SATB in final-update-refs. void transfer_pointers_from_satb() const; - void concurrent_transfer_pointers_from_satb() const; // True if there are old regions waiting to be selected for a mixed collection bool has_unprocessed_collection_candidates(); diff --git a/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.cpp b/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.cpp index 547ebb1a229..c2ed575b438 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.cpp @@ -28,7 +28,7 @@ #include "gc/shenandoah/shenandoahThreadLocalData.hpp" ShenandoahSATBMarkQueueSet::ShenandoahSATBMarkQueueSet(BufferNode::Allocator* allocator) : - SATBMarkQueueSet(allocator) + SATBMarkQueueSet(allocator), _filter_out_young(false) {} SATBMarkQueue& ShenandoahSATBMarkQueueSet::satb_queue_for_thread(Thread* const t) const { @@ -39,16 +39,33 @@ class ShenandoahSATBMarkQueueFilterFn { ShenandoahHeap* const _heap; public: - ShenandoahSATBMarkQueueFilterFn(ShenandoahHeap* heap) : _heap(heap) {} + explicit ShenandoahSATBMarkQueueFilterFn(ShenandoahHeap* heap) : _heap(heap) {} - // Return true if entry should be filtered out (removed), false if - // it should be retained. + // Return true if entry should be filtered out (removed), false if it should be retained. bool operator()(const void* entry) const { return !_heap->requires_marking(entry); } }; +class ShenandoahSATBOldMarkQueueFilterFn { + ShenandoahHeap* const _heap; + +public: + explicit ShenandoahSATBOldMarkQueueFilterFn(ShenandoahHeap* heap) : _heap(heap) {} + + // Return true if entry should be filtered out (removed), false if it should be retained. + bool operator()(const void* entry) const { + assert(_heap->is_concurrent_old_mark_in_progress(), "Should only use this when old marking is in progress"); + assert(!_heap->is_concurrent_young_mark_in_progress(), "Should only use this when young marking is not in progress"); + return !_heap->requires_marking(entry) || !_heap->is_in_old(entry); + } +}; + void ShenandoahSATBMarkQueueSet::filter(SATBMarkQueue& queue) { ShenandoahHeap* heap = ShenandoahHeap::heap(); - apply_filter(ShenandoahSATBMarkQueueFilterFn(heap), queue); + if (_filter_out_young) { + apply_filter(ShenandoahSATBOldMarkQueueFilterFn(heap), queue); + } else { + apply_filter(ShenandoahSATBMarkQueueFilterFn(heap), queue); + } } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.hpp b/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.hpp index c30d2507676..dd4cdfebc17 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahSATBMarkQueueSet.hpp @@ -27,15 +27,23 @@ #include "gc/shared/bufferNode.hpp" #include "gc/shared/satbMarkQueue.hpp" -#include "runtime/javaThread.hpp" -#include "runtime/mutex.hpp" class ShenandoahSATBMarkQueueSet : public SATBMarkQueueSet { -public: - ShenandoahSATBMarkQueueSet(BufferNode::Allocator* allocator); +private: + bool _filter_out_young; - virtual SATBMarkQueue& satb_queue_for_thread(Thread* const t) const; - virtual void filter(SATBMarkQueue& queue); +public: + explicit ShenandoahSATBMarkQueueSet(BufferNode::Allocator* allocator); + + SATBMarkQueue& satb_queue_for_thread(Thread* const t) const override; + void filter(SATBMarkQueue& queue) override; + void set_filter_out_young(bool filter_out_young) { + _filter_out_young = filter_out_young; + } + + bool get_filter_out_young() const { + return _filter_out_young; + } }; #endif // SHARE_GC_SHENANDOAH_SHENANDOAHSATBMARKQUEUESET_HPP From 90ccdf2986b0e3705997fe31a23fd53c88a1bfaf Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Thu, 6 Nov 2025 20:20:22 +0000 Subject: [PATCH 071/512] 8371367: Replace remaining JvmtiJavaThreadEventTransition with JVMTI_JAVA_THREAD_EVENT_CALLBACK_BLOCK Reviewed-by: sspitsyn, cjplummer --- src/hotspot/share/prims/jvmtiExport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/prims/jvmtiExport.cpp b/src/hotspot/share/prims/jvmtiExport.cpp index d241ca6110a..96437882584 100644 --- a/src/hotspot/share/prims/jvmtiExport.cpp +++ b/src/hotspot/share/prims/jvmtiExport.cpp @@ -1774,7 +1774,7 @@ void JvmtiExport::post_object_free(JvmtiEnv* env, GrowableArray* objects) EVT_TRACE(JVMTI_EVENT_OBJECT_FREE, ("[?] Evt Object Free sent")); JvmtiThreadEventMark jem(javaThread); - JvmtiJavaThreadEventTransition jet(javaThread); + JVMTI_JAVA_THREAD_EVENT_CALLBACK_BLOCK(javaThread) jvmtiEventObjectFree callback = env->callbacks()->ObjectFree; if (callback != nullptr) { for (int index = 0; index < objects->length(); index++) { From 8a0c47d4ba4db523d94689b3ac347e9cd35183ce Mon Sep 17 00:00:00 2001 From: Alexander Zvegintsev Date: Thu, 6 Nov 2025 20:24:20 +0000 Subject: [PATCH 072/512] 8371225: Missing release of GDK lock in Java_sun_awt_X11_GtkFileDialogPeer_run() Reviewed-by: aivanov, serb --- .../libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c b/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c index db6acc0f3d1..9e6fcd423ad 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/sun_awt_X11_GtkFileDialogPeer.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -324,8 +324,6 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer, JNU_CHECK_EXCEPTION(env); } - gtk->gdk_threads_enter(); - const char *title = jtitle == NULL? "": (*env)->GetStringUTFChars(env, jtitle, 0); if (title == NULL) { (*env)->ExceptionClear(env); @@ -333,6 +331,8 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer, return; } + gtk->gdk_threads_enter(); + if (mode == java_awt_FileDialog_SAVE) { /* Save action */ dialog = gtk->gtk_file_chooser_dialog_new(title, NULL, @@ -360,6 +360,7 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer, if (jdir != NULL) { const char *dir = (*env)->GetStringUTFChars(env, jdir, 0); if (dir == NULL) { + gtk->gdk_threads_leave(); (*env)->ExceptionClear(env); JNU_ThrowOutOfMemoryError(env, "Could not get dir"); return; @@ -372,6 +373,7 @@ Java_sun_awt_X11_GtkFileDialogPeer_run(JNIEnv * env, jobject jpeer, if (jfile != NULL) { const char *filename = (*env)->GetStringUTFChars(env, jfile, 0); if (filename == NULL) { + gtk->gdk_threads_leave(); (*env)->ExceptionClear(env); JNU_ThrowOutOfMemoryError(env, "Could not get filename"); return; From 8796611206438c6fe8bf0cba87dca089d9da2e30 Mon Sep 17 00:00:00 2001 From: Matias Saavedra Silva Date: Thu, 6 Nov 2025 21:03:54 +0000 Subject: [PATCH 073/512] 8272160: Avoid using 32-bit counters in CDS code Reviewed-by: iklam, kvn --- src/hotspot/share/cds/aotMetaspace.cpp | 6 ++-- src/hotspot/share/cds/archiveUtils.hpp | 4 +-- src/hotspot/share/cds/cdsHeapVerifier.cpp | 2 +- src/hotspot/share/cds/cdsHeapVerifier.hpp | 2 +- src/hotspot/share/cds/filemap.cpp | 2 +- src/hotspot/share/cds/heapShared.cpp | 40 +++++++++++------------ src/hotspot/share/cds/heapShared.hpp | 21 +++++------- 7 files changed, 37 insertions(+), 40 deletions(-) diff --git a/src/hotspot/share/cds/aotMetaspace.cpp b/src/hotspot/share/cds/aotMetaspace.cpp index 039c32a2bad..e5c1700dbfb 100644 --- a/src/hotspot/share/cds/aotMetaspace.cpp +++ b/src/hotspot/share/cds/aotMetaspace.cpp @@ -2057,13 +2057,13 @@ void AOTMetaspace::unmap_archive(FileMapInfo* mapinfo) { // For -XX:PrintSharedArchiveAndExit class CountSharedSymbols : public SymbolClosure { private: - int _count; + size_t _count; public: CountSharedSymbols() : _count(0) {} void do_symbol(Symbol** sym) { _count++; } - int total() { return _count; } + size_t total() { return _count; } }; @@ -2137,7 +2137,7 @@ void AOTMetaspace::initialize_shared_spaces() { // collect shared symbols and strings CountSharedSymbols cl; SymbolTable::shared_symbols_do(&cl); - tty->print_cr("Number of shared symbols: %d", cl.total()); + tty->print_cr("Number of shared symbols: %zu", cl.total()); tty->print_cr("Number of shared strings: %zu", StringTable::shared_entry_count()); tty->print_cr("VM version: %s\r\n", static_mapinfo->vm_version()); if (FileMapInfo::current_info() == nullptr || _archive_loading_failed) { diff --git a/src/hotspot/share/cds/archiveUtils.hpp b/src/hotspot/share/cds/archiveUtils.hpp index be423881008..79d894f0144 100644 --- a/src/hotspot/share/cds/archiveUtils.hpp +++ b/src/hotspot/share/cds/archiveUtils.hpp @@ -324,14 +324,14 @@ private: size_t _base_offset; size_t _count; int _roots_count; - int _max_size_in_bytes; + size_t _max_size_in_bytes; int _max_size_in_elems; public: size_t base_offset() { return _base_offset; } size_t count() { return _count; } int roots_count() { return _roots_count; } - int max_size_in_bytes() { return _max_size_in_bytes; } + size_t max_size_in_bytes() { return _max_size_in_bytes; } int max_size_in_elems() { return _max_size_in_elems; } size_t size_in_bytes(size_t seg_idx); diff --git a/src/hotspot/share/cds/cdsHeapVerifier.cpp b/src/hotspot/share/cds/cdsHeapVerifier.cpp index 59b07190c09..59c91c834d6 100644 --- a/src/hotspot/share/cds/cdsHeapVerifier.cpp +++ b/src/hotspot/share/cds/cdsHeapVerifier.cpp @@ -254,7 +254,7 @@ void CDSHeapVerifier::add_shared_secret_accessors() { CDSHeapVerifier::~CDSHeapVerifier() { if (_problems > 0) { - log_error(aot, heap)("Scanned %d objects. Found %d case(s) where " + log_error(aot, heap)("Scanned %zu objects. Found %d case(s) where " "an object points to a static field that " "may hold a different value at runtime.", _archived_objs, _problems); log_error(aot, heap)("Please see cdsHeapVerifier.cpp and aotClassInitializer.cpp for details"); diff --git a/src/hotspot/share/cds/cdsHeapVerifier.hpp b/src/hotspot/share/cds/cdsHeapVerifier.hpp index 88ef13c9e90..7f1bdb1d249 100644 --- a/src/hotspot/share/cds/cdsHeapVerifier.hpp +++ b/src/hotspot/share/cds/cdsHeapVerifier.hpp @@ -41,7 +41,7 @@ class CDSHeapVerifier : public KlassClosure { class SharedSecretsAccessorFinder; class TraceFields; - int _archived_objs; + size_t _archived_objs; int _problems; struct StaticFieldInfo { diff --git a/src/hotspot/share/cds/filemap.cpp b/src/hotspot/share/cds/filemap.cpp index 050c1708efb..b52861cecef 100644 --- a/src/hotspot/share/cds/filemap.cpp +++ b/src/hotspot/share/cds/filemap.cpp @@ -309,7 +309,7 @@ void FileMapHeader::print(outputStream* st) { st->print_cr("- heap_root_segments.base_offset: 0x%zx", _heap_root_segments.base_offset()); st->print_cr("- heap_root_segments.count: %zu", _heap_root_segments.count()); st->print_cr("- heap_root_segments.max_size_elems: %d", _heap_root_segments.max_size_in_elems()); - st->print_cr("- heap_root_segments.max_size_bytes: %d", _heap_root_segments.max_size_in_bytes()); + st->print_cr("- heap_root_segments.max_size_bytes: %zu", _heap_root_segments.max_size_in_bytes()); st->print_cr("- _heap_oopmap_start_pos: %zu", _heap_oopmap_start_pos); st->print_cr("- _heap_ptrmap_start_pos: %zu", _heap_ptrmap_start_pos); st->print_cr("- _rw_ptrmap_start_pos: %zu", _rw_ptrmap_start_pos); diff --git a/src/hotspot/share/cds/heapShared.cpp b/src/hotspot/share/cds/heapShared.cpp index 146ee4af1e0..3f4d584b0f5 100644 --- a/src/hotspot/share/cds/heapShared.cpp +++ b/src/hotspot/share/cds/heapShared.cpp @@ -1049,7 +1049,7 @@ void HeapShared::write_subgraph_info_table() { _run_time_subgraph_info_table.reset(); - CompactHashtableWriter writer(d_table->_count, &stats); + CompactHashtableWriter writer(d_table->number_of_entries(), &stats); CopyKlassSubGraphInfoToArchive copy(&writer); d_table->iterate(©); writer.dump(&_run_time_subgraph_info_table, "subgraphs"); @@ -1820,15 +1820,15 @@ void HeapShared::check_special_subgraph_classes() { HeapShared::SeenObjectsTable* HeapShared::_seen_objects_table = nullptr; HeapShared::PendingOop HeapShared::_object_being_archived; -int HeapShared::_num_new_walked_objs; -int HeapShared::_num_new_archived_objs; -int HeapShared::_num_old_recorded_klasses; +size_t HeapShared::_num_new_walked_objs; +size_t HeapShared::_num_new_archived_objs; +size_t HeapShared::_num_old_recorded_klasses; -int HeapShared::_num_total_subgraph_recordings = 0; -int HeapShared::_num_total_walked_objs = 0; -int HeapShared::_num_total_archived_objs = 0; -int HeapShared::_num_total_recorded_klasses = 0; -int HeapShared::_num_total_verifications = 0; +size_t HeapShared::_num_total_subgraph_recordings = 0; +size_t HeapShared::_num_total_walked_objs = 0; +size_t HeapShared::_num_total_archived_objs = 0; +size_t HeapShared::_num_total_recorded_klasses = 0; +size_t HeapShared::_num_total_verifications = 0; bool HeapShared::has_been_seen_during_subgraph_recording(oop obj) { return _seen_objects_table->get(obj) != nullptr; @@ -1851,10 +1851,10 @@ void HeapShared::start_recording_subgraph(InstanceKlass *k, const char* class_na } void HeapShared::done_recording_subgraph(InstanceKlass *k, const char* class_name) { - int num_new_recorded_klasses = get_subgraph_info(k)->num_subgraph_object_klasses() - + size_t num_new_recorded_klasses = get_subgraph_info(k)->num_subgraph_object_klasses() - _num_old_recorded_klasses; log_info(aot, heap)("Done recording subgraph(s) for archived fields in %s: " - "walked %d objs, archived %d new objs, recorded %d classes", + "walked %zu objs, archived %zu new objs, recorded %zu classes", class_name, _num_new_walked_objs, _num_new_archived_objs, num_new_recorded_klasses); @@ -2102,18 +2102,18 @@ void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[], done_recording_subgraph(info->klass, klass_name); } - log_info(aot, heap)("Archived subgraph records = %d", + log_info(aot, heap)("Archived subgraph records = %zu", _num_total_subgraph_recordings); - log_info(aot, heap)(" Walked %d objects", _num_total_walked_objs); - log_info(aot, heap)(" Archived %d objects", _num_total_archived_objs); - log_info(aot, heap)(" Recorded %d klasses", _num_total_recorded_klasses); + log_info(aot, heap)(" Walked %zu objects", _num_total_walked_objs); + log_info(aot, heap)(" Archived %zu objects", _num_total_archived_objs); + log_info(aot, heap)(" Recorded %zu klasses", _num_total_recorded_klasses); #ifndef PRODUCT for (int i = 0; fields[i].valid(); i++) { ArchivableStaticFieldInfo* f = &fields[i]; verify_subgraph_from_static_field(f->klass, f->offset); } - log_info(aot, heap)(" Verified %d references", _num_total_verifications); + log_info(aot, heap)(" Verified %zu references", _num_total_verifications); #endif } @@ -2165,8 +2165,8 @@ void HeapShared::debug_trace() { class FindEmbeddedNonNullPointers: public BasicOopIterateClosure { void* _start; BitMap *_oopmap; - int _num_total_oops; - int _num_null_oops; + size_t _num_total_oops; + size_t _num_null_oops; public: FindEmbeddedNonNullPointers(void* start, BitMap* oopmap) : _start(start), _oopmap(oopmap), _num_total_oops(0), _num_null_oops(0) {} @@ -2192,8 +2192,8 @@ class FindEmbeddedNonNullPointers: public BasicOopIterateClosure { _num_null_oops ++; } } - int num_total_oops() const { return _num_total_oops; } - int num_null_oops() const { return _num_null_oops; } + size_t num_total_oops() const { return _num_total_oops; } + size_t num_null_oops() const { return _num_null_oops; } }; #endif diff --git a/src/hotspot/share/cds/heapShared.hpp b/src/hotspot/share/cds/heapShared.hpp index c877748fe9c..cc41fb1dec7 100644 --- a/src/hotspot/share/cds/heapShared.hpp +++ b/src/hotspot/share/cds/heapShared.hpp @@ -217,10 +217,7 @@ private: 137, // prime number AnyObj::C_HEAP, mtClassShared, - DumpTimeSharedClassTable_hash> { - public: - int _count; - }; + DumpTimeSharedClassTable_hash> {}; public: // solaris compiler wants this for RunTimeKlassSubGraphInfoTable inline static bool record_equals_compact_hashtable_entry( @@ -301,16 +298,16 @@ private: } // Statistics (for one round of start_recording_subgraph ... done_recording_subgraph) - static int _num_new_walked_objs; - static int _num_new_archived_objs; - static int _num_old_recorded_klasses; + static size_t _num_new_walked_objs; + static size_t _num_new_archived_objs; + static size_t _num_old_recorded_klasses; // Statistics (for all archived subgraphs) - static int _num_total_subgraph_recordings; - static int _num_total_walked_objs; - static int _num_total_archived_objs; - static int _num_total_recorded_klasses; - static int _num_total_verifications; + static size_t _num_total_subgraph_recordings; + static size_t _num_total_walked_objs; + static size_t _num_total_archived_objs; + static size_t _num_total_recorded_klasses; + static size_t _num_total_verifications; static void start_recording_subgraph(InstanceKlass *k, const char* klass_name, bool is_full_module_graph); From e34a831814996be3e0a2df86b11b1718a76ea558 Mon Sep 17 00:00:00 2001 From: Rui Li Date: Thu, 6 Nov 2025 23:46:50 +0000 Subject: [PATCH 074/512] 8261743: Shenandoah: enable String deduplication with compact heuristics Reviewed-by: shade, wkemper --- .../gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp index 592bba67757..f8a77d95d51 100644 --- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp +++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp @@ -38,6 +38,7 @@ ShenandoahCompactHeuristics::ShenandoahCompactHeuristics(ShenandoahSpaceInfo* sp SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahImplicitGCInvokesConcurrent); SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahUncommit); SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahAlwaysClearSoftRefs); + SHENANDOAH_ERGO_ENABLE_FLAG(UseStringDeduplication); SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahAllocationThreshold, 10); SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahImmediateThreshold, 100); SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahUncommitDelay, 1000); From 866faa9d40ab336e4c4861a55edc4c91d8aa0c74 Mon Sep 17 00:00:00 2001 From: Volkan Yazici Date: Fri, 7 Nov 2025 08:15:42 +0000 Subject: [PATCH 075/512] 8366577: Deprecate java.net.Socket::setPerformancePreferences Reviewed-by: dfuchs, alanb, jpai --- src/java.base/share/classes/java/net/ServerSocket.java | 4 ++++ src/java.base/share/classes/java/net/Socket.java | 4 ++++ src/java.base/share/classes/java/net/SocketImpl.java | 4 ++++ .../share/classes/sun/security/ssl/BaseSSLSocketImpl.java | 3 ++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/net/ServerSocket.java b/src/java.base/share/classes/java/net/ServerSocket.java index af7cedfd966..21061c2dae1 100644 --- a/src/java.base/share/classes/java/net/ServerSocket.java +++ b/src/java.base/share/classes/java/net/ServerSocket.java @@ -947,7 +947,11 @@ public class ServerSocket implements java.io.Closeable { * bandwidth * * @since 1.5 + * + * @deprecated This method was intended to allow for protocols that are now + * obsolete. */ + @Deprecated(since = "26", forRemoval = true) public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) diff --git a/src/java.base/share/classes/java/net/Socket.java b/src/java.base/share/classes/java/net/Socket.java index a2aee2e45a1..42ca5314b78 100644 --- a/src/java.base/share/classes/java/net/Socket.java +++ b/src/java.base/share/classes/java/net/Socket.java @@ -1853,7 +1853,11 @@ public class Socket implements java.io.Closeable { * bandwidth * * @since 1.5 + * + * @deprecated This method was intended to allow for protocols that are now + * obsolete. */ + @Deprecated(since = "26", forRemoval = true) public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) diff --git a/src/java.base/share/classes/java/net/SocketImpl.java b/src/java.base/share/classes/java/net/SocketImpl.java index 15c12457aac..27489aa9947 100644 --- a/src/java.base/share/classes/java/net/SocketImpl.java +++ b/src/java.base/share/classes/java/net/SocketImpl.java @@ -357,7 +357,11 @@ public abstract class SocketImpl implements SocketOptions { * bandwidth * * @since 1.5 + * + * @deprecated This method was intended to allow for protocols that are now + * obsolete. */ + @Deprecated(since = "26", forRemoval = true) protected void setPerformancePreferences(int connectionTime, int latency, int bandwidth) diff --git a/src/java.base/share/classes/sun/security/ssl/BaseSSLSocketImpl.java b/src/java.base/share/classes/sun/security/ssl/BaseSSLSocketImpl.java index 20bb67c06d6..a24d6e5799c 100644 --- a/src/java.base/share/classes/sun/security/ssl/BaseSSLSocketImpl.java +++ b/src/java.base/share/classes/sun/security/ssl/BaseSSLSocketImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -556,6 +556,7 @@ abstract class BaseSSLSocketImpl extends SSLSocket { * @see java.net.Socket#setPerformancePreferences(int, int, int) */ @Override + @SuppressWarnings("removal") public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) { if (self == this) { From 205a163a90bb263d403476c28203836189e337a7 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Fri, 7 Nov 2025 09:06:51 +0000 Subject: [PATCH 076/512] 8340840: jshell ClassFormatError when making inner class static 8368999: jshell crash when existing sealed class is updated to also be abstract Reviewed-by: mcimadamore, asotona, liach --- .../com/sun/tools/javac/jvm/ClassReader.java | 20 +- .../tools/javac/resources/compiler.properties | 6 + .../jshell/execution/JdiExecutionControl.java | 4 +- test/langtools/jdk/jshell/ReplaceTest.java | 37 ++- .../InconsistentInnerClasses.java | 30 ++ .../classpath/p/Other.java | 25 ++ .../classpath/p/Test.java | 25 ++ .../SourceAndInnerClassInconsistency.java | 277 ++++++++++++++++++ 8 files changed, 413 insertions(+), 11 deletions(-) create mode 100644 test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/InconsistentInnerClasses.java create mode 100644 test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Other.java create mode 100644 test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Test.java create mode 100644 test/langtools/tools/javac/recovery/SourceAndInnerClassInconsistency.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java index 6f1ad28586d..b7bf48b4a12 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -3152,14 +3152,18 @@ public class ClassReader { if (name == names.empty) name = names.one; ClassSymbol member = enterClass(name, outer); - if ((flags & STATIC) == 0) { - ((ClassType)member.type).setEnclosingType(outer.type); - if (member.erasure_field != null) - ((ClassType)member.erasure_field).setEnclosingType(types.erasure(outer.type)); - } - if (c == outer && member.owner == c) { - member.flags_field = flags; - enterMember(c, member); + if ((member.flags_field & FROM_SOURCE) == 0) { + if ((flags & STATIC) == 0) { + ((ClassType)member.type).setEnclosingType(outer.type); + if (member.erasure_field != null) + ((ClassType)member.erasure_field).setEnclosingType(types.erasure(outer.type)); + } + if (c == outer && member.owner == c) { + member.flags_field = flags; + enterMember(c, member); + } + } else if ((flags & STATIC) != (member.flags_field & STATIC)) { + log.warning(LintWarnings.InconsistentInnerClasses(member, currentClassFile)); } } } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index 4e034ff1bc8..6318476fca4 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -2258,6 +2258,12 @@ compiler.warn.option.obsolete.suppression=\ compiler.warn.future.attr=\ {0} attribute introduced in version {1}.{2} class files is ignored in version {3}.{4} class files +# 0: symbol, 1: file object +# lint: classfile +compiler.warn.inconsistent.inner.classes=\ + InnerClasses attribute for {0} in {1} inconsistent with source code\n\ + ({1} may need to be recompiled with {0}) + # lint: requires-automatic compiler.warn.requires.automatic=\ requires directive for an automatic module diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControl.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControl.java index 3084c601cc5..176e3530f39 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControl.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,7 @@ public abstract class JdiExecutionControl extends StreamingExecutionControl impl vm().redefineClasses(rmp); } catch (EngineTerminationException ex) { throw ex; - } catch (Exception ex) { + } catch (Exception | LinkageError ex) { throw new ClassInstallException("redefine: " + ex.getMessage(), new boolean[cbcs.length]); } // forward the redefine to remote-end to register the redefined bytecode diff --git a/test/langtools/jdk/jshell/ReplaceTest.java b/test/langtools/jdk/jshell/ReplaceTest.java index 02ebb27fcb9..6b9471b6bc4 100644 --- a/test/langtools/jdk/jshell/ReplaceTest.java +++ b/test/langtools/jdk/jshell/ReplaceTest.java @@ -22,7 +22,7 @@ */ /* - * @test 8080069 8152925 + * @test 8080069 8152925 8340840 8368999 * @summary Test of Snippet redefinition and replacement. * @build KullaTesting TestingInputStream * @run junit ReplaceTest @@ -282,4 +282,39 @@ public class ReplaceTest extends KullaTesting { ste(MAIN_SNIPPET, VALID, VALID, true, null), ste(xi2, VALID, OVERWRITTEN, false, MAIN_SNIPPET))); } + + @Test //JDK-8368999 + public void testLinkageErrorWhileRedefine() { + Snippet iKey = classKey(assertEval("sealed interface I permits C {}", + ste(MAIN_SNIPPET, NONEXISTENT, RECOVERABLE_NOT_DEFINED, false, null))); + Snippet cKey = classKey(assertEval("sealed class C implements I permits SubC {}", + ste(MAIN_SNIPPET, NONEXISTENT, RECOVERABLE_NOT_DEFINED, false, null))); + Snippet subCKey = classKey(assertEval("final class SubC extends C {}", + ste(MAIN_SNIPPET, NONEXISTENT, VALID, true, null), + ste(iKey, RECOVERABLE_NOT_DEFINED, VALID, true, null), + ste(cKey, RECOVERABLE_NOT_DEFINED, VALID, true, null))); + assertEval("sealed abstract class C implements I permits SubC {}", + ste(MAIN_SNIPPET, VALID, VALID, true, null), + ste(iKey, VALID, VALID, true, null), + ste(subCKey, VALID, VALID, true, null), + ste(cKey, VALID, OVERWRITTEN, false, null)); + } + + @Test //JDK-8340840 + public void testStaticNonStatic() { + Snippet oKey = classKey(assertEval("class O { class I {} }")); + Snippet vKey = varKey(assertEval("var i = new O().new I();")); + assertEval("class O { static class I {} }", + DiagCheck.DIAG_OK, + DiagCheck.DIAG_ERROR, + ste(MAIN_SNIPPET, VALID, VALID, true, null), + ste(vKey, VALID, RECOVERABLE_NOT_DEFINED, true, null), + ste(oKey, VALID, OVERWRITTEN, false, null)); + assertEval("var i2 = new O.I();"); + assertEval("var i = new O.I();", + DiagCheck.DIAG_OK, + DiagCheck.DIAG_IGNORE, //there are errors in the original (replaced) Snippet + ste(MAIN_SNIPPET, RECOVERABLE_NOT_DEFINED, VALID, true, null), + ste(vKey, RECOVERABLE_NOT_DEFINED, OVERWRITTEN, false, null)); + } } diff --git a/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/InconsistentInnerClasses.java b/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/InconsistentInnerClasses.java new file mode 100644 index 00000000000..f3a0bc977cb --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/InconsistentInnerClasses.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// key: compiler.warn.inconsistent.inner.classes +// options: -Xlint:classfile + +class Test { + Other o; + public class Nested {} +} diff --git a/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Other.java b/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Other.java new file mode 100644 index 00000000000..c3de73058f6 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Other.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +class Other { + Test.Nested n; +} diff --git a/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Test.java b/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Test.java new file mode 100644 index 00000000000..81638da2853 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/InconsistentInnerClasses/classpath/p/Test.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +class Test { + public static class Nested { } +} diff --git a/test/langtools/tools/javac/recovery/SourceAndInnerClassInconsistency.java b/test/langtools/tools/javac/recovery/SourceAndInnerClassInconsistency.java new file mode 100644 index 00000000000..0dfda503288 --- /dev/null +++ b/test/langtools/tools/javac/recovery/SourceAndInnerClassInconsistency.java @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8340840 + * @summary Ensure InnerClasses attribute from a classfile won't overwrite properties + * of a source-based class + * @library /tools/lib + * @modules jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * @build toolbox.ToolBox toolbox.JavacTask + * @run junit SourceAndInnerClassInconsistency + */ + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.Objects; + +import org.junit.jupiter.api.Test; +import toolbox.JavacTask; +import toolbox.Task; +import toolbox.ToolBox; + +public class SourceAndInnerClassInconsistency { + + ToolBox tb = new ToolBox(); + + @Test + public void testNonStaticToStatic() throws Exception { + Path base = Paths.get("."); + Path src = base.resolve("src"); + Path classes = base.resolve("classes"); + + tb.writeJavaFiles(src, + """ + public class Complex { + public class Nested {} + } + """, + """ + public class Other { + Complex.Nested n; + } + """); + + Files.createDirectories(classes); + + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .files(tb.findJavaFiles(src)) + .outdir(classes) + .run() + .writeAll(); + + tb.writeJavaFiles(src, + """ + public class Complex { + public static class Nested {} + private void t() { + Other o; + } + } + """); + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll(); + List log = new JavacTask(tb) + .options("-XDrawDiagnostics", "-Xlint:classfile") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + List expected = List.of( + "- compiler.warn.inconsistent.inner.classes: Complex.Nested, Other.class", + "1 warning" + ); + if (!Objects.equals(expected, log)) { + throw new AssertionError("Wrong output, expected: " + expected + + ", got: " + log); + } + } + + @Test + public void testStaticToNonStatic() throws Exception { + Path base = Paths.get("."); + Path src = base.resolve("src"); + Path classes = base.resolve("classes"); + + tb.writeJavaFiles(src, + """ + public class Complex { + public static class Nested {} + } + """, + """ + public class Other { + Complex.Nested n; + } + """); + + Files.createDirectories(classes); + + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .files(tb.findJavaFiles(src)) + .outdir(classes) + .run() + .writeAll(); + + tb.writeJavaFiles(src, + """ + public class Complex { + public class Nested {} + private void t() { + Other o; + } + } + """); + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll(); + List log = new JavacTask(tb) + .options("-XDrawDiagnostics", "-Xlint:classfile") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + List expected = List.of( + "- compiler.warn.inconsistent.inner.classes: Complex.Nested, Other.class", + "1 warning" + ); + if (!Objects.equals(expected, log)) { + throw new AssertionError("Wrong output, expected: " + expected + + ", got: " + log); + } + } + + @Test + public void testNoWarning() throws Exception { + Path base = Paths.get("."); + Path src = base.resolve("src"); + Path classes = base.resolve("classes"); + + tb.writeJavaFiles(src, + """ + public class Complex { + public static class Nested {} + } + """, + """ + public class Other { + Complex.Nested n; + } + """); + + Files.createDirectories(classes); + + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .files(tb.findJavaFiles(src)) + .outdir(classes) + .run() + .writeAll(); + + tb.writeJavaFiles(src, + """ + public class Complex { + public static class Nested {} + private void t() { + Other o; + } + } + """); + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll(); + new JavacTask(tb) + .options("-XDrawDiagnostics", "-Xlint:classfile", "-Werror") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll(); + } + + @Test + public void testSuppress() throws Exception { + Path base = Paths.get("."); + Path src = base.resolve("src"); + Path classes = base.resolve("classes"); + + tb.writeJavaFiles(src, + """ + public class Complex { + public static class Nested {} + } + """, + """ + public class Other { + Complex.Nested n; + } + """); + + Files.createDirectories(classes); + + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .files(tb.findJavaFiles(src)) + .outdir(classes) + .run() + .writeAll(); + + tb.writeJavaFiles(src, + """ + public class Complex { + public class Nested {} + private void t() { + Other o; + } + } + """); + new JavacTask(tb) + .options("-XDrawDiagnostics", "-XDdev") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll(); + new JavacTask(tb) + .options("-XDrawDiagnostics", "-Xlint:-classfile", "-Werror") + .classpath(classes) + .files(src.resolve("Complex.java")) + .outdir(classes) + .run() + .writeAll(); + } + +} From 48bbc950f11113a57ea03f877bc3e526982c0eef Mon Sep 17 00:00:00 2001 From: Tobias Hartmann Date: Fri, 7 Nov 2025 09:17:21 +0000 Subject: [PATCH 077/512] 8371388: [BACKOUT] JDK-8365047: Remove exception handler stub code in C2 Reviewed-by: chagedorn, epeter --- src/hotspot/cpu/aarch64/aarch64.ad | 37 +++- .../cpu/aarch64/c1_LIRAssembler_aarch64.cpp | 12 +- .../cpu/aarch64/c1_LIRAssembler_aarch64.hpp | 2 +- .../cpu/aarch64/nativeInst_aarch64.cpp | 6 + .../cpu/aarch64/nativeInst_aarch64.hpp | 22 +-- src/hotspot/cpu/aarch64/runtime_aarch64.cpp | 2 + src/hotspot/cpu/arm/arm.ad | 49 ++++-- src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp | 10 +- src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp | 2 +- src/hotspot/cpu/arm/runtime_arm.cpp | 2 + src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp | 7 +- src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp | 2 +- src/hotspot/cpu/ppc/ppc.ad | 35 ++-- src/hotspot/cpu/ppc/runtime_ppc.cpp | 1 + src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp | 19 ++- .../cpu/riscv/c1_LIRAssembler_riscv.cpp | 12 +- .../cpu/riscv/c1_LIRAssembler_riscv.hpp | 2 +- src/hotspot/cpu/riscv/riscv.ad | 37 +++- src/hotspot/cpu/riscv/runtime_riscv.cpp | 2 + src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp | 15 +- src/hotspot/cpu/s390/runtime_s390.cpp | 2 + src/hotspot/cpu/s390/s390.ad | 54 ++++-- src/hotspot/cpu/s390/sharedRuntime_s390.cpp | 6 +- src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp | 14 +- src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp | 2 +- src/hotspot/cpu/x86/runtime_x86_64.cpp | 2 + src/hotspot/cpu/x86/x86.ad | 51 ++++-- src/hotspot/os/posix/signals_posix.cpp | 2 +- src/hotspot/os/windows/os_windows.cpp | 2 +- src/hotspot/share/ci/ciEnv.cpp | 4 +- src/hotspot/share/code/nmethod.cpp | 23 +-- src/hotspot/share/code/nmethod.hpp | 4 +- src/hotspot/share/code/nmethod.inline.hpp | 2 +- src/hotspot/share/opto/output.cpp | 6 +- src/hotspot/share/runtime/deoptimization.cpp | 3 - src/hotspot/share/runtime/frame.cpp | 4 +- src/hotspot/share/runtime/sharedRuntime.cpp | 8 - src/hotspot/share/runtime/vmStructs.cpp | 2 +- .../classes/sun/jvm/hotspot/code/NMethod.java | 28 +-- .../sun/jvm/hotspot/runtime/Frame.java | 2 +- .../jtreg/runtime/vthread/Deoptimization.java | 159 ------------------ 41 files changed, 302 insertions(+), 354 deletions(-) delete mode 100644 test/hotspot/jtreg/runtime/vthread/Deoptimization.java diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad index 44d7bf1e0fa..e8f9733fe7e 100644 --- a/src/hotspot/cpu/aarch64/aarch64.ad +++ b/src/hotspot/cpu/aarch64/aarch64.ad @@ -1,7 +1,6 @@ // // Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. // Copyright (c) 2014, 2024, Red Hat, Inc. All rights reserved. -// Copyright 2025 Arm Limited and/or its affiliates. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // // This code is free software; you can redistribute it and/or modify it @@ -1195,10 +1194,15 @@ class HandlerImpl { public: + static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); + static uint size_exception_handler() { + return MacroAssembler::far_codestub_branch_size(); + } + static uint size_deopt_handler() { - // count one branch instruction and one far call instruction sequence + // count one adr and one far branch instruction return NativeInstruction::instruction_size + MacroAssembler::far_codestub_branch_size(); } }; @@ -2257,6 +2261,25 @@ uint MachUEPNode::size(PhaseRegAlloc* ra_) const //============================================================================= +// Emit exception handler code. +int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) +{ + // mov rscratch1 #exception_blob_entry_point + // br rscratch1 + // Note that the code buffer's insts_mark is always relative to insts. + // That's why we must use the macroassembler to generate a handler. + address base = __ start_a_stub(size_exception_handler()); + if (base == nullptr) { + ciEnv::current()->record_failure("CodeCache is full"); + return 0; // CodeBuffer::expand failed + } + int offset = __ offset(); + __ far_jump(RuntimeAddress(OptoRuntime::exception_blob()->entry_point())); + assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); + __ end_a_stub(); + return offset; +} + // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -2267,18 +2290,14 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) ciEnv::current()->record_failure("CodeCache is full"); return 0; // CodeBuffer::expand failed } - int offset = __ offset(); - Label start; - __ bind(start); - __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); - int entry_offset = __ offset(); - __ b(start); + __ adr(lr, __ pc()); + __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); assert(__ offset() - offset == (int) size_deopt_handler(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } // REQUIRED MATCHER CODE diff --git a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp index 2498a646e31..9ab463125fe 100644 --- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp @@ -449,18 +449,12 @@ int LIR_Assembler::emit_deopt_handler() { int offset = code_offset(); - Label start; - __ bind(start); - - __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); - - int entry_offset = __ offset(); - __ b(start); - + __ adr(lr, pc()); + __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } void LIR_Assembler::add_debug_info_for_branch(address adr, CodeEmitInfo* info) { diff --git a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp index 729cd2827b7..12b941fc4f7 100644 --- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.hpp @@ -71,7 +71,7 @@ friend class ArrayCopyStub; // CompiledDirectCall::to_trampoline_stub_size() _call_stub_size = 13 * NativeInstruction::instruction_size, _exception_handler_size = DEBUG_ONLY(1*K) NOT_DEBUG(175), - _deopt_handler_size = 4 * NativeInstruction::instruction_size + _deopt_handler_size = 7 * NativeInstruction::instruction_size }; public: diff --git a/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp b/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp index f2003dd9b55..5a7fececafa 100644 --- a/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp @@ -394,6 +394,12 @@ void NativePostCallNop::make_deopt() { NativeDeoptInstruction::insert(addr_at(0)); } +#ifdef ASSERT +static bool is_movk_to_zr(uint32_t insn) { + return ((insn & 0xffe0001f) == 0xf280001f); +} +#endif + bool NativePostCallNop::patch(int32_t oopmap_slot, int32_t cb_offset) { if (((oopmap_slot & 0xff) != oopmap_slot) || ((cb_offset & 0xffffff) != cb_offset)) { return false; // cannot encode diff --git a/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp b/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp index b7444347bf1..df5d97c2376 100644 --- a/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp @@ -526,24 +526,14 @@ inline NativeLdSt* NativeLdSt_at(address addr) { // can store an offset from the initial nop to the nmethod. class NativePostCallNop: public NativeInstruction { -private: - static bool is_movk_to_zr(uint32_t insn) { - return ((insn & 0xffe0001f) == 0xf280001f); - } - public: bool check() const { - // Check the first instruction is NOP. - if (is_nop()) { - uint32_t insn = *(uint32_t*)addr_at(4); - // Check next instruction is MOVK zr, xx. - // These instructions only ever appear together in a post-call - // NOP, so it's unnecessary to check that the third instruction is - // a MOVK as well. - return is_movk_to_zr(insn); - } - - return false; + uint64_t insns = *(uint64_t*)addr_at(0); + // Check for two instructions: nop; movk zr, xx + // These instructions only ever appear together in a post-call + // NOP, so it's unnecessary to check that the third instruction is + // a MOVK as well. + return (insns & 0xffe0001fffffffff) == 0xf280001fd503201f; } bool decode(int32_t& oopmap_slot, int32_t& cb_offset) const { diff --git a/src/hotspot/cpu/aarch64/runtime_aarch64.cpp b/src/hotspot/cpu/aarch64/runtime_aarch64.cpp index e36aa21b567..d45f9865bd2 100644 --- a/src/hotspot/cpu/aarch64/runtime_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/runtime_aarch64.cpp @@ -260,6 +260,8 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end +// Using exception blob, this code is jumped from a compiled method. +// (see emit_exception_handler in aarch64.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/arm/arm.ad b/src/hotspot/cpu/arm/arm.ad index eb9b0ed8fba..31a442be624 100644 --- a/src/hotspot/cpu/arm/arm.ad +++ b/src/hotspot/cpu/arm/arm.ad @@ -105,8 +105,14 @@ class HandlerImpl { public: + static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); + static uint size_exception_handler() { + return ( 3 * 4 ); + } + + static uint size_deopt_handler() { return ( 9 * 4 ); } @@ -870,6 +876,26 @@ uint MachUEPNode::size(PhaseRegAlloc *ra_) const { //============================================================================= +// Emit exception handler code. +int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) { + address base = __ start_a_stub(size_exception_handler()); + if (base == nullptr) { + ciEnv::current()->record_failure("CodeCache is full"); + return 0; // CodeBuffer::expand failed + } + + int offset = __ offset(); + + // OK to trash LR, because exception blob will kill it + __ jump(OptoRuntime::exception_blob()->entry_point(), relocInfo::runtime_call_type, LR_tmp); + + assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); + + __ end_a_stub(); + + return offset; +} + int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { // Can't use any of the current frame's registers as we may have deopted // at a poll and everything can be live. @@ -880,26 +906,19 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { } int offset = __ offset(); - - Label start; - __ bind(start); - - __ jump(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type, noreg); - - int entry_offset = __ offset(); address deopt_pc = __ pc(); - // Preserve R0 and reserve space for the address of the entry point - __ push(RegisterSet(R0) | RegisterSet(R1)); - // Store the entry point address - __ mov_relative_address(R0, deopt_pc); - __ str(R0, Address(SP, wordSize)); - __ pop(R0); // restore R0 - __ b(start); + + __ sub(SP, SP, wordSize); // make room for saved PC + __ push(LR); // save LR that may be live when we get here + __ mov_relative_address(LR, deopt_pc); + __ str(LR, Address(SP, wordSize)); // save deopt PC + __ pop(LR); // restore LR + __ jump(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type, noreg); assert(__ offset() - offset <= (int) size_deopt_handler(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } bool Matcher::match_rule_supported(int opcode) { diff --git a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp index 1d7c1579502..219c49d1f14 100644 --- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp @@ -272,20 +272,14 @@ int LIR_Assembler::emit_deopt_handler() { int offset = code_offset(); - Label start; - __ bind(start); - - __ jump(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type, noreg); - - int entry_offset = __ offset(); __ mov_relative_address(LR, __ pc()); __ push(LR); // stub expects LR to be saved - __ b(start); + __ jump(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type, noreg); assert(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } diff --git a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp index 615d2f188ff..77d13532685 100644 --- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp +++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.hpp @@ -54,7 +54,7 @@ enum { _call_stub_size = 16, _exception_handler_size = PRODUCT_ONLY(68) NOT_PRODUCT(68+60), - _deopt_handler_size = 20 + _deopt_handler_size = 16 }; public: diff --git a/src/hotspot/cpu/arm/runtime_arm.cpp b/src/hotspot/cpu/arm/runtime_arm.cpp index 29fd0aa0a10..8d48de5795a 100644 --- a/src/hotspot/cpu/arm/runtime_arm.cpp +++ b/src/hotspot/cpu/arm/runtime_arm.cpp @@ -182,6 +182,8 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------ generate_exception_blob --------------------------- // creates exception blob at the end +// Using exception blob, this code is jumped from a compiled method. +// (see emit_exception_handler in sparc.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp index 7898500cff2..108da2039f6 100644 --- a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp @@ -264,17 +264,12 @@ int LIR_Assembler::emit_deopt_handler() { } int offset = code_offset(); - Label start; - - __ bind(start); __ bl64_patchable(SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type); - int entry_offset = __ offset(); - __ b(start); guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } diff --git a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp index 6a2f6264850..e4de2eb5c46 100644 --- a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.hpp @@ -63,7 +63,7 @@ enum { _static_call_stub_size = 4 * BytesPerInstWord + MacroAssembler::b64_patchable_size, // or smaller _call_stub_size = _static_call_stub_size + MacroAssembler::trampoline_stub_size, // or smaller _exception_handler_size = MacroAssembler::b64_patchable_size, // or smaller - _deopt_handler_size = MacroAssembler::bl64_patchable_size + BytesPerInstWord + _deopt_handler_size = MacroAssembler::bl64_patchable_size }; // '_static_call_stub_size' is only used on ppc (see LIR_Assembler::emit_static_call_stub() diff --git a/src/hotspot/cpu/ppc/ppc.ad b/src/hotspot/cpu/ppc/ppc.ad index 5c44fc19704..36326e5fdb7 100644 --- a/src/hotspot/cpu/ppc/ppc.ad +++ b/src/hotspot/cpu/ppc/ppc.ad @@ -2088,11 +2088,17 @@ class HandlerImpl { public: + static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); + static uint size_exception_handler() { + // The exception_handler is a b64_patchable. + return MacroAssembler::b64_patchable_size; + } + static uint size_deopt_handler() { // The deopt_handler is a bl64_patchable. - return MacroAssembler::bl64_patchable_size + BytesPerInstWord; + return MacroAssembler::bl64_patchable_size; } }; @@ -2108,6 +2114,22 @@ public: source %{ +int HandlerImpl::emit_exception_handler(C2_MacroAssembler *masm) { + address base = __ start_a_stub(size_exception_handler()); + if (base == nullptr) { + ciEnv::current()->record_failure("CodeCache is full"); + return 0; // CodeBuffer::expand failed + } + + int offset = __ offset(); + __ b64_patchable((address)OptoRuntime::exception_blob()->content_begin(), + relocInfo::runtime_call_type); + assert(__ offset() - offset == (int)size_exception_handler(), "must be fixed size"); + __ end_a_stub(); + + return offset; +} + // The deopt_handler is like the exception handler, but it calls to // the deoptimization blob instead of jumping to the exception blob. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -2118,21 +2140,12 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { } int offset = __ offset(); - - Label start; - __ bind(start); - __ bl64_patchable((address)SharedRuntime::deopt_blob()->unpack(), relocInfo::runtime_call_type); - - int entry_offset = __ offset(); - - __ b(start); - assert(__ offset() - offset == (int) size_deopt_handler(), "must be fixed size"); __ end_a_stub(); - return entry_offset; + return offset; } //============================================================================= diff --git a/src/hotspot/cpu/ppc/runtime_ppc.cpp b/src/hotspot/cpu/ppc/runtime_ppc.cpp index ab658e9de58..2654075f702 100644 --- a/src/hotspot/cpu/ppc/runtime_ppc.cpp +++ b/src/hotspot/cpu/ppc/runtime_ppc.cpp @@ -46,6 +46,7 @@ //------------------------------generate_exception_blob--------------------------- // Creates exception blob at the end. +// Using exception blob, this code is jumped from a compiled method. // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp b/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp index 4e427ace404..db45a2fa4c8 100644 --- a/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp +++ b/src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp @@ -83,6 +83,7 @@ class RegisterSaver { static OopMap* push_frame_reg_args_and_save_live_registers(MacroAssembler* masm, int* out_frame_size_in_bytes, bool generate_oop_map, + int return_pc_adjustment, ReturnPCLocation return_pc_location, bool save_vectors = false); static void restore_live_registers_and_pop_frame(MacroAssembler* masm, @@ -261,6 +262,7 @@ static const RegisterSaver::LiveRegType RegisterSaver_LiveVecRegs[] = { OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssembler* masm, int* out_frame_size_in_bytes, bool generate_oop_map, + int return_pc_adjustment, ReturnPCLocation return_pc_location, bool save_vectors) { // Push an abi_reg_args-frame and store all registers which may be live. @@ -269,6 +271,7 @@ OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssemble // propagated to the RegisterMap of the caller frame during // StackFrameStream construction (needed for deoptimization; see // compiledVFrame::create_stack_value). + // If return_pc_adjustment != 0 adjust the return pc by return_pc_adjustment. // Updated return pc is returned in R31 (if not return_pc_is_pre_saved). // calculate frame size @@ -302,11 +305,14 @@ OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssemble // Do the save_LR by hand and adjust the return pc if requested. switch (return_pc_location) { case return_pc_is_lr: __ mflr(R31); break; - case return_pc_is_pre_saved: break; + case return_pc_is_pre_saved: assert(return_pc_adjustment == 0, "unsupported"); break; case return_pc_is_thread_saved_exception_pc: __ ld(R31, thread_(saved_exception_pc)); break; default: ShouldNotReachHere(); } if (return_pc_location != return_pc_is_pre_saved) { + if (return_pc_adjustment != 0) { + __ addi(R31, R31, return_pc_adjustment); + } __ std(R31, frame_size_in_bytes + _abi0(lr), R1_SP); } @@ -2901,15 +2907,22 @@ void SharedRuntime::generate_deopt_blob() { // deopt_handler: call_deopt_stub // cur. return pc --> ... // + // So currently SR_LR points behind the call in the deopt handler. + // We adjust it such that it points to the start of the deopt handler. // The return_pc has been stored in the frame of the deoptee and // will replace the address of the deopt_handler in the call // to Deoptimization::fetch_unroll_info below. + // We can't grab a free register here, because all registers may + // contain live values, so let the RegisterSaver do the adjustment + // of the return pc. + const int return_pc_adjustment_no_exception = -MacroAssembler::bl64_patchable_size; // Push the "unpack frame" // Save everything in sight. map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &first_frame_size_in_bytes, /*generate_oop_map=*/ true, + return_pc_adjustment_no_exception, RegisterSaver::return_pc_is_lr); assert(map != nullptr, "OopMap must have been created"); @@ -2944,6 +2957,7 @@ void SharedRuntime::generate_deopt_blob() { RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &first_frame_size_in_bytes, /*generate_oop_map=*/ false, + /*return_pc_adjustment_exception=*/ 0, RegisterSaver::return_pc_is_pre_saved); // Deopt during an exception. Save exec mode for unpack_frames. @@ -2961,6 +2975,7 @@ void SharedRuntime::generate_deopt_blob() { RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &first_frame_size_in_bytes, /*generate_oop_map=*/ false, + /*return_pc_adjustment_reexecute=*/ 0, RegisterSaver::return_pc_is_pre_saved); __ li(exec_mode_reg, Deoptimization::Unpack_reexecute); #endif @@ -3251,6 +3266,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(StubId id, address call_ptr) map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &frame_size_in_bytes, /*generate_oop_map=*/ true, + /*return_pc_adjustment=*/0, return_pc_location, save_vectors); // The following is basically a call_VM. However, we need the precise @@ -3351,6 +3367,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(StubId id, address destination map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm, &frame_size_in_bytes, /*generate_oop_map*/ true, + /*return_pc_adjustment*/ 0, RegisterSaver::return_pc_is_lr); // Use noreg as last_Java_pc, the return pc will be reconstructed diff --git a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp index b085dd7ac00..9d8ae770ccf 100644 --- a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp @@ -377,18 +377,12 @@ int LIR_Assembler::emit_deopt_handler() { int offset = code_offset(); - Label start; - __ bind(start); - - __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); - - int entry_offset = __ offset(); - __ j(start); - + __ auipc(ra, 0); + __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } void LIR_Assembler::return_op(LIR_Opr result, C1SafepointPollStub* code_stub) { diff --git a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp index ed2ab0c4861..e4efb2c171d 100644 --- a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.hpp @@ -72,7 +72,7 @@ private: // See emit_exception_handler for detail _exception_handler_size = DEBUG_ONLY(256) NOT_DEBUG(32), // or smaller // See emit_deopt_handler for detail - // far_call (2) + j (1) + // auipc (1) + far_jump (2) _deopt_handler_size = 1 * MacroAssembler::instruction_size + 2 * MacroAssembler::instruction_size }; diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index e23adcf2488..7acbb5a478b 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -1049,10 +1049,15 @@ class HandlerImpl { public: + static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); + static uint size_exception_handler() { + return MacroAssembler::far_branch_size(); + } + static uint size_deopt_handler() { - // count far call + j + // count auipc + far branch return NativeInstruction::instruction_size + MacroAssembler::far_branch_size(); } }; @@ -1833,6 +1838,25 @@ uint MachUEPNode::size(PhaseRegAlloc* ra_) const //============================================================================= +// Emit exception handler code. +int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) +{ + // auipc t1, #exception_blob_entry_point + // jr (offset)t1 + // Note that the code buffer's insts_mark is always relative to insts. + // That's why we must use the macroassembler to generate a handler. + address base = __ start_a_stub(size_exception_handler()); + if (base == nullptr) { + ciEnv::current()->record_failure("CodeCache is full"); + return 0; // CodeBuffer::expand failed + } + int offset = __ offset(); + __ far_jump(RuntimeAddress(OptoRuntime::exception_blob()->entry_point())); + assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); + __ end_a_stub(); + return offset; +} + // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -1843,17 +1867,12 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) } int offset = __ offset(); - Label start; - __ bind(start); - - __ far_call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); - - int entry_offset = __ offset(); - __ j(start); + __ auipc(ra, 0); + __ far_jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); assert(__ offset() - offset <= (int) size_deopt_handler(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } // REQUIRED MATCHER CODE diff --git a/src/hotspot/cpu/riscv/runtime_riscv.cpp b/src/hotspot/cpu/riscv/runtime_riscv.cpp index c52d5a31066..e1add8dbb82 100644 --- a/src/hotspot/cpu/riscv/runtime_riscv.cpp +++ b/src/hotspot/cpu/riscv/runtime_riscv.cpp @@ -249,6 +249,8 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end +// Using exception blob, this code is jumped from a compiled method. +// (see emit_exception_handler in riscv.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp b/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp index ee6df63d21b..298234156c3 100644 --- a/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp @@ -272,25 +272,14 @@ int LIR_Assembler::emit_deopt_handler() { // Not enough space left for the handler. bailout("deopt handler overflow"); return -1; - } - - int offset = code_offset(); - - Label start; - __ bind(start); - + } int offset = code_offset(); // Size must be constant (see HandlerImpl::emit_deopt_handler). __ load_const(Z_R1_scratch, SharedRuntime::deopt_blob()->unpack()); __ call(Z_R1_scratch); - - int entry_offset = __ offset(); - - __ z_bru(start); - guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } void LIR_Assembler::jobject2reg(jobject o, Register reg) { diff --git a/src/hotspot/cpu/s390/runtime_s390.cpp b/src/hotspot/cpu/s390/runtime_s390.cpp index 658fba069b4..314c407af91 100644 --- a/src/hotspot/cpu/s390/runtime_s390.cpp +++ b/src/hotspot/cpu/s390/runtime_s390.cpp @@ -43,6 +43,8 @@ //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end +// Using exception blob, this code is jumped from a compiled method. +// (see emit_exception_handler in s390.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/s390/s390.ad b/src/hotspot/cpu/s390/s390.ad index 2f12aa4c03c..2b2ce713491 100644 --- a/src/hotspot/cpu/s390/s390.ad +++ b/src/hotspot/cpu/s390/s390.ad @@ -1649,10 +1649,15 @@ source_hpp %{ // Header information of the source block. class HandlerImpl { public: + static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); + static uint size_exception_handler() { + return NativeJump::max_instruction_size(); + } + static uint size_deopt_handler() { - return NativeCall::max_instruction_size() + MacroAssembler::jump_pcrelative_size(); + return NativeCall::max_instruction_size(); } }; @@ -1667,6 +1672,43 @@ public: source %{ +// This exception handler code snippet is placed after the method's +// code. It is the return point if an exception occurred. it jumps to +// the exception blob. +// +// If the method gets deoptimized, the method and this code snippet +// get patched. +// +// 1) Trampoline code gets patched into the end of this exception +// handler. the trampoline code jumps to the deoptimization blob. +// +// 2) The return address in the method's code will get patched such +// that it jumps to the trampoline. +// +// 3) The handler will get patched such that it does not jump to the +// exception blob, but to an entry in the deoptimization blob being +// aware of the exception. +int HandlerImpl::emit_exception_handler(C2_MacroAssembler *masm) { + Register temp_reg = Z_R1; + + address base = __ start_a_stub(size_exception_handler()); + if (base == nullptr) { + ciEnv::current()->record_failure("CodeCache is full"); + return 0; // CodeBuffer::expand failed + } + + int offset = __ offset(); + // Use unconditional pc-relative jump with 32-bit range here. + __ load_const_optimized(temp_reg, (address)OptoRuntime::exception_blob()->content_begin()); + __ z_br(temp_reg); + + assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); + + __ end_a_stub(); + + return offset; +} + // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { address base = __ start_a_stub(size_deopt_handler()); @@ -1678,22 +1720,14 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { int offset = __ offset(); - Label start; - __ bind(start); - // Size_deopt_handler() must be exact on zarch, so for simplicity // we do not use load_const_opt here. __ load_const(Z_R1, SharedRuntime::deopt_blob()->unpack()); __ call(Z_R1); - - int entry_offset = __ offset(); - - __ z_bru(start); - assert(__ offset() - offset == (int) size_deopt_handler(), "must be fixed size"); __ end_a_stub(); - return entry_offset; + return offset; } //============================================================================= diff --git a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp index 5b6f7dcd984..a3605f649cc 100644 --- a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp +++ b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp @@ -2544,10 +2544,14 @@ void SharedRuntime::generate_deopt_blob() { // Normal entry (non-exception case) // // We have been called from the deopt handler of the deoptee. - // Z_R14 points to the entry point of the deopt handler. + // Z_R14 points behind the call in the deopt handler. We adjust + // it such that it points to the start of the deopt handler. // The return_pc has been stored in the frame of the deoptee and // will replace the address of the deopt_handler in the call // to Deoptimization::fetch_unroll_info below. + // The (int) cast is necessary, because -((unsigned int)14) + // is an unsigned int. + __ add2reg(Z_R14, -(int)NativeCall::max_instruction_size()); const Register exec_mode_reg = Z_tmp_1; diff --git a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp index 6600d841050..edeb0baea0e 100644 --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp @@ -450,20 +450,14 @@ int LIR_Assembler::emit_deopt_handler() { } int offset = code_offset(); + InternalAddress here(__ pc()); - Label start; - __ bind(start); - - __ call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); - - int entry_offset = __ offset(); - - __ jmp(start); - + __ pushptr(here.addr(), rscratch1); + __ jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); guarantee(code_offset() - offset <= deopt_handler_size(), "overflow"); __ end_a_stub(); - return entry_offset; + return offset; } void LIR_Assembler::return_op(LIR_Opr result, C1SafepointPollStub* code_stub) { diff --git a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp index 7a8fbc75ba7..8524dc90276 100644 --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.hpp @@ -48,7 +48,7 @@ enum { _call_stub_size = 28, _exception_handler_size = DEBUG_ONLY(1*K) NOT_DEBUG(175), - _deopt_handler_size = 10 + _deopt_handler_size = 17 }; public: diff --git a/src/hotspot/cpu/x86/runtime_x86_64.cpp b/src/hotspot/cpu/x86/runtime_x86_64.cpp index 5bf65299a0c..7b98cf4fad7 100644 --- a/src/hotspot/cpu/x86/runtime_x86_64.cpp +++ b/src/hotspot/cpu/x86/runtime_x86_64.cpp @@ -242,6 +242,8 @@ UncommonTrapBlob* OptoRuntime::generate_uncommon_trap_blob() { //------------------------------generate_exception_blob--------------------------- // creates exception blob at the end +// Using exception blob, this code is jumped from a compiled method. +// (see emit_exception_handler in x86_64.ad file) // // Given an exception pc at a call we call into the runtime for the // handler in this method. This handler might merely restore state diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 783ed038858..9a0bbdc27a0 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -2767,11 +2767,21 @@ class HandlerImpl { public: + static int emit_exception_handler(C2_MacroAssembler *masm); static int emit_deopt_handler(C2_MacroAssembler* masm); + static uint size_exception_handler() { + // NativeCall instruction size is the same as NativeJump. + // exception handler starts out as jump and can be patched to + // a call be deoptimization. (4932387) + // Note that this value is also credited (in output.cpp) to + // the size of the code section. + return NativeJump::instruction_size; + } + static uint size_deopt_handler() { - // one call and one jmp. - return 10; + // three 5 byte instructions plus one move for unreachable address. + return 15+3; } }; @@ -2863,6 +2873,24 @@ int MachNode::compute_padding(int current_offset) const { } } +// Emit exception handler code. +// Stuff framesize into a register and call a VM stub routine. +int HandlerImpl::emit_exception_handler(C2_MacroAssembler* masm) { + + // Note that the code buffer's insts_mark is always relative to insts. + // That's why we must use the macroassembler to generate a handler. + address base = __ start_a_stub(size_exception_handler()); + if (base == nullptr) { + ciEnv::current()->record_failure("CodeCache is full"); + return 0; // CodeBuffer::expand failed + } + int offset = __ offset(); + __ jump(RuntimeAddress(OptoRuntime::exception_blob()->entry_point())); + assert(__ offset() - offset <= (int) size_exception_handler(), "overflow"); + __ end_a_stub(); + return offset; +} + // Emit deopt handler code. int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { @@ -2875,18 +2903,21 @@ int HandlerImpl::emit_deopt_handler(C2_MacroAssembler* masm) { } int offset = __ offset(); - Label start; - __ bind(start); + address the_pc = (address) __ pc(); + Label next; + // push a "the_pc" on the stack without destroying any registers + // as they all may be live. - __ call(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); - - int entry_offset = __ offset(); - - __ jmp(start); + // push address of "next" + __ call(next, relocInfo::none); // reloc none is fine since it is a disp32 + __ bind(next); + // adjust it so it matches "the_pc" + __ subptr(Address(rsp, 0), __ offset() - offset); + __ jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); assert(__ offset() - offset <= (int) size_deopt_handler(), "overflow %d", (__ offset() - offset)); __ end_a_stub(); - return entry_offset; + return offset; } static Assembler::Width widthForType(BasicType bt) { diff --git a/src/hotspot/os/posix/signals_posix.cpp b/src/hotspot/os/posix/signals_posix.cpp index 625eb63445a..5833e324070 100644 --- a/src/hotspot/os/posix/signals_posix.cpp +++ b/src/hotspot/os/posix/signals_posix.cpp @@ -621,7 +621,7 @@ int JVM_HANDLE_XXX_SIGNAL(int sig, siginfo_t* info, if (cb != nullptr && cb->is_nmethod()) { nmethod* nm = cb->as_nmethod(); assert(nm->insts_contains_inclusive(pc), ""); - address deopt = nm->deopt_handler_entry(); + address deopt = nm->deopt_handler_begin(); assert(deopt != nullptr, ""); frame fr = os::fetch_frame_from_context(uc); diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 4b84e2fdfdb..ce2baeaf46c 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -2795,7 +2795,7 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { if (cb != nullptr && cb->is_nmethod()) { nmethod* nm = cb->as_nmethod(); frame fr = os::fetch_frame_from_context((void*)exceptionInfo->ContextRecord); - address deopt = nm->deopt_handler_entry(); + address deopt = nm->deopt_handler_begin(); assert(nm->insts_contains_inclusive(pc), ""); nm->set_original_pc(&fr, pc); // Set pc to handler diff --git a/src/hotspot/share/ci/ciEnv.cpp b/src/hotspot/share/ci/ciEnv.cpp index 92bacc4c2c3..79ab881e7f6 100644 --- a/src/hotspot/share/ci/ciEnv.cpp +++ b/src/hotspot/share/ci/ciEnv.cpp @@ -1057,9 +1057,7 @@ void ciEnv::register_method(ciMethod* target, } assert(offsets->value(CodeOffsets::Deopt) != -1, "must have deopt entry"); - - assert(compiler->type() == compiler_c2 || - offsets->value(CodeOffsets::Exceptions) != -1, "must have exception entry"); + assert(offsets->value(CodeOffsets::Exceptions) != -1, "must have exception entry"); nm = nmethod::new_nmethod(method, compile_id(), diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index c2f8b46f00e..d91af9b4991 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -1302,7 +1302,7 @@ nmethod::nmethod( } // Native wrappers do not have deopt handlers. Make the values // something that will never match a pc like the nmethod vtable entry - _deopt_handler_entry_offset = 0; + _deopt_handler_offset = 0; _unwind_handler_offset = 0; CHECKED_CAST(_oops_size, uint16_t, align_up(code_buffer->total_oop_size(), oopSize)); @@ -1442,7 +1442,7 @@ nmethod::nmethod(const nmethod &nm) : CodeBlob(nm._name, nm._kind, nm._size, nm. _skipped_instructions_size = nm._skipped_instructions_size; _stub_offset = nm._stub_offset; _exception_offset = nm._exception_offset; - _deopt_handler_entry_offset = nm._deopt_handler_entry_offset; + _deopt_handler_offset = nm._deopt_handler_offset; _unwind_handler_offset = nm._unwind_handler_offset; _num_stack_arg_slots = nm._num_stack_arg_slots; _oops_size = nm._oops_size; @@ -1704,26 +1704,19 @@ nmethod::nmethod( _exception_offset = -1; } if (offsets->value(CodeOffsets::Deopt) != -1) { - _deopt_handler_entry_offset = code_offset() + offsets->value(CodeOffsets::Deopt); + _deopt_handler_offset = code_offset() + offsets->value(CodeOffsets::Deopt); } else { - _deopt_handler_entry_offset = -1; + _deopt_handler_offset = -1; } } else #endif { // Exception handler and deopt handler are in the stub section + assert(offsets->value(CodeOffsets::Exceptions) != -1, "must be set"); assert(offsets->value(CodeOffsets::Deopt ) != -1, "must be set"); - bool has_exception_handler = (offsets->value(CodeOffsets::Exceptions) != -1); - assert(has_exception_handler == (compiler->type() != compiler_c2), - "C2 compiler doesn't provide exception handler stub code."); - if (has_exception_handler) { - _exception_offset = _stub_offset + offsets->value(CodeOffsets::Exceptions); - } else { - _exception_offset = -1; - } - - _deopt_handler_entry_offset = _stub_offset + offsets->value(CodeOffsets::Deopt); + _exception_offset = _stub_offset + offsets->value(CodeOffsets::Exceptions); + _deopt_handler_offset = _stub_offset + offsets->value(CodeOffsets::Deopt); } if (offsets->value(CodeOffsets::UnwindHandler) != -1) { // C1 generates UnwindHandler at the end of instructions section. @@ -4031,7 +4024,7 @@ const char* nmethod::nmethod_section_label(address pos) const { // Check stub_code before checking exception_handler or deopt_handler. if (pos == this->stub_begin()) label = "[Stub Code]"; if (JVMCI_ONLY(_exception_offset >= 0 &&) pos == exception_begin()) label = "[Exception Handler]"; - if (JVMCI_ONLY(_deopt_handler_entry_offset != -1 &&) pos == deopt_handler_entry()) label = "[Deopt Handler Entry Point]"; + if (JVMCI_ONLY(_deopt_handler_offset != -1 &&) pos == deopt_handler_begin()) label = "[Deopt Handler Code]"; return label; } diff --git a/src/hotspot/share/code/nmethod.hpp b/src/hotspot/share/code/nmethod.hpp index 0fa9d7fda9e..34accf428b6 100644 --- a/src/hotspot/share/code/nmethod.hpp +++ b/src/hotspot/share/code/nmethod.hpp @@ -229,7 +229,7 @@ class nmethod : public CodeBlob { int _exception_offset; // All deoptee's will resume execution at this location described by // this offset. - int _deopt_handler_entry_offset; + int _deopt_handler_offset; // Offset (from insts_end) of the unwind handler if it exists int16_t _unwind_handler_offset; // Number of arguments passed on the stack @@ -617,7 +617,7 @@ public: address stub_begin () const { return header_begin() + _stub_offset ; } address stub_end () const { return code_end() ; } address exception_begin () const { return header_begin() + _exception_offset ; } - address deopt_handler_entry () const { return header_begin() + _deopt_handler_entry_offset ; } + address deopt_handler_begin () const { return header_begin() + _deopt_handler_offset ; } address unwind_handler_begin () const { return _unwind_handler_offset != -1 ? (insts_end() - _unwind_handler_offset) : nullptr; } oop* oops_begin () const { return (oop*) data_begin(); } oop* oops_end () const { return (oop*) data_end(); } diff --git a/src/hotspot/share/code/nmethod.inline.hpp b/src/hotspot/share/code/nmethod.inline.hpp index ecee3c0c31a..44331db669c 100644 --- a/src/hotspot/share/code/nmethod.inline.hpp +++ b/src/hotspot/share/code/nmethod.inline.hpp @@ -34,7 +34,7 @@ inline bool nmethod::is_deopt_pc(address pc) { return is_deopt_entry(pc); } inline bool nmethod::is_deopt_entry(address pc) { - return pc == deopt_handler_entry(); + return pc == deopt_handler_begin(); } // class ExceptionCache methods diff --git a/src/hotspot/share/opto/output.cpp b/src/hotspot/share/opto/output.cpp index 136fc8ac864..84c01c68e38 100644 --- a/src/hotspot/share/opto/output.cpp +++ b/src/hotspot/share/opto/output.cpp @@ -1347,18 +1347,20 @@ CodeBuffer* PhaseOutput::init_buffer() { // nmethod and CodeBuffer count stubs & constants as part of method's code. // class HandlerImpl is platform-specific and defined in the *.ad files. + int exception_handler_req = HandlerImpl::size_exception_handler() + MAX_stubs_size; // add marginal slop for handler int deopt_handler_req = HandlerImpl::size_deopt_handler() + MAX_stubs_size; // add marginal slop for handler stub_req += MAX_stubs_size; // ensure per-stub margin code_req += MAX_inst_size; // ensure per-instruction margin if (StressCodeBuffers) - code_req = const_req = stub_req = deopt_handler_req = 0x10; // force expansion + code_req = const_req = stub_req = exception_handler_req = deopt_handler_req = 0x10; // force expansion int total_req = const_req + code_req + pad_req + stub_req + + exception_handler_req + deopt_handler_req; // deopt handler CodeBuffer* cb = code_buffer(); @@ -1787,6 +1789,8 @@ void PhaseOutput::fill_buffer(C2_MacroAssembler* masm, uint* blk_starts) { // Only java methods have exception handlers and deopt handlers // class HandlerImpl is platform-specific and defined in the *.ad files. if (C->method()) { + // Emit the exception handler code. + _code_offsets.set_value(CodeOffsets::Exceptions, HandlerImpl::emit_exception_handler(masm)); if (C->failing()) { return; // CodeBuffer::expand failed } diff --git a/src/hotspot/share/runtime/deoptimization.cpp b/src/hotspot/share/runtime/deoptimization.cpp index e2029a26d37..0aa7b392b17 100644 --- a/src/hotspot/share/runtime/deoptimization.cpp +++ b/src/hotspot/share/runtime/deoptimization.cpp @@ -498,9 +498,6 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread RegisterMap::WalkContinuation::skip); // Now get the deoptee with a valid map frame deoptee = stub_frame.sender(&map); - if (exec_mode == Unpack_deopt) { - assert(deoptee.is_deoptimized_frame(), "frame is not marked for deoptimization"); - } // Set the deoptee nmethod assert(current->deopt_compiled_method() == nullptr, "Pending deopt!"); nmethod* nm = deoptee.cb()->as_nmethod_or_null(); diff --git a/src/hotspot/share/runtime/frame.cpp b/src/hotspot/share/runtime/frame.cpp index 8f969600ba8..b5cd4acc75d 100644 --- a/src/hotspot/share/runtime/frame.cpp +++ b/src/hotspot/share/runtime/frame.cpp @@ -206,7 +206,7 @@ address frame::raw_pc() const { if (is_deoptimized_frame()) { nmethod* nm = cb()->as_nmethod_or_null(); assert(nm != nullptr, "only nmethod is expected here"); - return nm->deopt_handler_entry() - pc_return_offset; + return nm->deopt_handler_begin() - pc_return_offset; } else { return (pc() - pc_return_offset); } @@ -355,7 +355,7 @@ void frame::deoptimize(JavaThread* thread) { // If the call site is a MethodHandle call site use the MH deopt handler. nmethod* nm = _cb->as_nmethod(); - address deopt = nm->deopt_handler_entry(); + address deopt = nm->deopt_handler_begin(); NativePostCallNop* inst = nativePostCallNop_at(pc()); diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp index afa4558c7ae..8ede4d1082a 100644 --- a/src/hotspot/share/runtime/sharedRuntime.cpp +++ b/src/hotspot/share/runtime/sharedRuntime.cpp @@ -87,9 +87,6 @@ #ifdef COMPILER1 #include "c1/c1_Runtime1.hpp" #endif -#ifdef COMPILER2 -#include "opto/runtime.hpp" -#endif #if INCLUDE_JFR #include "jfr/jfr.inline.hpp" #endif @@ -604,11 +601,6 @@ address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* curr // The deferred StackWatermarkSet::after_unwind check will be performed in // * OptoRuntime::handle_exception_C_helper for C2 code // * exception_handler_for_pc_helper via Runtime1::handle_exception_from_callee_id for C1 code -#ifdef COMPILER2 - if (nm->compiler_type() == compiler_c2) { - return OptoRuntime::exception_blob()->entry_point(); - } -#endif // COMPILER2 return nm->exception_begin(); } } diff --git a/src/hotspot/share/runtime/vmStructs.cpp b/src/hotspot/share/runtime/vmStructs.cpp index 2ce6a6cac76..a7342448522 100644 --- a/src/hotspot/share/runtime/vmStructs.cpp +++ b/src/hotspot/share/runtime/vmStructs.cpp @@ -535,7 +535,7 @@ nonstatic_field(nmethod, _osr_link, nmethod*) \ nonstatic_field(nmethod, _state, volatile signed char) \ nonstatic_field(nmethod, _exception_offset, int) \ - nonstatic_field(nmethod, _deopt_handler_entry_offset, int) \ + nonstatic_field(nmethod, _deopt_handler_offset, int) \ nonstatic_field(nmethod, _orig_pc_offset, int) \ nonstatic_field(nmethod, _stub_offset, int) \ nonstatic_field(nmethod, _immutable_data_ref_count_offset, int) \ diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java index f935c56b536..91302dba0f6 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java @@ -48,7 +48,7 @@ public class NMethod extends CodeBlob { /** Offsets for different nmethod parts */ private static CIntegerField exceptionOffsetField; - private static CIntegerField deoptHandlerEntryOffsetField; + private static CIntegerField deoptHandlerOffsetField; private static CIntegerField origPCOffsetField; private static CIntegerField stubOffsetField; private static CIntField handlerTableOffsetField; @@ -86,7 +86,7 @@ public class NMethod extends CodeBlob { immutableDataField = type.getAddressField("_immutable_data"); immutableDataSizeField = type.getCIntegerField("_immutable_data_size"); exceptionOffsetField = type.getCIntegerField("_exception_offset"); - deoptHandlerEntryOffsetField = type.getCIntegerField("_deopt_handler_entry_offset"); + deoptHandlerOffsetField = type.getCIntegerField("_deopt_handler_offset"); origPCOffsetField = type.getCIntegerField("_orig_pc_offset"); stubOffsetField = type.getCIntegerField("_stub_offset"); scopesPCsOffsetField = type.getCIntegerField("_scopes_pcs_offset"); @@ -121,16 +121,16 @@ public class NMethod extends CodeBlob { public boolean isOSRMethod() { return getEntryBCI() != VM.getVM().getInvocationEntryBCI(); } /** Boundaries for different parts */ - public Address constantsBegin() { return contentBegin(); } - public Address constantsEnd() { return codeBegin(); } - public Address instsBegin() { return codeBegin(); } - public Address instsEnd() { return headerBegin().addOffsetTo(getStubOffset()); } - public Address exceptionBegin() { return headerBegin().addOffsetTo(getExceptionOffset()); } - public Address deoptHandlerEntry() { return headerBegin().addOffsetTo(getDeoptHandlerEntryOffset()); } - public Address stubBegin() { return headerBegin().addOffsetTo(getStubOffset()); } - public Address stubEnd() { return dataBegin(); } - public Address oopsBegin() { return dataBegin(); } - public Address oopsEnd() { return dataEnd(); } + public Address constantsBegin() { return contentBegin(); } + public Address constantsEnd() { return codeBegin(); } + public Address instsBegin() { return codeBegin(); } + public Address instsEnd() { return headerBegin().addOffsetTo(getStubOffset()); } + public Address exceptionBegin() { return headerBegin().addOffsetTo(getExceptionOffset()); } + public Address deoptHandlerBegin() { return headerBegin().addOffsetTo(getDeoptHandlerOffset()); } + public Address stubBegin() { return headerBegin().addOffsetTo(getStubOffset()); } + public Address stubEnd() { return dataBegin(); } + public Address oopsBegin() { return dataBegin(); } + public Address oopsEnd() { return dataEnd(); } public Address immutableDataBegin() { return immutableDataField.getValue(addr); } public Address immutableDataEnd() { return immutableDataBegin().addOffsetTo(getImmutableDataSize()); } @@ -262,7 +262,7 @@ public class NMethod extends CodeBlob { // Deopt // Return true is the PC is one would expect if the frame is being deopted. public boolean isDeoptPc (Address pc) { return isDeoptEntry(pc); } - public boolean isDeoptEntry (Address pc) { return pc == deoptHandlerEntry(); } + public boolean isDeoptEntry (Address pc) { return pc == deoptHandlerBegin(); } /** Tells whether frames described by this nmethod can be deoptimized. Note: native wrappers cannot be deoptimized. */ @@ -490,7 +490,7 @@ public class NMethod extends CodeBlob { private int getEntryBCI() { return (int) entryBCIField .getValue(addr); } private int getExceptionOffset() { return (int) exceptionOffsetField .getValue(addr); } - private int getDeoptHandlerEntryOffset() { return (int) deoptHandlerEntryOffsetField .getValue(addr); } + private int getDeoptHandlerOffset() { return (int) deoptHandlerOffsetField .getValue(addr); } private int getStubOffset() { return (int) stubOffsetField .getValue(addr); } private int getScopesDataOffset() { return (int) scopesDataOffsetField .getValue(addr); } private int getScopesPCsOffset() { return (int) scopesPCsOffsetField .getValue(addr); } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java index ee9e0ecdafd..27efb631f79 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/Frame.java @@ -87,7 +87,7 @@ public abstract class Frame implements Cloneable { CodeBlob cb = VM.getVM().getCodeCache().findBlob(pc); if (cb != null && cb.isJavaMethod()) { NMethod nm = (NMethod) cb; - if (pc.equals(nm.deoptHandlerEntry())) { + if (pc.equals(nm.deoptHandlerBegin())) { if (Assert.ASSERTS_ENABLED) { Assert.that(this.getUnextendedSP() != null, "null SP in Java frame"); } diff --git a/test/hotspot/jtreg/runtime/vthread/Deoptimization.java b/test/hotspot/jtreg/runtime/vthread/Deoptimization.java deleted file mode 100644 index 050848c3a72..00000000000 --- a/test/hotspot/jtreg/runtime/vthread/Deoptimization.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright 2025 Arm Limited and/or its affiliates. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test id=vthread-deopt-c1 - * @summary Deoptimization test for virtual threads (C1) - * @requires vm.continuations - * @requires vm.compiler1.enabled - * @requires vm.opt.TieredStopAtLevel != 0 - * @library /test/lib - * @build jdk.test.whitebox.WhiteBox - * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox - * @run main/othervm -Xbootclasspath/a:. - * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI - * -XX:-BackgroundCompilation - * -XX:TieredStopAtLevel=1 - * Deoptimization - */ - -/** - * @test id=vthread-deopt-c2 - * @summary Deoptimization test for virtual threads (C2) - * @requires vm.continuations - * @requires vm.compiler2.enabled - * @library /test/lib - * @build jdk.test.whitebox.WhiteBox - * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox - * @run main/othervm -Xbootclasspath/a:. - * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI - * -XX:-BackgroundCompilation - * -XX:-TieredCompilation - * Deoptimization - */ - -import java.lang.reflect.Method; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.BrokenBarrierException; -import java.util.concurrent.CyclicBarrier; -import java.util.Objects; -import jdk.test.whitebox.WhiteBox; - -public class Deoptimization { - static final WhiteBox white_box = WhiteBox.getWhiteBox(); - - static class TestTask implements Runnable { - CyclicBarrier start_barrier = null; - AtomicInteger completed_number = new AtomicInteger(0); - - public void reset(int barrier_parties) { - start_barrier = new CyclicBarrier(barrier_parties); - completed_number.set(0); - } - - public int getNumberWaiting() { - return start_barrier.getNumberWaiting(); - } - - public int getNumberCompleted() { - return completed_number.get(); - } - - public void await() throws BrokenBarrierException, InterruptedException { - start_barrier.await(); - } - - public void run() { - try { - await(); - } catch(BrokenBarrierException e) { - return; - } catch(InterruptedException e) { - return; - } - - completed_number.getAndIncrement(); - } - } - - static void test(TestTask task, Method method, int vthreads_num) throws Exception { - task.reset(vthreads_num + 1 /* 1 for the main thread */); - - Thread[] vthreads = new Thread[vthreads_num]; - for (int i = 0; i < vthreads_num; i++) { - vthreads[i] = Thread.startVirtualThread(task); - } - - while (task.getNumberWaiting() != vthreads_num) { - Thread.onSpinWait(); - } - - if (method != null) { - if (!white_box.isMethodCompiled(method, false)) { - throw new Error("Unexpectedly, it is not compiled."); - } - - white_box.deoptimizeMethod(method); - - if (white_box.isMethodCompiled(method, false)) { - throw new Error("Unexpectedly, it is compiled."); - } - } - - task.await(); - - for (int i = 0; i < vthreads_num; i++) { - vthreads[i].join(); - } - - if (task.getNumberCompleted() != vthreads_num) { - throw new Error("Some threads didn't reach completion"); - } - } - - static int getIntegerOption(String option_name) { - Object option_object = white_box.getVMFlag(option_name); - String option_string = Objects.toString(option_object); - return Integer.parseInt(option_string); - } - - public static void main(String[] args) throws Exception { - int tiered_stop_at_level = getIntegerOption("TieredStopAtLevel"); - - Method method_run = TestTask.class.getMethod("run"); - white_box.testSetDontInlineMethod(method_run, true); - - Method method_await = TestTask.class.getMethod("await"); - white_box.testSetDontInlineMethod(method_await, true); - - TestTask task = new TestTask(); - - // Warm-up - test(task, null, 2); - - white_box.enqueueMethodForCompilation(method_run, tiered_stop_at_level); - - // Deoptimization test - test(task, method_run, 10000); - } -} From 3d6824e802bda6efed40f7613eda7c8c0d84e673 Mon Sep 17 00:00:00 2001 From: Tobias Hartmann Date: Fri, 7 Nov 2025 09:19:18 +0000 Subject: [PATCH 078/512] 8371432: [BACKOUT] 8359256: AArch64: Use SHA3 GPR intrinsic where it's faster Reviewed-by: mchevalier, epeter, syan --- src/hotspot/cpu/aarch64/globals_aarch64.hpp | 2 +- .../cpu/aarch64/vm_version_aarch64.cpp | 30 ++++++++----------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/hotspot/cpu/aarch64/globals_aarch64.hpp b/src/hotspot/cpu/aarch64/globals_aarch64.hpp index 107919b2cbd..8e520314c8b 100644 --- a/src/hotspot/cpu/aarch64/globals_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/globals_aarch64.hpp @@ -95,7 +95,7 @@ define_pd_global(intx, InlineSmallCode, 1000); "Use simplest and shortest implementation for array equals") \ product(bool, UseSIMDForBigIntegerShiftIntrinsics, true, \ "Use SIMD instructions for left/right shift of BigInteger") \ - product(bool, UseSIMDForSHA3Intrinsic, false, \ + product(bool, UseSIMDForSHA3Intrinsic, true, \ "Use SIMD SHA3 instructions for SHA3 intrinsic") \ product(bool, AvoidUnalignedAccesses, false, \ "Avoid generating unaligned memory accesses") \ diff --git a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp index b47bfe6a89f..a04e9defa4b 100644 --- a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp @@ -375,24 +375,18 @@ void VM_Version::initialize() { FLAG_SET_DEFAULT(UseSHA256Intrinsics, false); } - if (UseSHA && VM_Version::supports_sha3() && _cpu == CPU_APPLE && FLAG_IS_DEFAULT(UseSIMDForSHA3Intrinsic)) { - // Note: SIMD faster on Apple, worse on Neoverse V1, V2 and N2. - FLAG_SET_DEFAULT(UseSIMDForSHA3Intrinsic, true); - } - - // Enable SHA-3 intrinsics (SIMD or GPR). The GPR path does not require SHA instructions. - if (FLAG_IS_DEFAULT(UseSHA3Intrinsics)) { - FLAG_SET_DEFAULT(UseSHA3Intrinsics, true); - } - - if (!UseSHA3Intrinsics && UseSIMDForSHA3Intrinsic) { - // Keep flags consistent: if SHA3 intrinsics are off, disable the SHA3 SIMD variant. - FLAG_SET_DEFAULT(UseSIMDForSHA3Intrinsic, false); - } - - if (!VM_Version::supports_sha3() && UseSIMDForSHA3Intrinsic) { - warning("SHA3 instructions are not available on this CPU"); - FLAG_SET_DEFAULT(UseSIMDForSHA3Intrinsic, false); + if (UseSHA && VM_Version::supports_sha3()) { + // Auto-enable UseSHA3Intrinsics on hardware with performance benefit. + // Note that the evaluation of UseSHA3Intrinsics shows better performance + // on Apple silicon but worse performance on Neoverse V1 and N2. + if (_cpu == CPU_APPLE) { // Apple silicon + if (FLAG_IS_DEFAULT(UseSHA3Intrinsics)) { + FLAG_SET_DEFAULT(UseSHA3Intrinsics, true); + } + } + } else if (UseSHA3Intrinsics && UseSIMDForSHA3Intrinsic) { + warning("Intrinsics for SHA3-224, SHA3-256, SHA3-384 and SHA3-512 crypto hash functions not available on this CPU."); + FLAG_SET_DEFAULT(UseSHA3Intrinsics, false); } if (UseSHA && VM_Version::supports_sha512()) { From 4233178af20f07ade32322fad931c68e1c4251cf Mon Sep 17 00:00:00 2001 From: Jayathirth D V Date: Fri, 7 Nov 2025 09:45:48 +0000 Subject: [PATCH 079/512] 8368729: Add appropriate checks in java.awt.image.Kernel constructor Reviewed-by: azvegint, prr, kizune --- .../share/classes/java/awt/image/Kernel.java | 29 +++++++-- .../ConvolveOp/KernelInitialisationTest.java | 60 +++++++++++++++++++ 2 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 test/jdk/java/awt/image/ConvolveOp/KernelInitialisationTest.java diff --git a/src/java.desktop/share/classes/java/awt/image/Kernel.java b/src/java.desktop/share/classes/java/awt/image/Kernel.java index d8ebc501db6..d2b9760aba5 100644 --- a/src/java.desktop/share/classes/java/awt/image/Kernel.java +++ b/src/java.desktop/share/classes/java/awt/image/Kernel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,21 +59,38 @@ public class Kernel implements Cloneable { * @param width width of the kernel * @param height height of the kernel * @param data kernel data in row major order + * @throws IllegalArgumentException if {@code data} is null + * @throws IllegalArgumentException if {@code width} or {@code height} + * is not positive + * @throws IllegalArgumentException if product of {@code width} and + * {@code height} overflows an int * @throws IllegalArgumentException if the length of {@code data} * is less than the product of {@code width} and * {@code height} */ public Kernel(int width, int height, float[] data) { - this.width = width; - this.height = height; - this.xOrigin = (width-1)>>1; - this.yOrigin = (height-1)>>1; - int len = width*height; + if (data == null) { + throw new IllegalArgumentException("Data must not be null"); + } + if ((width <= 0) || (height <= 0)) { + throw new IllegalArgumentException("Invalid width or height"); + } + int len = 0; + try { + len = Math.multiplyExact(width, height); + } catch (ArithmeticException e) { + throw new IllegalArgumentException("width * height results in" + + " integer overflow"); + } if (data.length < len) { throw new IllegalArgumentException("Data array too small "+ "(is "+data.length+ " and should be "+len); } + this.width = width; + this.height = height; + this.xOrigin = (width - 1) >> 1; + this.yOrigin = (height - 1) >> 1; this.data = new float[len]; System.arraycopy(data, 0, this.data, 0, len); diff --git a/test/jdk/java/awt/image/ConvolveOp/KernelInitialisationTest.java b/test/jdk/java/awt/image/ConvolveOp/KernelInitialisationTest.java new file mode 100644 index 00000000000..607f0a7a8dc --- /dev/null +++ b/test/jdk/java/awt/image/ConvolveOp/KernelInitialisationTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8368729 + * @summary Tests that passing invalid values to Kernel constructor + * throws only IllegalArgumentException + */ + +import java.awt.image.Kernel; + +public class KernelInitialisationTest { + private static void expectIllegalArgumentException(Runnable code) { + try { + code.run(); + throw new RuntimeException("Expected IllegalArgumentException" + + " but no exception was thrown"); + } catch (IllegalArgumentException e) { + // we expect IllegalArgumentException + } + } + + private static void testKernel(int width, int height, float[] data) { + System.out.println("Testing for width: " + width + ", height: " + + height + ", data: " + (data == null ? "null" : "not null")); + expectIllegalArgumentException(() -> new Kernel(width, height, data)); + } + + public static void main(String[] args) { + testKernel(-1, 1, new float[100]); + testKernel(1, -1, new float[100]); + testKernel(-1, -1, new float[100]); + testKernel(1, 1, null); + + int width = 50; + int height = Integer.MAX_VALUE; + testKernel(width, height, new float[100]); + } +} From 428b553ad4ee79e5d56f51232c27ed0b003abe18 Mon Sep 17 00:00:00 2001 From: Christian Stein Date: Fri, 7 Nov 2025 09:55:16 +0000 Subject: [PATCH 080/512] 8278856: javac documentation does not mention use of Manifest class-path attribute Reviewed-by: jlahoda --- src/jdk.compiler/share/man/javac.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/jdk.compiler/share/man/javac.md b/src/jdk.compiler/share/man/javac.md index 46246624e53..1822931bf40 100644 --- a/src/jdk.compiler/share/man/javac.md +++ b/src/jdk.compiler/share/man/javac.md @@ -1311,6 +1311,12 @@ although some module-related path options allow a package hierarchy to be specified on a per-module basis. All other path options are used to specify package hierarchies. +When a JAR file in the user class path has a `Class-Path` manifest attribute, +and the specified JAR file(s) exist, they are automatically inserted into the +user class path after the JAR file. This rule also applies recursively to any +new JAR files found. Consult the [JAR File Specification](../jar/jar.html#class-path-attribute) +for details. + ### Package Hierarchy In a package hierarchy, directories and subdirectories are used From 59d23095789bbb6d4e466bcbeb82089b17d78eae Mon Sep 17 00:00:00 2001 From: Fei Yang Date: Fri, 7 Nov 2025 10:10:14 +0000 Subject: [PATCH 081/512] 8371385: compiler/escapeAnalysis/TestRematerializeObjects.java fails in case of -XX:-UseUnalignedAccesses Reviewed-by: chagedorn, dfenacci --- .../compiler/escapeAnalysis/TestRematerializeObjects.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/hotspot/jtreg/compiler/escapeAnalysis/TestRematerializeObjects.java b/test/hotspot/jtreg/compiler/escapeAnalysis/TestRematerializeObjects.java index 4f88dcb6a82..d2fdf47b060 100644 --- a/test/hotspot/jtreg/compiler/escapeAnalysis/TestRematerializeObjects.java +++ b/test/hotspot/jtreg/compiler/escapeAnalysis/TestRematerializeObjects.java @@ -79,12 +79,12 @@ public class TestRematerializeObjects { IRNode.UNSTABLE_IF_TRAP, "1", IRNode.STORE_L_OF_CLASS, "int\\[int:4\\]", "1", IRNode.SAFEPOINT_SCALAROBJECT_OF, "fields@\\[0..3\\]", "0"}, - applyIf = {"EliminateAllocations", "false"}) + applyIfAnd = {"EliminateAllocations", "false", "UseUnalignedAccesses", "true"}) @IR(counts = {IRNode.ALLOC_ARRAY, "0", IRNode.UNSTABLE_IF_TRAP, "1", IRNode.STORE_L_OF_CLASS, "int\\[int:4\\]", "0", IRNode.SAFEPOINT_SCALAROBJECT_OF, "fields@\\[0..3\\]", "2"}, - applyIf = {"EliminateAllocations", "true"}) + applyIfAnd = {"EliminateAllocations", "true", "UseUnalignedAccesses", "true"}) static int test1(boolean flag) { int[] arr = new int[4]; arr[0] = 0x0001_0000; // these slip into Initialize @@ -124,12 +124,12 @@ public class TestRematerializeObjects { IRNode.UNSTABLE_IF_TRAP, "1", IRNode.STORE_I_OF_CLASS, "short\\[int:4\\]", "1", IRNode.SAFEPOINT_SCALAROBJECT_OF, "fields@\\[0..3\\]", "0"}, - applyIf = {"EliminateAllocations", "false"}) + applyIfAnd = {"EliminateAllocations", "false", "UseUnalignedAccesses", "true"}) @IR(counts = {IRNode.ALLOC_ARRAY, "0", IRNode.UNSTABLE_IF_TRAP, "1", IRNode.STORE_I_OF_CLASS, "short\\[int:4\\]", "0", IRNode.SAFEPOINT_SCALAROBJECT_OF, "fields@\\[0..3\\]", "2"}, - applyIf = {"EliminateAllocations", "true"}) + applyIfAnd = {"EliminateAllocations", "true", "UseUnalignedAccesses", "true"}) static int test2(boolean flag) { short[] arr = new short[4]; arr[0] = 1; From 167c952bb0fefb5acc9782f4f4474d92097c93f8 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Fri, 7 Nov 2025 10:48:07 +0000 Subject: [PATCH 082/512] 8371369: Parallel: Relax precondition of PSOldGen::expand_and_allocate Reviewed-by: eosterlund, fandreuzzi --- src/hotspot/share/gc/parallel/mutableSpace.cpp | 11 +++++------ src/hotspot/share/gc/parallel/psOldGen.cpp | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/hotspot/share/gc/parallel/mutableSpace.cpp b/src/hotspot/share/gc/parallel/mutableSpace.cpp index a8f47a387e3..6d30c5a8d1f 100644 --- a/src/hotspot/share/gc/parallel/mutableSpace.cpp +++ b/src/hotspot/share/gc/parallel/mutableSpace.cpp @@ -182,12 +182,11 @@ bool MutableSpace::cas_deallocate(HeapWord *obj, size_t size) { // Only used by oldgen allocation. bool MutableSpace::needs_expand(size_t word_size) const { -#ifdef ASSERT - // If called by VM thread, locking is not needed. - if (!Thread::current()->is_VM_thread()) { - assert_lock_strong(PSOldGenExpand_lock); - } -#endif + // This method can be invoked either outside of safepoint by java threads or + // in safepoint by gc workers. Such accesses are synchronized by holding one + // of the following locks. + assert(Heap_lock->is_locked() || PSOldGenExpand_lock->is_locked(), "precondition"); + // Holding the lock means end is stable. So while top may be advancing // via concurrent allocations, there is no need to order the reads of top // and end here, unlike in cas_allocate. diff --git a/src/hotspot/share/gc/parallel/psOldGen.cpp b/src/hotspot/share/gc/parallel/psOldGen.cpp index 2d4b0698ad0..4e614c53447 100644 --- a/src/hotspot/share/gc/parallel/psOldGen.cpp +++ b/src/hotspot/share/gc/parallel/psOldGen.cpp @@ -118,8 +118,8 @@ void PSOldGen::initialize_performance_counters() { } HeapWord* PSOldGen::expand_and_allocate(size_t word_size) { - assert(SafepointSynchronize::is_at_safepoint(), "precondition"); - assert(Thread::current()->is_VM_thread(), "precondition"); + assert(Heap_lock->is_locked(), "precondition"); + if (object_space()->needs_expand(word_size)) { expand(word_size*HeapWordSize); } From d5803aa78a84caccd5c3f14ac788817c5a3b4725 Mon Sep 17 00:00:00 2001 From: Jorn Vernee Date: Fri, 7 Nov 2025 14:06:37 +0000 Subject: [PATCH 083/512] 8371315: java/foreign/sharedclosejfr/TestSharedCloseJFR.java failed with -XX:-TieredCompilation Reviewed-by: mcimadamore, syan --- test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java b/test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java index b59373b5b4e..913be05ac50 100644 --- a/test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java +++ b/test/jdk/java/foreign/sharedclosejfr/TestSharedCloseJFR.java @@ -35,6 +35,7 @@ * @run main jdk.test.lib.FileInstaller sharedCloseJfr.jfc sharedCloseJfr.jfc * @run main/othervm * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:CompileCommand=exclude,*TestSharedCloseJFR.main * -XX:StartFlightRecording:filename=recording.jfr,dumponexit=true,settings=sharedCloseJfr.jfc * TestSharedCloseJFR */ From c8656449c28581ae9c3d815105e338e42253bb43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20=C3=96sterlund?= Date: Fri, 7 Nov 2025 15:28:51 +0000 Subject: [PATCH 084/512] 8365932: Implementation of JEP 516: Ahead-of-Time Object Caching with Any GC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Axel Boldt-Christmas Co-authored-by: Joel Sikström Co-authored-by: Stefan Karlsson Reviewed-by: aboldtch, iklam, kvn --- make/Images.gmk | 1 - src/hotspot/share/cds/aotMapLogger.cpp | 264 ++-- src/hotspot/share/cds/aotMapLogger.hpp | 53 +- src/hotspot/share/cds/aotMappedHeapLoader.cpp | 847 ++++++++++++ ...HeapLoader.hpp => aotMappedHeapLoader.hpp} | 43 +- ...ine.hpp => aotMappedHeapLoader.inline.hpp} | 14 +- ...HeapWriter.cpp => aotMappedHeapWriter.cpp} | 320 +++-- ...HeapWriter.hpp => aotMappedHeapWriter.hpp} | 65 +- src/hotspot/share/cds/aotMetaspace.cpp | 80 +- src/hotspot/share/cds/aotMetaspace.hpp | 8 +- .../share/cds/aotReferenceObjSupport.cpp | 3 + .../share/cds/aotStreamedHeapLoader.cpp | 1190 +++++++++++++++++ .../share/cds/aotStreamedHeapLoader.hpp | 245 ++++ .../share/cds/aotStreamedHeapWriter.cpp | 614 +++++++++ .../share/cds/aotStreamedHeapWriter.hpp | 162 +++ src/hotspot/share/cds/aotThread.cpp | 114 ++ src/hotspot/share/cds/aotThread.hpp | 52 + src/hotspot/share/cds/archiveBuilder.cpp | 38 +- src/hotspot/share/cds/archiveBuilder.hpp | 14 +- src/hotspot/share/cds/archiveHeapLoader.cpp | 468 ------- src/hotspot/share/cds/archiveUtils.cpp | 1 - src/hotspot/share/cds/cdsConfig.cpp | 12 +- src/hotspot/share/cds/cdsEnumKlass.cpp | 9 +- src/hotspot/share/cds/cdsHeapVerifier.cpp | 3 +- src/hotspot/share/cds/cds_globals.hpp | 6 + src/hotspot/share/cds/dynamicArchive.cpp | 5 +- src/hotspot/share/cds/filemap.cpp | 506 +++---- src/hotspot/share/cds/filemap.hpp | 64 +- src/hotspot/share/cds/heapShared.cpp | 559 +++++--- src/hotspot/share/cds/heapShared.hpp | 210 ++- src/hotspot/share/cds/heapShared.inline.hpp | 114 ++ .../share/classfile/classLoaderDataGraph.cpp | 4 +- .../share/classfile/classLoaderDataShared.cpp | 31 +- .../share/classfile/classLoaderDataShared.hpp | 1 + src/hotspot/share/classfile/javaClasses.cpp | 5 +- src/hotspot/share/classfile/moduleEntry.cpp | 4 + src/hotspot/share/classfile/moduleEntry.hpp | 1 + src/hotspot/share/classfile/modules.cpp | 2 + src/hotspot/share/classfile/stringTable.cpp | 45 +- src/hotspot/share/classfile/stringTable.hpp | 3 +- .../share/classfile/systemDictionary.cpp | 2 +- src/hotspot/share/classfile/vmClasses.cpp | 41 +- src/hotspot/share/gc/shared/collectedHeap.cpp | 4 + src/hotspot/share/gc/shared/collectedHeap.hpp | 1 + .../shared/stringdedup/stringDedupConfig.cpp | 1 + .../shared/stringdedup/stringDedupTable.cpp | 7 +- .../share/gc/shenandoah/shenandoahHeap.cpp | 4 +- src/hotspot/share/gc/z/zArguments.cpp | 7 + src/hotspot/share/gc/z/zCollectedHeap.cpp | 5 + src/hotspot/share/gc/z/zCollectedHeap.hpp | 2 + src/hotspot/share/gc/z/zDirector.cpp | 7 + .../share/jfr/support/jfrThreadLocal.cpp | 9 +- src/hotspot/share/memory/universe.cpp | 28 +- src/hotspot/share/oops/constantPool.cpp | 8 +- src/hotspot/share/oops/klass.cpp | 5 +- src/hotspot/share/oops/objArrayOop.hpp | 2 +- src/hotspot/share/oops/oopsHierarchy.cpp | 2 - src/hotspot/share/prims/jni.cpp | 4 + src/hotspot/share/prims/jvmtiExport.cpp | 8 + src/hotspot/share/prims/jvmtiRawMonitor.cpp | 13 +- src/hotspot/share/prims/whitebox.cpp | 26 +- src/hotspot/share/runtime/javaThread.cpp | 4 +- src/hotspot/share/runtime/mutexLocker.cpp | 6 +- src/hotspot/share/runtime/mutexLocker.hpp | 1 + .../share/runtime/safepointVerifiers.cpp | 8 +- .../share/runtime/safepointVerifiers.hpp | 3 +- src/hotspot/share/runtime/thread.hpp | 1 + src/hotspot/share/runtime/threads.cpp | 26 +- src/hotspot/share/utilities/exceptions.cpp | 3 +- src/hotspot/share/utilities/macros.hpp | 2 +- test/hotspot/jtreg/ProblemList-AotJdk.txt | 1 + test/hotspot/jtreg/TEST.ROOT | 2 + test/hotspot/jtreg/TEST.groups | 3 +- .../jtreg/gc/TestPLABAdaptToMinTLABSize.java | 4 +- .../gc/stress/gcbasher/TestGCBasherWithZ.java | 4 +- .../hotspot/jtreg/runtime/cds/AOTMapTest.java | 14 +- .../jtreg/runtime/cds/SharedStrings.java | 2 +- .../jtreg/runtime/cds/SharedStringsDedup.java | 2 +- .../runtime/cds/SharedStringsRunAuto.java | 2 +- .../cds/SharedSymbolTableBucketSize.java | 5 +- .../cds/TestDefaultArchiveLoading.java | 2 + .../cds/appcds/TestParallelGCWithCDS.java | 35 +- .../cds/appcds/TestSerialGCWithCDS.java | 5 +- .../cds/appcds/TestZGCWithAOTHeap.java | 159 +++ .../aotClassLinking/AOTCacheWithZGC.java | 59 - .../aotCode/AOTCodeCompressedOopsTest.java | 2 + .../cacheObject/ArchivedIntegerCacheTest.java | 12 +- .../PrintSharedArchiveAndExit.java | 10 +- .../PrintSharedArchiveAndExit.java | 10 +- .../cds/appcds/sharedStrings/ExerciseGC.java | 3 +- .../cds/appcds/sharedStrings/FlagCombo.java | 8 +- .../sharedStrings/IncompatibleOptions.java | 68 +- .../sharedStrings/InternSharedString.java | 6 +- .../cds/appcds/sharedStrings/LargePages.java | 3 +- .../sharedStrings/SharedStringsBasic.java | 6 +- .../sharedStrings/SharedStringsBasicPlus.java | 7 +- .../sharedStrings/SharedStringsHumongous.java | 7 +- .../sharedStrings/SharedStringsStress.java | 7 +- .../sharedStrings/SharedStringsUtils.java | 7 +- .../sharedStrings/SharedStringsWbTest.java | 7 +- .../serviceability/sa/ClhsdbPrintAll.java | 2 +- test/jdk/TEST.ROOT | 2 + test/jtreg-ext/requires/VMProps.java | 50 +- test/lib/jdk/test/whitebox/WhiteBox.java | 2 + 104 files changed, 5281 insertions(+), 1657 deletions(-) create mode 100644 src/hotspot/share/cds/aotMappedHeapLoader.cpp rename src/hotspot/share/cds/{archiveHeapLoader.hpp => aotMappedHeapLoader.hpp} (79%) rename src/hotspot/share/cds/{archiveHeapLoader.inline.hpp => aotMappedHeapLoader.inline.hpp} (82%) rename src/hotspot/share/cds/{archiveHeapWriter.cpp => aotMappedHeapWriter.cpp} (69%) rename src/hotspot/share/cds/{archiveHeapWriter.hpp => aotMappedHeapWriter.hpp} (86%) create mode 100644 src/hotspot/share/cds/aotStreamedHeapLoader.cpp create mode 100644 src/hotspot/share/cds/aotStreamedHeapLoader.hpp create mode 100644 src/hotspot/share/cds/aotStreamedHeapWriter.cpp create mode 100644 src/hotspot/share/cds/aotStreamedHeapWriter.hpp create mode 100644 src/hotspot/share/cds/aotThread.cpp create mode 100644 src/hotspot/share/cds/aotThread.hpp delete mode 100644 src/hotspot/share/cds/archiveHeapLoader.cpp create mode 100644 src/hotspot/share/cds/heapShared.inline.hpp create mode 100644 test/hotspot/jtreg/runtime/cds/appcds/TestZGCWithAOTHeap.java delete mode 100644 test/hotspot/jtreg/runtime/cds/appcds/aotClassLinking/AOTCacheWithZGC.java diff --git a/make/Images.gmk b/make/Images.gmk index 34d81081d29..c5877e44c22 100644 --- a/make/Images.gmk +++ b/make/Images.gmk @@ -148,7 +148,6 @@ define CreateCDSArchive $1_$2_DUMP_EXTRA_ARG := $$($1_$2_COOPS_OPTION) $$($1_$2_COH_OPTION) $1_$2_DUMP_TYPE := $(if $(findstring _nocoops, $2),-NOCOOPS,)$(if $(findstring _coh, $2),-COH,) - # Only G1 supports dumping the shared heap, so explicitly use G1 if the JVM supports it. $1_$2_CDS_DUMP_FLAGS := $(CDS_DUMP_FLAGS) $(if $(filter g1gc, $(JVM_FEATURES_$1)), -XX:+UseG1GC) ifeq ($(OPENJDK_TARGET_OS), windows) diff --git a/src/hotspot/share/cds/aotMapLogger.cpp b/src/hotspot/share/cds/aotMapLogger.cpp index 151c15048c2..d0a63c56093 100644 --- a/src/hotspot/share/cds/aotMapLogger.cpp +++ b/src/hotspot/share/cds/aotMapLogger.cpp @@ -23,7 +23,10 @@ */ #include "cds/aotMapLogger.hpp" -#include "cds/archiveHeapWriter.hpp" +#include "cds/aotMappedHeapLoader.hpp" +#include "cds/aotMappedHeapWriter.hpp" +#include "cds/aotStreamedHeapLoader.hpp" +#include "cds/aotStreamedHeapWriter.hpp" #include "cds/cdsConfig.hpp" #include "cds/filemap.hpp" #include "classfile/systemDictionaryShared.hpp" @@ -45,10 +48,7 @@ bool AOTMapLogger::_is_logging_at_bootstrap; bool AOTMapLogger::_is_runtime_logging; intx AOTMapLogger::_buffer_to_requested_delta; intx AOTMapLogger::_requested_to_mapped_metadata_delta; -size_t AOTMapLogger::_num_root_segments; -size_t AOTMapLogger::_num_obj_arrays_logged; GrowableArrayCHeap* AOTMapLogger::_roots; -ArchiveHeapInfo* AOTMapLogger::_dumptime_heap_info; class AOTMapLogger::RequestedMetadataAddr { address _raw_addr; @@ -86,12 +86,10 @@ void AOTMapLogger::ergo_initialize() { } void AOTMapLogger::dumptime_log(ArchiveBuilder* builder, FileMapInfo* mapinfo, - ArchiveHeapInfo* heap_info, + ArchiveMappedHeapInfo* mapped_heap_info, ArchiveStreamedHeapInfo* streamed_heap_info, char* bitmap, size_t bitmap_size_in_bytes) { _is_runtime_logging = false; _buffer_to_requested_delta = ArchiveBuilder::current()->buffer_to_requested_delta(); - _num_root_segments = mapinfo->heap_root_segments().count(); - _dumptime_heap_info = heap_info; log_file_header(mapinfo); @@ -106,8 +104,11 @@ void AOTMapLogger::dumptime_log(ArchiveBuilder* builder, FileMapInfo* mapinfo, log_as_hex((address)bitmap, bitmap_end, nullptr); #if INCLUDE_CDS_JAVA_HEAP - if (heap_info->is_used()) { - dumptime_log_heap_region(heap_info); + if (mapped_heap_info != nullptr && mapped_heap_info->is_used()) { + dumptime_log_mapped_heap_region(mapped_heap_info); + } + if (streamed_heap_info != nullptr && streamed_heap_info->is_used()) { + dumptime_log_streamed_heap_region(streamed_heap_info); } #endif @@ -192,7 +193,6 @@ void AOTMapLogger::runtime_log(FileMapInfo* mapinfo, GrowableArrayCHeaphas_heap_region() && CDSConfig::is_loading_heap()) { - _num_root_segments = mapinfo->heap_root_segments().count(); runtime_log_heap_region(mapinfo); } #endif @@ -501,62 +501,38 @@ void AOTMapLogger::log_as_hex(address base, address top, address requested_base, // Hence, in general, we cannot use regular oop API (such as oopDesc::obj_field()) on these objects. There // are a few rare case where regular oop API work, but these are all guarded with the raw_oop() method and // should be used with care. +// +// Each AOT heap reader and writer has its own oop_iterator() API that retrieves all the data required to build +// fake oops for logging. class AOTMapLogger::FakeOop { - static int _requested_shift; - static intx _buffer_to_requested_delta; - static address _buffer_start; - static address _buffer_end; - static uint64_t _buffer_start_narrow_oop; // The encoded narrow oop for the objects at _buffer_start + OopDataIterator* _iter; + OopData _data; - address _buffer_addr; - - static void assert_range(address buffer_addr) { - assert(_buffer_start <= buffer_addr && buffer_addr < _buffer_end, "range check"); + address* buffered_field_addr(int field_offset) { + return (address*)(buffered_addr() + field_offset); } - address* field_addr(int field_offset) { - return (address*)(_buffer_addr + field_offset); - } - -protected: +public: RequestedMetadataAddr metadata_field(int field_offset) { - return RequestedMetadataAddr(*(address*)(field_addr(field_offset))); + return RequestedMetadataAddr(*(address*)(buffered_field_addr(field_offset))); + } + + address buffered_addr() { + return _data._buffered_addr; } // Return an "oop" pointer so we can use APIs that accept regular oops. This // must be used with care, as only a limited number of APIs can work with oops that // live outside of the range of the heap. - oop raw_oop() { return cast_to_oop(_buffer_addr); } + oop raw_oop() { return _data._raw_oop; } -public: - static void init_globals(address requested_base, address requested_start, int requested_shift, - address buffer_start, address buffer_end) { - _requested_shift = requested_shift; - _buffer_to_requested_delta = requested_start - buffer_start; - _buffer_start = buffer_start; - _buffer_end = buffer_end; + FakeOop() : _data() {} + FakeOop(OopDataIterator* iter, OopData data) : _iter(iter), _data(data) {} - precond(requested_start >= requested_base); - if (UseCompressedOops) { - _buffer_start_narrow_oop = (uint64_t)(pointer_delta(requested_start, requested_base, 1)) >> _requested_shift; - assert(_buffer_start_narrow_oop < 0xffffffff, "sanity"); - } else { - _buffer_start_narrow_oop = 0xdeadbeed; - } - } - - FakeOop() : _buffer_addr(nullptr) {} - - FakeOop(address buffer_addr) : _buffer_addr(buffer_addr) { - if (_buffer_addr != nullptr) { - assert_range(_buffer_addr); - } - } - - FakeMirror& as_mirror(); - FakeObjArray& as_obj_array(); - FakeString& as_string(); - FakeTypeArray& as_type_array(); + FakeMirror as_mirror(); + FakeObjArray as_obj_array(); + FakeString as_string(); + FakeTypeArray as_type_array(); RequestedMetadataAddr klass() { address rk = (address)real_klass(); @@ -570,61 +546,45 @@ public: Klass* real_klass() { assert(UseCompressedClassPointers, "heap archiving requires UseCompressedClassPointers"); - if (_is_runtime_logging) { - return raw_oop()->klass(); - } else { - return ArchiveHeapWriter::real_klass_of_buffered_oop(_buffer_addr); - } + return _data._klass; } // in heap words size_t size() { - if (_is_runtime_logging) { - return raw_oop()->size_given_klass(real_klass()); - } else { - return ArchiveHeapWriter::size_of_buffered_oop(_buffer_addr); - } + return _data._size; + } + + bool is_root_segment() { + return _data._is_root_segment; } bool is_array() { return real_klass()->is_array_klass(); } - bool is_null() { return _buffer_addr == nullptr; } + bool is_null() { return buffered_addr() == nullptr; } int array_length() { precond(is_array()); return arrayOop(raw_oop())->length(); } + intptr_t target_location() { + return _data._target_location; + } + address requested_addr() { - return _buffer_addr + _buffer_to_requested_delta; + return _data._requested_addr; } uint32_t as_narrow_oop_value() { precond(UseCompressedOops); - if (_buffer_addr == nullptr) { - return 0; - } - uint64_t pd = (uint64_t)(pointer_delta(_buffer_addr, _buffer_start, 1)); - return checked_cast(_buffer_start_narrow_oop + (pd >> _requested_shift)); + return _data._narrow_location; } FakeOop read_oop_at(narrowOop* addr) { // +UseCompressedOops - uint64_t n = (uint64_t)(*addr); - if (n == 0) { - return FakeOop(nullptr); - } else { - precond(n >= _buffer_start_narrow_oop); - address value = _buffer_start + ((n - _buffer_start_narrow_oop) << _requested_shift); - return FakeOop(value); - } + return FakeOop(_iter, _iter->obj_at(addr)); } FakeOop read_oop_at(oop* addr) { // -UseCompressedOops - address requested_value = cast_from_oop
    (*addr); - if (requested_value == nullptr) { - return FakeOop(nullptr); - } else { - return FakeOop(requested_value - _buffer_to_requested_delta); - } + return FakeOop(_iter, _iter->obj_at(addr)); } FakeOop obj_field(int field_offset) { @@ -644,6 +604,8 @@ public: class AOTMapLogger::FakeMirror : public AOTMapLogger::FakeOop { public: + FakeMirror(OopDataIterator* iter, OopData data) : FakeOop(iter, data) {} + void print_class_signature_on(outputStream* st); Klass* real_mirrored_klass() { @@ -662,6 +624,8 @@ class AOTMapLogger::FakeObjArray : public AOTMapLogger::FakeOop { } public: + FakeObjArray(OopDataIterator* iter, OopData data) : FakeOop(iter, data) {} + int length() { return raw_objArrayOop()->length(); } @@ -676,6 +640,8 @@ public: class AOTMapLogger::FakeString : public AOTMapLogger::FakeOop { public: + FakeString(OopDataIterator* iter, OopData data) : FakeOop(iter, data) {} + bool is_latin1() { jbyte coder = raw_oop()->byte_field(java_lang_String::coder_offset()); assert(CompactStrings || coder == java_lang_String::CODER_UTF16, "Must be UTF16 without CompactStrings"); @@ -694,6 +660,8 @@ class AOTMapLogger::FakeTypeArray : public AOTMapLogger::FakeOop { } public: + FakeTypeArray(OopDataIterator* iter, OopData data) : FakeOop(iter, data) {} + void print_elements_on(outputStream* st) { TypeArrayKlass::cast(real_klass())->oop_print_elements_on(raw_typeArrayOop(), st); } @@ -703,24 +671,24 @@ public: jchar char_at(int i) { return raw_typeArrayOop()->char_at(i); } }; // AOTMapLogger::FakeTypeArray -AOTMapLogger::FakeMirror& AOTMapLogger::FakeOop::as_mirror() { +AOTMapLogger::FakeMirror AOTMapLogger::FakeOop::as_mirror() { precond(real_klass() == vmClasses::Class_klass()); - return (FakeMirror&)*this; + return FakeMirror(_iter, _data); } -AOTMapLogger::FakeObjArray& AOTMapLogger::FakeOop::as_obj_array() { +AOTMapLogger::FakeObjArray AOTMapLogger::FakeOop::as_obj_array() { precond(real_klass()->is_objArray_klass()); - return (FakeObjArray&)*this; + return FakeObjArray(_iter, _data); } -AOTMapLogger::FakeTypeArray& AOTMapLogger::FakeOop::as_type_array() { +AOTMapLogger::FakeTypeArray AOTMapLogger::FakeOop::as_type_array() { precond(real_klass()->is_typeArray_klass()); - return (FakeTypeArray&)*this; + return FakeTypeArray(_iter, _data); } -AOTMapLogger::FakeString& AOTMapLogger::FakeOop::as_string() { +AOTMapLogger::FakeString AOTMapLogger::FakeOop::as_string() { precond(real_klass() == vmClasses::String_klass()); - return (FakeString&)*this; + return FakeString(_iter, _data); } void AOTMapLogger::FakeMirror::print_class_signature_on(outputStream* st) { @@ -823,90 +791,104 @@ public: } }; // AOTMapLogger::ArchivedFieldPrinter -int AOTMapLogger::FakeOop::_requested_shift; -intx AOTMapLogger::FakeOop::_buffer_to_requested_delta; -address AOTMapLogger::FakeOop::_buffer_start; -address AOTMapLogger::FakeOop::_buffer_end; -uint64_t AOTMapLogger::FakeOop::_buffer_start_narrow_oop; - -void AOTMapLogger::dumptime_log_heap_region(ArchiveHeapInfo* heap_info) { +void AOTMapLogger::dumptime_log_mapped_heap_region(ArchiveMappedHeapInfo* heap_info) { MemRegion r = heap_info->buffer_region(); address buffer_start = address(r.start()); // start of the current oop inside the buffer address buffer_end = address(r.end()); - address requested_base = UseCompressedOops ? (address)CompressedOops::base() : (address)ArchiveHeapWriter::NOCOOPS_REQUESTED_BASE; - address requested_start = UseCompressedOops ? ArchiveHeapWriter::buffered_addr_to_requested_addr(buffer_start) : requested_base; - int requested_shift = CompressedOops::shift(); - - FakeOop::init_globals(requested_base, requested_start, requested_shift, buffer_start, buffer_end); + address requested_base = UseCompressedOops ? (address)CompressedOops::base() : (address)AOTMappedHeapWriter::NOCOOPS_REQUESTED_BASE; + address requested_start = UseCompressedOops ? AOTMappedHeapWriter::buffered_addr_to_requested_addr(buffer_start) : requested_base; log_region_range("heap", buffer_start, buffer_end, requested_start); - log_oops(buffer_start, buffer_end); + log_archived_objects(AOTMappedHeapWriter::oop_iterator(heap_info)); +} + +void AOTMapLogger::dumptime_log_streamed_heap_region(ArchiveStreamedHeapInfo* heap_info) { + MemRegion r = heap_info->buffer_region(); + address buffer_start = address(r.start()); // start of the current oop inside the buffer + address buffer_end = address(r.end()); + + log_region_range("heap", buffer_start, buffer_end, nullptr); + log_archived_objects(AOTStreamedHeapWriter::oop_iterator(heap_info)); } void AOTMapLogger::runtime_log_heap_region(FileMapInfo* mapinfo) { ResourceMark rm; + int heap_region_index = AOTMetaspace::hp; FileMapRegion* r = mapinfo->region_at(heap_region_index); - size_t alignment = ObjectAlignmentInBytes; + size_t alignment = (size_t)ObjectAlignmentInBytes; - // Allocate a buffer and read the image of the archived heap region. This buffer is outside - // of the real Java heap, so we must use FakeOop to access the contents of the archived heap objects. - char* buffer = resource_allocate_bytes(r->used() + alignment); - address buffer_start = (address)align_up(buffer, alignment); - address buffer_end = buffer_start + r->used(); - if (!mapinfo->read_region(heap_region_index, (char*)buffer_start, r->used(), /* do_commit = */ false)) { - log_error(aot)("Cannot read heap region; AOT map logging of heap objects failed"); - return; + if (mapinfo->object_streaming_mode()) { + address buffer_start = (address)r->mapped_base(); + address buffer_end = buffer_start + r->used(); + log_region_range("heap", buffer_start, buffer_end, nullptr); + log_archived_objects(AOTStreamedHeapLoader::oop_iterator(mapinfo, buffer_start, buffer_end)); + } else { + // Allocate a buffer and read the image of the archived heap region. This buffer is outside + // of the real Java heap, so we must use FakeOop to access the contents of the archived heap objects. + char* buffer = resource_allocate_bytes(r->used() + alignment); + address buffer_start = (address)align_up(buffer, alignment); + address buffer_end = buffer_start + r->used(); + if (!mapinfo->read_region(heap_region_index, (char*)buffer_start, r->used(), /* do_commit = */ false)) { + log_error(aot)("Cannot read heap region; AOT map logging of heap objects failed"); + return; + } + + address requested_base = UseCompressedOops ? (address)mapinfo->narrow_oop_base() : AOTMappedHeapLoader::heap_region_requested_address(mapinfo); + address requested_start = requested_base + r->mapping_offset(); + log_region_range("heap", buffer_start, buffer_end, requested_start); + log_archived_objects(AOTMappedHeapLoader::oop_iterator(mapinfo, buffer_start, buffer_end)); } - - address requested_base = UseCompressedOops ? (address)mapinfo->narrow_oop_base() : mapinfo->heap_region_requested_address(); - address requested_start = requested_base + r->mapping_offset(); - int requested_shift = mapinfo->narrow_oop_shift(); - - FakeOop::init_globals(requested_base, requested_start, requested_shift, buffer_start, buffer_end); - - log_region_range("heap", buffer_start, buffer_end, requested_start); - log_oops(buffer_start, buffer_end); } -void AOTMapLogger::log_oops(address buffer_start, address buffer_end) { +void AOTMapLogger::log_archived_objects(OopDataIterator* iter) { LogStreamHandle(Debug, aot, map) st; if (!st.is_enabled()) { return; } _roots = new GrowableArrayCHeap(); - _num_obj_arrays_logged = 0; - for (address fop = buffer_start; fop < buffer_end; ) { - FakeOop fake_oop(fop); - st.print(PTR_FORMAT ": @@ Object ", p2i(fake_oop.requested_addr())); - print_oop_info_cr(&st, fake_oop, /*print_requested_addr=*/false); + // Roots that are not segmented + GrowableArrayCHeap* normal_roots = iter->roots(); + for (int i = 0; i < normal_roots->length(); ++i) { + OopData data = normal_roots->at(i); + FakeOop fop(iter, data); + _roots->append(fop); + st.print(" root[%4d]: ", i); + print_oop_info_cr(&st, fop); + } + + while (iter->has_next()) { + FakeOop fake_oop(iter, iter->next()); + st.print(PTR_FORMAT ": @@ Object ", fake_oop.target_location()); + print_oop_info_cr(&st, fake_oop, /*print_location=*/false); LogStreamHandle(Trace, aot, map, oops) trace_st; if (trace_st.is_enabled()) { print_oop_details(fake_oop, &trace_st); } - address next_fop = fop + fake_oop.size() * BytesPerWord; - log_as_hex(fop, next_fop, fake_oop.requested_addr(), /*is_heap=*/true); - - fop = next_fop; + address fop = fake_oop.buffered_addr(); + address end_fop = fop + fake_oop.size() * BytesPerWord; + log_as_hex(fop, end_fop, fake_oop.requested_addr(), /*is_heap=*/true); } delete _roots; + delete iter; + delete normal_roots; } -void AOTMapLogger::print_oop_info_cr(outputStream* st, FakeOop fake_oop, bool print_requested_addr) { +void AOTMapLogger::print_oop_info_cr(outputStream* st, FakeOop fake_oop, bool print_location) { if (fake_oop.is_null()) { st->print_cr("null"); } else { ResourceMark rm; Klass* real_klass = fake_oop.real_klass(); - address requested_addr = fake_oop.requested_addr(); - if (print_requested_addr) { - st->print(PTR_FORMAT " ", p2i(requested_addr)); + intptr_t target_location = fake_oop.target_location(); + if (print_location) { + st->print(PTR_FORMAT " ", target_location); } if (UseCompressedOops) { st->print("(0x%08x) ", fake_oop.as_narrow_oop_value()); @@ -919,7 +901,8 @@ void AOTMapLogger::print_oop_info_cr(outputStream* st, FakeOop fake_oop, bool pr if (real_klass == vmClasses::String_klass()) { st->print(" "); - fake_oop.as_string().print_on(st); + FakeString fake_str = fake_oop.as_string(); + fake_str.print_on(st); } else if (real_klass == vmClasses::Class_klass()) { fake_oop.as_mirror().print_class_signature_on(st); } @@ -942,7 +925,7 @@ void AOTMapLogger::print_oop_details(FakeOop fake_oop, outputStream* st) { fake_oop.as_type_array().print_elements_on(st); } else if (real_klass->is_objArray_klass()) { FakeObjArray fake_obj_array = fake_oop.as_obj_array(); - bool is_logging_root_segment = _num_obj_arrays_logged < _num_root_segments; + bool is_logging_root_segment = fake_oop.is_root_segment(); for (int i = 0; i < fake_obj_array.length(); i++) { FakeOop elm = fake_obj_array.obj_at(i); @@ -954,7 +937,6 @@ void AOTMapLogger::print_oop_details(FakeOop fake_oop, outputStream* st) { } print_oop_info_cr(st, elm); } - _num_obj_arrays_logged ++; } else { st->print_cr(" - fields (%zu words):", fake_oop.size()); diff --git a/src/hotspot/share/cds/aotMapLogger.hpp b/src/hotspot/share/cds/aotMapLogger.hpp index dce857b0850..ba188514861 100644 --- a/src/hotspot/share/cds/aotMapLogger.hpp +++ b/src/hotspot/share/cds/aotMapLogger.hpp @@ -32,7 +32,8 @@ #include "utilities/globalDefinitions.hpp" #include "utilities/growableArray.hpp" -class ArchiveHeapInfo; +class ArchiveMappedHeapInfo; +class ArchiveStreamedHeapInfo; class CompileTrainingData; class DumpRegion; class FileMapInfo; @@ -64,6 +65,7 @@ class AOTMapLogger : AllStatic { MetaspaceObj::Type _type; }; +public: // FakeOop and subtypes class FakeOop; class FakeMirror; @@ -71,15 +73,48 @@ class AOTMapLogger : AllStatic { class FakeString; class FakeTypeArray; +#if INCLUDE_CDS_JAVA_HEAP + struct OopData { + address _buffered_addr; + address _requested_addr; + intptr_t _target_location; + uint32_t _narrow_location; + oopDesc* _raw_oop; + Klass* _klass; + size_t _size; + bool _is_root_segment; + }; + + class OopDataIterator : public CHeapObj { + protected: + OopData null_data() { + return { nullptr, + nullptr, + 0, + 0, + nullptr, + nullptr, + 0, + false }; + } + + public: + virtual bool has_next() = 0; + virtual OopData next() = 0; + virtual OopData obj_at(narrowOop* p) = 0; + virtual OopData obj_at(oop* p) = 0; + virtual GrowableArrayCHeap* roots() = 0; + virtual ~OopDataIterator() {} + }; +#endif + +private: class RequestedMetadataAddr; class RuntimeGatherArchivedMetaspaceObjs; static bool _is_logging_at_bootstrap; static bool _is_runtime_logging; - static size_t _num_root_segments; - static size_t _num_obj_arrays_logged; static GrowableArrayCHeap* _roots; - static ArchiveHeapInfo* _dumptime_heap_info; static intx _buffer_to_requested_delta; static intx _requested_to_mapped_metadata_delta; @@ -114,12 +149,14 @@ class AOTMapLogger : AllStatic { #if INCLUDE_CDS_JAVA_HEAP - static void dumptime_log_heap_region(ArchiveHeapInfo* heap_info); + static void dumptime_log_mapped_heap_region(ArchiveMappedHeapInfo* mapped_heap_info); + static void dumptime_log_streamed_heap_region(ArchiveStreamedHeapInfo* streamed_heap_info); static void runtime_log_heap_region(FileMapInfo* mapinfo); - static void print_oop_info_cr(outputStream* st, FakeOop fake_oop, bool print_requested_addr = true); + static void print_oop_info_cr(outputStream* st, FakeOop fake_oop, bool print_location = true); static void print_oop_details(FakeOop fake_oop, outputStream* st); - static void log_oops(address buf_start, address buf_end); + static void log_mapped_oops(address buf_start, address buf_end); + static void log_archived_objects(OopDataIterator* iter); class ArchivedFieldPrinter; // to be replaced by ArchivedFieldPrinter2 #endif @@ -128,7 +165,7 @@ public: static bool is_logging_at_bootstrap() { return _is_logging_at_bootstrap; } static void dumptime_log(ArchiveBuilder* builder, FileMapInfo* mapinfo, - ArchiveHeapInfo* heap_info, + ArchiveMappedHeapInfo* mapped_heap_info, ArchiveStreamedHeapInfo* streamed_heap_info, char* bitmap, size_t bitmap_size_in_bytes); static void runtime_log(FileMapInfo* static_mapinfo, FileMapInfo* dynamic_mapinfo); }; diff --git a/src/hotspot/share/cds/aotMappedHeapLoader.cpp b/src/hotspot/share/cds/aotMappedHeapLoader.cpp new file mode 100644 index 00000000000..84051cbd9e5 --- /dev/null +++ b/src/hotspot/share/cds/aotMappedHeapLoader.cpp @@ -0,0 +1,847 @@ +/* + * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "cds/aotLogging.hpp" +#include "cds/aotMappedHeapLoader.inline.hpp" +#include "cds/aotMappedHeapWriter.hpp" +#include "cds/aotMetaspace.hpp" +#include "cds/cdsConfig.hpp" +#include "cds/heapShared.inline.hpp" +#include "classfile/classLoaderDataShared.hpp" +#include "classfile/stringTable.hpp" +#include "classfile/systemDictionaryShared.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "logging/log.hpp" +#include "logging/logMessage.hpp" +#include "logging/logStream.hpp" +#include "logging/logTag.hpp" +#include "memory/allocation.inline.hpp" +#include "memory/iterator.inline.hpp" +#include "memory/resourceArea.hpp" +#include "memory/universe.hpp" +#include "sanitizers/ub.hpp" +#include "utilities/bitMap.inline.hpp" +#include "utilities/copy.hpp" +#if INCLUDE_G1GC +#include "gc/g1/g1CollectedHeap.hpp" +#include "gc/g1/g1HeapRegion.hpp" +#endif + +#if INCLUDE_CDS_JAVA_HEAP + +bool AOTMappedHeapLoader::_is_mapped = false; +bool AOTMappedHeapLoader::_is_loaded = false; + +bool AOTMappedHeapLoader::_narrow_oop_base_initialized = false; +address AOTMappedHeapLoader::_narrow_oop_base; +int AOTMappedHeapLoader::_narrow_oop_shift; + +// Support for loaded heap. +uintptr_t AOTMappedHeapLoader::_loaded_heap_bottom = 0; +uintptr_t AOTMappedHeapLoader::_loaded_heap_top = 0; +uintptr_t AOTMappedHeapLoader::_dumptime_base = UINTPTR_MAX; +uintptr_t AOTMappedHeapLoader::_dumptime_top = 0; +intx AOTMappedHeapLoader::_runtime_offset = 0; +bool AOTMappedHeapLoader::_loading_failed = false; + +// Support for mapped heap. +uintptr_t AOTMappedHeapLoader::_mapped_heap_bottom = 0; +bool AOTMappedHeapLoader::_mapped_heap_relocation_initialized = false; +ptrdiff_t AOTMappedHeapLoader::_mapped_heap_delta = 0; + +// Heap roots +GrowableArrayCHeap* AOTMappedHeapLoader::_root_segments = nullptr; +int AOTMappedHeapLoader::_root_segment_max_size_elems; + +MemRegion AOTMappedHeapLoader::_mapped_heap_memregion; +bool AOTMappedHeapLoader::_heap_pointers_need_patching; + +// Every mapped region is offset by _mapped_heap_delta from its requested address. +// See FileMapInfo::heap_region_requested_address(). +ATTRIBUTE_NO_UBSAN +void AOTMappedHeapLoader::init_mapped_heap_info(address mapped_heap_bottom, ptrdiff_t delta, int dumptime_oop_shift) { + assert(!_mapped_heap_relocation_initialized, "only once"); + if (!UseCompressedOops) { + assert(dumptime_oop_shift == 0, "sanity"); + } + assert(can_map(), "sanity"); + init_narrow_oop_decoding(CompressedOops::base() + delta, dumptime_oop_shift); + _mapped_heap_bottom = (intptr_t)mapped_heap_bottom; + _mapped_heap_delta = delta; + _mapped_heap_relocation_initialized = true; +} + +void AOTMappedHeapLoader::init_narrow_oop_decoding(address base, int shift) { + assert(!_narrow_oop_base_initialized, "only once"); + _narrow_oop_base_initialized = true; + _narrow_oop_base = base; + _narrow_oop_shift = shift; +} + +void AOTMappedHeapLoader::fixup_region() { + FileMapInfo* mapinfo = FileMapInfo::current_info(); + if (is_mapped()) { + fixup_mapped_heap_region(mapinfo); + } else if (_loading_failed) { + fill_failed_loaded_heap(); + } +} + +// ------------------ Support for Region MAPPING ----------------------------------------- + +// Patch all the embedded oop pointers inside an archived heap region, +// to be consistent with the runtime oop encoding. +class PatchCompressedEmbeddedPointers: public BitMapClosure { + narrowOop* _start; + + public: + PatchCompressedEmbeddedPointers(narrowOop* start) : _start(start) {} + + bool do_bit(size_t offset) { + narrowOop* p = _start + offset; + narrowOop v = *p; + assert(!CompressedOops::is_null(v), "null oops should have been filtered out at dump time"); + oop o = AOTMappedHeapLoader::decode_from_mapped_archive(v); + RawAccess::oop_store(p, o); + return true; + } +}; + +class PatchCompressedEmbeddedPointersQuick: public BitMapClosure { + narrowOop* _start; + uint32_t _delta; + + public: + PatchCompressedEmbeddedPointersQuick(narrowOop* start, uint32_t delta) : _start(start), _delta(delta) {} + + bool do_bit(size_t offset) { + narrowOop* p = _start + offset; + narrowOop v = *p; + assert(!CompressedOops::is_null(v), "null oops should have been filtered out at dump time"); + narrowOop new_v = CompressedOops::narrow_oop_cast(CompressedOops::narrow_oop_value(v) + _delta); + assert(!CompressedOops::is_null(new_v), "should never relocate to narrowOop(0)"); +#ifdef ASSERT + oop o1 = AOTMappedHeapLoader::decode_from_mapped_archive(v); + oop o2 = CompressedOops::decode_not_null(new_v); + assert(o1 == o2, "quick delta must work"); +#endif + RawAccess::oop_store(p, new_v); + return true; + } +}; + +class PatchUncompressedEmbeddedPointers: public BitMapClosure { + oop* _start; + intptr_t _delta; + + public: + PatchUncompressedEmbeddedPointers(oop* start, intx runtime_offset) : + _start(start), + _delta(runtime_offset) {} + + PatchUncompressedEmbeddedPointers(oop* start) : + _start(start), + _delta(AOTMappedHeapLoader::mapped_heap_delta()) {} + + bool do_bit(size_t offset) { + oop* p = _start + offset; + intptr_t dumptime_oop = (intptr_t)((void*)*p); + assert(dumptime_oop != 0, "null oops should have been filtered out at dump time"); + intptr_t runtime_oop = dumptime_oop + _delta; + RawAccess::oop_store(p, cast_to_oop(runtime_oop)); + return true; + } +}; + +void AOTMappedHeapLoader::patch_compressed_embedded_pointers(BitMapView bm, + FileMapInfo* info, + MemRegion region) { + narrowOop dt_encoded_bottom = encoded_heap_region_dumptime_address(info); + narrowOop rt_encoded_bottom = CompressedOops::encode_not_null(cast_to_oop(region.start())); + log_info(aot)("patching heap embedded pointers: narrowOop 0x%8x -> 0x%8x", + (uint)dt_encoded_bottom, (uint)rt_encoded_bottom); + + // Optimization: if dumptime shift is the same as runtime shift, we can perform a + // quick conversion from "dumptime narrowOop" -> "runtime narrowOop". + narrowOop* patching_start = (narrowOop*)region.start() + FileMapInfo::current_info()->mapped_heap()->oopmap_start_pos(); + if (_narrow_oop_shift == CompressedOops::shift()) { + uint32_t quick_delta = (uint32_t)rt_encoded_bottom - (uint32_t)dt_encoded_bottom; + log_info(aot)("heap data relocation quick delta = 0x%x", quick_delta); + if (quick_delta == 0) { + log_info(aot)("heap data relocation unnecessary, quick_delta = 0"); + } else { + PatchCompressedEmbeddedPointersQuick patcher(patching_start, quick_delta); + bm.iterate(&patcher); + } + } else { + log_info(aot)("heap data quick relocation not possible"); + PatchCompressedEmbeddedPointers patcher(patching_start); + bm.iterate(&patcher); + } +} + +// Patch all the non-null pointers that are embedded in the archived heap objects +// in this (mapped) region +void AOTMappedHeapLoader::patch_embedded_pointers(FileMapInfo* info, + MemRegion region, address oopmap, + size_t oopmap_size_in_bits) { + BitMapView bm((BitMap::bm_word_t*)oopmap, oopmap_size_in_bits); + if (UseCompressedOops) { + patch_compressed_embedded_pointers(bm, info, region); + } else { + PatchUncompressedEmbeddedPointers patcher((oop*)region.start() + FileMapInfo::current_info()->mapped_heap()->oopmap_start_pos()); + bm.iterate(&patcher); + } +} + +// ------------------ Support for Region LOADING ----------------------------------------- + +// The CDS archive remembers each heap object by its address at dump time, but +// the heap object may be loaded at a different address at run time. This structure is used +// to translate the dump time addresses for all objects in FileMapInfo::space_at(region_index) +// to their runtime addresses. +struct LoadedArchiveHeapRegion { + int _region_index; // index for FileMapInfo::space_at(index) + size_t _region_size; // number of bytes in this region + uintptr_t _dumptime_base; // The dump-time (decoded) address of the first object in this region + intx _runtime_offset; // If an object's dump time address P is within in this region, its + // runtime address is P + _runtime_offset + uintptr_t top() { + return _dumptime_base + _region_size; + } +}; + +void AOTMappedHeapLoader::init_loaded_heap_relocation(LoadedArchiveHeapRegion* loaded_region) { + _dumptime_base = loaded_region->_dumptime_base; + _dumptime_top = loaded_region->top(); + _runtime_offset = loaded_region->_runtime_offset; +} + +bool AOTMappedHeapLoader::can_load() { + return Universe::heap()->can_load_archived_objects(); +} + +class AOTMappedHeapLoader::PatchLoadedRegionPointers: public BitMapClosure { + narrowOop* _start; + intx _offset; + uintptr_t _base; + uintptr_t _top; + + public: + PatchLoadedRegionPointers(narrowOop* start, LoadedArchiveHeapRegion* loaded_region) + : _start(start), + _offset(loaded_region->_runtime_offset), + _base(loaded_region->_dumptime_base), + _top(loaded_region->top()) {} + + bool do_bit(size_t offset) { + assert(UseCompressedOops, "PatchLoadedRegionPointers for uncompressed oops is unimplemented"); + narrowOop* p = _start + offset; + narrowOop v = *p; + assert(!CompressedOops::is_null(v), "null oops should have been filtered out at dump time"); + uintptr_t o = cast_from_oop(AOTMappedHeapLoader::decode_from_archive(v)); + assert(_base <= o && o < _top, "must be"); + + o += _offset; + AOTMappedHeapLoader::assert_in_loaded_heap(o); + RawAccess::oop_store(p, cast_to_oop(o)); + return true; + } +}; + +bool AOTMappedHeapLoader::init_loaded_region(FileMapInfo* mapinfo, LoadedArchiveHeapRegion* loaded_region, + MemRegion& archive_space) { + size_t total_bytes = 0; + FileMapRegion* r = mapinfo->region_at(AOTMetaspace::hp); + r->assert_is_heap_region(); + if (r->used() == 0) { + return false; + } + + assert(is_aligned(r->used(), HeapWordSize), "must be"); + total_bytes += r->used(); + loaded_region->_region_index = AOTMetaspace::hp; + loaded_region->_region_size = r->used(); + loaded_region->_dumptime_base = (uintptr_t)heap_region_dumptime_address(mapinfo); + + assert(is_aligned(total_bytes, HeapWordSize), "must be"); + size_t word_size = total_bytes / HeapWordSize; + HeapWord* buffer = Universe::heap()->allocate_loaded_archive_space(word_size); + if (buffer == nullptr) { + return false; + } + + archive_space = MemRegion(buffer, word_size); + _loaded_heap_bottom = (uintptr_t)archive_space.start(); + _loaded_heap_top = _loaded_heap_bottom + total_bytes; + + loaded_region->_runtime_offset = _loaded_heap_bottom - loaded_region->_dumptime_base; + + return true; +} + +bool AOTMappedHeapLoader::load_heap_region_impl(FileMapInfo* mapinfo, LoadedArchiveHeapRegion* loaded_region, + uintptr_t load_address) { + uintptr_t bitmap_base = (uintptr_t)mapinfo->map_bitmap_region(); + if (bitmap_base == 0) { + _loading_failed = true; + return false; // OOM or CRC error + } + + FileMapRegion* r = mapinfo->region_at(loaded_region->_region_index); + if (!mapinfo->read_region(loaded_region->_region_index, (char*)load_address, r->used(), /* do_commit = */ false)) { + // There's no easy way to free the buffer, so we will fill it with zero later + // in fill_failed_loaded_heap(), and it will eventually be GC'ed. + log_warning(aot)("Loading of heap region %d has failed. Archived objects are disabled", loaded_region->_region_index); + _loading_failed = true; + return false; + } + assert(r->mapped_base() == (char*)load_address, "sanity"); + log_info(aot)("Loaded heap region #%d at base " INTPTR_FORMAT " top " INTPTR_FORMAT + " size %6zu delta %zd", + loaded_region->_region_index, load_address, load_address + loaded_region->_region_size, + loaded_region->_region_size, loaded_region->_runtime_offset); + + uintptr_t oopmap = bitmap_base + r->oopmap_offset(); + BitMapView bm((BitMap::bm_word_t*)oopmap, r->oopmap_size_in_bits()); + + if (UseCompressedOops) { + PatchLoadedRegionPointers patcher((narrowOop*)load_address + FileMapInfo::current_info()->mapped_heap()->oopmap_start_pos(), loaded_region); + bm.iterate(&patcher); + } else { + PatchUncompressedEmbeddedPointers patcher((oop*)load_address + FileMapInfo::current_info()->mapped_heap()->oopmap_start_pos(), loaded_region->_runtime_offset); + bm.iterate(&patcher); + } + return true; +} + +bool AOTMappedHeapLoader::load_heap_region(FileMapInfo* mapinfo) { + assert(can_load(), "loaded heap for must be supported"); + init_narrow_oop_decoding(mapinfo->narrow_oop_base(), mapinfo->narrow_oop_shift()); + + LoadedArchiveHeapRegion loaded_region; + memset(&loaded_region, 0, sizeof(loaded_region)); + + MemRegion archive_space; + if (!init_loaded_region(mapinfo, &loaded_region, archive_space)) { + return false; + } + + if (!load_heap_region_impl(mapinfo, &loaded_region, (uintptr_t)archive_space.start())) { + assert(_loading_failed, "must be"); + return false; + } + + init_loaded_heap_relocation(&loaded_region); + _is_loaded = true; + + return true; +} + +objArrayOop AOTMappedHeapLoader::root_segment(int segment_idx) { + if (CDSConfig::is_dumping_heap()) { + assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread"); + } else { + assert(CDSConfig::is_using_archive(), "must be"); + } + + objArrayOop segment = (objArrayOop)_root_segments->at(segment_idx).resolve(); + assert(segment != nullptr, "should have been initialized"); + return segment; +} + +void AOTMappedHeapLoader::get_segment_indexes(int idx, int& seg_idx, int& int_idx) { + assert(_root_segment_max_size_elems > 0, "sanity"); + + // Try to avoid divisions for the common case. + if (idx < _root_segment_max_size_elems) { + seg_idx = 0; + int_idx = idx; + } else { + seg_idx = idx / _root_segment_max_size_elems; + int_idx = idx % _root_segment_max_size_elems; + } + + assert(idx == seg_idx * _root_segment_max_size_elems + int_idx, + "sanity: %d index maps to %d segment and %d internal", idx, seg_idx, int_idx); +} + +void AOTMappedHeapLoader::add_root_segment(objArrayOop segment_oop) { + assert(segment_oop != nullptr, "must be"); + assert(is_in_use(), "must be"); + if (_root_segments == nullptr) { + _root_segments = new GrowableArrayCHeap(10); + } + _root_segments->push(OopHandle(Universe::vm_global(), segment_oop)); +} + +void AOTMappedHeapLoader::init_root_segment_sizes(int max_size_elems) { + _root_segment_max_size_elems = max_size_elems; +} + +oop AOTMappedHeapLoader::get_root(int index) { + assert(!_root_segments->is_empty(), "must have loaded shared heap"); + int seg_idx, int_idx; + get_segment_indexes(index, seg_idx, int_idx); + objArrayOop result = objArrayOop(root_segment(seg_idx)); + return result->obj_at(int_idx); +} + +void AOTMappedHeapLoader::clear_root(int index) { + int seg_idx, int_idx; + get_segment_indexes(index, seg_idx, int_idx); + root_segment(seg_idx)->obj_at_put(int_idx, nullptr); +} + +class VerifyLoadedHeapEmbeddedPointers: public BasicOopIterateClosure { + HashTable* _table; + + public: + VerifyLoadedHeapEmbeddedPointers(HashTable* table) : _table(table) {} + + virtual void do_oop(narrowOop* p) { + // This should be called before the loaded region is modified, so all the embedded pointers + // must be null, or must point to a valid object in the loaded region. + narrowOop v = *p; + if (!CompressedOops::is_null(v)) { + oop o = CompressedOops::decode_not_null(v); + uintptr_t u = cast_from_oop(o); + AOTMappedHeapLoader::assert_in_loaded_heap(u); + guarantee(_table->contains(u), "must point to beginning of object in loaded archived region"); + } + } + virtual void do_oop(oop* p) { + oop v = *p; + if(v != nullptr) { + uintptr_t u = cast_from_oop(v); + AOTMappedHeapLoader::assert_in_loaded_heap(u); + guarantee(_table->contains(u), "must point to beginning of object in loaded archived region"); + } + } +}; + +void AOTMappedHeapLoader::finish_initialization(FileMapInfo* info) { + patch_heap_embedded_pointers(info); + + if (is_loaded()) { + // These operations are needed only when the heap is loaded (not mapped). + finish_loaded_heap(); + if (VerifyArchivedFields > 0) { + verify_loaded_heap(); + } + } + if (is_in_use()) { + patch_native_pointers(); + intptr_t bottom = is_loaded() ? _loaded_heap_bottom : _mapped_heap_bottom; + + // The heap roots are stored in one or more segments that are laid out consecutively. + // The size of each segment (except for the last one) is max_size_in_{elems,bytes}. + HeapRootSegments segments = FileMapInfo::current_info()->mapped_heap()->root_segments(); + init_root_segment_sizes(segments.max_size_in_elems()); + intptr_t first_segment_addr = bottom + segments.base_offset(); + for (size_t c = 0; c < segments.count(); c++) { + oop segment_oop = cast_to_oop(first_segment_addr + (c * segments.max_size_in_bytes())); + assert(segment_oop->is_objArray(), "Must be"); + add_root_segment((objArrayOop)segment_oop); + } + + StringTable::load_shared_strings_array(); + } +} + +void AOTMappedHeapLoader::finish_loaded_heap() { + HeapWord* bottom = (HeapWord*)_loaded_heap_bottom; + HeapWord* top = (HeapWord*)_loaded_heap_top; + + MemRegion archive_space = MemRegion(bottom, top); + Universe::heap()->complete_loaded_archive_space(archive_space); +} + +void AOTMappedHeapLoader::verify_loaded_heap() { + log_info(aot, heap)("Verify all oops and pointers in loaded heap"); + + ResourceMark rm; + HashTable table; + VerifyLoadedHeapEmbeddedPointers verifier(&table); + HeapWord* bottom = (HeapWord*)_loaded_heap_bottom; + HeapWord* top = (HeapWord*)_loaded_heap_top; + + for (HeapWord* p = bottom; p < top; ) { + oop o = cast_to_oop(p); + table.put(cast_from_oop(o), true); + p += o->size(); + } + + for (HeapWord* p = bottom; p < top; ) { + oop o = cast_to_oop(p); + o->oop_iterate(&verifier); + p += o->size(); + } +} + +void AOTMappedHeapLoader::fill_failed_loaded_heap() { + assert(_loading_failed, "must be"); + if (_loaded_heap_bottom != 0) { + assert(_loaded_heap_top != 0, "must be"); + HeapWord* bottom = (HeapWord*)_loaded_heap_bottom; + HeapWord* top = (HeapWord*)_loaded_heap_top; + Universe::heap()->fill_with_objects(bottom, top - bottom); + } +} + +class PatchNativePointers: public BitMapClosure { + Metadata** _start; + + public: + PatchNativePointers(Metadata** start) : _start(start) {} + + bool do_bit(size_t offset) { + Metadata** p = _start + offset; + *p = (Metadata*)(address(*p) + AOTMetaspace::relocation_delta()); + return true; + } +}; + +void AOTMappedHeapLoader::patch_native_pointers() { + if (AOTMetaspace::relocation_delta() == 0) { + return; + } + + FileMapRegion* r = FileMapInfo::current_info()->region_at(AOTMetaspace::hp); + if (r->mapped_base() != nullptr && r->has_ptrmap()) { + log_info(aot, heap)("Patching native pointers in heap region"); + BitMapView bm = FileMapInfo::current_info()->ptrmap_view(AOTMetaspace::hp); + PatchNativePointers patcher((Metadata**)r->mapped_base() + FileMapInfo::current_info()->mapped_heap()->ptrmap_start_pos()); + bm.iterate(&patcher); + } +} + +// The actual address of this region during dump time. +address AOTMappedHeapLoader::heap_region_dumptime_address(FileMapInfo* info) { + FileMapRegion* r = info->region_at(AOTMetaspace::hp); + assert(CDSConfig::is_using_archive(), "runtime only"); + assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be"); + if (UseCompressedOops) { + return /*dumptime*/ (address)((uintptr_t)info->narrow_oop_base() + r->mapping_offset()); + } else { + return heap_region_requested_address(info); + } +} + +// The address where this region can be mapped into the runtime heap without +// patching any of the pointers that are embedded in this region. +address AOTMappedHeapLoader::heap_region_requested_address(FileMapInfo* info) { + assert(CDSConfig::is_using_archive(), "runtime only"); + FileMapRegion* r = info->region_at(AOTMetaspace::hp); + assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be"); + assert(can_use(), "cannot be used by AOTMappedHeapLoader::can_load() mode"); + if (UseCompressedOops) { + // We can avoid relocation if each region's offset from the runtime CompressedOops::base() + // is the same as its offset from the CompressedOops::base() during dumptime. + // Note that CompressedOops::base() may be different between dumptime and runtime. + // + // Example: + // Dumptime base = 0x1000 and shift is 0. We have a region at address 0x2000. There's a + // narrowOop P stored in this region that points to an object at address 0x2200. + // P's encoded value is 0x1200. + // + // Runtime base = 0x4000 and shift is also 0. If we map this region at 0x5000, then + // the value P can remain 0x1200. The decoded address = (0x4000 + (0x1200 << 0)) = 0x5200, + // which is the runtime location of the referenced object. + return /*runtime*/ (address)((uintptr_t)CompressedOops::base() + r->mapping_offset()); + } else { + // This was the hard-coded requested base address used at dump time. With uncompressed oops, + // the heap range is assigned by the OS so we will most likely have to relocate anyway, no matter + // what base address was picked at duump time. + return (address)AOTMappedHeapWriter::NOCOOPS_REQUESTED_BASE; + } +} + +bool AOTMappedHeapLoader::map_heap_region(FileMapInfo* info) { + if (map_heap_region_impl(info)) { +#ifdef ASSERT + // The "old" regions must be parsable -- we cannot have any unused space + // at the start of the lowest G1 region that contains archived objects. + assert(is_aligned(_mapped_heap_memregion.start(), G1HeapRegion::GrainBytes), "must be"); + + // Make sure we map at the very top of the heap - see comments in + // init_heap_region_relocation(). + MemRegion heap_range = G1CollectedHeap::heap()->reserved(); + assert(heap_range.contains(_mapped_heap_memregion), "must be"); + + address heap_end = (address)heap_range.end(); + address mapped_heap_region_end = (address)_mapped_heap_memregion.end(); + assert(heap_end >= mapped_heap_region_end, "must be"); + assert(heap_end - mapped_heap_region_end < (intx)(G1HeapRegion::GrainBytes), + "must be at the top of the heap to avoid fragmentation"); +#endif + + set_mapped(); + return true; + } else { + return false; + } +} + +bool AOTMappedHeapLoader::map_heap_region_impl(FileMapInfo* info) { + assert(UseG1GC, "the following code assumes G1"); + + FileMapRegion* r = info->region_at(AOTMetaspace::hp); + size_t size = r->used(); + if (size == 0) { + return false; // no archived java heap data + } + + size_t word_size = size / HeapWordSize; + address requested_start = heap_region_requested_address(info); + + aot_log_info(aot)("Preferred address to map heap data (to avoid relocation) is " INTPTR_FORMAT, p2i(requested_start)); + + // allocate from java heap + HeapWord* start = G1CollectedHeap::heap()->alloc_archive_region(word_size, (HeapWord*)requested_start); + if (start == nullptr) { + AOTMetaspace::report_loading_error("UseSharedSpaces: Unable to allocate java heap region for archive heap."); + return false; + } + + _mapped_heap_memregion = MemRegion(start, word_size); + + // Map the archived heap data. No need to call MemTracker::record_virtual_memory_tag() + // for mapped region as it is part of the reserved java heap, which is already recorded. + char* addr = (char*)_mapped_heap_memregion.start(); + char* base; + + if (AOTMetaspace::use_windows_memory_mapping() || UseLargePages) { + // With UseLargePages, memory mapping may fail on some OSes if the size is not + // large page aligned, so let's use read() instead. In this case, the memory region + // is already commited by G1 so we don't need to commit it again. + if (!info->read_region(AOTMetaspace::hp, addr, + align_up(_mapped_heap_memregion.byte_size(), os::vm_page_size()), + /* do_commit = */ !UseLargePages)) { + dealloc_heap_region(info); + aot_log_error(aot)("Failed to read archived heap region into " INTPTR_FORMAT, p2i(addr)); + return false; + } + // Checks for VerifySharedSpaces is already done inside read_region() + base = addr; + } else { + base = info->map_heap_region(r, addr, _mapped_heap_memregion.byte_size()); + if (base == nullptr || base != addr) { + dealloc_heap_region(info); + AOTMetaspace::report_loading_error("UseSharedSpaces: Unable to map at required address in java heap. " + INTPTR_FORMAT ", size = %zu bytes", + p2i(addr), _mapped_heap_memregion.byte_size()); + return false; + } + + if (VerifySharedSpaces && !r->check_region_crc(base)) { + dealloc_heap_region(info); + AOTMetaspace::report_loading_error("UseSharedSpaces: mapped heap region is corrupt"); + return false; + } + } + + r->set_mapped_base(base); + + // If the requested range is different from the range allocated by GC, then + // the pointers need to be patched. + address mapped_start = (address) _mapped_heap_memregion.start(); + ptrdiff_t delta = mapped_start - requested_start; + if (UseCompressedOops && + (info->narrow_oop_mode() != CompressedOops::mode() || + info->narrow_oop_shift() != CompressedOops::shift())) { + _heap_pointers_need_patching = true; + } + if (delta != 0) { + _heap_pointers_need_patching = true; + } + init_mapped_heap_info(mapped_start, delta, info->narrow_oop_shift()); + + if (_heap_pointers_need_patching) { + char* bitmap_base = info->map_bitmap_region(); + if (bitmap_base == nullptr) { + AOTMetaspace::report_loading_error("CDS heap cannot be used because bitmap region cannot be mapped"); + dealloc_heap_region(info); + _heap_pointers_need_patching = false; + return false; + } + } + aot_log_info(aot)("Heap data mapped at " INTPTR_FORMAT ", size = %8zu bytes", + p2i(mapped_start), _mapped_heap_memregion.byte_size()); + aot_log_info(aot)("CDS heap data relocation delta = %zd bytes", delta); + return true; +} + +narrowOop AOTMappedHeapLoader::encoded_heap_region_dumptime_address(FileMapInfo* info) { + assert(CDSConfig::is_using_archive(), "runtime only"); + assert(UseCompressedOops, "sanity"); + FileMapRegion* r = info->region_at(AOTMetaspace::hp); + return CompressedOops::narrow_oop_cast(r->mapping_offset() >> info->narrow_oop_shift()); +} + +void AOTMappedHeapLoader::patch_heap_embedded_pointers(FileMapInfo* info) { + if (!info->is_mapped() || !_heap_pointers_need_patching) { + return; + } + + char* bitmap_base = info->map_bitmap_region(); + assert(bitmap_base != nullptr, "must have already been mapped"); + + FileMapRegion* r = info->region_at(AOTMetaspace::hp); + patch_embedded_pointers( + info, _mapped_heap_memregion, + (address)(info->region_at(AOTMetaspace::bm)->mapped_base()) + r->oopmap_offset(), + r->oopmap_size_in_bits()); +} + +void AOTMappedHeapLoader::fixup_mapped_heap_region(FileMapInfo* info) { + if (is_mapped()) { + assert(!_mapped_heap_memregion.is_empty(), "sanity"); + + // Populate the archive regions' G1BlockOffsetTables. That ensures + // fast G1BlockOffsetTable::block_start operations for any given address + // within the archive regions when trying to find start of an object + // (e.g. during card table scanning). + G1CollectedHeap::heap()->populate_archive_regions_bot(_mapped_heap_memregion); + } +} + +// dealloc the archive regions from java heap +void AOTMappedHeapLoader::dealloc_heap_region(FileMapInfo* info) { + G1CollectedHeap::heap()->dealloc_archive_regions(_mapped_heap_memregion); +} + +AOTMapLogger::OopDataIterator* AOTMappedHeapLoader::oop_iterator(FileMapInfo* info, address buffer_start, address buffer_end) { + class MappedLoaderOopIterator : public AOTMapLogger::OopDataIterator { + private: + address _current; + address _next; + + address _buffer_start; + address _buffer_end; + uint64_t _buffer_start_narrow_oop; + intptr_t _buffer_to_requested_delta; + int _requested_shift; + + size_t _num_root_segments; + size_t _num_obj_arrays_logged; + + public: + MappedLoaderOopIterator(address buffer_start, + address buffer_end, + uint64_t buffer_start_narrow_oop, + intptr_t buffer_to_requested_delta, + int requested_shift, + size_t num_root_segments) + : _current(nullptr), + _next(buffer_start), + _buffer_start(buffer_start), + _buffer_end(buffer_end), + _buffer_start_narrow_oop(buffer_start_narrow_oop), + _buffer_to_requested_delta(buffer_to_requested_delta), + _requested_shift(requested_shift), + _num_root_segments(num_root_segments), + _num_obj_arrays_logged(0) { + } + + + AOTMapLogger::OopData capture(address buffered_addr) { + oopDesc* raw_oop = (oopDesc*)buffered_addr; + size_t size = raw_oop->size(); + address requested_addr = buffered_addr + _buffer_to_requested_delta; + intptr_t target_location = intptr_t(requested_addr); + uint64_t pd = (uint64_t)(pointer_delta(buffered_addr, _buffer_start, 1)); + uint32_t narrow_location = checked_cast(_buffer_start_narrow_oop + (pd >> _requested_shift)); + Klass* klass = raw_oop->klass(); + + return { buffered_addr, + requested_addr, + target_location, + narrow_location, + raw_oop, + klass, + size, + false }; + } + + bool has_next() override { + return _next < _buffer_end; + } + + AOTMapLogger::OopData next() override { + _current = _next; + AOTMapLogger::OopData result = capture(_current); + if (result._klass->is_objArray_klass()) { + result._is_root_segment = _num_obj_arrays_logged++ < _num_root_segments; + } + _next = _current + result._size * BytesPerWord; + return result; + } + + AOTMapLogger::OopData obj_at(narrowOop* addr) override { + uint64_t n = (uint64_t)(*addr); + if (n == 0) { + return null_data(); + } else { + precond(n >= _buffer_start_narrow_oop); + address buffer_addr = _buffer_start + ((n - _buffer_start_narrow_oop) << _requested_shift); + return capture(buffer_addr); + } + } + + AOTMapLogger::OopData obj_at(oop* addr) override { + address requested_value = cast_from_oop
    (*addr); + if (requested_value == nullptr) { + return null_data(); + } else { + address buffer_addr = requested_value - _buffer_to_requested_delta; + return capture(buffer_addr); + } + } + + GrowableArrayCHeap* roots() override { + return new GrowableArrayCHeap(); + } + }; + + FileMapRegion* r = info->region_at(AOTMetaspace::hp); + address requested_base = UseCompressedOops ? (address)info->narrow_oop_base() : heap_region_requested_address(info); + address requested_start = requested_base + r->mapping_offset(); + int requested_shift = info->narrow_oop_shift(); + intptr_t buffer_to_requested_delta = requested_start - buffer_start; + uint64_t buffer_start_narrow_oop = 0xdeadbeed; + if (UseCompressedOops) { + buffer_start_narrow_oop = (uint64_t)(pointer_delta(requested_start, requested_base, 1)) >> requested_shift; + assert(buffer_start_narrow_oop < 0xffffffff, "sanity"); + } + + return new MappedLoaderOopIterator(buffer_start, + buffer_end, + buffer_start_narrow_oop, + buffer_to_requested_delta, + requested_shift, + info->mapped_heap()->root_segments().count()); +} + +#endif // INCLUDE_CDS_JAVA_HEAP diff --git a/src/hotspot/share/cds/archiveHeapLoader.hpp b/src/hotspot/share/cds/aotMappedHeapLoader.hpp similarity index 79% rename from src/hotspot/share/cds/archiveHeapLoader.hpp rename to src/hotspot/share/cds/aotMappedHeapLoader.hpp index e559b447ebf..d344d7b0b0a 100644 --- a/src/hotspot/share/cds/archiveHeapLoader.hpp +++ b/src/hotspot/share/cds/aotMappedHeapLoader.hpp @@ -22,22 +22,27 @@ * */ -#ifndef SHARE_CDS_ARCHIVEHEAPLOADER_HPP -#define SHARE_CDS_ARCHIVEHEAPLOADER_HPP +#ifndef SHARE_CDS_AOTMAPPEDHEAPLOADER_HPP +#define SHARE_CDS_AOTMAPPEDHEAPLOADER_HPP +#include "cds/aotMapLogger.hpp" #include "gc/shared/gc_globals.hpp" #include "memory/allocation.hpp" #include "memory/allStatic.hpp" #include "memory/memRegion.hpp" +#include "oops/oopHandle.hpp" #include "oops/oopsHierarchy.hpp" #include "runtime/globals.hpp" #include "utilities/bitMap.hpp" +#include "utilities/growableArray.hpp" #include "utilities/macros.hpp" class FileMapInfo; struct LoadedArchiveHeapRegion; -class ArchiveHeapLoader : AllStatic { +class AOTMappedHeapLoader : AllStatic { + friend class AOTMapLogger; + public: // At runtime, the heap region in the CDS archive can be used in two different ways, // depending on the GC type: @@ -55,7 +60,6 @@ public: // Can this VM load the objects from archived heap region into the heap at start-up? static bool can_load() NOT_CDS_JAVA_HEAP_RETURN_(false); - static void finish_initialization() NOT_CDS_JAVA_HEAP_RETURN; static bool is_loaded() { CDS_JAVA_HEAP_ONLY(return _is_loaded;) NOT_CDS_JAVA_HEAP(return false;) @@ -81,6 +85,8 @@ public: NOT_CDS_JAVA_HEAP_RETURN_(false); } + static void finish_initialization(FileMapInfo* info) NOT_CDS_JAVA_HEAP_RETURN; + // NarrowOops stored in the CDS archive may use a different encoding scheme // than CompressedOops::{base,shift} -- see FileMapInfo::map_heap_region_impl. // To decode them, do not use CompressedOops::decode_not_null. Use this @@ -127,6 +133,13 @@ private: static ptrdiff_t _mapped_heap_delta; static bool _mapped_heap_relocation_initialized; + // Heap roots + static GrowableArrayCHeap* _root_segments; + static int _root_segment_max_size_elems; + + static MemRegion _mapped_heap_memregion; + static bool _heap_pointers_need_patching; + static void init_narrow_oop_decoding(address base, int shift); static bool init_loaded_region(FileMapInfo* mapinfo, LoadedArchiveHeapRegion* loaded_region, MemRegion& archive_space); @@ -141,20 +154,40 @@ private: return (_loaded_heap_bottom <= o && o < _loaded_heap_top); } + static objArrayOop root_segment(int segment_idx); + static void get_segment_indexes(int idx, int& seg_idx, int& int_idx); + static void add_root_segment(objArrayOop segment_oop); + static void init_root_segment_sizes(int max_size_elems); + template inline static oop decode_from_archive_impl(narrowOop v) NOT_CDS_JAVA_HEAP_RETURN_(nullptr); class PatchLoadedRegionPointers; class PatchUncompressedLoadedRegionPointers; + static address heap_region_dumptime_address(FileMapInfo* info); + static address heap_region_requested_address(FileMapInfo* info); + static bool map_heap_region_impl(FileMapInfo* info); + static narrowOop encoded_heap_region_dumptime_address(FileMapInfo* info); + static void patch_heap_embedded_pointers(FileMapInfo* info); + static void fixup_mapped_heap_region(FileMapInfo* info); + static void dealloc_heap_region(FileMapInfo* info); + public: + static bool map_heap_region(FileMapInfo* info); static bool load_heap_region(FileMapInfo* mapinfo); static void assert_in_loaded_heap(uintptr_t o) { assert(is_in_loaded_heap(o), "must be"); } + + static oop get_root(int index); + static void clear_root(int index); + + static AOTMapLogger::OopDataIterator* oop_iterator(FileMapInfo* info, address buffer_start, address buffer_end); + #endif // INCLUDE_CDS_JAVA_HEAP }; -#endif // SHARE_CDS_ARCHIVEHEAPLOADER_HPP +#endif // SHARE_CDS_AOTMAPPEDHEAPLOADER_HPP diff --git a/src/hotspot/share/cds/archiveHeapLoader.inline.hpp b/src/hotspot/share/cds/aotMappedHeapLoader.inline.hpp similarity index 82% rename from src/hotspot/share/cds/archiveHeapLoader.inline.hpp rename to src/hotspot/share/cds/aotMappedHeapLoader.inline.hpp index 9efd39b8d26..0e50fefdf0f 100644 --- a/src/hotspot/share/cds/archiveHeapLoader.inline.hpp +++ b/src/hotspot/share/cds/aotMappedHeapLoader.inline.hpp @@ -22,10 +22,10 @@ * */ -#ifndef SHARE_CDS_ARCHIVEHEAPLOADER_INLINE_HPP -#define SHARE_CDS_ARCHIVEHEAPLOADER_INLINE_HPP +#ifndef SHARE_CDS_AOTMAPPEDHEAPLOADER_INLINE_HPP +#define SHARE_CDS_AOTMAPPEDHEAPLOADER_INLINE_HPP -#include "cds/archiveHeapLoader.hpp" +#include "cds/aotMappedHeapLoader.hpp" #include "oops/compressedOops.inline.hpp" #include "utilities/align.hpp" @@ -33,7 +33,7 @@ #if INCLUDE_CDS_JAVA_HEAP template -inline oop ArchiveHeapLoader::decode_from_archive_impl(narrowOop v) { +inline oop AOTMappedHeapLoader::decode_from_archive_impl(narrowOop v) { assert(!CompressedOops::is_null(v), "narrow oop value can never be zero"); assert(_narrow_oop_base_initialized, "relocation information must have been initialized"); uintptr_t p = ((uintptr_t)_narrow_oop_base) + ((uintptr_t)v << _narrow_oop_shift); @@ -49,14 +49,14 @@ inline oop ArchiveHeapLoader::decode_from_archive_impl(narrowOop v) { return result; } -inline oop ArchiveHeapLoader::decode_from_archive(narrowOop v) { +inline oop AOTMappedHeapLoader::decode_from_archive(narrowOop v) { return decode_from_archive_impl(v); } -inline oop ArchiveHeapLoader::decode_from_mapped_archive(narrowOop v) { +inline oop AOTMappedHeapLoader::decode_from_mapped_archive(narrowOop v) { return decode_from_archive_impl(v); } #endif -#endif // SHARE_CDS_ARCHIVEHEAPLOADER_INLINE_HPP +#endif // SHARE_CDS_AOTMAPPEDHEAPLOADER_INLINE_HPP diff --git a/src/hotspot/share/cds/archiveHeapWriter.cpp b/src/hotspot/share/cds/aotMappedHeapWriter.cpp similarity index 69% rename from src/hotspot/share/cds/archiveHeapWriter.cpp rename to src/hotspot/share/cds/aotMappedHeapWriter.cpp index d1a8772874a..ff9319d266b 100644 --- a/src/hotspot/share/cds/archiveHeapWriter.cpp +++ b/src/hotspot/share/cds/aotMappedHeapWriter.cpp @@ -22,16 +22,18 @@ * */ +#include "cds/aotMappedHeapLoader.hpp" +#include "cds/aotMappedHeapWriter.hpp" #include "cds/aotReferenceObjSupport.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/cdsConfig.hpp" #include "cds/filemap.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "cds/regeneratedClasses.hpp" #include "classfile/javaClasses.hpp" #include "classfile/modules.hpp" #include "classfile/systemDictionary.hpp" #include "gc/shared/collectedHeap.hpp" +#include "memory/allocation.inline.hpp" #include "memory/iterator.inline.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.hpp" @@ -51,24 +53,25 @@ #if INCLUDE_CDS_JAVA_HEAP -GrowableArrayCHeap* ArchiveHeapWriter::_buffer = nullptr; +GrowableArrayCHeap* AOTMappedHeapWriter::_buffer = nullptr; // The following are offsets from buffer_bottom() -size_t ArchiveHeapWriter::_buffer_used; +size_t AOTMappedHeapWriter::_buffer_used; // Heap root segments -HeapRootSegments ArchiveHeapWriter::_heap_root_segments; +HeapRootSegments AOTMappedHeapWriter::_heap_root_segments; -address ArchiveHeapWriter::_requested_bottom; -address ArchiveHeapWriter::_requested_top; +address AOTMappedHeapWriter::_requested_bottom; +address AOTMappedHeapWriter::_requested_top; -GrowableArrayCHeap* ArchiveHeapWriter::_native_pointers; -GrowableArrayCHeap* ArchiveHeapWriter::_source_objs; -GrowableArrayCHeap* ArchiveHeapWriter::_source_objs_order; +GrowableArrayCHeap* AOTMappedHeapWriter::_native_pointers; +GrowableArrayCHeap* AOTMappedHeapWriter::_source_objs; +GrowableArrayCHeap* AOTMappedHeapWriter::_source_objs_order; -ArchiveHeapWriter::BufferOffsetToSourceObjectTable* - ArchiveHeapWriter::_buffer_offset_to_source_obj_table = nullptr; +AOTMappedHeapWriter::BufferOffsetToSourceObjectTable* +AOTMappedHeapWriter::_buffer_offset_to_source_obj_table = nullptr; +DumpedInternedStrings *AOTMappedHeapWriter::_dumped_interned_strings = nullptr; typedef HashTable< size_t, // offset of a filler from ArchiveHeapWriter::buffer_bottom() @@ -79,11 +82,12 @@ typedef HashTable< static FillersTable* _fillers; static int _num_native_ptrs = 0; -void ArchiveHeapWriter::init() { +void AOTMappedHeapWriter::init() { if (CDSConfig::is_dumping_heap()) { Universe::heap()->collect(GCCause::_java_lang_system_gc); _buffer_offset_to_source_obj_table = new BufferOffsetToSourceObjectTable(/*size (prime)*/36137, /*max size*/1 * M); + _dumped_interned_strings = new (mtClass)DumpedInternedStrings(INITIAL_TABLE_SIZE, MAX_TABLE_SIZE); _fillers = new FillersTable(); _requested_bottom = nullptr; _requested_top = nullptr; @@ -95,17 +99,20 @@ void ArchiveHeapWriter::init() { } } -void ArchiveHeapWriter::delete_tables_with_raw_oops() { +void AOTMappedHeapWriter::delete_tables_with_raw_oops() { delete _source_objs; _source_objs = nullptr; + + delete _dumped_interned_strings; + _dumped_interned_strings = nullptr; } -void ArchiveHeapWriter::add_source_obj(oop src_obj) { +void AOTMappedHeapWriter::add_source_obj(oop src_obj) { _source_objs->append(src_obj); } -void ArchiveHeapWriter::write(GrowableArrayCHeap* roots, - ArchiveHeapInfo* heap_info) { +void AOTMappedHeapWriter::write(GrowableArrayCHeap* roots, + ArchiveMappedHeapInfo* heap_info) { assert(CDSConfig::is_dumping_heap(), "sanity"); allocate_buffer(); copy_source_objs_to_buffer(roots); @@ -113,16 +120,16 @@ void ArchiveHeapWriter::write(GrowableArrayCHeap* roots, relocate_embedded_oops(roots, heap_info); } -bool ArchiveHeapWriter::is_too_large_to_archive(oop o) { +bool AOTMappedHeapWriter::is_too_large_to_archive(oop o) { return is_too_large_to_archive(o->size()); } -bool ArchiveHeapWriter::is_string_too_large_to_archive(oop string) { +bool AOTMappedHeapWriter::is_string_too_large_to_archive(oop string) { typeArrayOop value = java_lang_String::value_no_keepalive(string); return is_too_large_to_archive(value); } -bool ArchiveHeapWriter::is_too_large_to_archive(size_t size) { +bool AOTMappedHeapWriter::is_too_large_to_archive(size_t size) { assert(size > 0, "no zero-size object"); assert(size * HeapWordSize > size, "no overflow"); static_assert(MIN_GC_REGION_ALIGNMENT > 0, "must be positive"); @@ -135,20 +142,39 @@ bool ArchiveHeapWriter::is_too_large_to_archive(size_t size) { } } +// Keep track of the contents of the archived interned string table. This table +// is used only by CDSHeapVerifier. +void AOTMappedHeapWriter::add_to_dumped_interned_strings(oop string) { + assert_at_safepoint(); // DumpedInternedStrings uses raw oops + assert(!is_string_too_large_to_archive(string), "must be"); + bool created; + _dumped_interned_strings->put_if_absent(string, true, &created); + if (created) { + // Prevent string deduplication from changing the value field to + // something not in the archive. + java_lang_String::set_deduplication_forbidden(string); + _dumped_interned_strings->maybe_grow(); + } +} + +bool AOTMappedHeapWriter::is_dumped_interned_string(oop o) { + return _dumped_interned_strings->get(o) != nullptr; +} + // Various lookup functions between source_obj, buffered_obj and requested_obj -bool ArchiveHeapWriter::is_in_requested_range(oop o) { +bool AOTMappedHeapWriter::is_in_requested_range(oop o) { assert(_requested_bottom != nullptr, "do not call before _requested_bottom is initialized"); address a = cast_from_oop
    (o); return (_requested_bottom <= a && a < _requested_top); } -oop ArchiveHeapWriter::requested_obj_from_buffer_offset(size_t offset) { +oop AOTMappedHeapWriter::requested_obj_from_buffer_offset(size_t offset) { oop req_obj = cast_to_oop(_requested_bottom + offset); assert(is_in_requested_range(req_obj), "must be"); return req_obj; } -oop ArchiveHeapWriter::source_obj_to_requested_obj(oop src_obj) { +oop AOTMappedHeapWriter::source_obj_to_requested_obj(oop src_obj) { assert(CDSConfig::is_dumping_heap(), "dump-time only"); HeapShared::CachedOopInfo* p = HeapShared::get_cached_oop_info(src_obj); if (p != nullptr) { @@ -158,7 +184,7 @@ oop ArchiveHeapWriter::source_obj_to_requested_obj(oop src_obj) { } } -oop ArchiveHeapWriter::buffered_addr_to_source_obj(address buffered_addr) { +oop AOTMappedHeapWriter::buffered_addr_to_source_obj(address buffered_addr) { OopHandle* oh = _buffer_offset_to_source_obj_table->get(buffered_address_to_offset(buffered_addr)); if (oh != nullptr) { return oh->resolve(); @@ -167,7 +193,7 @@ oop ArchiveHeapWriter::buffered_addr_to_source_obj(address buffered_addr) { } } -Klass* ArchiveHeapWriter::real_klass_of_buffered_oop(address buffered_addr) { +Klass* AOTMappedHeapWriter::real_klass_of_buffered_oop(address buffered_addr) { oop p = buffered_addr_to_source_obj(buffered_addr); if (p != nullptr) { return p->klass(); @@ -179,7 +205,7 @@ Klass* ArchiveHeapWriter::real_klass_of_buffered_oop(address buffered_addr) { } } -size_t ArchiveHeapWriter::size_of_buffered_oop(address buffered_addr) { +size_t AOTMappedHeapWriter::size_of_buffered_oop(address buffered_addr) { oop p = buffered_addr_to_source_obj(buffered_addr); if (p != nullptr) { return p->size(); @@ -205,29 +231,29 @@ size_t ArchiveHeapWriter::size_of_buffered_oop(address buffered_addr) { return 0; } -address ArchiveHeapWriter::buffered_addr_to_requested_addr(address buffered_addr) { +address AOTMappedHeapWriter::buffered_addr_to_requested_addr(address buffered_addr) { return _requested_bottom + buffered_address_to_offset(buffered_addr); } -address ArchiveHeapWriter::requested_address() { +address AOTMappedHeapWriter::requested_address() { assert(_buffer != nullptr, "must be initialized"); return _requested_bottom; } -void ArchiveHeapWriter::allocate_buffer() { +void AOTMappedHeapWriter::allocate_buffer() { int initial_buffer_size = 100000; _buffer = new GrowableArrayCHeap(initial_buffer_size); _buffer_used = 0; ensure_buffer_space(1); // so that buffer_bottom() works } -void ArchiveHeapWriter::ensure_buffer_space(size_t min_bytes) { +void AOTMappedHeapWriter::ensure_buffer_space(size_t min_bytes) { // We usually have very small heaps. If we get a huge one it's probably caused by a bug. guarantee(min_bytes <= max_jint, "we dont support archiving more than 2G of objects"); _buffer->at_grow(to_array_index(min_bytes)); } -objArrayOop ArchiveHeapWriter::allocate_root_segment(size_t offset, int element_count) { +objArrayOop AOTMappedHeapWriter::allocate_root_segment(size_t offset, int element_count) { HeapWord* mem = offset_to_buffered_address(offset); memset(mem, 0, objArrayOopDesc::object_size(element_count)); @@ -242,7 +268,7 @@ objArrayOop ArchiveHeapWriter::allocate_root_segment(size_t offset, int element_ return objArrayOop(cast_to_oop(mem)); } -void ArchiveHeapWriter::root_segment_at_put(objArrayOop segment, int index, oop root) { +void AOTMappedHeapWriter::root_segment_at_put(objArrayOop segment, int index, oop root) { // Do not use arrayOop->obj_at_put(i, o) as arrayOop is outside the real heap! if (UseCompressedOops) { *segment->obj_at_addr(index) = CompressedOops::encode(root); @@ -251,7 +277,7 @@ void ArchiveHeapWriter::root_segment_at_put(objArrayOop segment, int index, oop } } -void ArchiveHeapWriter::copy_roots_to_buffer(GrowableArrayCHeap* roots) { +void AOTMappedHeapWriter::copy_roots_to_buffer(GrowableArrayCHeap* roots) { // Depending on the number of classes we are archiving, a single roots array may be // larger than MIN_GC_REGION_ALIGNMENT. Roots are allocated first in the buffer, which // allows us to chop the large array into a series of "segments". Current layout @@ -324,7 +350,7 @@ static int oop_sorting_rank(oop o) { } } -int ArchiveHeapWriter::compare_objs_by_oop_fields(HeapObjOrder* a, HeapObjOrder* b) { +int AOTMappedHeapWriter::compare_objs_by_oop_fields(HeapObjOrder* a, HeapObjOrder* b) { int rank_a = a->_rank; int rank_b = b->_rank; @@ -336,7 +362,7 @@ int ArchiveHeapWriter::compare_objs_by_oop_fields(HeapObjOrder* a, HeapObjOrder* } } -void ArchiveHeapWriter::sort_source_objs() { +void AOTMappedHeapWriter::sort_source_objs() { log_info(aot)("sorting heap objects"); int len = _source_objs->length(); _source_objs_order = new GrowableArrayCHeap(len); @@ -352,7 +378,7 @@ void ArchiveHeapWriter::sort_source_objs() { log_info(aot)("sorting heap objects done"); } -void ArchiveHeapWriter::copy_source_objs_to_buffer(GrowableArrayCHeap* roots) { +void AOTMappedHeapWriter::copy_source_objs_to_buffer(GrowableArrayCHeap* roots) { // There could be multiple root segments, which we want to be aligned by region. // Putting them ahead of objects makes sure we waste no space. copy_roots_to_buffer(roots); @@ -379,12 +405,12 @@ void ArchiveHeapWriter::copy_source_objs_to_buffer(GrowableArrayCHeaplength() + 1, roots->length(), _num_native_ptrs); } -size_t ArchiveHeapWriter::filler_array_byte_size(int length) { +size_t AOTMappedHeapWriter::filler_array_byte_size(int length) { size_t byte_size = objArrayOopDesc::object_size(length) * HeapWordSize; return byte_size; } -int ArchiveHeapWriter::filler_array_length(size_t fill_bytes) { +int AOTMappedHeapWriter::filler_array_length(size_t fill_bytes) { assert(is_object_aligned(fill_bytes), "must be"); size_t elemSize = (UseCompressedOops ? sizeof(narrowOop) : sizeof(oop)); @@ -400,7 +426,7 @@ int ArchiveHeapWriter::filler_array_length(size_t fill_bytes) { return -1; } -HeapWord* ArchiveHeapWriter::init_filler_array_at_buffer_top(int array_length, size_t fill_bytes) { +HeapWord* AOTMappedHeapWriter::init_filler_array_at_buffer_top(int array_length, size_t fill_bytes) { assert(UseCompressedClassPointers, "Archived heap only supported for compressed klasses"); Klass* oak = Universe::objectArrayKlass(); // already relocated to point to archived klass HeapWord* mem = offset_to_buffered_address(_buffer_used); @@ -416,7 +442,7 @@ HeapWord* ArchiveHeapWriter::init_filler_array_at_buffer_top(int array_length, s return mem; } -void ArchiveHeapWriter::maybe_fill_gc_region_gap(size_t required_byte_size) { +void AOTMappedHeapWriter::maybe_fill_gc_region_gap(size_t required_byte_size) { // We fill only with arrays (so we don't need to use a single HeapWord filler if the // leftover space is smaller than a zero-sized array object). Therefore, we need to // make sure there's enough space of min_filler_byte_size in the current region after @@ -449,7 +475,7 @@ void ArchiveHeapWriter::maybe_fill_gc_region_gap(size_t required_byte_size) { } } -size_t ArchiveHeapWriter::get_filler_size_at(address buffered_addr) { +size_t AOTMappedHeapWriter::get_filler_size_at(address buffered_addr) { size_t* p = _fillers->get(buffered_address_to_offset(buffered_addr)); if (p != nullptr) { assert(*p > 0, "filler must be larger than zero bytes"); @@ -465,7 +491,7 @@ void update_buffered_object_field(address buffered_obj, int field_offset, T valu *field_addr = value; } -size_t ArchiveHeapWriter::copy_one_source_obj_to_buffer(oop src_obj) { +size_t AOTMappedHeapWriter::copy_one_source_obj_to_buffer(oop src_obj) { assert(!is_too_large_to_archive(src_obj), "already checked"); size_t byte_size = src_obj->size() * HeapWordSize; assert(byte_size > 0, "no zero-size objects"); @@ -510,7 +536,7 @@ size_t ArchiveHeapWriter::copy_one_source_obj_to_buffer(oop src_obj) { return buffered_obj_offset; } -void ArchiveHeapWriter::set_requested_address(ArchiveHeapInfo* info) { +void AOTMappedHeapWriter::set_requested_address(ArchiveMappedHeapInfo* info) { assert(!info->is_used(), "only set once"); size_t heap_region_byte_size = _buffer_used; @@ -541,12 +567,12 @@ void ArchiveHeapWriter::set_requested_address(ArchiveHeapInfo* info) { info->set_buffer_region(MemRegion(offset_to_buffered_address(0), offset_to_buffered_address(_buffer_used))); - info->set_heap_root_segments(_heap_root_segments); + info->set_root_segments(_heap_root_segments); } // Oop relocation -template T* ArchiveHeapWriter::requested_addr_to_buffered_addr(T* p) { +template T* AOTMappedHeapWriter::requested_addr_to_buffered_addr(T* p) { assert(is_in_requested_range(cast_to_oop(p)), "must be"); address addr = address(p); @@ -555,56 +581,44 @@ template T* ArchiveHeapWriter::requested_addr_to_buffered_addr(T* p return offset_to_buffered_address(offset); } -template oop ArchiveHeapWriter::load_source_oop_from_buffer(T* buffered_addr) { +template oop AOTMappedHeapWriter::load_source_oop_from_buffer(T* buffered_addr) { oop o = load_oop_from_buffer(buffered_addr); assert(!in_buffer(cast_from_oop
    (o)), "must point to source oop"); return o; } -template void ArchiveHeapWriter::store_requested_oop_in_buffer(T* buffered_addr, - oop request_oop) { - assert(is_in_requested_range(request_oop), "must be"); +template void AOTMappedHeapWriter::store_requested_oop_in_buffer(T* buffered_addr, + oop request_oop) { + assert(request_oop == nullptr || is_in_requested_range(request_oop), "must be"); store_oop_in_buffer(buffered_addr, request_oop); } -inline void ArchiveHeapWriter::store_oop_in_buffer(oop* buffered_addr, oop requested_obj) { +inline void AOTMappedHeapWriter::store_oop_in_buffer(oop* buffered_addr, oop requested_obj) { *buffered_addr = requested_obj; } -inline void ArchiveHeapWriter::store_oop_in_buffer(narrowOop* buffered_addr, oop requested_obj) { - narrowOop val = CompressedOops::encode_not_null(requested_obj); +inline void AOTMappedHeapWriter::store_oop_in_buffer(narrowOop* buffered_addr, oop requested_obj) { + narrowOop val = CompressedOops::encode(requested_obj); *buffered_addr = val; } -oop ArchiveHeapWriter::load_oop_from_buffer(oop* buffered_addr) { +oop AOTMappedHeapWriter::load_oop_from_buffer(oop* buffered_addr) { return *buffered_addr; } -oop ArchiveHeapWriter::load_oop_from_buffer(narrowOop* buffered_addr) { +oop AOTMappedHeapWriter::load_oop_from_buffer(narrowOop* buffered_addr) { return CompressedOops::decode(*buffered_addr); } -template void ArchiveHeapWriter::relocate_field_in_buffer(T* field_addr_in_buffer, CHeapBitMap* oopmap) { - oop source_referent = load_source_oop_from_buffer(field_addr_in_buffer); - if (source_referent != nullptr) { - if (java_lang_Class::is_instance(source_referent)) { - Klass* k = java_lang_Class::as_Klass(source_referent); - if (RegeneratedClasses::has_been_regenerated(k)) { - source_referent = RegeneratedClasses::get_regenerated_object(k)->java_mirror(); - } - // When the source object points to a "real" mirror, the buffered object should point - // to the "scratch" mirror, which has all unarchivable fields scrubbed (to be reinstated - // at run time). - source_referent = HeapShared::scratch_java_mirror(source_referent); - assert(source_referent != nullptr, "must be"); - } - oop request_referent = source_obj_to_requested_obj(source_referent); - store_requested_oop_in_buffer(field_addr_in_buffer, request_referent); +template void AOTMappedHeapWriter::relocate_field_in_buffer(T* field_addr_in_buffer, oop source_referent, CHeapBitMap* oopmap) { + oop request_referent = source_obj_to_requested_obj(source_referent); + store_requested_oop_in_buffer(field_addr_in_buffer, request_referent); + if (request_referent != nullptr) { mark_oop_pointer(field_addr_in_buffer, oopmap); } } -template void ArchiveHeapWriter::mark_oop_pointer(T* buffered_addr, CHeapBitMap* oopmap) { +template void AOTMappedHeapWriter::mark_oop_pointer(T* buffered_addr, CHeapBitMap* oopmap) { T* request_p = (T*)(buffered_addr_to_requested_addr((address)buffered_addr)); address requested_region_bottom; @@ -620,7 +634,7 @@ template void ArchiveHeapWriter::mark_oop_pointer(T* buffered_addr, oopmap->set_bit(idx); } -void ArchiveHeapWriter::update_header_for_requested_obj(oop requested_obj, oop src_obj, Klass* src_klass) { +void AOTMappedHeapWriter::update_header_for_requested_obj(oop requested_obj, oop src_obj, Klass* src_klass) { assert(UseCompressedClassPointers, "Archived heap only supported for compressed klasses"); narrowKlass nk = ArchiveBuilder::current()->get_requested_narrow_klass(src_klass); address buffered_addr = requested_addr_to_buffered_addr(cast_from_oop
    (requested_obj)); @@ -653,7 +667,7 @@ void ArchiveHeapWriter::update_header_for_requested_obj(oop requested_obj, oop s fake_oop->set_mark(fake_oop->mark().set_age(0)); } -class ArchiveHeapWriter::EmbeddedOopRelocator: public BasicOopIterateClosure { +class AOTMappedHeapWriter::EmbeddedOopRelocator: public BasicOopIterateClosure { oop _src_obj; address _buffered_obj; CHeapBitMap* _oopmap; @@ -672,12 +686,9 @@ private: template void do_oop_work(T *p) { int field_offset = pointer_delta_as_int((char*)p, cast_from_oop(_src_obj)); T* field_addr = (T*)(_buffered_obj + field_offset); - if (_is_java_lang_ref && AOTReferenceObjSupport::skip_field(field_offset)) { - // Do not copy these fields. Set them to null - *field_addr = (T)0x0; - } else { - ArchiveHeapWriter::relocate_field_in_buffer(field_addr, _oopmap); - } + oop referent = load_source_oop_from_buffer(field_addr); + referent = HeapShared::maybe_remap_referent(_is_java_lang_ref, field_offset, referent); + AOTMappedHeapWriter::relocate_field_in_buffer(field_addr, referent, _oopmap); } }; @@ -693,8 +704,8 @@ static void log_bitmap_usage(const char* which, BitMap* bitmap, size_t total_bit } // Update all oop fields embedded in the buffered objects -void ArchiveHeapWriter::relocate_embedded_oops(GrowableArrayCHeap* roots, - ArchiveHeapInfo* heap_info) { +void AOTMappedHeapWriter::relocate_embedded_oops(GrowableArrayCHeap* roots, + ArchiveMappedHeapInfo* heap_info) { size_t oopmap_unit = (UseCompressedOops ? sizeof(narrowOop) : sizeof(oop)); size_t heap_region_byte_size = _buffer_used; heap_info->oopmap()->resize(heap_region_byte_size / oopmap_unit); @@ -709,6 +720,7 @@ void ArchiveHeapWriter::relocate_embedded_oops(GrowableArrayCHeap(info->buffer_offset()); EmbeddedOopRelocator relocator(src_obj, buffered_obj, heap_info->oopmap()); src_obj->oop_iterate(&relocator); + mark_native_pointers(src_obj); }; // Relocate HeapShared::roots(), which is created in copy_roots_to_buffer() and @@ -721,15 +733,19 @@ void ArchiveHeapWriter::relocate_embedded_oops(GrowableArrayCHeap(seg_offset); int length = _heap_root_segments.size_in_elems(seg_idx); - if (UseCompressedOops) { - for (int i = 0; i < length; i++) { - narrowOop* addr = (narrowOop*)(buffered_obj + objArrayOopDesc::obj_at_offset(i)); - relocate_field_in_buffer(addr, heap_info->oopmap()); - } - } else { - for (int i = 0; i < length; i++) { - oop* addr = (oop*)(buffered_obj + objArrayOopDesc::obj_at_offset(i)); - relocate_field_in_buffer(addr, heap_info->oopmap()); + size_t elem_size = UseCompressedOops ? sizeof(narrowOop) : sizeof(oop); + + for (int i = 0; i < length; i++) { + // There is no source object; these are native oops - load, translate and + // write back + size_t elem_offset = objArrayOopDesc::base_offset_in_bytes() + elem_size * i; + HeapWord* elem_addr = (HeapWord*)(buffered_obj + elem_offset); + oop obj = NativeAccess<>::oop_load(elem_addr); + obj = HeapShared::maybe_remap_referent(false /* is_reference_field */, elem_offset, obj); + if (UseCompressedOops) { + relocate_field_in_buffer((narrowOop*)elem_addr, obj, heap_info->oopmap()); + } else { + relocate_field_in_buffer((oop*)elem_addr, obj, heap_info->oopmap()); } } } @@ -741,7 +757,7 @@ void ArchiveHeapWriter::relocate_embedded_oops(GrowableArrayCHeapptrmap(), total_bytes / sizeof(address)); } -void ArchiveHeapWriter::mark_native_pointer(oop src_obj, int field_offset) { +void AOTMappedHeapWriter::mark_native_pointer(oop src_obj, int field_offset) { Metadata* ptr = src_obj->metadata_field_acquire(field_offset); if (ptr != nullptr) { NativePointerInfo info; @@ -753,7 +769,13 @@ void ArchiveHeapWriter::mark_native_pointer(oop src_obj, int field_offset) { } } -void ArchiveHeapWriter::compute_ptrmap(ArchiveHeapInfo* heap_info) { +void AOTMappedHeapWriter::mark_native_pointers(oop orig_obj) { + HeapShared::do_metadata_offsets(orig_obj, [&](int offset) { + mark_native_pointer(orig_obj, offset); + }); +} + +void AOTMappedHeapWriter::compute_ptrmap(ArchiveMappedHeapInfo* heap_info) { int num_non_null_ptrs = 0; Metadata** bottom = (Metadata**) _requested_bottom; Metadata** top = (Metadata**) _requested_top; // exclusive @@ -800,4 +822,118 @@ void ArchiveHeapWriter::compute_ptrmap(ArchiveHeapInfo* heap_info) { num_non_null_ptrs, size_t(heap_info->ptrmap()->size())); } +AOTMapLogger::OopDataIterator* AOTMappedHeapWriter::oop_iterator(ArchiveMappedHeapInfo* heap_info) { + class MappedWriterOopIterator : public AOTMapLogger::OopDataIterator { + private: + address _current; + address _next; + + address _buffer_start; + address _buffer_end; + uint64_t _buffer_start_narrow_oop; + intptr_t _buffer_to_requested_delta; + int _requested_shift; + + size_t _num_root_segments; + size_t _num_obj_arrays_logged; + + public: + MappedWriterOopIterator(address buffer_start, + address buffer_end, + uint64_t buffer_start_narrow_oop, + intptr_t buffer_to_requested_delta, + int requested_shift, + size_t num_root_segments) + : _current(nullptr), + _next(buffer_start), + _buffer_start(buffer_start), + _buffer_end(buffer_end), + _buffer_start_narrow_oop(buffer_start_narrow_oop), + _buffer_to_requested_delta(buffer_to_requested_delta), + _requested_shift(requested_shift), + _num_root_segments(num_root_segments), + _num_obj_arrays_logged(0) { + } + + AOTMapLogger::OopData capture(address buffered_addr) { + oopDesc* raw_oop = (oopDesc*)buffered_addr; + size_t size = size_of_buffered_oop(buffered_addr); + address requested_addr = buffered_addr_to_requested_addr(buffered_addr); + intptr_t target_location = (intptr_t)requested_addr; + uint64_t pd = (uint64_t)(pointer_delta(buffered_addr, _buffer_start, 1)); + uint32_t narrow_location = checked_cast(_buffer_start_narrow_oop + (pd >> _requested_shift)); + Klass* klass = real_klass_of_buffered_oop(buffered_addr); + + return { buffered_addr, + requested_addr, + target_location, + narrow_location, + raw_oop, + klass, + size, + false }; + } + + bool has_next() override { + return _next < _buffer_end; + } + + AOTMapLogger::OopData next() override { + _current = _next; + AOTMapLogger::OopData result = capture(_current); + if (result._klass->is_objArray_klass()) { + result._is_root_segment = _num_obj_arrays_logged++ < _num_root_segments; + } + _next = _current + result._size * BytesPerWord; + return result; + } + + AOTMapLogger::OopData obj_at(narrowOop* addr) override { + uint64_t n = (uint64_t)(*addr); + if (n == 0) { + return null_data(); + } else { + precond(n >= _buffer_start_narrow_oop); + address buffer_addr = _buffer_start + ((n - _buffer_start_narrow_oop) << _requested_shift); + return capture(buffer_addr); + } + } + + AOTMapLogger::OopData obj_at(oop* addr) override { + address requested_value = cast_from_oop
    (*addr); + if (requested_value == nullptr) { + return null_data(); + } else { + address buffer_addr = requested_value - _buffer_to_requested_delta; + return capture(buffer_addr); + } + } + + GrowableArrayCHeap* roots() override { + return new GrowableArrayCHeap(); + } + }; + + MemRegion r = heap_info->buffer_region(); + address buffer_start = address(r.start()); + address buffer_end = address(r.end()); + + address requested_base = UseCompressedOops ? (address)CompressedOops::base() : (address)AOTMappedHeapWriter::NOCOOPS_REQUESTED_BASE; + address requested_start = UseCompressedOops ? buffered_addr_to_requested_addr(buffer_start) : requested_base; + int requested_shift = CompressedOops::shift(); + intptr_t buffer_to_requested_delta = requested_start - buffer_start; + uint64_t buffer_start_narrow_oop = 0xdeadbeed; + if (UseCompressedOops) { + buffer_start_narrow_oop = (uint64_t)(pointer_delta(requested_start, requested_base, 1)) >> requested_shift; + assert(buffer_start_narrow_oop < 0xffffffff, "sanity"); + } + + return new MappedWriterOopIterator(buffer_start, + buffer_end, + buffer_start_narrow_oop, + buffer_to_requested_delta, + requested_shift, + heap_info->root_segments().count()); +} + #endif // INCLUDE_CDS_JAVA_HEAP diff --git a/src/hotspot/share/cds/archiveHeapWriter.hpp b/src/hotspot/share/cds/aotMappedHeapWriter.hpp similarity index 86% rename from src/hotspot/share/cds/archiveHeapWriter.hpp rename to src/hotspot/share/cds/aotMappedHeapWriter.hpp index 80e72c12e7e..9a85b83d3d1 100644 --- a/src/hotspot/share/cds/archiveHeapWriter.hpp +++ b/src/hotspot/share/cds/aotMappedHeapWriter.hpp @@ -22,9 +22,10 @@ * */ -#ifndef SHARE_CDS_ARCHIVEHEAPWRITER_HPP -#define SHARE_CDS_ARCHIVEHEAPWRITER_HPP +#ifndef SHARE_CDS_AOTMAPPEDHEAPWRITER_HPP +#define SHARE_CDS_AOTMAPPEDHEAPWRITER_HPP +#include "cds/aotMapLogger.hpp" #include "cds/heapShared.hpp" #include "memory/allocation.hpp" #include "memory/allStatic.hpp" @@ -37,32 +38,25 @@ class MemRegion; -class ArchiveHeapInfo { - MemRegion _buffer_region; // Contains the archived objects to be written into the CDS archive. - CHeapBitMap _oopmap; - CHeapBitMap _ptrmap; - HeapRootSegments _heap_root_segments; - +#if INCLUDE_CDS_JAVA_HEAP +class DumpedInternedStrings : + public ResizeableHashTable +{ public: - ArchiveHeapInfo() : _buffer_region(), _oopmap(128, mtClassShared), _ptrmap(128, mtClassShared) {} - bool is_used() { return !_buffer_region.is_empty(); } - - MemRegion buffer_region() { return _buffer_region; } - void set_buffer_region(MemRegion r) { _buffer_region = r; } - - char* buffer_start() { return (char*)_buffer_region.start(); } - size_t buffer_byte_size() { return _buffer_region.byte_size(); } - - CHeapBitMap* oopmap() { return &_oopmap; } - CHeapBitMap* ptrmap() { return &_ptrmap; } - - void set_heap_root_segments(HeapRootSegments segments) { _heap_root_segments = segments; }; - HeapRootSegments heap_root_segments() { return _heap_root_segments; } + DumpedInternedStrings(unsigned size, unsigned max_size) : + ResizeableHashTable(size, max_size) {} }; -#if INCLUDE_CDS_JAVA_HEAP -class ArchiveHeapWriter : AllStatic { - // ArchiveHeapWriter manipulates three types of addresses: +class AOTMappedHeapWriter : AllStatic { + friend class HeapShared; + friend class AOTMappedHeapLoader; + // AOTMappedHeapWriter manipulates three types of addresses: // // "source" vs "buffered" vs "requested" // @@ -117,6 +111,9 @@ public: // Shenandoah heap region size can never be smaller than 256K. static constexpr int MIN_GC_REGION_ALIGNMENT = 256 * K; + static const int INITIAL_TABLE_SIZE = 15889; // prime number + static const int MAX_TABLE_SIZE = 1000000; + private: class EmbeddedOopRelocator; struct NativePointerInfo { @@ -138,6 +135,7 @@ private: static GrowableArrayCHeap* _native_pointers; static GrowableArrayCHeap* _source_objs; + static DumpedInternedStrings *_dumped_interned_strings; // We sort _source_objs_order to minimize the number of bits in ptrmap and oopmap. // See comments near the body of ArchiveHeapWriter::compare_objs_by_oop_fields(). @@ -202,9 +200,10 @@ private: static int filler_array_length(size_t fill_bytes); static HeapWord* init_filler_array_at_buffer_top(int array_length, size_t fill_bytes); - static void set_requested_address(ArchiveHeapInfo* info); - static void relocate_embedded_oops(GrowableArrayCHeap* roots, ArchiveHeapInfo* info); - static void compute_ptrmap(ArchiveHeapInfo *info); + static void set_requested_address(ArchiveMappedHeapInfo* info); + static void mark_native_pointers(oop orig_obj); + static void relocate_embedded_oops(GrowableArrayCHeap* roots, ArchiveMappedHeapInfo* info); + static void compute_ptrmap(ArchiveMappedHeapInfo *info); static bool is_in_requested_range(oop o); static oop requested_obj_from_buffer_offset(size_t offset); @@ -217,7 +216,7 @@ private: template static void store_requested_oop_in_buffer(T* buffered_addr, oop request_oop); template static T* requested_addr_to_buffered_addr(T* p); - template static void relocate_field_in_buffer(T* field_addr_in_buffer, CHeapBitMap* oopmap); + template static void relocate_field_in_buffer(T* field_addr_in_buffer, oop source_referent, CHeapBitMap* oopmap); template static void mark_oop_pointer(T* buffered_addr, CHeapBitMap* oopmap); static void update_header_for_requested_obj(oop requested_obj, oop src_obj, Klass* src_klass); @@ -232,7 +231,9 @@ public: static bool is_too_large_to_archive(size_t size); static bool is_too_large_to_archive(oop obj); static bool is_string_too_large_to_archive(oop string); - static void write(GrowableArrayCHeap*, ArchiveHeapInfo* heap_info); + static bool is_dumped_interned_string(oop o); + static void add_to_dumped_interned_strings(oop string); + static void write(GrowableArrayCHeap*, ArchiveMappedHeapInfo* heap_info); static address requested_address(); // requested address of the lowest achived heap object static size_t get_filler_size_at(address buffered_addr); @@ -242,6 +243,8 @@ public: static address buffered_addr_to_requested_addr(address buffered_addr); static Klass* real_klass_of_buffered_oop(address buffered_addr); static size_t size_of_buffered_oop(address buffered_addr); + + static AOTMapLogger::OopDataIterator* oop_iterator(ArchiveMappedHeapInfo* heap_info); }; #endif // INCLUDE_CDS_JAVA_HEAP -#endif // SHARE_CDS_ARCHIVEHEAPWRITER_HPP +#endif // SHARE_CDS_AOTMAPPEDHEAPWRITER_HPP diff --git a/src/hotspot/share/cds/aotMetaspace.cpp b/src/hotspot/share/cds/aotMetaspace.cpp index e5c1700dbfb..8642b1a6de8 100644 --- a/src/hotspot/share/cds/aotMetaspace.cpp +++ b/src/hotspot/share/cds/aotMetaspace.cpp @@ -30,11 +30,10 @@ #include "cds/aotLinkedClassBulkLoader.hpp" #include "cds/aotLogging.hpp" #include "cds/aotMapLogger.hpp" +#include "cds/aotMappedHeapLoader.hpp" #include "cds/aotMetaspace.hpp" #include "cds/aotReferenceObjSupport.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapLoader.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/cds_globals.hpp" #include "cds/cdsConfig.hpp" #include "cds/cdsProtectionDomain.hpp" @@ -45,7 +44,7 @@ #include "cds/dynamicArchive.hpp" #include "cds/filemap.hpp" #include "cds/finalImageRecipes.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "cds/lambdaFormInvokers.hpp" #include "cds/lambdaProxyClassDictionary.hpp" #include "classfile/classLoaderDataGraph.hpp" @@ -339,7 +338,10 @@ void AOTMetaspace::post_initialize(TRAPS) { // Close any open file descriptors. However, mmap'ed pages will remain in memory. static_mapinfo->close(); - static_mapinfo->unmap_region(AOTMetaspace::bm); + + if (HeapShared::is_loading() && HeapShared::is_loading_mapping_mode()) { + static_mapinfo->unmap_region(AOTMetaspace::bm); + } if (dynamic_mapinfo != nullptr) { dynamic_mapinfo->close(); @@ -395,7 +397,7 @@ void AOTMetaspace::read_extra_data(JavaThread* current, const char* filename) { CLEAR_PENDING_EXCEPTION; } else { #if INCLUDE_CDS_JAVA_HEAP - if (ArchiveHeapWriter::is_string_too_large_to_archive(str)) { + if (HeapShared::is_string_too_large_to_archive(str)) { log_warning(aot, heap)("[line %d] extra interned string ignored; size too large: %d", reader.last_line_no(), utf8_length); continue; @@ -638,7 +640,8 @@ void AOTMetaspace::rewrite_bytecodes_and_calculate_fingerprints(Thread* thread, class VM_PopulateDumpSharedSpace : public VM_Operation { private: - ArchiveHeapInfo _heap_info; + ArchiveMappedHeapInfo _mapped_heap_info; + ArchiveStreamedHeapInfo _streamed_heap_info; FileMapInfo* _map_info; StaticArchiveBuilder& _builder; @@ -653,12 +656,13 @@ private: public: VM_PopulateDumpSharedSpace(StaticArchiveBuilder& b) : - VM_Operation(), _heap_info(), _map_info(nullptr), _builder(b) {} + VM_Operation(), _mapped_heap_info(), _streamed_heap_info(), _map_info(nullptr), _builder(b) {} bool skip_operation() const { return false; } VMOp_Type type() const { return VMOp_PopulateDumpSharedSpace; } - ArchiveHeapInfo* heap_info() { return &_heap_info; } + ArchiveMappedHeapInfo* mapped_heap_info() { return &_mapped_heap_info; } + ArchiveStreamedHeapInfo* streamed_heap_info() { return &_streamed_heap_info; } FileMapInfo* map_info() const { return _map_info; } void doit(); // outline because gdb sucks bool allow_nested_vm_operations() const { return true; } @@ -1100,8 +1104,7 @@ void AOTMetaspace::dump_static_archive_impl(StaticArchiveBuilder& builder, TRAPS #if INCLUDE_CDS_JAVA_HEAP if (CDSConfig::is_dumping_heap()) { - ArchiveHeapWriter::init(); - + HeapShared::init_heap_writer(); if (CDSConfig::is_dumping_full_module_graph()) { ClassLoaderDataShared::ensure_module_entry_tables_exist(); HeapShared::reset_archived_object_states(CHECK); @@ -1124,9 +1127,11 @@ void AOTMetaspace::dump_static_archive_impl(StaticArchiveBuilder& builder, TRAPS // See discussion in JDK-8342481. } - // Do this at the very end, when no Java code will be executed. Otherwise - // some new strings may be added to the intern table. - StringTable::allocate_shared_strings_array(CHECK); + if (HeapShared::is_writing_mapping_mode()) { + // Do this at the very end, when no Java code will be executed. Otherwise + // some new strings may be added to the intern table. + StringTable::allocate_shared_strings_array(CHECK); + } } else { log_info(aot)("Not dumping heap, reset CDSConfig::_is_using_optimized_module_handling"); CDSConfig::stop_using_optimized_module_handling(); @@ -1147,7 +1152,7 @@ void AOTMetaspace::dump_static_archive_impl(StaticArchiveBuilder& builder, TRAPS CDSConfig::disable_dumping_aot_code(); } - bool status = write_static_archive(&builder, op.map_info(), op.heap_info()); + bool status = write_static_archive(&builder, op.map_info(), op.mapped_heap_info(), op.streamed_heap_info()); if (status && CDSConfig::is_dumping_preimage_static_archive()) { tty->print_cr("%s AOTConfiguration recorded: %s", CDSConfig::has_temp_aot_config_file() ? "Temporary" : "", AOTConfiguration); @@ -1161,7 +1166,10 @@ void AOTMetaspace::dump_static_archive_impl(StaticArchiveBuilder& builder, TRAPS } } -bool AOTMetaspace::write_static_archive(ArchiveBuilder* builder, FileMapInfo* map_info, ArchiveHeapInfo* heap_info) { +bool AOTMetaspace::write_static_archive(ArchiveBuilder* builder, + FileMapInfo* map_info, + ArchiveMappedHeapInfo* mapped_heap_info, + ArchiveStreamedHeapInfo* streamed_heap_info) { // relocate the data so that it can be mapped to AOTMetaspace::requested_base_address() // without runtime relocation. builder->relocate_to_requested(); @@ -1170,7 +1178,7 @@ bool AOTMetaspace::write_static_archive(ArchiveBuilder* builder, FileMapInfo* ma if (!map_info->is_open()) { return false; } - builder->write_archive(map_info, heap_info); + builder->write_archive(map_info, mapped_heap_info, streamed_heap_info); return true; } @@ -1344,7 +1352,7 @@ bool AOTMetaspace::try_link_class(JavaThread* current, InstanceKlass* ik) { void VM_PopulateDumpSharedSpace::dump_java_heap_objects() { if (CDSConfig::is_dumping_heap()) { - HeapShared::write_heap(&_heap_info); + HeapShared::write_heap(&_mapped_heap_info, &_streamed_heap_info); } else { CDSConfig::log_reasons_for_not_dumping_heap(); } @@ -1746,9 +1754,29 @@ MapArchiveResult AOTMetaspace::map_archives(FileMapInfo* static_mapinfo, FileMap CompressedKlassPointers::establish_protection_zone(klass_range_start, prot_zone_size); } - // map_or_load_heap_region() compares the current narrow oop and klass encodings - // with the archived ones, so it must be done after all encodings are determined. - static_mapinfo->map_or_load_heap_region(); + if (static_mapinfo->can_use_heap_region()) { + if (static_mapinfo->object_streaming_mode()) { + HeapShared::initialize_loading_mode(HeapArchiveMode::_streaming); + } else { + // map_or_load_heap_region() compares the current narrow oop and klass encodings + // with the archived ones, so it must be done after all encodings are determined. + static_mapinfo->map_or_load_heap_region(); + HeapShared::initialize_loading_mode(HeapArchiveMode::_mapping); + } + } else { + FileMapRegion* r = static_mapinfo->region_at(AOTMetaspace::hp); + if (r->used() > 0) { + if (static_mapinfo->object_streaming_mode()) { + AOTMetaspace::report_loading_error("Cannot use CDS heap data."); + } else { + if (!UseCompressedOops && !AOTMappedHeapLoader::can_map()) { + AOTMetaspace::report_loading_error("Cannot use CDS heap data. Selected GC not compatible -XX:-UseCompressedOops"); + } else { + AOTMetaspace::report_loading_error("Cannot use CDS heap data. UseEpsilonGC, UseG1GC, UseSerialGC, UseParallelGC, or UseShenandoahGC are required."); + } + } + } + } } #endif // _LP64 log_info(aot)("initial optimized module handling: %s", CDSConfig::is_using_optimized_module_handling() ? "enabled" : "disabled"); @@ -2081,11 +2109,11 @@ void AOTMetaspace::initialize_shared_spaces() { ReadClosure rc(&array, (intptr_t)SharedBaseAddress); serialize(&rc); - // Finish up archived heap initialization. These must be - // done after ReadClosure. - static_mapinfo->patch_heap_embedded_pointers(); - ArchiveHeapLoader::finish_initialization(); + // Finish initializing the heap dump mode used in the archive + // Heap initialization can be done only after vtables are initialized by ReadClosure. + HeapShared::finalize_initialization(static_mapinfo); Universe::load_archived_object_instances(); + AOTCodeCache::initialize(); if (dynamic_mapinfo != nullptr) { @@ -2138,7 +2166,9 @@ void AOTMetaspace::initialize_shared_spaces() { CountSharedSymbols cl; SymbolTable::shared_symbols_do(&cl); tty->print_cr("Number of shared symbols: %zu", cl.total()); - tty->print_cr("Number of shared strings: %zu", StringTable::shared_entry_count()); + if (HeapShared::is_loading_mapping_mode()) { + tty->print_cr("Number of shared strings: %zu", StringTable::shared_entry_count()); + } tty->print_cr("VM version: %s\r\n", static_mapinfo->vm_version()); if (FileMapInfo::current_info() == nullptr || _archive_loading_failed) { tty->print_cr("archive is invalid"); diff --git a/src/hotspot/share/cds/aotMetaspace.hpp b/src/hotspot/share/cds/aotMetaspace.hpp index c7b1578ec08..bfd9f4bcc75 100644 --- a/src/hotspot/share/cds/aotMetaspace.hpp +++ b/src/hotspot/share/cds/aotMetaspace.hpp @@ -33,7 +33,8 @@ #include "utilities/macros.hpp" class ArchiveBuilder; -class ArchiveHeapInfo; +class ArchiveMappedHeapInfo; +class ArchiveStreamedHeapInfo; class FileMapInfo; class Method; class outputStream; @@ -184,7 +185,10 @@ public: private: static void read_extra_data(JavaThread* current, const char* filename) NOT_CDS_RETURN; static void fork_and_dump_final_static_archive(TRAPS); - static bool write_static_archive(ArchiveBuilder* builder, FileMapInfo* map_info, ArchiveHeapInfo* heap_info); + static bool write_static_archive(ArchiveBuilder* builder, + FileMapInfo* map_info, + ArchiveMappedHeapInfo* mapped_heap_info, + ArchiveStreamedHeapInfo* streamed_heap_info); static FileMapInfo* open_static_archive(); static FileMapInfo* open_dynamic_archive(); // use_requested_addr: If true (default), attempt to map at the address the diff --git a/src/hotspot/share/cds/aotReferenceObjSupport.cpp b/src/hotspot/share/cds/aotReferenceObjSupport.cpp index e1598035d15..aa7cc875533 100644 --- a/src/hotspot/share/cds/aotReferenceObjSupport.cpp +++ b/src/hotspot/share/cds/aotReferenceObjSupport.cpp @@ -153,6 +153,9 @@ void AOTReferenceObjSupport::stabilize_cached_reference_objects(TRAPS) { _keep_alive_objs_array = OopHandle(Universe::vm_global(), result.get_oop()); } + + // Trigger a GC to prune eligible referents that were not kept alive + Universe::heap()->collect(GCCause::_java_lang_system_gc); } } diff --git a/src/hotspot/share/cds/aotStreamedHeapLoader.cpp b/src/hotspot/share/cds/aotStreamedHeapLoader.cpp new file mode 100644 index 00000000000..9b6974bb48d --- /dev/null +++ b/src/hotspot/share/cds/aotStreamedHeapLoader.cpp @@ -0,0 +1,1190 @@ +/* + * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "cds/aotMetaspace.hpp" +#include "cds/aotStreamedHeapLoader.hpp" +#include "cds/aotThread.hpp" +#include "cds/cdsConfig.hpp" +#include "cds/filemap.hpp" +#include "cds/heapShared.inline.hpp" +#include "classfile/classLoaderDataShared.hpp" +#include "classfile/javaClasses.inline.hpp" +#include "classfile/stringTable.hpp" +#include "classfile/vmClasses.hpp" +#include "gc/shared/collectedHeap.inline.hpp" +#include "gc/shared/oopStorage.inline.hpp" +#include "gc/shared/oopStorageSet.inline.hpp" +#include "logging/log.hpp" +#include "memory/iterator.inline.hpp" +#include "memory/oopFactory.hpp" +#include "oops/access.inline.hpp" +#include "oops/objArrayOop.inline.hpp" +#include "oops/oop.inline.hpp" +#include "runtime/globals.hpp" +#include "runtime/globals_extension.hpp" +#include "runtime/handles.inline.hpp" +#include "runtime/java.hpp" +#include "runtime/mutex.hpp" +#include "runtime/thread.hpp" +#include "utilities/bitMap.inline.hpp" +#include "utilities/exceptions.hpp" +#include "utilities/globalDefinitions.hpp" +#include "utilities/stack.inline.hpp" +#include "utilities/ticks.hpp" + +#include + +#if INCLUDE_CDS_JAVA_HEAP + +FileMapRegion* AOTStreamedHeapLoader::_heap_region; +FileMapRegion* AOTStreamedHeapLoader::_bitmap_region; +int* AOTStreamedHeapLoader::_roots_archive; +OopHandle AOTStreamedHeapLoader::_roots; +BitMapView AOTStreamedHeapLoader::_oopmap; +bool AOTStreamedHeapLoader::_is_in_use; +int AOTStreamedHeapLoader::_previous_batch_last_object_index; +int AOTStreamedHeapLoader::_current_batch_last_object_index; +int AOTStreamedHeapLoader::_current_root_index; +size_t AOTStreamedHeapLoader::_allocated_words; +bool AOTStreamedHeapLoader::_allow_gc; +bool AOTStreamedHeapLoader::_objects_are_handles; +size_t AOTStreamedHeapLoader::_num_archived_objects; +int AOTStreamedHeapLoader::_num_roots; +size_t AOTStreamedHeapLoader::_heap_region_used; +bool AOTStreamedHeapLoader::_loading_all_objects; + +size_t* AOTStreamedHeapLoader::_object_index_to_buffer_offset_table; +void** AOTStreamedHeapLoader::_object_index_to_heap_object_table; +int* AOTStreamedHeapLoader::_root_highest_object_index_table; + +bool AOTStreamedHeapLoader::_waiting_for_iterator; +bool AOTStreamedHeapLoader::_swapping_root_format; + +static uint64_t _early_materialization_time_ns = 0; +static uint64_t _late_materialization_time_ns = 0; +static uint64_t _final_materialization_time_ns = 0; +static uint64_t _cleanup_materialization_time_ns = 0; +static volatile uint64_t _accumulated_lazy_materialization_time_ns = 0; +static Ticks _materialization_start_ticks; + +int AOTStreamedHeapLoader::object_index_for_root_index(int root_index) { + return _roots_archive[root_index]; +} + +int AOTStreamedHeapLoader::highest_object_index_for_root_index(int root_index) { + return _root_highest_object_index_table[root_index]; +} + +size_t AOTStreamedHeapLoader::buffer_offset_for_object_index(int object_index) { + return _object_index_to_buffer_offset_table[object_index]; +} + +oopDesc* AOTStreamedHeapLoader::archive_object_for_object_index(int object_index) { + size_t buffer_offset = buffer_offset_for_object_index(object_index); + address bottom = (address)_heap_region->mapped_base(); + return (oopDesc*)(bottom + buffer_offset); +} + +size_t AOTStreamedHeapLoader::buffer_offset_for_archive_object(oopDesc* archive_object) { + address bottom = (address)_heap_region->mapped_base(); + return size_t(archive_object) - size_t(bottom); +} + +template +BitMap::idx_t AOTStreamedHeapLoader::obj_bit_idx_for_buffer_offset(size_t buffer_offset) { + if constexpr (use_coops) { + return BitMap::idx_t(buffer_offset / sizeof(narrowOop)); + } else { + return BitMap::idx_t(buffer_offset / sizeof(HeapWord)); + } +} + +oop AOTStreamedHeapLoader::heap_object_for_object_index(int object_index) { + assert(object_index >= 0 && object_index <= (int)_num_archived_objects, + "Heap object reference out of index: %d", object_index); + + if (_objects_are_handles) { + oop* handle = (oop*)_object_index_to_heap_object_table[object_index]; + if (handle == nullptr) { + return nullptr; + } + return NativeAccess<>::oop_load(handle); + } else { + return cast_to_oop(_object_index_to_heap_object_table[object_index]); + } +} + +void AOTStreamedHeapLoader::set_heap_object_for_object_index(int object_index, oop heap_object) { + assert(heap_object_for_object_index(object_index) == nullptr, "Should only set once with this API"); + if (_objects_are_handles) { + oop* handle = Universe::vm_global()->allocate(); + NativeAccess<>::oop_store(handle, heap_object); + _object_index_to_heap_object_table[object_index] = (void*)handle; + } else { + _object_index_to_heap_object_table[object_index] = cast_from_oop(heap_object); + } +} + +int AOTStreamedHeapLoader::archived_string_value_object_index(oopDesc* archive_object) { + assert(archive_object->klass() == vmClasses::String_klass(), "Must be an archived string"); + address archive_string_value_addr = (address)archive_object + java_lang_String::value_offset(); + return UseCompressedOops ? *(int*)archive_string_value_addr : (int)*(int64_t*)archive_string_value_addr; +} + +static int archive_array_length(oopDesc* archive_array) { + return *(int*)(address(archive_array) + arrayOopDesc::length_offset_in_bytes()); +} + +static size_t archive_object_size(oopDesc* archive_object) { + Klass* klass = archive_object->klass(); + int lh = klass->layout_helper(); + + if (Klass::layout_helper_is_instance(lh)) { + // Instance + if (Klass::layout_helper_needs_slow_path(lh)) { + return ((size_t*)(archive_object))[-1]; + } else { + return (size_t)Klass::layout_helper_size_in_bytes(lh) >> LogHeapWordSize; + } + } else if (Klass::layout_helper_is_array(lh)) { + // Array + size_t size_in_bytes; + size_t array_length = (size_t)archive_array_length(archive_object); + size_in_bytes = array_length << Klass::layout_helper_log2_element_size(lh); + size_in_bytes += (size_t)Klass::layout_helper_header_size(lh); + + return align_up(size_in_bytes, (size_t)MinObjAlignmentInBytes) / HeapWordSize; + } else { + // Other + return ((size_t*)(archive_object))[-1]; + } +} + +oop AOTStreamedHeapLoader::allocate_object(oopDesc* archive_object, markWord mark, size_t size, TRAPS) { + assert(!archive_object->is_stackChunk(), "no such objects are archived"); + + oop heap_object; + + Klass* klass = archive_object->klass(); + if (klass->is_mirror_instance_klass()) { + heap_object = Universe::heap()->class_allocate(klass, size, CHECK_NULL); + } else if (klass->is_instance_klass()) { + heap_object = Universe::heap()->obj_allocate(klass, size, CHECK_NULL); + } else { + assert(klass->is_array_klass(), "must be"); + int length = archive_array_length(archive_object); + bool do_zero = klass->is_objArray_klass(); + heap_object = Universe::heap()->array_allocate(klass, size, length, do_zero, CHECK_NULL); + } + + heap_object->set_mark(mark); + + return heap_object; +} + +void AOTStreamedHeapLoader::install_root(int root_index, oop heap_object) { + objArrayOop roots = objArrayOop(_roots.resolve()); + OrderAccess::release(); // Once the store below publishes an object, it can be concurrently picked up by another thread without using the lock + roots->obj_at_put(root_index, heap_object); +} + +void AOTStreamedHeapLoader::TracingObjectLoader::wait_for_iterator() { + if (JavaThread::current()->is_active_Java_thread()) { + // When the main thread has bootstrapped past the point of allowing safepoints, + // we can and indeed have to use safepoint checking waiting. + AOTHeapLoading_lock->wait(); + } else { + // If we have no bootstrapped the main thread far enough, then we cannot and + // indeed also don't need to perform safepoint checking waiting. + AOTHeapLoading_lock->wait_without_safepoint_check(); + } +} + +// Link object after copying in-place +template +class AOTStreamedHeapLoader::InPlaceLinkingOopClosure : public BasicOopIterateClosure { +private: + oop _obj; + LinkerT _linker; + +public: + InPlaceLinkingOopClosure(oop obj, LinkerT linker) + : _obj(obj), + _linker(linker) { + } + + virtual void do_oop(oop* p) { do_oop_work(p, (int)*(intptr_t*)p); } + virtual void do_oop(narrowOop* p) { do_oop_work(p, *(int*)p); } + + template + void do_oop_work(T* p, int object_index) { + int p_offset = pointer_delta_as_int((address)p, cast_from_oop
    (_obj)); + oop pointee = _linker(p_offset, object_index); + if (pointee != nullptr) { + _obj->obj_field_put_access((int)p_offset, pointee); + } + } +}; + +template +void AOTStreamedHeapLoader::copy_payload_carefully(oopDesc* archive_object, + oop heap_object, + BitMap::idx_t header_bit, + BitMap::idx_t start_bit, + BitMap::idx_t end_bit, + LinkerT linker) { + using RawElementT = std::conditional_t; + using OopElementT = std::conditional_t; + + BitMap::idx_t unfinished_bit = start_bit; + BitMap::idx_t next_reference_bit = _oopmap.find_first_set_bit(unfinished_bit, end_bit); + + // Fill in heap object bytes + while (unfinished_bit < end_bit) { + assert(unfinished_bit >= start_bit && unfinished_bit < end_bit, "out of bounds copying"); + + // This is the address of the pointee inside the input stream + size_t payload_offset = unfinished_bit - header_bit; + RawElementT* archive_payload_addr = ((RawElementT*)archive_object) + payload_offset; + RawElementT* heap_payload_addr = cast_from_oop(heap_object) + payload_offset; + + assert(heap_payload_addr >= cast_from_oop(heap_object) && + (HeapWord*)heap_payload_addr < cast_from_oop(heap_object) + heap_object->size(), + "Out of bounds copying"); + + if (next_reference_bit > unfinished_bit) { + // Primitive bytes available + size_t primitive_elements = next_reference_bit - unfinished_bit; + size_t primitive_bytes = primitive_elements * sizeof(RawElementT); + ::memcpy(heap_payload_addr, archive_payload_addr, primitive_bytes); + + unfinished_bit = next_reference_bit; + } else { + // Encountered reference + RawElementT* archive_p = (RawElementT*)archive_payload_addr; + OopElementT* heap_p = (OopElementT*)heap_payload_addr; + int pointee_object_index = (int)*archive_p; + int heap_p_offset = pointer_delta_as_int((address)heap_p, cast_from_oop
    (heap_object)); + + // The object index is retrieved from the archive, not the heap object. This is + // important after GC is enabled. Concurrent GC threads may scan references in the + // heap for various reasons after this point. Therefore, it is not okay to first copy + // the object index from a reference location in the archived object payload to a + // corresponding location in the heap object payload, and then fix it up afterwards to + // refer to a heap object. This is why this code iterates carefully over object references + // in the archived object, linking them one by one, without clobbering the reference + // locations in the heap objects with anything other than transitions from null to the + // intended linked object. + oop obj = linker(heap_p_offset, pointee_object_index); + if (obj != nullptr) { + heap_object->obj_field_put(heap_p_offset, obj); + } + + unfinished_bit++; + next_reference_bit = _oopmap.find_first_set_bit(unfinished_bit, end_bit); + } + } +} + +template +void AOTStreamedHeapLoader::copy_object_impl(oopDesc* archive_object, + oop heap_object, + size_t size, + LinkerT linker) { + if (!_allow_gc) { + // Without concurrent GC running, we can copy incorrect object references + // and metadata references into the heap object and then fix them up in-place. + size_t payload_size = size - 1; + HeapWord* archive_start = ((HeapWord*)archive_object) + 1; + HeapWord* heap_start = cast_from_oop(heap_object) + 1; + + Copy::disjoint_words(archive_start, heap_start, payload_size); + + // In-place linking fixes up object indices from references of the heap object, + // and patches them up to refer to objects. This can be done because we just copied + // the payload of the object from the archive to the heap object, including the + // reference object indices. However, this is only okay to do before the GC can run. + // A concurrent GC thread might racingly read the object payload after GC is enabled. + InPlaceLinkingOopClosure cl(heap_object, linker); + heap_object->oop_iterate(&cl); + HeapShared::remap_loaded_metadata(heap_object); + return; + } + + // When a concurrent GC may be running, we take care not to copy incorrect oops, + // narrowOops or Metadata* into the heap objects. Transitions go from 0 to the + // intended runtime linked values only. + size_t word_scale = use_coops ? 2 : 1; + using RawElementT = std::conditional_t; + + // Skip the markWord; it is set at allocation time + size_t header_size = word_scale; + + size_t buffer_offset = buffer_offset_for_archive_object(archive_object); + const BitMap::idx_t header_bit = obj_bit_idx_for_buffer_offset(buffer_offset); + const BitMap::idx_t start_bit = header_bit + header_size; + const BitMap::idx_t end_bit = header_bit + size * word_scale; + + BitMap::idx_t curr_bit = start_bit; + + // We are a bit paranoid about GC or other safepointing operations observing + // shady metadata fields from the archive that do not point at real metadata. + // We deal with this by explicitly reading the requested address from the + // archive and fixing it to real Metadata before writing it into the heap object. + HeapShared::do_metadata_offsets(heap_object, [&](int metadata_offset) { + BitMap::idx_t metadata_field_idx = header_bit + (size_t)metadata_offset / sizeof(RawElementT); + BitMap::idx_t skip = word_scale; + assert(metadata_field_idx >= start_bit && metadata_field_idx + skip <= end_bit, + "Metadata field out of bounds"); + + // Copy payload before metadata field + copy_payload_carefully(archive_object, + heap_object, + header_bit, + curr_bit, + metadata_field_idx, + linker); + + // Copy metadata field + Metadata* const archive_metadata = *(Metadata**)(uintptr_t(archive_object) + (size_t)metadata_offset); + Metadata* const runtime_metadata = archive_metadata != nullptr + ? (Metadata*)(address(archive_metadata) + AOTMetaspace::relocation_delta()) + : nullptr; + assert(runtime_metadata == nullptr || AOTMetaspace::in_aot_cache(runtime_metadata), "Invalid metadata pointer"); + DEBUG_ONLY(Metadata* const previous_metadata = heap_object->metadata_field(metadata_offset);) + assert(previous_metadata == nullptr || previous_metadata == runtime_metadata, "Should not observe transient values"); + heap_object->metadata_field_put(metadata_offset, runtime_metadata); + curr_bit = metadata_field_idx + skip; + }); + + // Copy trailing metadata after the last metadata word. This is usually doing + // all the copying. + copy_payload_carefully(archive_object, + heap_object, + header_bit, + curr_bit, + end_bit, + linker); +} + +void AOTStreamedHeapLoader::copy_object_eager_linking(oopDesc* archive_object, oop heap_object, size_t size) { + auto linker = [&](int p_offset, int pointee_object_index) { + oop obj = AOTStreamedHeapLoader::heap_object_for_object_index(pointee_object_index); + assert(pointee_object_index == 0 || obj != nullptr, "Eager object loading should only encounter already allocated links"); + return obj; + }; + if (UseCompressedOops) { + copy_object_impl(archive_object, heap_object, size, linker); + } else { + copy_object_impl(archive_object, heap_object, size, linker); + } +} + +void AOTStreamedHeapLoader::TracingObjectLoader::copy_object_lazy_linking(int object_index, + oopDesc* archive_object, + oop heap_object, + size_t size, + Stack& dfs_stack) { + auto linker = [&](int p_offset, int pointee_object_index) { + dfs_stack.push({pointee_object_index, object_index, p_offset}); + + // The tracing linker is a bit lazy and mutates the reference fields in its traversal. + // Returning null means don't link now. + return oop(nullptr); + }; + if (UseCompressedOops) { + copy_object_impl(archive_object, heap_object, size, linker); + } else { + copy_object_impl(archive_object, heap_object, size, linker); + } +} + +oop AOTStreamedHeapLoader::TracingObjectLoader::materialize_object_inner(int object_index, Stack& dfs_stack, TRAPS) { + // Allocate object + oopDesc* archive_object = archive_object_for_object_index(object_index); + size_t size = archive_object_size(archive_object); + markWord mark = archive_object->mark(); + + // The markWord is marked if the object is a String and it should be interned, + // make sure to unmark it before allocating memory for the object. + bool string_intern = mark.is_marked(); + mark = mark.set_unmarked(); + + oop heap_object; + + if (string_intern) { + int value_object_index = archived_string_value_object_index(archive_object); + + // Materialize the value object. + (void)materialize_object(value_object_index, dfs_stack, CHECK_NULL); + + // Allocate and link the string. + heap_object = allocate_object(archive_object, mark, size, CHECK_NULL); + copy_object_eager_linking(archive_object, heap_object, size); + + assert(java_lang_String::value(heap_object) == heap_object_for_object_index(value_object_index), "Linker should have linked this correctly"); + + // Replace the string with interned string + heap_object = StringTable::intern(heap_object, CHECK_NULL); + } else { + heap_object = allocate_object(archive_object, mark, size, CHECK_NULL); + + // Fill in object contents + copy_object_lazy_linking(object_index, archive_object, heap_object, size, dfs_stack); + } + + // Install forwarding + set_heap_object_for_object_index(object_index, heap_object); + + return heap_object; +} + +oop AOTStreamedHeapLoader::TracingObjectLoader::materialize_object(int object_index, Stack& dfs_stack, TRAPS) { + if (object_index <= _previous_batch_last_object_index) { + // The transitive closure of this object has been materialized; no need to do anything + return heap_object_for_object_index(object_index); + } + + if (object_index <= _current_batch_last_object_index) { + // The AOTThread is currently materializing this object and its transitive closure; only need to wait for it to complete + _waiting_for_iterator = true; + while (object_index > _previous_batch_last_object_index) { + wait_for_iterator(); + } + _waiting_for_iterator = false; + + // Notify the AOT thread if it is waiting for tracing to finish + AOTHeapLoading_lock->notify_all(); + return heap_object_for_object_index(object_index);; + } + + oop heap_object = heap_object_for_object_index(object_index); + if (heap_object != nullptr) { + // Already materialized by mutator + return heap_object; + } + + return materialize_object_inner(object_index, dfs_stack, THREAD); +} + +void AOTStreamedHeapLoader::TracingObjectLoader::drain_stack(Stack& dfs_stack, TRAPS) { + while (!dfs_stack.is_empty()) { + AOTHeapTraversalEntry entry = dfs_stack.pop(); + int pointee_object_index = entry._pointee_object_index; + oop pointee_heap_object = materialize_object(pointee_object_index, dfs_stack, CHECK); + oop heap_object = heap_object_for_object_index(entry._base_object_index); + if (_allow_gc) { + heap_object->obj_field_put(entry._heap_field_offset_bytes, pointee_heap_object); + } else { + heap_object->obj_field_put_access(entry._heap_field_offset_bytes, pointee_heap_object); + } + } +} + +oop AOTStreamedHeapLoader::TracingObjectLoader::materialize_object_transitive(int object_index, Stack& dfs_stack, TRAPS) { + assert_locked_or_safepoint(AOTHeapLoading_lock); + while (_waiting_for_iterator) { + wait_for_iterator(); + } + + auto handlized_materialize_object = [&](TRAPS) { + oop obj = materialize_object(object_index, dfs_stack, CHECK_(Handle())); + return Handle(THREAD, obj); + }; + + Handle result = handlized_materialize_object(CHECK_NULL); + drain_stack(dfs_stack, CHECK_NULL); + + return result(); +} + +oop AOTStreamedHeapLoader::TracingObjectLoader::materialize_root(int root_index, Stack& dfs_stack, TRAPS) { + int root_object_index = object_index_for_root_index(root_index); + oop root = materialize_object_transitive(root_object_index, dfs_stack, CHECK_NULL); + install_root(root_index, root); + + return root; +} + +int oop_handle_cmp(const void* left, const void* right) { + oop* left_handle = *(oop**)left; + oop* right_handle = *(oop**)right; + + if (right_handle > left_handle) { + return -1; + } else if (left_handle > right_handle) { + return 1; + } + + return 0; +} + +// The range is inclusive +void AOTStreamedHeapLoader::IterativeObjectLoader::initialize_range(int first_object_index, int last_object_index, TRAPS) { + for (int i = first_object_index; i <= last_object_index; ++i) { + oopDesc* archive_object = archive_object_for_object_index(i); + markWord mark = archive_object->mark(); + bool string_intern = mark.is_marked(); + if (string_intern) { + int value_object_index = archived_string_value_object_index(archive_object); + if (value_object_index == i + 1) { + // Interned strings are eagerly materialized in the allocation phase, so there is + // nothing else to do for interned strings here for the string nor its value array. + i++; + } + continue; + } + size_t size = archive_object_size(archive_object); + oop heap_object = heap_object_for_object_index(i); + copy_object_eager_linking(archive_object, heap_object, size); + } +} + +// The range is inclusive +size_t AOTStreamedHeapLoader::IterativeObjectLoader::materialize_range(int first_object_index, int last_object_index, TRAPS) { + GrowableArrayCHeap lazy_object_indices(0); + size_t materialized_words = 0; + + for (int i = first_object_index; i <= last_object_index; ++i) { + oopDesc* archive_object = archive_object_for_object_index(i); + markWord mark = archive_object->mark(); + + // The markWord is marked if the object is a String and it should be interned, + // make sure to unmark it before allocating memory for the object. + bool string_intern = mark.is_marked(); + mark = mark.set_unmarked(); + + size_t size = archive_object_size(archive_object); + materialized_words += size; + + oop heap_object = heap_object_for_object_index(i); + if (heap_object != nullptr) { + // Lazy loading has already initialized the object; we must not mutate it + lazy_object_indices.append(i); + continue; + } + + if (!string_intern) { + // The normal case; no lazy loading have loaded the object yet + heap_object = allocate_object(archive_object, mark, size, CHECK_0); + set_heap_object_for_object_index(i, heap_object); + continue; + } + + // Eagerly materialize interned strings to ensure that objects earlier than the string + // in a batch get linked to the intended interned string, and not a copy. + int value_object_index = archived_string_value_object_index(archive_object); + + bool is_normal_interned_string = value_object_index == i + 1; + + if (value_object_index < first_object_index) { + // If materialized in a previous batch, the value should already be allocated and initialized. + assert(heap_object_for_object_index(value_object_index) != nullptr, "should be materialized"); + } else { + // Materialize the value object. + oopDesc* archive_value_object = archive_object_for_object_index(value_object_index); + markWord value_mark = archive_value_object->mark(); + size_t value_size = archive_object_size(archive_value_object); + oop value_heap_object; + + if (is_normal_interned_string) { + // The common case: the value is next to the string. This happens when only the interned + // string points to its value character array. + assert(value_object_index <= last_object_index, "Must be within this batch: %d <= %d", value_object_index, last_object_index); + value_heap_object = allocate_object(archive_value_object, value_mark, value_size, CHECK_0); + set_heap_object_for_object_index(value_object_index, value_heap_object); + materialized_words += value_size; + } else { + // In the uncommon case, multiple strings point to the value of an interned string. + // The string can then be earlier in the batch. + assert(value_object_index < i, "surprising index"); + value_heap_object = heap_object_for_object_index(value_object_index); + } + + copy_object_eager_linking(archive_value_object, value_heap_object, value_size); + } + // Allocate and link the string. + heap_object = allocate_object(archive_object, mark, size, CHECK_0); + copy_object_eager_linking(archive_object, heap_object, size); + + assert(java_lang_String::value(heap_object) == heap_object_for_object_index(value_object_index), "Linker should have linked this correctly"); + + // Replace the string with interned string + heap_object = StringTable::intern(heap_object, CHECK_0); + set_heap_object_for_object_index(i, heap_object); + + if (is_normal_interned_string) { + // Skip over the string value, already materialized + i++; + } + } + + if (lazy_object_indices.is_empty()) { + // Normal case; no sprinkled lazy objects in the root subgraph + initialize_range(first_object_index, last_object_index, CHECK_0); + } else { + // The user lazy initialized some objects that are already initialized; we have to initialize around them + // to make sure they are not mutated. + int previous_object_index = first_object_index - 1; // Exclusive start of initialization slice + for (int i = 0; i < lazy_object_indices.length(); ++i) { + int lazy_object_index = lazy_object_indices.at(i); + int slice_start_object_index = previous_object_index; + int slice_end_object_index = lazy_object_index; + + if (slice_end_object_index - slice_start_object_index > 1) { // Both markers are exclusive + initialize_range(slice_start_object_index + 1, slice_end_object_index - 1, CHECK_0); + } + previous_object_index = lazy_object_index; + } + // Process tail range + if (last_object_index - previous_object_index > 0) { + initialize_range(previous_object_index + 1, last_object_index, CHECK_0); + } + } + + return materialized_words; +} + +bool AOTStreamedHeapLoader::IterativeObjectLoader::has_more() { + return _current_root_index < _num_roots; +} + +void AOTStreamedHeapLoader::IterativeObjectLoader::materialize_next_batch(TRAPS) { + assert(has_more(), "only materialize if there is something to materialize"); + + int min_batch_objects = 128; + int from_root_index = _current_root_index; + int max_to_root_index = _num_roots - 1; + int until_root_index = from_root_index; + int highest_object_index; + + // Expand the batch size from one root, to N roots until we cross 128 objects in total + for (;;) { + highest_object_index = highest_object_index_for_root_index(until_root_index); + if (highest_object_index - _previous_batch_last_object_index >= min_batch_objects) { + break; + } + if (until_root_index == max_to_root_index) { + break; + } + until_root_index++; + } + + oop root = nullptr; + + // Materialize objects of necessary, representing the transitive closure of the root + if (highest_object_index > _previous_batch_last_object_index) { + while (_swapping_root_format) { + // When the roots are being upgraded to use handles, it is not safe to racingly + // iterate over the object; we must wait. Setting the current batch last object index + // to something other than the previous batch last object index indicates to the + // root swapping that there is current iteration ongoing. + AOTHeapLoading_lock->wait(); + } + int first_object_index = _previous_batch_last_object_index + 1; + _current_batch_last_object_index = highest_object_index; + size_t allocated_words; + { + MutexUnlocker ml(AOTHeapLoading_lock, Mutex::_safepoint_check_flag); + allocated_words = materialize_range(first_object_index, highest_object_index, CHECK); + } + _allocated_words += allocated_words; + _previous_batch_last_object_index = _current_batch_last_object_index; + if (_waiting_for_iterator) { + // If tracer is waiting, let it know at the next point of unlocking that the root + // set it waited for has been processed now. + AOTHeapLoading_lock->notify_all(); + } + } + + // Install the root + for (int i = from_root_index; i <= until_root_index; ++i) { + int root_object_index = object_index_for_root_index(i); + root = heap_object_for_object_index(root_object_index); + install_root(i, root); + ++_current_root_index; + } +} + +bool AOTStreamedHeapLoader::materialize_early(TRAPS) { + Ticks start = Ticks::now(); + + // Only help with early materialization from the AOT thread if the heap archive can be allocated + // without the need for a GC. Otherwise, do lazy loading until GC is enabled later in the bootstrapping. + size_t bootstrap_max_memory = Universe::heap()->bootstrap_max_memory(); + size_t bootstrap_min_memory = MAX2(_heap_region_used, 2 * M); + + size_t before_gc_materialize_budget_bytes = (bootstrap_max_memory > bootstrap_min_memory) ? bootstrap_max_memory - bootstrap_min_memory : 0; + size_t before_gc_materialize_budget_words = before_gc_materialize_budget_bytes / HeapWordSize; + + log_info(aot, heap)("Max bootstrapping memory: %zuM, min bootstrapping memory: %zuM, selected budget: %zuM", + bootstrap_max_memory / M, bootstrap_min_memory / M, before_gc_materialize_budget_bytes / M); + + while (IterativeObjectLoader::has_more()) { + if (_allow_gc || _allocated_words > before_gc_materialize_budget_words) { + log_info(aot, heap)("Early object materialization interrupted at root %d", _current_root_index); + break; + } + + IterativeObjectLoader::materialize_next_batch(CHECK_false); + } + + _early_materialization_time_ns = (Ticks::now() - start).nanoseconds(); + + bool finished_before_gc_allowed = !_allow_gc && !IterativeObjectLoader::has_more(); + + return finished_before_gc_allowed; +} + +void AOTStreamedHeapLoader::materialize_late(TRAPS) { + Ticks start = Ticks::now(); + + // Continue materializing with GC allowed + + while (IterativeObjectLoader::has_more()) { + IterativeObjectLoader::materialize_next_batch(CHECK); + } + + _late_materialization_time_ns = (Ticks::now() - start).nanoseconds(); +} + +void AOTStreamedHeapLoader::cleanup() { + // First ensure there is no concurrent tracing going on + while (_waiting_for_iterator) { + AOTHeapLoading_lock->wait(); + } + + Ticks start = Ticks::now(); + + // Remove OopStorage roots + if (_objects_are_handles) { + size_t num_handles = _num_archived_objects; + // Skip the null entry + oop** handles = ((oop**)_object_index_to_heap_object_table) + 1; + // Sort the handles so that oop storage can release them faster + qsort(handles, num_handles, sizeof(oop*), (int (*)(const void*, const void*))oop_handle_cmp); + size_t num_null_handles = 0; + for (size_t handles_remaining = num_handles; handles_remaining != 0; --handles_remaining) { + oop* handle = handles[handles_remaining - 1]; + if (handle == nullptr) { + num_null_handles = handles_remaining; + break; + } + NativeAccess<>::oop_store(handle, nullptr); + } + Universe::vm_global()->release(&handles[num_null_handles], num_handles - num_null_handles); + } + + FREE_C_HEAP_ARRAY(void*, _object_index_to_heap_object_table); + + // Unmap regions + FileMapInfo::current_info()->unmap_region(AOTMetaspace::hp); + FileMapInfo::current_info()->unmap_region(AOTMetaspace::bm); + + _cleanup_materialization_time_ns = (Ticks::now() - start).nanoseconds(); + + log_statistics(); +} + +void AOTStreamedHeapLoader::log_statistics() { + uint64_t total_duration_us = (Ticks::now() - _materialization_start_ticks).microseconds(); + const bool is_async = _loading_all_objects && !AOTEagerlyLoadObjects; + const char* const async_or_sync = is_async ? "async" : "sync"; + log_info(aot, heap)("start to finish materialization time: " UINT64_FORMAT "us", + total_duration_us); + log_info(aot, heap)("early object materialization time (%s): " UINT64_FORMAT "us", + async_or_sync, _early_materialization_time_ns / 1000); + log_info(aot, heap)("late object materialization time (%s): " UINT64_FORMAT "us", + async_or_sync, _late_materialization_time_ns / 1000); + log_info(aot, heap)("object materialization cleanup time (%s): " UINT64_FORMAT "us", + async_or_sync, _cleanup_materialization_time_ns / 1000); + log_info(aot, heap)("final object materialization time stall (sync): " UINT64_FORMAT "us", + _final_materialization_time_ns / 1000); + log_info(aot, heap)("bootstrapping lazy materialization time (sync): " UINT64_FORMAT "us", + _accumulated_lazy_materialization_time_ns / 1000); + + uint64_t sync_time = _final_materialization_time_ns + _accumulated_lazy_materialization_time_ns; + uint64_t async_time = _early_materialization_time_ns + _late_materialization_time_ns + _cleanup_materialization_time_ns; + + if (!is_async) { + sync_time += async_time; + async_time = 0; + } + + log_info(aot, heap)("sync materialization time: " UINT64_FORMAT "us", + sync_time / 1000); + + log_info(aot, heap)("async materialization time: " UINT64_FORMAT "us", + async_time / 1000); + + uint64_t iterative_time = (uint64_t)(is_async ? async_time : sync_time); + uint64_t materialized_bytes = _allocated_words * HeapWordSize; + log_info(aot, heap)("%s materialized " UINT64_FORMAT "K (" UINT64_FORMAT "M/s)", async_or_sync, + materialized_bytes / 1024, uint64_t(materialized_bytes * UCONST64(1'000'000'000) / M / iterative_time)); +} + +void AOTStreamedHeapLoader::materialize_objects() { + // We cannot handle any exception when materializing roots. Exits the VM. + EXCEPTION_MARK + + // Objects are laid out in DFS order; DFS traverse the roots by linearly walking all objects + HandleMark hm(THREAD); + + // Early materialization with a budget before GC is allowed + MutexLocker ml(AOTHeapLoading_lock, Mutex::_safepoint_check_flag); + + materialize_early(CHECK); + await_gc_enabled(); + materialize_late(CHECK); + // Notify materialization is done + AOTHeapLoading_lock->notify_all(); + cleanup(); +} + +void AOTStreamedHeapLoader::switch_object_index_to_handle(int object_index) { + oop heap_object = cast_to_oop(_object_index_to_heap_object_table[object_index]); + if (heap_object == nullptr) { + return; + } + + oop* handle = Universe::vm_global()->allocate(); + NativeAccess<>::oop_store(handle, heap_object); + _object_index_to_heap_object_table[object_index] = handle; +} + +void AOTStreamedHeapLoader::enable_gc() { + if (AOTEagerlyLoadObjects && !IterativeObjectLoader::has_more()) { + // Everything was loaded eagerly at early startup + return; + } + + // We cannot handle any exception when materializing roots. Exits the VM. + EXCEPTION_MARK + + MutexLocker ml(AOTHeapLoading_lock, Mutex::_safepoint_check_flag); + + // First wait until no tracing is active + while (_waiting_for_iterator) { + AOTHeapLoading_lock->wait(); + } + + // Lock further tracing from starting + _waiting_for_iterator = true; + + // Record iterator progress + int num_handles = (int)_num_archived_objects; + + // Lock further iteration from starting + _swapping_root_format = true; + + // Then wait for the iterator to stop + while (_previous_batch_last_object_index != _current_batch_last_object_index) { + AOTHeapLoading_lock->wait(); + } + + if (IterativeObjectLoader::has_more()) { + // If there is more to be materialized, we have to upgrade the object index + // to object mapping to use handles. If there isn't more to materialize, the + // handle will no longer e used; they are only used to materialize objects. + + for (int i = 1; i <= num_handles; ++i) { + // Upgrade the roots to use handles + switch_object_index_to_handle(i); + } + + // From now on, accessing the object table must be done through a handle. + _objects_are_handles = true; + } + + // Unlock tracing + _waiting_for_iterator = false; + + // Unlock iteration + _swapping_root_format = false; + + _allow_gc = true; + + AOTHeapLoading_lock->notify_all(); + + if (AOTEagerlyLoadObjects && IterativeObjectLoader::has_more()) { + materialize_late(CHECK); + cleanup(); + } +} + +void AOTStreamedHeapLoader::materialize_thread_object() { + AOTThread::materialize_thread_object(); +} + +void AOTStreamedHeapLoader::finish_materialize_objects() { + Ticks start = Ticks::now(); + + if (_loading_all_objects) { + MutexLocker ml(AOTHeapLoading_lock, Mutex::_safepoint_check_flag); + // Wait for the AOT thread to finish + while (IterativeObjectLoader::has_more()) { + AOTHeapLoading_lock->wait(); + } + } else { + assert(!AOTEagerlyLoadObjects, "sanity"); + assert(_current_root_index == 0, "sanity"); + // Without the full module graph we have done only lazy tracing materialization. + // Ensure all roots are processed here by triggering root loading on every root. + for (int i = 0; i < _num_roots; ++i) { + get_root(i); + } + cleanup(); + } + + _final_materialization_time_ns = (Ticks::now() - start).nanoseconds(); +} + +void account_lazy_materialization_time_ns(uint64_t time, const char* description, int index) { + AtomicAccess::add(&_accumulated_lazy_materialization_time_ns, time); + log_debug(aot, heap)("Lazy materialization of %s: %d end (" UINT64_FORMAT " us of " UINT64_FORMAT " us)", description, index, time / 1000, _accumulated_lazy_materialization_time_ns / 1000); +} + +// Initialize an empty array of AOT heap roots; materialize them lazily +void AOTStreamedHeapLoader::initialize() { + EXCEPTION_MARK + + _materialization_start_ticks = Ticks::now(); + + FileMapInfo::current_info()->map_bitmap_region(); + + _heap_region = FileMapInfo::current_info()->region_at(AOTMetaspace::hp); + _bitmap_region = FileMapInfo::current_info()->region_at(AOTMetaspace::bm); + + assert(_heap_region->used() > 0, "empty heap archive?"); + + _is_in_use = true; + + // archived roots are at this offset in the stream. + size_t roots_offset = FileMapInfo::current_info()->streamed_heap()->roots_offset(); + size_t forwarding_offset = FileMapInfo::current_info()->streamed_heap()->forwarding_offset(); + size_t root_highest_object_index_table_offset = FileMapInfo::current_info()->streamed_heap()->root_highest_object_index_table_offset(); + _num_archived_objects = FileMapInfo::current_info()->streamed_heap()->num_archived_objects(); + + // The first int is the length of the array + _roots_archive = ((int*)(((address)_heap_region->mapped_base()) + roots_offset)) + 1; + _num_roots = _roots_archive[-1]; + _heap_region_used = _heap_region->used(); + + // We can't retire a TLAB until the filler klass is set; set it to the archived object klass. + CollectedHeap::set_filler_object_klass(vmClasses::Object_klass()); + + objArrayOop roots = oopFactory::new_objectArray(_num_roots, CHECK); + _roots = OopHandle(Universe::vm_global(), roots); + + _object_index_to_buffer_offset_table = (size_t*)(((address)_heap_region->mapped_base()) + forwarding_offset); + // We allocate the first entry for "null" + _object_index_to_heap_object_table = NEW_C_HEAP_ARRAY(void*, _num_archived_objects + 1, mtClassShared); + Copy::zero_to_bytes(_object_index_to_heap_object_table, (_num_archived_objects + 1) * sizeof(void*)); + + _root_highest_object_index_table = (int*)(((address)_heap_region->mapped_base()) + root_highest_object_index_table_offset); + + address start = (address)(_bitmap_region->mapped_base()) + _heap_region->oopmap_offset(); + _oopmap = BitMapView((BitMap::bm_word_t*)start, _heap_region->oopmap_size_in_bits()); + + + if (FLAG_IS_DEFAULT(AOTEagerlyLoadObjects)) { + // Concurrency will not help much if there are no extra cores available. + FLAG_SET_ERGO(AOTEagerlyLoadObjects, os::initial_active_processor_count() <= 1); + } + + // If the full module graph is not available or the JVMTI class file load hook is on, we + // will prune the object graph to not include cached objects in subgraphs that are not intended + // to be loaded. + _loading_all_objects = CDSConfig::is_using_full_module_graph() && !JvmtiExport::should_post_class_file_load_hook(); + if (!_loading_all_objects) { + // When not using FMG, fall back to tracing materialization + FLAG_SET_ERGO(AOTEagerlyLoadObjects, false); + return; + } + + if (AOTEagerlyLoadObjects) { + // Objects are laid out in DFS order; DFS traverse the roots by linearly walking all objects + HandleMark hm(THREAD); + + // Early materialization with a budget before GC is allowed + MutexLocker ml(AOTHeapLoading_lock, Mutex::_safepoint_check_flag); + + bool finished_before_gc_allowed = materialize_early(CHECK); + if (finished_before_gc_allowed) { + cleanup(); + } + } else { + AOTThread::initialize(); + } +} + +oop AOTStreamedHeapLoader::materialize_root(int root_index) { + Ticks start = Ticks::now(); + // We cannot handle any exception when materializing a root. Exits the VM. + EXCEPTION_MARK + Stack dfs_stack; + HandleMark hm(THREAD); + + oop result; + { + MutexLocker ml(AOTHeapLoading_lock, Mutex::_safepoint_check_flag); + + oop root = objArrayOop(_roots.resolve())->obj_at(root_index); + + if (root != nullptr) { + // The root has already been materialized + result = root; + } else { + // The root has not been materialized, start tracing materialization + result = TracingObjectLoader::materialize_root(root_index, dfs_stack, CHECK_NULL); + } + } + + uint64_t duration = (Ticks::now() - start).nanoseconds(); + + account_lazy_materialization_time_ns(duration, "root", root_index); + + return result; +} + +oop AOTStreamedHeapLoader::get_root(int index) { + oop result = objArrayOop(_roots.resolve())->obj_at(index); + if (result == nullptr) { + // Materialize root + result = materialize_root(index); + } + if (result == _roots.resolve()) { + // A self-reference to the roots array acts as a sentinel object for null, + // indicating that the root has been cleared. + result = nullptr; + } + // Acquire the root transitive object payload + OrderAccess::acquire(); + return result; +} + +void AOTStreamedHeapLoader::clear_root(int index) { + // Self-reference to the roots array acts as a sentinel object for null, + // indicating that the root has been cleared. + objArrayOop(_roots.resolve())->obj_at_put(index, _roots.resolve()); +} + +void AOTStreamedHeapLoader::await_gc_enabled() { + while (!_allow_gc) { + AOTHeapLoading_lock->wait(); + } +} + +void AOTStreamedHeapLoader::finish_initialization(FileMapInfo* static_mapinfo) { + static_mapinfo->stream_heap_region(); +} + +AOTMapLogger::OopDataIterator* AOTStreamedHeapLoader::oop_iterator(FileMapInfo* info, address buffer_start, address buffer_end) { + class StreamedLoaderOopIterator : public AOTMapLogger::OopDataIterator { + private: + int _current; + int _next; + + address _buffer_start; + + int _num_archived_objects; + + public: + StreamedLoaderOopIterator(address buffer_start, + int num_archived_objects) + : _current(0), + _next(1), + _buffer_start(buffer_start), + _num_archived_objects(num_archived_objects) { + } + + AOTMapLogger::OopData capture(int dfs_index) { + size_t buffered_offset = buffer_offset_for_object_index(dfs_index); + address buffered_addr = _buffer_start + buffered_offset; + oopDesc* raw_oop = (oopDesc*)buffered_addr; + size_t size = archive_object_size(raw_oop); + + intptr_t target_location = (intptr_t)buffered_offset; + uint32_t narrow_location = checked_cast(dfs_index); + Klass* klass = raw_oop->klass(); + + address requested_addr = (address)buffered_offset; + + return { buffered_addr, + requested_addr, + target_location, + narrow_location, + raw_oop, + klass, + size, + false }; + } + + bool has_next() override { + return _next <= _num_archived_objects; + } + + AOTMapLogger::OopData next() override { + _current = _next; + AOTMapLogger::OopData result = capture(_current); + _next = _current + 1; + return result; + } + + AOTMapLogger::OopData obj_at(narrowOop* addr) override { + int dfs_index = (int)(*addr); + if (dfs_index == 0) { + return null_data(); + } else { + return capture(dfs_index); + } + } + + AOTMapLogger::OopData obj_at(oop* addr) override { + int dfs_index = (int)cast_from_oop(*addr); + if (dfs_index == 0) { + return null_data(); + } else { + return capture(dfs_index); + } + } + + GrowableArrayCHeap* roots() override { + GrowableArrayCHeap* result = new GrowableArrayCHeap(); + + for (int i = 0; i < _num_roots; ++i) { + int object_index = object_index_for_root_index(i); + result->append(capture(object_index)); + } + + return result; + } + }; + + assert(_is_in_use, "printing before initializing?"); + + return new StreamedLoaderOopIterator(buffer_start, (int)info->streamed_heap()->num_archived_objects()); +} + +#endif // INCLUDE_CDS_JAVA_HEAP diff --git a/src/hotspot/share/cds/aotStreamedHeapLoader.hpp b/src/hotspot/share/cds/aotStreamedHeapLoader.hpp new file mode 100644 index 00000000000..d436af35dd0 --- /dev/null +++ b/src/hotspot/share/cds/aotStreamedHeapLoader.hpp @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_CDS_AOTSTREAMEDHEAPLOADER_HPP +#define SHARE_CDS_AOTSTREAMEDHEAPLOADER_HPP + +#include "cds/aotMapLogger.hpp" +#include "cds/filemap.hpp" +#include "memory/allocation.hpp" +#include "memory/allStatic.hpp" +#include "oops/oopsHierarchy.hpp" +#include "utilities/exceptions.hpp" +#include "utilities/globalDefinitions.hpp" +#include "utilities/growableArray.hpp" +#include "utilities/macros.hpp" +#include "utilities/stack.hpp" + +#if INCLUDE_CDS_JAVA_HEAP + +// The streaming archive heap loader loads Java objects using normal allocations. It requires the objects +// to be ordered in DFS order already at dump time, given the set of roots into the archived heap. +// Since the objects are ordered in DFS order, that means that walking them linearly through the archive +// is equivalent to performing a DFS traversal, but without pushing and popping anything. +// +// The advantage of this pre-ordering, other than the obvious locality improvement, is that we can have +// a separate thread, the AOTThread, perform this walk, in a way that allows us to split the archived +// heap into three separate zones. The first zone contains objects that have been transitively materialized, +// the second zone contains objects that are currently being materialized, and the last zone contains +// objects that have not and are not about to be touched by the AOT thread. +// Whenever a new root is traversed by the AOT thread, the zones are shifted atomically under a lock. +// +// Visualization of the three zones: +// +// +--------------------------------------+-------------------------+----------------------------------+ +// | transitively materialized | currently materializing | not yet materialized | +// +--------------------------------------+-------------------------+----------------------------------+ +// +// Being able to split the memory into these three zones, allows the bootstrapping thread and potential +// other threads to be able to, under a lock, traverse a root, and know how to coordinate with the +// concurrent AOT thread. Whenever the traversal finds an object in the "transitively materialized" +// zone, then we know such objects don't need any processing at all. As for "currently materializing", +// we know that if we just stay out of the way and let the AOT thread finish its current root, then +// the transitive closure of such objects will be materialized. And the AOT thread can materialize faster +// then the rest as it doesn't need to perform any traversal. Finally, as for objects in the "not yet +// materialized" zone, we know that we can trace through it without stepping on the feed of the AOT thread +// which has published it won't be tracing anything in there. +// +// What we get from this, is fast iterative traversal from the AOT thread (IterativeObjectLoader) +// while allowing lazyness and concurrency with the rest of the program (TracingObjectLoader). +// This way the AOT thread can remove the bulk of the work of materializing the Java objects from +// the critical bootstrapping thread. +// +// When we start materializing objects, we have not yet come to the point in the bootstrapping where +// GC is allowed. This is a two edged sword. On the one hand side, we can materialize objects faster +// when we know there is no GC to coordinate with, but on the other hand side, if we need to perform +// a GC when allocating memory for archived objects, we will bring down the entire JVM. To deal with this, +// the AOT thread asks the GC for a budget of bytes it is allowed to allocate before GC is allowed. +// When we get to the point in the bootstrapping where GC is allowed, we resume materializing objects +// that didn't fit in the budget. Before we let the application run, we force materialization of any +// remaining objects that have not been materialized by the AOT thread yet, so that we don't get +// surprising OOMs due to object materialization while the program is running. +// +// The object format of the archived heap is similar to a normal object. However, references are encoded +// as DFS indices, which in the end map to what index the object is in the buffer, as they are laid out +// in DFS order. The DFS indices start at 1 for the first object, and hence the number 0 represents +// null. The DFS index of objects is a core identifier of objects in this approach. From this index +// it is possible to find out what offset the archived object has into the buffer, as well as finding +// mappings to Java heap objects that have been materialized. +// +// The table mapping DFS indices to Java heap objects is filled in when an object is allocated. +// Materializing objects involves allocating the object, initializing it, and linking it with other +// objects. Since linking the object requires whatever is being referenced to be at least allocated, +// the iterative traversal will first allocate all of the objects in its zone being worked on, and then +// perform initialization and linking in a second pass. What these passes have in common is that they +// are trivially parallelizable, should we ever need to do that. The tracing materialization links +// objects when going "back" in the DFS traversal. +// +// The forwarding information for the mechanism contains raw oops before GC is allowed, and as we +// enable GC in the bootstrapping, all raw oops are handleified using OopStorage. All handles are +// handed back from the AOT thread when materialization has finished. The switch from raw oops to +// using OopStorage handles, happens under a lock while no iteration nor tracing is allowed. +// +// The initialization code is also performed in a faster way when the GC is not allowed. In particular, +// before GC is allowed, we perform raw memcpy of the archived object into the Java heap. Then the +// object is initialized with IS_DEST_UNINITIALIZED stores. The assumption made here is that before +// any GC activity is allowed, we shouldn't have to worry about concurrent GC threads scanning the +// memory and getting tripped up by that. Once GC is enabled, we revert to a bit more careful approach +// that uses a pre-computed bitmap to find the holes where oops go, and carefully copy only the +// non-oop information with memcpy, while the oops are set separately with HeapAccess stores that +// should be able to cope well with concurrent activity. +// +// The marked bit pattern of the mark word of archived heap objects is used for signalling which string +// objects should be interned. From the dump, some referenced strings were interned. This is +// really an identity property. We don't need to dump the entire string table as a way of communicating +// this identity property. Instead we intern strings on-the-fly, exploiting the dynamic object +// level linking that this approach has chosen to our advantage. + +class FileMapInfo; +class OopStorage; +class Thread; +struct AOTHeapTraversalEntry; + +struct alignas(AOTHeapTraversalEntry* /* Requirement of Stack */) AOTHeapTraversalEntry { + int _pointee_object_index; + int _base_object_index; + int _heap_field_offset_bytes; +}; + +class AOTStreamedHeapLoader { + friend class InflateReferenceOopClosure; +private: + static FileMapRegion* _heap_region; + static FileMapRegion* _bitmap_region; + static OopStorage* _oop_storage; + static int* _roots_archive; + static OopHandle _roots; + static BitMapView _oopmap; + static bool _is_in_use; + static bool _allow_gc; + static bool _objects_are_handles; + static int _previous_batch_last_object_index; + static int _current_batch_last_object_index; + static size_t _allocated_words; + static int _current_root_index; + static size_t _num_archived_objects; + static int _num_roots; + static size_t _heap_region_used; + static bool _loading_all_objects; + + static size_t* _object_index_to_buffer_offset_table; + static void** _object_index_to_heap_object_table; + static int* _root_highest_object_index_table; + + static bool _waiting_for_iterator; + static bool _swapping_root_format; + + + template + class InPlaceLinkingOopClosure; + + static oop allocate_object(oopDesc* archive_object, markWord mark, size_t size, TRAPS); + static int object_index_for_root_index(int root_index); + static int highest_object_index_for_root_index(int root_index); + static size_t buffer_offset_for_object_index(int object_index); + static oopDesc* archive_object_for_object_index(int object_index); + static size_t buffer_offset_for_archive_object(oopDesc* archive_object); + template + static BitMap::idx_t obj_bit_idx_for_buffer_offset(size_t buffer_offset); + + template + static void copy_payload_carefully(oopDesc* archive_object, + oop heap_object, + BitMap::idx_t header_bit, + BitMap::idx_t start_bit, + BitMap::idx_t end_bit, + LinkerT linker); + + template + static void copy_object_impl(oopDesc* archive_object, + oop heap_object, + size_t size, + LinkerT linker); + + static void copy_object_eager_linking(oopDesc* archive_object, oop heap_object, size_t size); + + static void switch_object_index_to_handle(int object_index); + static oop heap_object_for_object_index(int object_index); + static void set_heap_object_for_object_index(int object_index, oop heap_object); + + static int archived_string_value_object_index(oopDesc* archive_object); + + static bool materialize_early(TRAPS); + static void materialize_late(TRAPS); + static void cleanup(); + static void log_statistics(); + + class TracingObjectLoader { + static oop materialize_object(int object_index, Stack& dfs_stack, TRAPS); + static oop materialize_object_inner(int object_index, Stack& dfs_stack, TRAPS); + static void copy_object_lazy_linking(int object_index, + oopDesc* archive_object, + oop heap_object, + size_t size, + Stack& dfs_stack); + static void drain_stack(Stack& dfs_stack, TRAPS); + static oop materialize_object_transitive(int object_index, Stack& dfs_stack, TRAPS); + + static void wait_for_iterator(); + + public: + static oop materialize_root(int root_index, Stack& dfs_stack, TRAPS); + }; + + class IterativeObjectLoader { + static void initialize_range(int first_object_index, int last_object_index, TRAPS); + static size_t materialize_range(int first_object_index, int last_object_index, TRAPS); + + public: + static bool has_more(); + static void materialize_next_batch(TRAPS); + }; + + static void install_root(int root_index, oop heap_object); + + static void await_gc_enabled(); + static void await_finished_processing(); + +public: + static void initialize(); + static void enable_gc(); + static void materialize_thread_object(); + static oop materialize_root(int root_index); + static oop get_root(int root_index); + static void clear_root(int index); + static void materialize_objects(); + static void finish_materialize_objects(); + static bool is_in_use() { return _is_in_use; } + static void finish_initialization(FileMapInfo* info); + + static AOTMapLogger::OopDataIterator* oop_iterator(FileMapInfo* info, address buffer_start, address buffer_end); +}; + +#endif // SHARE_CDS_AOTSTREAMEDHEAPLOADER_HPP +#endif // INCLUDE_CDS_JAVA_HEAP diff --git a/src/hotspot/share/cds/aotStreamedHeapWriter.cpp b/src/hotspot/share/cds/aotStreamedHeapWriter.cpp new file mode 100644 index 00000000000..16acebc7d8d --- /dev/null +++ b/src/hotspot/share/cds/aotStreamedHeapWriter.cpp @@ -0,0 +1,614 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "cds/aotReferenceObjSupport.hpp" +#include "cds/aotStreamedHeapWriter.hpp" +#include "cds/cdsConfig.hpp" +#include "cds/filemap.hpp" +#include "cds/heapShared.inline.hpp" +#include "cds/regeneratedClasses.hpp" +#include "classfile/modules.hpp" +#include "classfile/stringTable.hpp" +#include "classfile/systemDictionary.hpp" +#include "gc/shared/collectedHeap.hpp" +#include "memory/iterator.inline.hpp" +#include "memory/oopFactory.hpp" +#include "memory/universe.hpp" +#include "oops/compressedOops.hpp" +#include "oops/objArrayOop.inline.hpp" +#include "oops/oop.inline.hpp" +#include "oops/oopHandle.inline.hpp" +#include "oops/typeArrayKlass.hpp" +#include "oops/typeArrayOop.hpp" +#include "runtime/java.hpp" +#include "runtime/mutexLocker.hpp" +#include "utilities/bitMap.inline.hpp" +#include "utilities/stack.inline.hpp" + +#if INCLUDE_CDS_JAVA_HEAP + +GrowableArrayCHeap* AOTStreamedHeapWriter::_buffer = nullptr; + +// The following are offsets from buffer_bottom() +size_t AOTStreamedHeapWriter::_buffer_used; +size_t AOTStreamedHeapWriter::_roots_offset; +size_t AOTStreamedHeapWriter::_forwarding_offset; +size_t AOTStreamedHeapWriter::_root_highest_object_index_table_offset; + +GrowableArrayCHeap* AOTStreamedHeapWriter::_source_objs; + +AOTStreamedHeapWriter::BufferOffsetToSourceObjectTable* AOTStreamedHeapWriter::_buffer_offset_to_source_obj_table; +AOTStreamedHeapWriter::SourceObjectToDFSOrderTable* AOTStreamedHeapWriter::_dfs_order_table; + +int* AOTStreamedHeapWriter::_roots_highest_dfs; +size_t* AOTStreamedHeapWriter::_dfs_to_archive_object_table; + +static const int max_table_capacity = 0x3fffffff; + +void AOTStreamedHeapWriter::init() { + if (CDSConfig::is_dumping_heap()) { + _buffer_offset_to_source_obj_table = new (mtClassShared) BufferOffsetToSourceObjectTable(8, max_table_capacity); + + int initial_source_objs_capacity = 10000; + _source_objs = new GrowableArrayCHeap(initial_source_objs_capacity); + } +} + +void AOTStreamedHeapWriter::delete_tables_with_raw_oops() { + delete _source_objs; + _source_objs = nullptr; + + delete _dfs_order_table; + _dfs_order_table = nullptr; +} + +void AOTStreamedHeapWriter::add_source_obj(oop src_obj) { + _source_objs->append(src_obj); +} + +class FollowOopIterateClosure: public BasicOopIterateClosure { + Stack* _dfs_stack; + oop _src_obj; + bool _is_java_lang_ref; + +public: + FollowOopIterateClosure(Stack* dfs_stack, oop src_obj, bool is_java_lang_ref) : + _dfs_stack(dfs_stack), + _src_obj(src_obj), + _is_java_lang_ref(is_java_lang_ref) {} + + void do_oop(narrowOop *p) { do_oop_work(p); } + void do_oop( oop *p) { do_oop_work(p); } + +private: + template void do_oop_work(T *p) { + size_t field_offset = pointer_delta(p, _src_obj, sizeof(char)); + oop obj = HeapShared::maybe_remap_referent(_is_java_lang_ref, field_offset, HeapAccess<>::oop_load(p)); + if (obj != nullptr) { + _dfs_stack->push(obj); + } + } +}; + +int AOTStreamedHeapWriter::cmp_dfs_order(oop* o1, oop* o2) { + int* o1_dfs = _dfs_order_table->get(*o1); + int* o2_dfs = _dfs_order_table->get(*o2); + return *o1_dfs - *o2_dfs; +} + +void AOTStreamedHeapWriter::order_source_objs(GrowableArrayCHeap* roots) { + Stack dfs_stack; + _dfs_order_table = new (mtClassShared) SourceObjectToDFSOrderTable(8, max_table_capacity); + _roots_highest_dfs = NEW_C_HEAP_ARRAY(int, (size_t)roots->length(), mtClassShared); + _dfs_to_archive_object_table = NEW_C_HEAP_ARRAY(size_t, (size_t)_source_objs->length() + 1, mtClassShared); + + for (int i = 0; i < _source_objs->length(); ++i) { + oop obj = _source_objs->at(i); + _dfs_order_table->put(cast_from_oop(obj), -1); + _dfs_order_table->maybe_grow(); + } + + int dfs_order = 0; + + for (int i = 0; i < roots->length(); ++i) { + oop root = roots->at(i); + + if (root == nullptr) { + log_info(aot, heap)("null root at %d", i); + continue; + } + + dfs_stack.push(root); + + while (!dfs_stack.is_empty()) { + oop obj = dfs_stack.pop(); + assert(obj != nullptr, "null root"); + int* dfs_number = _dfs_order_table->get(cast_from_oop(obj)); + if (*dfs_number != -1) { + // Already visited in the traversal + continue; + } + _dfs_order_table->put(cast_from_oop(obj), ++dfs_order); + _dfs_order_table->maybe_grow(); + + FollowOopIterateClosure cl(&dfs_stack, obj, AOTReferenceObjSupport::check_if_ref_obj(obj)); + obj->oop_iterate(&cl); + } + + _roots_highest_dfs[i] = dfs_order; + } + + _source_objs->sort(cmp_dfs_order); +} + +void AOTStreamedHeapWriter::write(GrowableArrayCHeap* roots, + ArchiveStreamedHeapInfo* heap_info) { + assert(CDSConfig::is_dumping_heap(), "sanity"); + allocate_buffer(); + order_source_objs(roots); + copy_source_objs_to_buffer(roots); + map_embedded_oops(heap_info); + populate_archive_heap_info(heap_info); +} + +void AOTStreamedHeapWriter::allocate_buffer() { + int initial_buffer_size = 100000; + _buffer = new GrowableArrayCHeap(initial_buffer_size); + _buffer_used = 0; + ensure_buffer_space(1); // so that buffer_bottom() works +} + +void AOTStreamedHeapWriter::ensure_buffer_space(size_t min_bytes) { + // We usually have very small heaps. If we get a huge one it's probably caused by a bug. + guarantee(min_bytes <= max_jint, "we dont support archiving more than 2G of objects"); + _buffer->at_grow(to_array_index(min_bytes)); +} + +void AOTStreamedHeapWriter::copy_roots_to_buffer(GrowableArrayCHeap* roots) { + int length = roots->length(); + size_t byte_size = align_up(sizeof(int) + sizeof(int) * (size_t)length, (size_t)HeapWordSize); + + size_t new_used = _buffer_used + byte_size; + ensure_buffer_space(new_used); + + int* mem = offset_to_buffered_address(_buffer_used); + memset(mem, 0, byte_size); + *mem = length; + + for (int i = 0; i < length; i++) { + // Do not use arrayOop->obj_at_put(i, o) as arrayOop is outside of the real heap! + oop o = roots->at(i); + int dfs_index = o == nullptr ? 0 : *_dfs_order_table->get(cast_from_oop(o)); + mem[i + 1] = dfs_index; + } + log_info(aot, heap)("archived obj roots[%d] = %zu bytes, mem = %p", length, byte_size, mem); + + _roots_offset = _buffer_used; + _buffer_used = new_used; +} + +template +void AOTStreamedHeapWriter::write(T value) { + size_t new_used = _buffer_used + sizeof(T); + ensure_buffer_space(new_used); + T* mem = offset_to_buffered_address(_buffer_used); + *mem = value; + _buffer_used = new_used; +} + +void AOTStreamedHeapWriter::copy_forwarding_to_buffer() { + _forwarding_offset = _buffer_used; + + write(0); // The first entry is the null entry + + // Write a mapping from object index to buffer offset + for (int i = 1; i <= _source_objs->length(); i++) { + size_t buffer_offset = _dfs_to_archive_object_table[i]; + write(buffer_offset); + } +} + +void AOTStreamedHeapWriter::copy_roots_max_dfs_to_buffer(int roots_length) { + _root_highest_object_index_table_offset = _buffer_used; + + for (int i = 0; i < roots_length; ++i) { + int highest_dfs = _roots_highest_dfs[i]; + write(highest_dfs); + } + + if ((roots_length % 2) != 0) { + write(-1); // Align up to a 64 bit word + } +} + +static bool is_interned_string(oop obj) { + if (!java_lang_String::is_instance(obj)) { + return false; + } + + ResourceMark rm; + int len; + jchar* name = java_lang_String::as_unicode_string_or_null(obj, len); + if (name == nullptr) { + fatal("Insufficient memory for dumping"); + } + return StringTable::lookup(name, len) == obj; +} + +static BitMap::idx_t bit_idx_for_buffer_offset(size_t buffer_offset) { + if (UseCompressedOops) { + return BitMap::idx_t(buffer_offset / sizeof(narrowOop)); + } else { + return BitMap::idx_t(buffer_offset / sizeof(HeapWord)); + } +} + +bool AOTStreamedHeapWriter::is_dumped_interned_string(oop obj) { + return is_interned_string(obj) && HeapShared::get_cached_oop_info(obj) != nullptr; +} + +void AOTStreamedHeapWriter::copy_source_objs_to_buffer(GrowableArrayCHeap* roots) { + for (int i = 0; i < _source_objs->length(); i++) { + oop src_obj = _source_objs->at(i); + HeapShared::CachedOopInfo* info = HeapShared::get_cached_oop_info(src_obj); + assert(info != nullptr, "must be"); + size_t buffer_offset = copy_one_source_obj_to_buffer(src_obj); + info->set_buffer_offset(buffer_offset); + + OopHandle handle(Universe::vm_global(), src_obj); + _buffer_offset_to_source_obj_table->put_when_absent(buffer_offset, handle); + _buffer_offset_to_source_obj_table->maybe_grow(); + + int dfs_order = i + 1; + _dfs_to_archive_object_table[dfs_order] = buffer_offset; + } + + copy_roots_to_buffer(roots); + copy_forwarding_to_buffer(); + copy_roots_max_dfs_to_buffer(roots->length()); + + log_info(aot)("Size of heap region = %zu bytes, %d objects, %d roots", + _buffer_used, _source_objs->length() + 1, roots->length()); +} + +template +void update_buffered_object_field(address buffered_obj, int field_offset, T value) { + T* field_addr = cast_to_oop(buffered_obj)->field_addr(field_offset); + *field_addr = value; +} + +static bool needs_explicit_size(oop src_obj) { + Klass* klass = src_obj->klass(); + int lh = klass->layout_helper(); + + // Simple instances or arrays don't need explicit size + if (Klass::layout_helper_is_instance(lh)) { + return Klass::layout_helper_needs_slow_path(lh); + } + + return !Klass::layout_helper_is_array(lh); +} + +size_t AOTStreamedHeapWriter::copy_one_source_obj_to_buffer(oop src_obj) { + if (needs_explicit_size(src_obj)) { + // Explicitly write object size for more complex objects, to avoid having to + // pretend the buffer objects are objects when loading the objects, in order + // to read the size. Most of the time, the layout helper of the class is enough. + write(src_obj->size()); + } + size_t byte_size = src_obj->size() * HeapWordSize; + assert(byte_size > 0, "no zero-size objects"); + + size_t new_used = _buffer_used + byte_size; + assert(new_used > _buffer_used, "no wrap around"); + + ensure_buffer_space(new_used); + + if (is_interned_string(src_obj)) { + java_lang_String::hash_code(src_obj); // Sets the hash code field(s) + java_lang_String::set_deduplication_forbidden(src_obj); // Allows faster interning at runtime + assert(java_lang_String::hash_is_set(src_obj), "hash must be set"); + } + + address from = cast_from_oop
    (src_obj); + address to = offset_to_buffered_address
    (_buffer_used); + assert(is_object_aligned(_buffer_used), "sanity"); + assert(is_object_aligned(byte_size), "sanity"); + memcpy(to, from, byte_size); + + if (java_lang_Module::is_instance(src_obj)) { + // These native pointers will be restored explicitly at run time. + Modules::check_archived_module_oop(src_obj); + update_buffered_object_field(to, java_lang_Module::module_entry_offset(), nullptr); + } else if (java_lang_ClassLoader::is_instance(src_obj)) { +#ifdef ASSERT + // We only archive these loaders + if (src_obj != SystemDictionary::java_platform_loader() && + src_obj != SystemDictionary::java_system_loader()) { + assert(src_obj->klass()->name()->equals("jdk/internal/loader/ClassLoaders$BootClassLoader"), "must be"); + } +#endif + update_buffered_object_field(to, java_lang_ClassLoader::loader_data_offset(), nullptr); + } + + size_t buffered_obj_offset = _buffer_used; + _buffer_used = new_used; + + return buffered_obj_offset; +} + +// Oop mapping + +inline void AOTStreamedHeapWriter::store_oop_in_buffer(oop* buffered_addr, int dfs_index) { + *(ssize_t*)buffered_addr = dfs_index; +} + +inline void AOTStreamedHeapWriter::store_oop_in_buffer(narrowOop* buffered_addr, int dfs_index) { + *(int32_t*)buffered_addr = (int32_t)dfs_index; +} + +template void AOTStreamedHeapWriter::mark_oop_pointer(T* buffered_addr, CHeapBitMap* oopmap) { + // Mark the pointer in the oopmap + size_t buffered_offset = buffered_address_to_offset((address)buffered_addr); + BitMap::idx_t idx = bit_idx_for_buffer_offset(buffered_offset); + oopmap->set_bit(idx); +} + +template void AOTStreamedHeapWriter::map_oop_field_in_buffer(oop obj, T* field_addr_in_buffer, CHeapBitMap* oopmap) { + if (obj == nullptr) { + store_oop_in_buffer(field_addr_in_buffer, 0); + } else { + int dfs_index = *_dfs_order_table->get(obj); + store_oop_in_buffer(field_addr_in_buffer, dfs_index); + } + + mark_oop_pointer(field_addr_in_buffer, oopmap); +} + +void AOTStreamedHeapWriter::update_header_for_buffered_addr(address buffered_addr, oop src_obj, Klass* src_klass) { + assert(UseCompressedClassPointers, "Archived heap only supported for compressed klasses"); + narrowKlass nk = ArchiveBuilder::current()->get_requested_narrow_klass(src_klass); + + markWord mw = markWord::prototype(); + oopDesc* fake_oop = (oopDesc*)buffered_addr; + + // We need to retain the identity_hash, because it may have been used by some hashtables + // in the shared heap. This also has the side effect of pre-initializing the + // identity_hash for all shared objects, so they are less likely to be written + // into during run time, increasing the potential of memory sharing. + if (src_obj != nullptr) { + intptr_t src_hash = src_obj->identity_hash(); + mw = mw.copy_set_hash(src_hash); + } + + if (is_interned_string(src_obj)) { + // Mark the mark word of interned string so the loader knows to link these to + // the string table at runtime. + mw = mw.set_marked(); + } + + if (UseCompactObjectHeaders) { + fake_oop->set_mark(mw.set_narrow_klass(nk)); + } else { + fake_oop->set_mark(mw); + fake_oop->set_narrow_klass(nk); + } +} + +class AOTStreamedHeapWriter::EmbeddedOopMapper: public BasicOopIterateClosure { + oop _src_obj; + address _buffered_obj; + CHeapBitMap* _oopmap; + bool _is_java_lang_ref; + +public: + EmbeddedOopMapper(oop src_obj, address buffered_obj, CHeapBitMap* oopmap) + : _src_obj(src_obj), + _buffered_obj(buffered_obj), + _oopmap(oopmap), + _is_java_lang_ref(AOTReferenceObjSupport::check_if_ref_obj(src_obj)) {} + + void do_oop(narrowOop *p) { EmbeddedOopMapper::do_oop_work(p); } + void do_oop( oop *p) { EmbeddedOopMapper::do_oop_work(p); } + +private: + template + void do_oop_work(T *p) { + size_t field_offset = pointer_delta(p, _src_obj, sizeof(char)); + oop obj = HeapShared::maybe_remap_referent(_is_java_lang_ref, field_offset, HeapAccess<>::oop_load(p)); + AOTStreamedHeapWriter::map_oop_field_in_buffer(obj, (T*)(_buffered_obj + field_offset), _oopmap); + } +}; + +static void log_bitmap_usage(const char* which, BitMap* bitmap, size_t total_bits) { + // The whole heap is covered by total_bits, but there are only non-zero bits within [start ... end). + size_t start = bitmap->find_first_set_bit(0); + size_t end = bitmap->size(); + log_info(aot)("%s = %7zu ... %7zu (%3zu%% ... %3zu%% = %3zu%%)", which, + start, end, + start * 100 / total_bits, + end * 100 / total_bits, + (end - start) * 100 / total_bits); +} + +// Update all oop fields embedded in the buffered objects +void AOTStreamedHeapWriter::map_embedded_oops(ArchiveStreamedHeapInfo* heap_info) { + size_t oopmap_unit = (UseCompressedOops ? sizeof(narrowOop) : sizeof(oop)); + size_t heap_region_byte_size = _buffer_used; + heap_info->oopmap()->resize(heap_region_byte_size / oopmap_unit); + + for (int i = 0; i < _source_objs->length(); i++) { + oop src_obj = _source_objs->at(i); + HeapShared::CachedOopInfo* info = HeapShared::get_cached_oop_info(src_obj); + assert(info != nullptr, "must be"); + address buffered_obj = offset_to_buffered_address
    (info->buffer_offset()); + + update_header_for_buffered_addr(buffered_obj, src_obj, src_obj->klass()); + + EmbeddedOopMapper mapper(src_obj, buffered_obj, heap_info->oopmap()); + src_obj->oop_iterate(&mapper); + HeapShared::remap_dumped_metadata(src_obj, buffered_obj); + }; + + size_t total_bytes = (size_t)_buffer->length(); + log_bitmap_usage("oopmap", heap_info->oopmap(), total_bytes / oopmap_unit); +} + +size_t AOTStreamedHeapWriter::source_obj_to_buffered_offset(oop src_obj) { + HeapShared::CachedOopInfo* p = HeapShared::get_cached_oop_info(src_obj); + return p->buffer_offset(); +} + +address AOTStreamedHeapWriter::source_obj_to_buffered_addr(oop src_obj) { + return offset_to_buffered_address
    (source_obj_to_buffered_offset(src_obj)); +} + +oop AOTStreamedHeapWriter::buffered_offset_to_source_obj(size_t buffered_offset) { + OopHandle* oh = _buffer_offset_to_source_obj_table->get(buffered_offset); + if (oh != nullptr) { + return oh->resolve(); + } else { + return nullptr; + } +} + +oop AOTStreamedHeapWriter::buffered_addr_to_source_obj(address buffered_addr) { + return buffered_offset_to_source_obj(buffered_address_to_offset(buffered_addr)); +} + +void AOTStreamedHeapWriter::populate_archive_heap_info(ArchiveStreamedHeapInfo* info) { + assert(!info->is_used(), "only set once"); + + size_t heap_region_byte_size = _buffer_used; + assert(heap_region_byte_size > 0, "must archived at least one object!"); + + info->set_buffer_region(MemRegion(offset_to_buffered_address(0), + offset_to_buffered_address(_buffer_used))); + info->set_roots_offset(_roots_offset); + info->set_num_roots((size_t)HeapShared::pending_roots()->length()); + info->set_forwarding_offset(_forwarding_offset); + info->set_root_highest_object_index_table_offset(_root_highest_object_index_table_offset); + info->set_num_archived_objects((size_t)_source_objs->length()); +} + +AOTMapLogger::OopDataIterator* AOTStreamedHeapWriter::oop_iterator(ArchiveStreamedHeapInfo* heap_info) { + class StreamedWriterOopIterator : public AOTMapLogger::OopDataIterator { + private: + int _current; + int _next; + + address _buffer_start; + + int _num_archived_objects; + int _num_archived_roots; + int* _roots; + + public: + StreamedWriterOopIterator(address buffer_start, + int num_archived_objects, + int num_archived_roots, + int* roots) + : _current(0), + _next(1), + _buffer_start(buffer_start), + _num_archived_objects(num_archived_objects), + _num_archived_roots(num_archived_roots), + _roots(roots) { + } + + AOTMapLogger::OopData capture(int dfs_index) { + size_t buffered_offset = _dfs_to_archive_object_table[dfs_index]; + address buffered_addr = _buffer_start + buffered_offset; + oop src_obj = AOTStreamedHeapWriter::buffered_offset_to_source_obj(buffered_offset); + assert(src_obj != nullptr, "why is this null?"); + oopDesc* raw_oop = (oopDesc*)buffered_addr; + Klass* klass = src_obj->klass(); + size_t size = src_obj->size(); + + intptr_t target_location = (intptr_t)buffered_offset; + uint32_t narrow_location = checked_cast(dfs_index); + + address requested_addr = (address)buffered_offset; + + return { buffered_addr, + requested_addr, + target_location, + narrow_location, + raw_oop, + klass, + size, + false }; + } + + bool has_next() override { + return _next <= _num_archived_objects; + } + + AOTMapLogger::OopData next() override { + _current = _next; + AOTMapLogger::OopData result = capture(_current); + _next = _current + 1; + return result; + } + + AOTMapLogger::OopData obj_at(narrowOop* addr) override { + int dfs_index = (int)(*addr); + if (dfs_index == 0) { + return null_data(); + } else { + return capture(dfs_index); + } + } + + AOTMapLogger::OopData obj_at(oop* addr) override { + int dfs_index = (int)cast_from_oop(*addr); + if (dfs_index == 0) { + return null_data(); + } else { + return capture(dfs_index); + } + } + + GrowableArrayCHeap* roots() override { + GrowableArrayCHeap* result = new GrowableArrayCHeap(); + + for (int i = 0; i < _num_archived_roots; ++i) { + int object_index = _roots[i]; + result->append(capture(object_index)); + } + + return result; + } + }; + + MemRegion r = heap_info->buffer_region(); + address buffer_start = address(r.start()); + + size_t roots_offset = heap_info->roots_offset(); + int* roots = ((int*)(buffer_start + roots_offset)) + 1; + + return new StreamedWriterOopIterator(buffer_start, (int)heap_info->num_archived_objects(), (int)heap_info->num_roots(), roots); +} + +#endif // INCLUDE_CDS_JAVA_HEAP diff --git a/src/hotspot/share/cds/aotStreamedHeapWriter.hpp b/src/hotspot/share/cds/aotStreamedHeapWriter.hpp new file mode 100644 index 00000000000..bde82f8ce29 --- /dev/null +++ b/src/hotspot/share/cds/aotStreamedHeapWriter.hpp @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_CDS_AOTSTREAMEDHEAPWRITER_HPP +#define SHARE_CDS_AOTSTREAMEDHEAPWRITER_HPP + +#include "cds/aotMapLogger.hpp" +#include "cds/heapShared.hpp" +#include "memory/allocation.hpp" +#include "memory/allStatic.hpp" +#include "oops/oopHandle.hpp" +#include "utilities/bitMap.hpp" +#include "utilities/exceptions.hpp" +#include "utilities/growableArray.hpp" +#include "utilities/macros.hpp" +#include "utilities/resizableHashTable.hpp" + +class MemRegion; + +#if INCLUDE_CDS_JAVA_HEAP +class AOTStreamedHeapWriter : AllStatic { + class EmbeddedOopMapper; + static GrowableArrayCHeap* _buffer; + + // The number of bytes that have written into _buffer (may be smaller than _buffer->length()). + static size_t _buffer_used; + + // The bottom of the copy of Heap::roots() inside this->_buffer. + static size_t _roots_offset; + + // Offset to the forwarding information + static size_t _forwarding_offset; + + // Offset to dfs bounds information + static size_t _root_highest_object_index_table_offset; + + static GrowableArrayCHeap* _source_objs; + + typedef ResizeableHashTable BufferOffsetToSourceObjectTable; + + static BufferOffsetToSourceObjectTable* _buffer_offset_to_source_obj_table; + + typedef ResizeableHashTable SourceObjectToDFSOrderTable; + static SourceObjectToDFSOrderTable* _dfs_order_table; + + static int* _roots_highest_dfs; + static size_t* _dfs_to_archive_object_table; + + static int cmp_dfs_order(oop* o1, oop* o2); + + static void allocate_buffer(); + static void ensure_buffer_space(size_t min_bytes); + + // Both Java bytearray and GrowableArraty use int indices and lengths. Do a safe typecast with range check + static int to_array_index(size_t i) { + assert(i <= (size_t)max_jint, "must be"); + return (int)i; + } + static int to_array_length(size_t n) { + return to_array_index(n); + } + + template static T offset_to_buffered_address(size_t offset) { + return (T)(_buffer->adr_at(to_array_index(offset))); + } + + static address buffer_bottom() { + return offset_to_buffered_address
    (0); + } + + // The exclusive end of the last object that was copied into the buffer. + static address buffer_top() { + return buffer_bottom() + _buffer_used; + } + + static bool in_buffer(address buffered_addr) { + return (buffer_bottom() <= buffered_addr) && (buffered_addr < buffer_top()); + } + + static size_t buffered_address_to_offset(address buffered_addr) { + assert(in_buffer(buffered_addr), "sanity"); + return buffered_addr - buffer_bottom(); + } + + static void order_source_objs(GrowableArrayCHeap* roots); + static void copy_roots_to_buffer(GrowableArrayCHeap* roots); + static void copy_source_objs_to_buffer(GrowableArrayCHeap* roots); + static size_t copy_one_source_obj_to_buffer(oop src_obj); + + template + static void write(T value); + static void copy_forwarding_to_buffer(); + static void copy_roots_max_dfs_to_buffer(int roots_length); + + static void map_embedded_oops(ArchiveStreamedHeapInfo* info); + static bool is_in_requested_range(oop o); + static oop requested_obj_from_buffer_offset(size_t offset); + + static oop load_oop_from_buffer(oop* buffered_addr); + static oop load_oop_from_buffer(narrowOop* buffered_addr); + inline static void store_oop_in_buffer(oop* buffered_addr, int dfs_index); + inline static void store_oop_in_buffer(narrowOop* buffered_addr, int dfs_index); + + template static void mark_oop_pointer(T* buffered_addr, CHeapBitMap* oopmap); + template static void map_oop_field_in_buffer(oop obj, T* field_addr_in_buffer, CHeapBitMap* oopmap); + + static void update_header_for_buffered_addr(address buffered_addr, oop src_obj, Klass* src_klass); + + static void populate_archive_heap_info(ArchiveStreamedHeapInfo* info); + +public: + static void init() NOT_CDS_JAVA_HEAP_RETURN; + + static void delete_tables_with_raw_oops(); + static void add_source_obj(oop src_obj); + static void write(GrowableArrayCHeap*, ArchiveStreamedHeapInfo* heap_info); + static address buffered_heap_roots_addr() { + return offset_to_buffered_address
    (_roots_offset); + } + + static size_t buffered_addr_to_buffered_offset(address buffered_addr) { + assert(buffered_addr != nullptr, "should not be null"); + return size_t(buffered_addr) - size_t(buffer_bottom()); + } + + static bool is_dumped_interned_string(oop obj); + + static size_t source_obj_to_buffered_offset(oop src_obj); + static address source_obj_to_buffered_addr(oop src_obj); + + static oop buffered_offset_to_source_obj(size_t buffered_offset); + static oop buffered_addr_to_source_obj(address buffered_addr); + + static AOTMapLogger::OopDataIterator* oop_iterator(ArchiveStreamedHeapInfo* heap_info); +}; +#endif // INCLUDE_CDS_JAVA_HEAP +#endif // SHARE_CDS_AOTSTREAMEDHEAPWRITER_HPP diff --git a/src/hotspot/share/cds/aotThread.cpp b/src/hotspot/share/cds/aotThread.cpp new file mode 100644 index 00000000000..26a6f4291cd --- /dev/null +++ b/src/hotspot/share/cds/aotThread.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "cds/aotStreamedHeapLoader.hpp" +#include "cds/aotThread.hpp" +#include "cds/heapShared.hpp" +#include "classfile/javaClasses.hpp" +#include "classfile/javaThreadStatus.hpp" +#include "classfile/vmClasses.hpp" +#include "classfile/vmSymbols.hpp" +#include "jfr/jfr.hpp" +#include "runtime/javaThread.inline.hpp" +#include "runtime/mutexLocker.hpp" +#include "runtime/osThread.hpp" +#include "runtime/thread.hpp" +#include "runtime/threads.hpp" +#include "utilities/exceptions.hpp" + +AOTThread* AOTThread::_aot_thread; +bool AOTThread::_started; + +// Starting the AOTThread is tricky. We wish to start it as early as possible, as +// that increases the amount of curling this thread can do for the application thread +// that is concurrently starting. But there are complications starting a thread this +// early. The java.lang.Thread class is not initialized and we may not execute any +// Java bytecodes yet. This is an internal thread, so we try to keep the bookkeeping +// minimal and use a logical ThreadIdentifier for JFR and monitor identity. The real +// thread object is created just after the main thread creates its Thread object, after +// the Thread class has been initialized. +void AOTThread::initialize() { +#if INCLUDE_CDS_JAVA_HEAP + EXCEPTION_MARK; + + // Spin up a thread without thread oop, because the java.lang classes + // have not yet been initialized, and hence we can't allocate the Thread + // object yet. + AOTThread* thread = new AOTThread(&aot_thread_entry); + _aot_thread = thread; + +#if INCLUDE_JVMTI + // The line below hides JVMTI events from this thread (cf. should_hide_jvmti_events()) + // This is important because this thread runs before JVMTI monitors are set up appropriately. + // Therefore, callbacks would not work as intended. JVMTI has no business peeking at how we + // materialize primordial objects from the AOT cache. + thread->toggle_is_disable_suspend(); +#endif + + JavaThread::vm_exit_on_osthread_failure(thread); + _started = true; + + // Note that the Thread class is not initialized yet at this point. We + // can run a bit concurrently until the Thread class is initialized; then + // materialize_thread_object is called to inflate the thread object. + + // The thread needs an identifier. This thread is fine with a temporary ID + // assignment; it will terminate soon anyway. + int64_t tid = ThreadIdentifier::next(); + thread->set_monitor_owner_id(tid); + + { + MutexLocker mu(THREAD, Threads_lock); + Threads::add(thread); + } + + JFR_ONLY(Jfr::on_java_thread_start(THREAD, thread);) + + os::start_thread(thread); +#endif +} + +void AOTThread::materialize_thread_object() { +#if INCLUDE_CDS_JAVA_HEAP + if (!_started) { + // No thread object to materialize + return; + } + + EXCEPTION_MARK; + + HandleMark hm(THREAD); + Handle thread_oop = JavaThread::create_system_thread_object("AOTThread", CHECK); + + java_lang_Thread::release_set_thread(thread_oop(), _aot_thread); + _aot_thread->set_threadOopHandles(thread_oop()); +#endif +} + +void AOTThread::aot_thread_entry(JavaThread* jt, TRAPS) { +#if INCLUDE_CDS_JAVA_HEAP + AOTStreamedHeapLoader::materialize_objects(); + _aot_thread = nullptr; // AOT thread will get destroyed after this point +#endif +} diff --git a/src/hotspot/share/cds/aotThread.hpp b/src/hotspot/share/cds/aotThread.hpp new file mode 100644 index 00000000000..644363e685b --- /dev/null +++ b/src/hotspot/share/cds/aotThread.hpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_CDS_AOTTHREAD_HPP +#define SHARE_CDS_AOTTHREAD_HPP + +#include "runtime/javaThread.hpp" +#include "utilities/macros.hpp" + +// A hidden from external view JavaThread for materializing archived objects + +class AOTThread : public JavaThread { +private: + static bool _started; + static AOTThread* _aot_thread; + static void aot_thread_entry(JavaThread* thread, TRAPS); + AOTThread(ThreadFunction entry_point) : JavaThread(entry_point) {}; + +public: + static void initialize(); + + // Hide this thread from external view. + virtual bool is_hidden_from_external_view() const { return true; } + + static void materialize_thread_object(); + + static bool aot_thread_initialized() { return _started; }; + bool is_aot_thread() const { return true; }; +}; + +#endif // SHARE_CDS_AOTTHREAD_HPP diff --git a/src/hotspot/share/cds/archiveBuilder.cpp b/src/hotspot/share/cds/archiveBuilder.cpp index 539c2672cf6..3c7f25a950b 100644 --- a/src/hotspot/share/cds/archiveBuilder.cpp +++ b/src/hotspot/share/cds/archiveBuilder.cpp @@ -28,7 +28,6 @@ #include "cds/aotMapLogger.hpp" #include "cds/aotMetaspace.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/archiveUtils.hpp" #include "cds/cdsConfig.hpp" #include "cds/cppVtables.hpp" @@ -1175,11 +1174,13 @@ void ArchiveBuilder::print_stats() { _alloc_stats.print_stats(int(_ro_region.used()), int(_rw_region.used())); } -void ArchiveBuilder::write_archive(FileMapInfo* mapinfo, ArchiveHeapInfo* heap_info) { +void ArchiveBuilder::write_archive(FileMapInfo* mapinfo, ArchiveMappedHeapInfo* mapped_heap_info, ArchiveStreamedHeapInfo* streamed_heap_info) { // Make sure NUM_CDS_REGIONS (exported in cds.h) agrees with // AOTMetaspace::n_regions (internal to hotspot). assert(NUM_CDS_REGIONS == AOTMetaspace::n_regions, "sanity"); + ResourceMark rm; + write_region(mapinfo, AOTMetaspace::rw, &_rw_region, /*read_only=*/false,/*allow_exec=*/false); write_region(mapinfo, AOTMetaspace::ro, &_ro_region, /*read_only=*/true, /*allow_exec=*/false); write_region(mapinfo, AOTMetaspace::ac, &_ac_region, /*read_only=*/false,/*allow_exec=*/false); @@ -1188,14 +1189,19 @@ void ArchiveBuilder::write_archive(FileMapInfo* mapinfo, ArchiveHeapInfo* heap_i ArchivePtrMarker::initialize_rw_ro_maps(&_rw_ptrmap, &_ro_ptrmap); size_t bitmap_size_in_bytes; - char* bitmap = mapinfo->write_bitmap_region(ArchivePtrMarker::rw_ptrmap(), ArchivePtrMarker::ro_ptrmap(), heap_info, + char* bitmap = mapinfo->write_bitmap_region(ArchivePtrMarker::rw_ptrmap(), + ArchivePtrMarker::ro_ptrmap(), + mapped_heap_info, + streamed_heap_info, bitmap_size_in_bytes); - if (heap_info->is_used()) { - _total_heap_region_size = mapinfo->write_heap_region(heap_info); + if (mapped_heap_info != nullptr && mapped_heap_info->is_used()) { + _total_heap_region_size = mapinfo->write_mapped_heap_region(mapped_heap_info); + } else if (streamed_heap_info != nullptr && streamed_heap_info->is_used()) { + _total_heap_region_size = mapinfo->write_streamed_heap_region(streamed_heap_info); } - print_region_stats(mapinfo, heap_info); + print_region_stats(mapinfo, mapped_heap_info, streamed_heap_info); mapinfo->set_requested_base((char*)AOTMetaspace::requested_base_address()); mapinfo->set_header_crc(mapinfo->compute_header_crc()); @@ -1210,7 +1216,7 @@ void ArchiveBuilder::write_archive(FileMapInfo* mapinfo, ArchiveHeapInfo* heap_i } if (log_is_enabled(Info, aot, map)) { - AOTMapLogger::dumptime_log(this, mapinfo, heap_info, bitmap, bitmap_size_in_bytes); + AOTMapLogger::dumptime_log(this, mapinfo, mapped_heap_info, streamed_heap_info, bitmap, bitmap_size_in_bytes); } CDS_JAVA_HEAP_ONLY(HeapShared::destroy_archived_object_cache()); FREE_C_HEAP_ARRAY(char, bitmap); @@ -1226,7 +1232,9 @@ void ArchiveBuilder::count_relocated_pointer(bool tagged, bool nulled) { _relocated_ptr_info._num_nulled_ptrs += nulled ? 1 : 0; } -void ArchiveBuilder::print_region_stats(FileMapInfo *mapinfo, ArchiveHeapInfo* heap_info) { +void ArchiveBuilder::print_region_stats(FileMapInfo *mapinfo, + ArchiveMappedHeapInfo* mapped_heap_info, + ArchiveStreamedHeapInfo* streamed_heap_info) { // Print statistics of all the regions const size_t bitmap_used = mapinfo->region_at(AOTMetaspace::bm)->used(); const size_t bitmap_reserved = mapinfo->region_at(AOTMetaspace::bm)->used_aligned(); @@ -1244,22 +1252,22 @@ void ArchiveBuilder::print_region_stats(FileMapInfo *mapinfo, ArchiveHeapInfo* h print_bitmap_region_stats(bitmap_used, total_reserved); - if (heap_info->is_used()) { - print_heap_region_stats(heap_info, total_reserved); + if (mapped_heap_info != nullptr && mapped_heap_info->is_used()) { + print_heap_region_stats(mapped_heap_info->buffer_start(), mapped_heap_info->buffer_byte_size(), total_reserved); + } else if (streamed_heap_info != nullptr && streamed_heap_info->is_used()) { + print_heap_region_stats(streamed_heap_info->buffer_start(), streamed_heap_info->buffer_byte_size(), total_reserved); } aot_log_debug(aot)("total : %9zu [100.0%% of total] out of %9zu bytes [%5.1f%% used]", - total_bytes, total_reserved, total_u_perc); + total_bytes, total_reserved, total_u_perc); } void ArchiveBuilder::print_bitmap_region_stats(size_t size, size_t total_size) { aot_log_debug(aot)("bm space: %9zu [ %4.1f%% of total] out of %9zu bytes [100.0%% used]", - size, size/double(total_size)*100.0, size); + size, size/double(total_size)*100.0, size); } -void ArchiveBuilder::print_heap_region_stats(ArchiveHeapInfo *info, size_t total_size) { - char* start = info->buffer_start(); - size_t size = info->buffer_byte_size(); +void ArchiveBuilder::print_heap_region_stats(char* start, size_t size, size_t total_size) { char* top = start + size; aot_log_debug(aot)("hp space: %9zu [ %4.1f%% of total] out of %9zu bytes [100.0%% used] at " INTPTR_FORMAT, size, size/double(total_size)*100.0, size, p2i(start)); diff --git a/src/hotspot/share/cds/archiveBuilder.hpp b/src/hotspot/share/cds/archiveBuilder.hpp index 815a6f07273..9a628439039 100644 --- a/src/hotspot/share/cds/archiveBuilder.hpp +++ b/src/hotspot/share/cds/archiveBuilder.hpp @@ -39,7 +39,8 @@ #include "utilities/hashTable.hpp" #include "utilities/resizableHashTable.hpp" -class ArchiveHeapInfo; +class ArchiveMappedHeapInfo; +class ArchiveStreamedHeapInfo; class CHeapBitMap; class FileMapInfo; class Klass; @@ -245,9 +246,11 @@ private: size_t _num_nulled_ptrs; } _relocated_ptr_info; - void print_region_stats(FileMapInfo *map_info, ArchiveHeapInfo* heap_info); + void print_region_stats(FileMapInfo *map_info, + ArchiveMappedHeapInfo* mapped_heap_info, + ArchiveStreamedHeapInfo* streamed_heap_info); void print_bitmap_region_stats(size_t size, size_t total_size); - void print_heap_region_stats(ArchiveHeapInfo* heap_info, size_t total_size); + void print_heap_region_stats(char* start, size_t size, size_t total_size); // For global access. static ArchiveBuilder* _current; @@ -434,7 +437,9 @@ public: void make_klasses_shareable(); void make_training_data_shareable(); void relocate_to_requested(); - void write_archive(FileMapInfo* mapinfo, ArchiveHeapInfo* heap_info); + void write_archive(FileMapInfo* mapinfo, + ArchiveMappedHeapInfo* mapped_heap_info, + ArchiveStreamedHeapInfo* streamed_heap_info); void write_region(FileMapInfo* mapinfo, int region_idx, DumpRegion* dump_region, bool read_only, bool allow_exec); @@ -502,6 +507,7 @@ public: return (Symbol*)current()->get_buffered_addr((address)src_symbol); } + static void log_as_hex(address base, address top, address requested_base, bool is_heap = false); void print_stats(); void report_out_of_space(const char* name, size_t needed_bytes); diff --git a/src/hotspot/share/cds/archiveHeapLoader.cpp b/src/hotspot/share/cds/archiveHeapLoader.cpp deleted file mode 100644 index 6efc8f6fe1e..00000000000 --- a/src/hotspot/share/cds/archiveHeapLoader.cpp +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "cds/aotMetaspace.hpp" -#include "cds/archiveHeapLoader.inline.hpp" -#include "cds/cdsConfig.hpp" -#include "cds/heapShared.hpp" -#include "classfile/classLoaderDataShared.hpp" -#include "classfile/systemDictionaryShared.hpp" -#include "gc/shared/collectedHeap.hpp" -#include "logging/log.hpp" -#include "memory/iterator.inline.hpp" -#include "memory/resourceArea.hpp" -#include "memory/universe.hpp" -#include "sanitizers/ub.hpp" -#include "utilities/bitMap.inline.hpp" -#include "utilities/copy.hpp" - -#if INCLUDE_CDS_JAVA_HEAP - -bool ArchiveHeapLoader::_is_mapped = false; -bool ArchiveHeapLoader::_is_loaded = false; - -bool ArchiveHeapLoader::_narrow_oop_base_initialized = false; -address ArchiveHeapLoader::_narrow_oop_base; -int ArchiveHeapLoader::_narrow_oop_shift; - -// Support for loaded heap. -uintptr_t ArchiveHeapLoader::_loaded_heap_bottom = 0; -uintptr_t ArchiveHeapLoader::_loaded_heap_top = 0; -uintptr_t ArchiveHeapLoader::_dumptime_base = UINTPTR_MAX; -uintptr_t ArchiveHeapLoader::_dumptime_top = 0; -intx ArchiveHeapLoader::_runtime_offset = 0; -bool ArchiveHeapLoader::_loading_failed = false; - -// Support for mapped heap. -uintptr_t ArchiveHeapLoader::_mapped_heap_bottom = 0; -bool ArchiveHeapLoader::_mapped_heap_relocation_initialized = false; -ptrdiff_t ArchiveHeapLoader::_mapped_heap_delta = 0; - -// Every mapped region is offset by _mapped_heap_delta from its requested address. -// See FileMapInfo::heap_region_requested_address(). -ATTRIBUTE_NO_UBSAN -void ArchiveHeapLoader::init_mapped_heap_info(address mapped_heap_bottom, ptrdiff_t delta, int dumptime_oop_shift) { - assert(!_mapped_heap_relocation_initialized, "only once"); - if (!UseCompressedOops) { - assert(dumptime_oop_shift == 0, "sanity"); - } - assert(can_map(), "sanity"); - init_narrow_oop_decoding(CompressedOops::base() + delta, dumptime_oop_shift); - _mapped_heap_bottom = (intptr_t)mapped_heap_bottom; - _mapped_heap_delta = delta; - _mapped_heap_relocation_initialized = true; -} - -void ArchiveHeapLoader::init_narrow_oop_decoding(address base, int shift) { - assert(!_narrow_oop_base_initialized, "only once"); - _narrow_oop_base_initialized = true; - _narrow_oop_base = base; - _narrow_oop_shift = shift; -} - -void ArchiveHeapLoader::fixup_region() { - FileMapInfo* mapinfo = FileMapInfo::current_info(); - if (is_mapped()) { - mapinfo->fixup_mapped_heap_region(); - } else if (_loading_failed) { - fill_failed_loaded_heap(); - } - if (is_in_use()) { - if (!CDSConfig::is_using_full_module_graph()) { - // Need to remove all the archived java.lang.Module objects from HeapShared::roots(). - ClassLoaderDataShared::clear_archived_oops(); - } - } -} - -// ------------------ Support for Region MAPPING ----------------------------------------- - -// Patch all the embedded oop pointers inside an archived heap region, -// to be consistent with the runtime oop encoding. -class PatchCompressedEmbeddedPointers: public BitMapClosure { - narrowOop* _start; - - public: - PatchCompressedEmbeddedPointers(narrowOop* start) : _start(start) {} - - bool do_bit(size_t offset) { - narrowOop* p = _start + offset; - narrowOop v = *p; - assert(!CompressedOops::is_null(v), "null oops should have been filtered out at dump time"); - oop o = ArchiveHeapLoader::decode_from_mapped_archive(v); - RawAccess::oop_store(p, o); - return true; - } -}; - -class PatchCompressedEmbeddedPointersQuick: public BitMapClosure { - narrowOop* _start; - uint32_t _delta; - - public: - PatchCompressedEmbeddedPointersQuick(narrowOop* start, uint32_t delta) : _start(start), _delta(delta) {} - - bool do_bit(size_t offset) { - narrowOop* p = _start + offset; - narrowOop v = *p; - assert(!CompressedOops::is_null(v), "null oops should have been filtered out at dump time"); - narrowOop new_v = CompressedOops::narrow_oop_cast(CompressedOops::narrow_oop_value(v) + _delta); - assert(!CompressedOops::is_null(new_v), "should never relocate to narrowOop(0)"); -#ifdef ASSERT - oop o1 = ArchiveHeapLoader::decode_from_mapped_archive(v); - oop o2 = CompressedOops::decode_not_null(new_v); - assert(o1 == o2, "quick delta must work"); -#endif - RawAccess::oop_store(p, new_v); - return true; - } -}; - -class PatchUncompressedEmbeddedPointers: public BitMapClosure { - oop* _start; - intptr_t _delta; - - public: - PatchUncompressedEmbeddedPointers(oop* start, intx runtime_offset) : - _start(start), - _delta(runtime_offset) {} - - PatchUncompressedEmbeddedPointers(oop* start) : - _start(start), - _delta(ArchiveHeapLoader::mapped_heap_delta()) {} - - bool do_bit(size_t offset) { - oop* p = _start + offset; - intptr_t dumptime_oop = (intptr_t)((void*)*p); - assert(dumptime_oop != 0, "null oops should have been filtered out at dump time"); - intptr_t runtime_oop = dumptime_oop + _delta; - RawAccess::oop_store(p, cast_to_oop(runtime_oop)); - return true; - } -}; - -void ArchiveHeapLoader::patch_compressed_embedded_pointers(BitMapView bm, - FileMapInfo* info, - MemRegion region) { - narrowOop dt_encoded_bottom = info->encoded_heap_region_dumptime_address(); - narrowOop rt_encoded_bottom = CompressedOops::encode_not_null(cast_to_oop(region.start())); - log_info(aot)("patching heap embedded pointers: narrowOop 0x%8x -> 0x%8x", - (uint)dt_encoded_bottom, (uint)rt_encoded_bottom); - - // Optimization: if dumptime shift is the same as runtime shift, we can perform a - // quick conversion from "dumptime narrowOop" -> "runtime narrowOop". - narrowOop* patching_start = (narrowOop*)region.start() + FileMapInfo::current_info()->heap_oopmap_start_pos(); - if (_narrow_oop_shift == CompressedOops::shift()) { - uint32_t quick_delta = (uint32_t)rt_encoded_bottom - (uint32_t)dt_encoded_bottom; - log_info(aot)("heap data relocation quick delta = 0x%x", quick_delta); - if (quick_delta == 0) { - log_info(aot)("heap data relocation unnecessary, quick_delta = 0"); - } else { - PatchCompressedEmbeddedPointersQuick patcher(patching_start, quick_delta); - bm.iterate(&patcher); - } - } else { - log_info(aot)("heap data quick relocation not possible"); - PatchCompressedEmbeddedPointers patcher(patching_start); - bm.iterate(&patcher); - } -} - -// Patch all the non-null pointers that are embedded in the archived heap objects -// in this (mapped) region -void ArchiveHeapLoader::patch_embedded_pointers(FileMapInfo* info, - MemRegion region, address oopmap, - size_t oopmap_size_in_bits) { - BitMapView bm((BitMap::bm_word_t*)oopmap, oopmap_size_in_bits); - if (UseCompressedOops) { - patch_compressed_embedded_pointers(bm, info, region); - } else { - PatchUncompressedEmbeddedPointers patcher((oop*)region.start() + FileMapInfo::current_info()->heap_oopmap_start_pos()); - bm.iterate(&patcher); - } -} - -// ------------------ Support for Region LOADING ----------------------------------------- - -// The CDS archive remembers each heap object by its address at dump time, but -// the heap object may be loaded at a different address at run time. This structure is used -// to translate the dump time addresses for all objects in FileMapInfo::space_at(region_index) -// to their runtime addresses. -struct LoadedArchiveHeapRegion { - int _region_index; // index for FileMapInfo::space_at(index) - size_t _region_size; // number of bytes in this region - uintptr_t _dumptime_base; // The dump-time (decoded) address of the first object in this region - intx _runtime_offset; // If an object's dump time address P is within in this region, its - // runtime address is P + _runtime_offset - uintptr_t top() { - return _dumptime_base + _region_size; - } -}; - -void ArchiveHeapLoader::init_loaded_heap_relocation(LoadedArchiveHeapRegion* loaded_region) { - _dumptime_base = loaded_region->_dumptime_base; - _dumptime_top = loaded_region->top(); - _runtime_offset = loaded_region->_runtime_offset; -} - -bool ArchiveHeapLoader::can_load() { - return Universe::heap()->can_load_archived_objects(); -} - -class ArchiveHeapLoader::PatchLoadedRegionPointers: public BitMapClosure { - narrowOop* _start; - intx _offset; - uintptr_t _base; - uintptr_t _top; - - public: - PatchLoadedRegionPointers(narrowOop* start, LoadedArchiveHeapRegion* loaded_region) - : _start(start), - _offset(loaded_region->_runtime_offset), - _base(loaded_region->_dumptime_base), - _top(loaded_region->top()) {} - - bool do_bit(size_t offset) { - assert(UseCompressedOops, "PatchLoadedRegionPointers for uncompressed oops is unimplemented"); - narrowOop* p = _start + offset; - narrowOop v = *p; - assert(!CompressedOops::is_null(v), "null oops should have been filtered out at dump time"); - uintptr_t o = cast_from_oop(ArchiveHeapLoader::decode_from_archive(v)); - assert(_base <= o && o < _top, "must be"); - - o += _offset; - ArchiveHeapLoader::assert_in_loaded_heap(o); - RawAccess::oop_store(p, cast_to_oop(o)); - return true; - } -}; - -bool ArchiveHeapLoader::init_loaded_region(FileMapInfo* mapinfo, LoadedArchiveHeapRegion* loaded_region, - MemRegion& archive_space) { - size_t total_bytes = 0; - FileMapRegion* r = mapinfo->region_at(AOTMetaspace::hp); - r->assert_is_heap_region(); - if (r->used() == 0) { - return false; - } - - assert(is_aligned(r->used(), HeapWordSize), "must be"); - total_bytes += r->used(); - loaded_region->_region_index = AOTMetaspace::hp; - loaded_region->_region_size = r->used(); - loaded_region->_dumptime_base = (uintptr_t)mapinfo->heap_region_dumptime_address(); - - assert(is_aligned(total_bytes, HeapWordSize), "must be"); - size_t word_size = total_bytes / HeapWordSize; - HeapWord* buffer = Universe::heap()->allocate_loaded_archive_space(word_size); - if (buffer == nullptr) { - return false; - } - - archive_space = MemRegion(buffer, word_size); - _loaded_heap_bottom = (uintptr_t)archive_space.start(); - _loaded_heap_top = _loaded_heap_bottom + total_bytes; - - loaded_region->_runtime_offset = _loaded_heap_bottom - loaded_region->_dumptime_base; - - return true; -} - -bool ArchiveHeapLoader::load_heap_region_impl(FileMapInfo* mapinfo, LoadedArchiveHeapRegion* loaded_region, - uintptr_t load_address) { - uintptr_t bitmap_base = (uintptr_t)mapinfo->map_bitmap_region(); - if (bitmap_base == 0) { - _loading_failed = true; - return false; // OOM or CRC error - } - - FileMapRegion* r = mapinfo->region_at(loaded_region->_region_index); - if (!mapinfo->read_region(loaded_region->_region_index, (char*)load_address, r->used(), /* do_commit = */ false)) { - // There's no easy way to free the buffer, so we will fill it with zero later - // in fill_failed_loaded_heap(), and it will eventually be GC'ed. - log_warning(aot)("Loading of heap region %d has failed. Archived objects are disabled", loaded_region->_region_index); - _loading_failed = true; - return false; - } - assert(r->mapped_base() == (char*)load_address, "sanity"); - log_info(aot)("Loaded heap region #%d at base " INTPTR_FORMAT " top " INTPTR_FORMAT - " size %6zu delta %zd", - loaded_region->_region_index, load_address, load_address + loaded_region->_region_size, - loaded_region->_region_size, loaded_region->_runtime_offset); - - uintptr_t oopmap = bitmap_base + r->oopmap_offset(); - BitMapView bm((BitMap::bm_word_t*)oopmap, r->oopmap_size_in_bits()); - - if (UseCompressedOops) { - PatchLoadedRegionPointers patcher((narrowOop*)load_address + FileMapInfo::current_info()->heap_oopmap_start_pos(), loaded_region); - bm.iterate(&patcher); - } else { - PatchUncompressedEmbeddedPointers patcher((oop*)load_address + FileMapInfo::current_info()->heap_oopmap_start_pos(), loaded_region->_runtime_offset); - bm.iterate(&patcher); - } - return true; -} - -bool ArchiveHeapLoader::load_heap_region(FileMapInfo* mapinfo) { - assert(can_load(), "loaded heap for must be supported"); - init_narrow_oop_decoding(mapinfo->narrow_oop_base(), mapinfo->narrow_oop_shift()); - - LoadedArchiveHeapRegion loaded_region; - memset(&loaded_region, 0, sizeof(loaded_region)); - - MemRegion archive_space; - if (!init_loaded_region(mapinfo, &loaded_region, archive_space)) { - return false; - } - - if (!load_heap_region_impl(mapinfo, &loaded_region, (uintptr_t)archive_space.start())) { - assert(_loading_failed, "must be"); - return false; - } - - init_loaded_heap_relocation(&loaded_region); - _is_loaded = true; - - return true; -} - -class VerifyLoadedHeapEmbeddedPointers: public BasicOopIterateClosure { - HashTable* _table; - - public: - VerifyLoadedHeapEmbeddedPointers(HashTable* table) : _table(table) {} - - virtual void do_oop(narrowOop* p) { - // This should be called before the loaded region is modified, so all the embedded pointers - // must be null, or must point to a valid object in the loaded region. - narrowOop v = *p; - if (!CompressedOops::is_null(v)) { - oop o = CompressedOops::decode_not_null(v); - uintptr_t u = cast_from_oop(o); - ArchiveHeapLoader::assert_in_loaded_heap(u); - guarantee(_table->contains(u), "must point to beginning of object in loaded archived region"); - } - } - virtual void do_oop(oop* p) { - oop v = *p; - if(v != nullptr) { - uintptr_t u = cast_from_oop(v); - ArchiveHeapLoader::assert_in_loaded_heap(u); - guarantee(_table->contains(u), "must point to beginning of object in loaded archived region"); - } - } -}; - -void ArchiveHeapLoader::finish_initialization() { - if (is_loaded()) { - // These operations are needed only when the heap is loaded (not mapped). - finish_loaded_heap(); - if (VerifyArchivedFields > 0) { - verify_loaded_heap(); - } - } - if (is_in_use()) { - patch_native_pointers(); - intptr_t bottom = is_loaded() ? _loaded_heap_bottom : _mapped_heap_bottom; - - // The heap roots are stored in one or more segments that are laid out consecutively. - // The size of each segment (except for the last one) is max_size_in_{elems,bytes}. - HeapRootSegments segments = FileMapInfo::current_info()->heap_root_segments(); - HeapShared::init_root_segment_sizes(segments.max_size_in_elems()); - intptr_t first_segment_addr = bottom + segments.base_offset(); - for (size_t c = 0; c < segments.count(); c++) { - oop segment_oop = cast_to_oop(first_segment_addr + (c * segments.max_size_in_bytes())); - assert(segment_oop->is_objArray(), "Must be"); - HeapShared::add_root_segment((objArrayOop)segment_oop); - } - } -} - -void ArchiveHeapLoader::finish_loaded_heap() { - HeapWord* bottom = (HeapWord*)_loaded_heap_bottom; - HeapWord* top = (HeapWord*)_loaded_heap_top; - - MemRegion archive_space = MemRegion(bottom, top); - Universe::heap()->complete_loaded_archive_space(archive_space); -} - -void ArchiveHeapLoader::verify_loaded_heap() { - log_info(aot, heap)("Verify all oops and pointers in loaded heap"); - - ResourceMark rm; - HashTable table; - VerifyLoadedHeapEmbeddedPointers verifier(&table); - HeapWord* bottom = (HeapWord*)_loaded_heap_bottom; - HeapWord* top = (HeapWord*)_loaded_heap_top; - - for (HeapWord* p = bottom; p < top; ) { - oop o = cast_to_oop(p); - table.put(cast_from_oop(o), true); - p += o->size(); - } - - for (HeapWord* p = bottom; p < top; ) { - oop o = cast_to_oop(p); - o->oop_iterate(&verifier); - p += o->size(); - } -} - -void ArchiveHeapLoader::fill_failed_loaded_heap() { - assert(_loading_failed, "must be"); - if (_loaded_heap_bottom != 0) { - assert(_loaded_heap_top != 0, "must be"); - HeapWord* bottom = (HeapWord*)_loaded_heap_bottom; - HeapWord* top = (HeapWord*)_loaded_heap_top; - Universe::heap()->fill_with_objects(bottom, top - bottom); - } -} - -class PatchNativePointers: public BitMapClosure { - Metadata** _start; - - public: - PatchNativePointers(Metadata** start) : _start(start) {} - - bool do_bit(size_t offset) { - Metadata** p = _start + offset; - *p = (Metadata*)(address(*p) + AOTMetaspace::relocation_delta()); - return true; - } -}; - -void ArchiveHeapLoader::patch_native_pointers() { - if (AOTMetaspace::relocation_delta() == 0) { - return; - } - - FileMapRegion* r = FileMapInfo::current_info()->region_at(AOTMetaspace::hp); - if (r->mapped_base() != nullptr && r->has_ptrmap()) { - log_info(aot, heap)("Patching native pointers in heap region"); - BitMapView bm = FileMapInfo::current_info()->ptrmap_view(AOTMetaspace::hp); - PatchNativePointers patcher((Metadata**)r->mapped_base() + FileMapInfo::current_info()->heap_ptrmap_start_pos()); - bm.iterate(&patcher); - } -} -#endif // INCLUDE_CDS_JAVA_HEAP diff --git a/src/hotspot/share/cds/archiveUtils.cpp b/src/hotspot/share/cds/archiveUtils.cpp index 43da3cf9da8..842668509cf 100644 --- a/src/hotspot/share/cds/archiveUtils.cpp +++ b/src/hotspot/share/cds/archiveUtils.cpp @@ -25,7 +25,6 @@ #include "cds/aotLogging.hpp" #include "cds/aotMetaspace.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapLoader.inline.hpp" #include "cds/archiveUtils.hpp" #include "cds/cdsConfig.hpp" #include "cds/classListParser.hpp" diff --git a/src/hotspot/share/cds/cdsConfig.cpp b/src/hotspot/share/cds/cdsConfig.cpp index a5d1f78b76f..7976f690b8b 100644 --- a/src/hotspot/share/cds/cdsConfig.cpp +++ b/src/hotspot/share/cds/cdsConfig.cpp @@ -24,11 +24,10 @@ #include "cds/aotLogging.hpp" #include "cds/aotMapLogger.hpp" -#include "cds/archiveHeapLoader.hpp" #include "cds/cdsConfig.hpp" #include "cds/classListWriter.hpp" #include "cds/filemap.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/classLoaderDataShared.hpp" #include "classfile/moduleEntry.hpp" #include "code/aotCodeCache.hpp" @@ -893,11 +892,6 @@ static const char* check_options_incompatible_with_dumping_heap() { return "UseCompressedClassPointers must be true"; } - // Almost all GCs support heap region dump, except ZGC (so far). - if (UseZGC) { - return "ZGC is not supported"; - } - return nullptr; #else return "JVM not configured for writing Java heap objects"; @@ -969,7 +963,7 @@ bool CDSConfig::is_dumping_heap() { } bool CDSConfig::is_loading_heap() { - return ArchiveHeapLoader::is_in_use(); + return HeapShared::is_archived_heap_in_use(); } bool CDSConfig::is_using_full_module_graph() { @@ -981,7 +975,7 @@ bool CDSConfig::is_using_full_module_graph() { return false; } - if (is_using_archive() && ArchiveHeapLoader::can_use()) { + if (is_using_archive() && HeapShared::can_use_archived_heap()) { // Classes used by the archived full module graph are loaded in JVMTI early phase. assert(!(JvmtiExport::should_post_class_file_load_hook() && JvmtiExport::has_early_class_hook_env()), "CDS should be disabled if early class hooks are enabled"); diff --git a/src/hotspot/share/cds/cdsEnumKlass.cpp b/src/hotspot/share/cds/cdsEnumKlass.cpp index f771eeec3d7..1bf6ba4eba8 100644 --- a/src/hotspot/share/cds/cdsEnumKlass.cpp +++ b/src/hotspot/share/cds/cdsEnumKlass.cpp @@ -22,9 +22,8 @@ * */ -#include "cds/archiveHeapLoader.hpp" #include "cds/cdsEnumKlass.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/systemDictionaryShared.hpp" #include "classfile/vmClasses.hpp" #include "memory/resourceArea.hpp" @@ -109,7 +108,7 @@ void CDSEnumKlass::archive_static_field(int level, KlassSubGraphInfo* subgraph_i } bool CDSEnumKlass::initialize_enum_klass(InstanceKlass* k, TRAPS) { - if (!ArchiveHeapLoader::is_in_use()) { + if (!HeapShared::is_archived_heap_in_use()) { return false; } @@ -121,14 +120,14 @@ bool CDSEnumKlass::initialize_enum_klass(InstanceKlass* k, TRAPS) { log_info(aot, heap)("Initializing Enum class: %s", k->external_name()); } - oop mirror = k->java_mirror(); int i = 0; for (JavaFieldStream fs(k); !fs.done(); fs.next()) { if (fs.access_flags().is_static()) { int root_index = info->enum_klass_static_field_root_index_at(i++); fieldDescriptor& fd = fs.field_descriptor(); assert(fd.field_type() == T_OBJECT || fd.field_type() == T_ARRAY, "must be"); - mirror->obj_field_put(fd.offset(), HeapShared::get_root(root_index, /*clear=*/true)); + oop root_object = HeapShared::get_root(root_index, /*clear=*/true); + k->java_mirror()->obj_field_put(fd.offset(), root_object); } } return true; diff --git a/src/hotspot/share/cds/cdsHeapVerifier.cpp b/src/hotspot/share/cds/cdsHeapVerifier.cpp index 59c91c834d6..65063b4b005 100644 --- a/src/hotspot/share/cds/cdsHeapVerifier.cpp +++ b/src/hotspot/share/cds/cdsHeapVerifier.cpp @@ -28,6 +28,7 @@ #include "classfile/classLoaderDataGraph.hpp" #include "classfile/javaClasses.inline.hpp" #include "classfile/moduleEntry.hpp" +#include "classfile/stringTable.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/systemDictionaryShared.hpp" @@ -386,7 +387,7 @@ inline bool CDSHeapVerifier::do_entry(OopHandle& orig_obj_handle, HeapShared::Ca if (java_lang_String::is_instance(orig_obj) && HeapShared::is_dumped_interned_string(orig_obj)) { // It's quite often for static fields to have interned strings. These are most likely not // problematic (and are hard to filter). So we will ignore them. - return true; /* keep on iterating */ + return true; } StaticFieldInfo* info = _table.get(orig_obj); diff --git a/src/hotspot/share/cds/cds_globals.hpp b/src/hotspot/share/cds/cds_globals.hpp index 3e3062097f9..447914b3101 100644 --- a/src/hotspot/share/cds/cds_globals.hpp +++ b/src/hotspot/share/cds/cds_globals.hpp @@ -76,6 +76,12 @@ "Dump the names all loaded classes, that could be stored into " \ "the CDS archive, in the specified file") \ \ + product(bool, AOTStreamableObjects, false, DIAGNOSTIC, \ + "Archive the Java heap in a generic streamable object format") \ + \ + product(bool, AOTEagerlyLoadObjects, false, DIAGNOSTIC, \ + "Load streamable objects synchronously without concurrency") \ + \ product(ccstr, SharedClassListFile, nullptr, \ "Override the default CDS class list") \ \ diff --git a/src/hotspot/share/cds/dynamicArchive.cpp b/src/hotspot/share/cds/dynamicArchive.cpp index 6fac1676b9f..85e59e23f8c 100644 --- a/src/hotspot/share/cds/dynamicArchive.cpp +++ b/src/hotspot/share/cds/dynamicArchive.cpp @@ -28,11 +28,11 @@ #include "cds/aotLogging.hpp" #include "cds/aotMetaspace.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/archiveUtils.inline.hpp" #include "cds/cds_globals.hpp" #include "cds/cdsConfig.hpp" #include "cds/dynamicArchive.hpp" +#include "cds/heapShared.hpp" #include "cds/lambdaFormInvokers.hpp" #include "cds/lambdaProxyClassDictionary.hpp" #include "cds/regeneratedClasses.hpp" @@ -353,8 +353,7 @@ void DynamicArchiveBuilder::write_archive(char* serialized_data, AOTClassLocatio assert(dynamic_info != nullptr, "Sanity"); dynamic_info->open_as_output(); - ArchiveHeapInfo no_heap_for_dynamic_dump; - ArchiveBuilder::write_archive(dynamic_info, &no_heap_for_dynamic_dump); + ArchiveBuilder::write_archive(dynamic_info, nullptr, nullptr); address base = _requested_dynamic_archive_bottom; address top = _requested_dynamic_archive_top; diff --git a/src/hotspot/share/cds/filemap.cpp b/src/hotspot/share/cds/filemap.cpp index b52861cecef..ae92ce31058 100644 --- a/src/hotspot/share/cds/filemap.cpp +++ b/src/hotspot/share/cds/filemap.cpp @@ -24,16 +24,16 @@ #include "cds/aotClassLocation.hpp" #include "cds/aotLogging.hpp" +#include "cds/aotMappedHeapLoader.hpp" +#include "cds/aotMappedHeapWriter.hpp" #include "cds/aotMetaspace.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapLoader.inline.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/archiveUtils.inline.hpp" #include "cds/cds_globals.hpp" #include "cds/cdsConfig.hpp" #include "cds/dynamicArchive.hpp" #include "cds/filemap.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/altHashing.hpp" #include "classfile/classFileStream.hpp" #include "classfile/classLoader.hpp" @@ -217,6 +217,7 @@ void FileMapHeader::populate(FileMapInfo *info, size_t core_region_alignment, _compact_strings = CompactStrings; _compact_headers = UseCompactObjectHeaders; if (CDSConfig::is_dumping_heap()) { + _object_streaming_mode = HeapShared::is_writing_streaming_mode(); _narrow_oop_mode = CompressedOops::mode(); _narrow_oop_base = CompressedOops::base(); _narrow_oop_shift = CompressedOops::shift(); @@ -283,40 +284,51 @@ void FileMapHeader::print(outputStream* st) { } st->print_cr("============ end regions ======== "); - st->print_cr("- core_region_alignment: %zu", _core_region_alignment); - st->print_cr("- obj_alignment: %d", _obj_alignment); - st->print_cr("- narrow_oop_base: " INTPTR_FORMAT, p2i(_narrow_oop_base)); - st->print_cr("- narrow_oop_shift %d", _narrow_oop_shift); - st->print_cr("- compact_strings: %d", _compact_strings); - st->print_cr("- compact_headers: %d", _compact_headers); - st->print_cr("- max_heap_size: %zu", _max_heap_size); - st->print_cr("- narrow_oop_mode: %d", _narrow_oop_mode); - st->print_cr("- compressed_oops: %d", _compressed_oops); - st->print_cr("- compressed_class_ptrs: %d", _compressed_class_ptrs); - st->print_cr("- narrow_klass_pointer_bits: %d", _narrow_klass_pointer_bits); - st->print_cr("- narrow_klass_shift: %d", _narrow_klass_shift); - st->print_cr("- cloned_vtables_offset: 0x%zx", _cloned_vtables_offset); - st->print_cr("- early_serialized_data_offset: 0x%zx", _early_serialized_data_offset); - st->print_cr("- serialized_data_offset: 0x%zx", _serialized_data_offset); - st->print_cr("- jvm_ident: %s", _jvm_ident); - st->print_cr("- class_location_config_offset: 0x%zx", _class_location_config_offset); - st->print_cr("- verify_local: %d", _verify_local); - st->print_cr("- verify_remote: %d", _verify_remote); - st->print_cr("- has_platform_or_app_classes: %d", _has_platform_or_app_classes); - st->print_cr("- requested_base_address: " INTPTR_FORMAT, p2i(_requested_base_address)); - st->print_cr("- mapped_base_address: " INTPTR_FORMAT, p2i(_mapped_base_address)); - st->print_cr("- heap_root_segments.roots_count: %d" , _heap_root_segments.roots_count()); - st->print_cr("- heap_root_segments.base_offset: 0x%zx", _heap_root_segments.base_offset()); - st->print_cr("- heap_root_segments.count: %zu", _heap_root_segments.count()); - st->print_cr("- heap_root_segments.max_size_elems: %d", _heap_root_segments.max_size_in_elems()); - st->print_cr("- heap_root_segments.max_size_bytes: %zu", _heap_root_segments.max_size_in_bytes()); - st->print_cr("- _heap_oopmap_start_pos: %zu", _heap_oopmap_start_pos); - st->print_cr("- _heap_ptrmap_start_pos: %zu", _heap_ptrmap_start_pos); - st->print_cr("- _rw_ptrmap_start_pos: %zu", _rw_ptrmap_start_pos); - st->print_cr("- _ro_ptrmap_start_pos: %zu", _ro_ptrmap_start_pos); - st->print_cr("- use_optimized_module_handling: %d", _use_optimized_module_handling); - st->print_cr("- has_full_module_graph %d", _has_full_module_graph); - st->print_cr("- has_aot_linked_classes %d", _has_aot_linked_classes); + st->print_cr("- core_region_alignment: %zu", _core_region_alignment); + st->print_cr("- obj_alignment: %d", _obj_alignment); + st->print_cr("- narrow_oop_base: " INTPTR_FORMAT, p2i(_narrow_oop_base)); + st->print_cr("- narrow_oop_shift %d", _narrow_oop_shift); + st->print_cr("- compact_strings: %d", _compact_strings); + st->print_cr("- compact_headers: %d", _compact_headers); + st->print_cr("- max_heap_size: %zu", _max_heap_size); + st->print_cr("- narrow_oop_mode: %d", _narrow_oop_mode); + st->print_cr("- compressed_oops: %d", _compressed_oops); + st->print_cr("- compressed_class_ptrs: %d", _compressed_class_ptrs); + st->print_cr("- narrow_klass_pointer_bits: %d", _narrow_klass_pointer_bits); + st->print_cr("- narrow_klass_shift: %d", _narrow_klass_shift); + st->print_cr("- cloned_vtables_offset: 0x%zx", _cloned_vtables_offset); + st->print_cr("- early_serialized_data_offset: 0x%zx", _early_serialized_data_offset); + st->print_cr("- serialized_data_offset: 0x%zx", _serialized_data_offset); + st->print_cr("- jvm_ident: %s", _jvm_ident); + st->print_cr("- class_location_config_offset: 0x%zx", _class_location_config_offset); + st->print_cr("- verify_local: %d", _verify_local); + st->print_cr("- verify_remote: %d", _verify_remote); + st->print_cr("- has_platform_or_app_classes: %d", _has_platform_or_app_classes); + st->print_cr("- requested_base_address: " INTPTR_FORMAT, p2i(_requested_base_address)); + st->print_cr("- mapped_base_address: " INTPTR_FORMAT, p2i(_mapped_base_address)); + + st->print_cr("- object_streaming_mode: %d", _object_streaming_mode); + st->print_cr("- mapped_heap_header"); + st->print_cr(" - root_segments"); + st->print_cr(" - roots_count: %d", _mapped_heap_header.root_segments().roots_count()); + st->print_cr(" - base_offset: 0x%zx", _mapped_heap_header.root_segments().base_offset()); + st->print_cr(" - count: %zu", _mapped_heap_header.root_segments().count()); + st->print_cr(" - max_size_elems: %d", _mapped_heap_header.root_segments().max_size_in_elems()); + st->print_cr(" - max_size_bytes: %zu", _mapped_heap_header.root_segments().max_size_in_bytes()); + st->print_cr(" - oopmap_start_pos: %zu", _mapped_heap_header.oopmap_start_pos()); + st->print_cr(" - oopmap_ptrmap_pos: %zu", _mapped_heap_header.ptrmap_start_pos()); + st->print_cr("- streamed_heap_header"); + st->print_cr(" - forwarding_offset: %zu", _streamed_heap_header.forwarding_offset()); + st->print_cr(" - roots_offset: %zu", _streamed_heap_header.roots_offset()); + st->print_cr(" - num_roots: %zu", _streamed_heap_header.num_roots()); + st->print_cr(" - root_highest_object_index_table_offset: %zu", _streamed_heap_header.root_highest_object_index_table_offset()); + st->print_cr(" - num_archived_objects: %zu", _streamed_heap_header.num_archived_objects()); + + st->print_cr("- _rw_ptrmap_start_pos: %zu", _rw_ptrmap_start_pos); + st->print_cr("- _ro_ptrmap_start_pos: %zu", _ro_ptrmap_start_pos); + st->print_cr("- use_optimized_module_handling: %d", _use_optimized_module_handling); + st->print_cr("- has_full_module_graph %d", _has_full_module_graph); + st->print_cr("- has_aot_linked_classes %d", _has_aot_linked_classes); } bool FileMapInfo::validate_class_location() { @@ -896,12 +908,14 @@ void FileMapInfo::write_region(int region, char* base, size_t size, assert(CDSConfig::is_dumping_heap(), "sanity"); #if INCLUDE_CDS_JAVA_HEAP assert(!CDSConfig::is_dumping_dynamic_archive(), "must be"); - requested_base = (char*)ArchiveHeapWriter::requested_address(); - if (UseCompressedOops) { - mapping_offset = (size_t)((address)requested_base - CompressedOops::base()); - assert((mapping_offset >> CompressedOops::shift()) << CompressedOops::shift() == mapping_offset, "must be"); + if (HeapShared::is_writing_mapping_mode()) { + requested_base = (char*)AOTMappedHeapWriter::requested_address(); + if (UseCompressedOops) { + mapping_offset = (size_t)((address)requested_base - CompressedOops::base()); + assert((mapping_offset >> CompressedOops::shift()) << CompressedOops::shift() == mapping_offset, "must be"); + } } else { - mapping_offset = 0; // not used with !UseCompressedOops + requested_base = nullptr; } #endif // INCLUDE_CDS_JAVA_HEAP } else { @@ -954,7 +968,10 @@ size_t FileMapInfo::remove_bitmap_zeros(CHeapBitMap* map) { return first_set; } -char* FileMapInfo::write_bitmap_region(CHeapBitMap* rw_ptrmap, CHeapBitMap* ro_ptrmap, ArchiveHeapInfo* heap_info, +char* FileMapInfo::write_bitmap_region(CHeapBitMap* rw_ptrmap, + CHeapBitMap* ro_ptrmap, + ArchiveMappedHeapInfo* mapped_heap_info, + ArchiveStreamedHeapInfo* streamed_heap_info, size_t &size_in_bytes) { size_t removed_rw_leading_zeros = remove_bitmap_zeros(rw_ptrmap); size_t removed_ro_leading_zeros = remove_bitmap_zeros(ro_ptrmap); @@ -962,22 +979,27 @@ char* FileMapInfo::write_bitmap_region(CHeapBitMap* rw_ptrmap, CHeapBitMap* ro_p header()->set_ro_ptrmap_start_pos(removed_ro_leading_zeros); size_in_bytes = rw_ptrmap->size_in_bytes() + ro_ptrmap->size_in_bytes(); - if (heap_info->is_used()) { + if (mapped_heap_info != nullptr && mapped_heap_info->is_used()) { // Remove leading and trailing zeros - size_t removed_oop_leading_zeros = remove_bitmap_zeros(heap_info->oopmap()); - size_t removed_ptr_leading_zeros = remove_bitmap_zeros(heap_info->ptrmap()); - header()->set_heap_oopmap_start_pos(removed_oop_leading_zeros); - header()->set_heap_ptrmap_start_pos(removed_ptr_leading_zeros); + assert(HeapShared::is_writing_mapping_mode(), "unexpected dumping mode"); + size_t removed_oop_leading_zeros = remove_bitmap_zeros(mapped_heap_info->oopmap()); + size_t removed_ptr_leading_zeros = remove_bitmap_zeros(mapped_heap_info->ptrmap()); + mapped_heap_info->set_oopmap_start_pos(removed_oop_leading_zeros); + mapped_heap_info->set_ptrmap_start_pos(removed_ptr_leading_zeros); - size_in_bytes += heap_info->oopmap()->size_in_bytes(); - size_in_bytes += heap_info->ptrmap()->size_in_bytes(); + size_in_bytes += mapped_heap_info->oopmap()->size_in_bytes(); + size_in_bytes += mapped_heap_info->ptrmap()->size_in_bytes(); + } else if (streamed_heap_info != nullptr && streamed_heap_info->is_used()) { + assert(HeapShared::is_writing_streaming_mode(), "unexpected dumping mode"); + + size_in_bytes += streamed_heap_info->oopmap()->size_in_bytes(); } // The bitmap region contains up to 4 parts: - // rw_ptrmap: metaspace pointers inside the read-write region - // ro_ptrmap: metaspace pointers inside the read-only region - // heap_info->oopmap(): Java oop pointers in the heap region - // heap_info->ptrmap(): metaspace pointers in the heap region + // rw_ptrmap: metaspace pointers inside the read-write region + // ro_ptrmap: metaspace pointers inside the read-only region + // *_heap_info->oopmap(): Java oop pointers in the heap region + // mapped_heap_info->ptrmap(): metaspace pointers in the heap region char* buffer = NEW_C_HEAP_ARRAY(char, size_in_bytes, mtClassShared); size_t written = 0; @@ -987,28 +1009,45 @@ char* FileMapInfo::write_bitmap_region(CHeapBitMap* rw_ptrmap, CHeapBitMap* ro_p region_at(AOTMetaspace::ro)->init_ptrmap(written, ro_ptrmap->size()); written = write_bitmap(ro_ptrmap, buffer, written); - if (heap_info->is_used()) { + if (mapped_heap_info != nullptr && mapped_heap_info->is_used()) { + assert(HeapShared::is_writing_mapping_mode(), "unexpected dumping mode"); FileMapRegion* r = region_at(AOTMetaspace::hp); - r->init_oopmap(written, heap_info->oopmap()->size()); - written = write_bitmap(heap_info->oopmap(), buffer, written); + r->init_oopmap(written, mapped_heap_info->oopmap()->size()); + written = write_bitmap(mapped_heap_info->oopmap(), buffer, written); - r->init_ptrmap(written, heap_info->ptrmap()->size()); - written = write_bitmap(heap_info->ptrmap(), buffer, written); + r->init_ptrmap(written, mapped_heap_info->ptrmap()->size()); + written = write_bitmap(mapped_heap_info->ptrmap(), buffer, written); + } else if (streamed_heap_info != nullptr && streamed_heap_info->is_used()) { + assert(HeapShared::is_writing_streaming_mode(), "unexpected dumping mode"); + FileMapRegion* r = region_at(AOTMetaspace::hp); + + r->init_oopmap(written, streamed_heap_info->oopmap()->size()); + written = write_bitmap(streamed_heap_info->oopmap(), buffer, written); } write_region(AOTMetaspace::bm, (char*)buffer, size_in_bytes, /*read_only=*/true, /*allow_exec=*/false); return buffer; } -size_t FileMapInfo::write_heap_region(ArchiveHeapInfo* heap_info) { +#if INCLUDE_CDS_JAVA_HEAP +size_t FileMapInfo::write_mapped_heap_region(ArchiveMappedHeapInfo* heap_info) { char* buffer_start = heap_info->buffer_start(); size_t buffer_size = heap_info->buffer_byte_size(); write_region(AOTMetaspace::hp, buffer_start, buffer_size, false, false); - header()->set_heap_root_segments(heap_info->heap_root_segments()); + header()->set_mapped_heap_header(heap_info->create_header()); return buffer_size; } +size_t FileMapInfo::write_streamed_heap_region(ArchiveStreamedHeapInfo* heap_info) { + char* buffer_start = heap_info->buffer_start(); + size_t buffer_size = heap_info->buffer_byte_size(); + write_region(AOTMetaspace::hp, buffer_start, buffer_size, true, false); + header()->set_streamed_heap_header(heap_info->create_header()); + return buffer_size; +} +#endif // INCLUDE_CDS_JAVA_HEAP + // Dump bytes to file -- at the current file position. void FileMapInfo::write_bytes(const void* buffer, size_t nbytes) { @@ -1076,7 +1115,7 @@ void FileMapInfo::close() { * Same as os::map_memory() but also pretouches if AlwaysPreTouch is enabled. */ static char* map_memory(int fd, const char* file_name, size_t file_offset, - char *addr, size_t bytes, bool read_only, + char* addr, size_t bytes, bool read_only, bool allow_exec, MemTag mem_tag) { char* mem = os::map_memory(fd, file_name, file_offset, addr, bytes, mem_tag, AlwaysPreTouch ? false : read_only, @@ -1087,6 +1126,17 @@ static char* map_memory(int fd, const char* file_name, size_t file_offset, return mem; } +char* FileMapInfo::map_heap_region(FileMapRegion* r, char* addr, size_t bytes) { + return ::map_memory(_fd, + _full_path, + r->file_offset(), + addr, + bytes, + r->read_only(), + r->allow_exec(), + mtJavaHeap); +} + // JVM/TI RedefineClasses() support: // Remap the shared readonly space to shared readwrite, private. bool FileMapInfo::remap_shared_readonly_as_readwrite() { @@ -1254,35 +1304,40 @@ MapArchiveResult FileMapInfo::map_region(int i, intx addr_delta, char* mapped_ba } // The return value is the location of the archive relocation bitmap. -char* FileMapInfo::map_bitmap_region() { - FileMapRegion* r = region_at(AOTMetaspace::bm); +char* FileMapInfo::map_auxiliary_region(int region_index, bool read_only) { + FileMapRegion* r = region_at(region_index); if (r->mapped_base() != nullptr) { return r->mapped_base(); } - bool read_only = true, allow_exec = false; + const char* region_name = shared_region_name[region_index]; + bool allow_exec = false; char* requested_addr = nullptr; // allow OS to pick any location - char* bitmap_base = map_memory(_fd, _full_path, r->file_offset(), + char* mapped_base = map_memory(_fd, _full_path, r->file_offset(), requested_addr, r->used_aligned(), read_only, allow_exec, mtClassShared); - if (bitmap_base == nullptr) { - AOTMetaspace::report_loading_error("failed to map relocation bitmap"); + if (mapped_base == nullptr) { + AOTMetaspace::report_loading_error("failed to map %d region", region_index); return nullptr; } - if (VerifySharedSpaces && !r->check_region_crc(bitmap_base)) { - aot_log_error(aot)("relocation bitmap CRC error"); - if (!os::unmap_memory(bitmap_base, r->used_aligned())) { - fatal("os::unmap_memory of relocation bitmap failed"); + if (VerifySharedSpaces && !r->check_region_crc(mapped_base)) { + aot_log_error(aot)("region %d CRC error", region_index); + if (!os::unmap_memory(mapped_base, r->used_aligned())) { + fatal("os::unmap_memory of region %d failed", region_index); } return nullptr; } r->set_mapped_from_file(true); - r->set_mapped_base(bitmap_base); - aot_log_info(aot)("Mapped %s region #%d at base " INTPTR_FORMAT " top " INTPTR_FORMAT " (%s)", + r->set_mapped_base(mapped_base); + aot_log_info(aot)("Mapped %s region #%d at base %zu top %zu (%s)", is_static() ? "static " : "dynamic", - AOTMetaspace::bm, p2i(r->mapped_base()), p2i(r->mapped_end()), - shared_region_name[AOTMetaspace::bm]); - return bitmap_base; + region_index, p2i(r->mapped_base()), p2i(r->mapped_end()), + region_name); + return mapped_base; +} + +char* FileMapInfo::map_bitmap_region() { + return map_auxiliary_region(AOTMetaspace::bm, false); } bool FileMapInfo::map_aot_code_region(ReservedSpace rs) { @@ -1429,59 +1484,48 @@ size_t FileMapInfo::readonly_total() { } #if INCLUDE_CDS_JAVA_HEAP -MemRegion FileMapInfo::_mapped_heap_memregion; bool FileMapInfo::has_heap_region() { return (region_at(AOTMetaspace::hp)->used() > 0); } -// Returns the address range of the archived heap region computed using the -// current oop encoding mode. This range may be different than the one seen at -// dump time due to encoding mode differences. The result is used in determining -// if/how these regions should be relocated at run time. -MemRegion FileMapInfo::get_heap_region_requested_range() { - FileMapRegion* r = region_at(AOTMetaspace::hp); - size_t size = r->used(); - assert(size > 0, "must have non-empty heap region"); +static void on_heap_region_loading_error() { + if (CDSConfig::is_using_aot_linked_classes()) { + // It's too late to recover -- we have already committed to use the archived metaspace objects, but + // the archived heap objects cannot be loaded, so we don't have the archived FMG to guarantee that + // all AOT-linked classes are visible. + // + // We get here because the heap is too small. The app will fail anyway. So let's quit. + aot_log_error(aot)("%s has aot-linked classes but the archived " + "heap objects cannot be loaded. Try increasing your heap size.", + CDSConfig::type_of_archive_being_loaded()); + AOTMetaspace::unrecoverable_loading_error(); + } + CDSConfig::stop_using_full_module_graph(); +} - address start = heap_region_requested_address(); - address end = start + size; - aot_log_info(aot)("Requested heap region [" INTPTR_FORMAT " - " INTPTR_FORMAT "] = %8zu bytes", - p2i(start), p2i(end), size); +void FileMapInfo::stream_heap_region() { + assert(object_streaming_mode(), "This should only be done for the streaming approach"); - return MemRegion((HeapWord*)start, (HeapWord*)end); + if (map_auxiliary_region(AOTMetaspace::hp, /*readonly=*/true) != nullptr) { + HeapShared::initialize_streaming(); + } else { + on_heap_region_loading_error(); + } } void FileMapInfo::map_or_load_heap_region() { + assert(!object_streaming_mode(), "This should only be done for the mapping approach"); bool success = false; - if (can_use_heap_region()) { - if (ArchiveHeapLoader::can_map()) { - success = map_heap_region(); - } else if (ArchiveHeapLoader::can_load()) { - success = ArchiveHeapLoader::load_heap_region(this); - } else { - if (!UseCompressedOops && !ArchiveHeapLoader::can_map()) { - AOTMetaspace::report_loading_error("Cannot use CDS heap data. Selected GC not compatible -XX:-UseCompressedOops"); - } else { - AOTMetaspace::report_loading_error("Cannot use CDS heap data. UseEpsilonGC, UseG1GC, UseSerialGC, UseParallelGC, or UseShenandoahGC are required."); - } - } + if (AOTMappedHeapLoader::can_map()) { + success = AOTMappedHeapLoader::map_heap_region(this); + } else if (AOTMappedHeapLoader::can_load()) { + success = AOTMappedHeapLoader::load_heap_region(this); } if (!success) { - if (CDSConfig::is_using_aot_linked_classes()) { - // It's too late to recover -- we have already committed to use the archived metaspace objects, but - // the archived heap objects cannot be loaded, so we don't have the archived FMG to guarantee that - // all AOT-linked classes are visible. - // - // We get here because the heap is too small. The app will fail anyway. So let's quit. - aot_log_error(aot)("%s has aot-linked classes but the archived " - "heap objects cannot be loaded. Try increasing your heap size.", - CDSConfig::type_of_archive_being_loaded()); - AOTMetaspace::unrecoverable_loading_error(); - } - CDSConfig::stop_using_full_module_graph("archive heap loading failed"); + on_heap_region_loading_error(); } } @@ -1489,6 +1533,10 @@ bool FileMapInfo::can_use_heap_region() { if (!has_heap_region()) { return false; } + if (!object_streaming_mode() && !Universe::heap()->can_load_archived_objects() && !UseG1GC) { + // Incompatible object format + return false; + } if (JvmtiExport::should_post_class_file_load_hook() && JvmtiExport::has_early_class_hook_env()) { ShouldNotReachHere(); // CDS should have been disabled. // The archived objects are mapped at JVM start-up, but we don't know if @@ -1503,7 +1551,7 @@ bool FileMapInfo::can_use_heap_region() { } // We pre-compute narrow Klass IDs with the runtime mapping start intended to be the base, and a shift of - // ArchiveBuilder::precomputed_narrow_klass_shift. We enforce this encoding at runtime (see + // HeapShared::precomputed_narrow_klass_shift. We enforce this encoding at runtime (see // CompressedKlassPointers::initialize_for_given_encoding()). Therefore, the following assertions must // hold: address archive_narrow_klass_base = (address)header()->mapped_base_address(); @@ -1512,21 +1560,28 @@ bool FileMapInfo::can_use_heap_region() { aot_log_info(aot)("CDS archive was created with max heap size = %zuM, and the following configuration:", max_heap_size()/M); + aot_log_info(aot)(" narrow_klass_base at mapping start address, narrow_klass_pointer_bits = %d, narrow_klass_shift = %d", archive_narrow_klass_pointer_bits, archive_narrow_klass_shift); - aot_log_info(aot)(" narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d", - narrow_oop_mode(), p2i(narrow_oop_base()), narrow_oop_shift()); + if (UseCompressedOops) { + aot_log_info(aot)(" narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d", + narrow_oop_mode(), p2i(narrow_oop_base()), narrow_oop_shift()); + } aot_log_info(aot)("The current max heap size = %zuM, G1HeapRegion::GrainBytes = %zu", MaxHeapSize/M, G1HeapRegion::GrainBytes); aot_log_info(aot)(" narrow_klass_base = " PTR_FORMAT ", arrow_klass_pointer_bits = %d, narrow_klass_shift = %d", p2i(CompressedKlassPointers::base()), CompressedKlassPointers::narrow_klass_pointer_bits(), CompressedKlassPointers::shift()); - aot_log_info(aot)(" narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d", - CompressedOops::mode(), p2i(CompressedOops::base()), CompressedOops::shift()); - aot_log_info(aot)(" heap range = [" PTR_FORMAT " - " PTR_FORMAT "]", - UseCompressedOops ? p2i(CompressedOops::begin()) : - UseG1GC ? p2i((address)G1CollectedHeap::heap()->reserved().start()) : 0L, - UseCompressedOops ? p2i(CompressedOops::end()) : - UseG1GC ? p2i((address)G1CollectedHeap::heap()->reserved().end()) : 0L); + if (UseCompressedOops) { + aot_log_info(aot)(" narrow_oop_mode = %d, narrow_oop_base = " PTR_FORMAT ", narrow_oop_shift = %d", + CompressedOops::mode(), p2i(CompressedOops::base()), CompressedOops::shift()); + } + if (!object_streaming_mode()) { + aot_log_info(aot)(" heap range = [" PTR_FORMAT " - " PTR_FORMAT "]", + UseCompressedOops ? p2i(CompressedOops::begin()) : + UseG1GC ? p2i((address)G1CollectedHeap::heap()->reserved().start()) : 0L, + UseCompressedOops ? p2i(CompressedOops::end()) : + UseG1GC ? p2i((address)G1CollectedHeap::heap()->reserved().end()) : 0L); + } int err = 0; if ( archive_narrow_klass_base != CompressedKlassPointers::base() || @@ -1570,204 +1625,10 @@ bool FileMapInfo::can_use_heap_region() { return true; } -// The actual address of this region during dump time. -address FileMapInfo::heap_region_dumptime_address() { - FileMapRegion* r = region_at(AOTMetaspace::hp); - assert(CDSConfig::is_using_archive(), "runtime only"); - assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be"); - if (UseCompressedOops) { - return /*dumptime*/ (address)((uintptr_t)narrow_oop_base() + r->mapping_offset()); - } else { - return heap_region_requested_address(); - } -} - -// The address where this region can be mapped into the runtime heap without -// patching any of the pointers that are embedded in this region. -address FileMapInfo::heap_region_requested_address() { - assert(CDSConfig::is_using_archive(), "runtime only"); - FileMapRegion* r = region_at(AOTMetaspace::hp); - assert(is_aligned(r->mapping_offset(), sizeof(HeapWord)), "must be"); - assert(ArchiveHeapLoader::can_use(), "GC must support mapping or loading"); - if (UseCompressedOops) { - // We can avoid relocation if each region's offset from the runtime CompressedOops::base() - // is the same as its offset from the CompressedOops::base() during dumptime. - // Note that CompressedOops::base() may be different between dumptime and runtime. - // - // Example: - // Dumptime base = 0x1000 and shift is 0. We have a region at address 0x2000. There's a - // narrowOop P stored in this region that points to an object at address 0x2200. - // P's encoded value is 0x1200. - // - // Runtime base = 0x4000 and shift is also 0. If we map this region at 0x5000, then - // the value P can remain 0x1200. The decoded address = (0x4000 + (0x1200 << 0)) = 0x5200, - // which is the runtime location of the referenced object. - return /*runtime*/ (address)((uintptr_t)CompressedOops::base() + r->mapping_offset()); - } else { - // This was the hard-coded requested base address used at dump time. With uncompressed oops, - // the heap range is assigned by the OS so we will most likely have to relocate anyway, no matter - // what base address was picked at duump time. - return (address)ArchiveHeapWriter::NOCOOPS_REQUESTED_BASE; - } -} - -bool FileMapInfo::map_heap_region() { - if (map_heap_region_impl()) { -#ifdef ASSERT - // The "old" regions must be parsable -- we cannot have any unused space - // at the start of the lowest G1 region that contains archived objects. - assert(is_aligned(_mapped_heap_memregion.start(), G1HeapRegion::GrainBytes), "must be"); - - // Make sure we map at the very top of the heap - see comments in - // init_heap_region_relocation(). - MemRegion heap_range = G1CollectedHeap::heap()->reserved(); - assert(heap_range.contains(_mapped_heap_memregion), "must be"); - - address heap_end = (address)heap_range.end(); - address mapped_heap_region_end = (address)_mapped_heap_memregion.end(); - assert(heap_end >= mapped_heap_region_end, "must be"); - assert(heap_end - mapped_heap_region_end < (intx)(G1HeapRegion::GrainBytes), - "must be at the top of the heap to avoid fragmentation"); -#endif - - ArchiveHeapLoader::set_mapped(); - return true; - } else { - return false; - } -} - -bool FileMapInfo::map_heap_region_impl() { - assert(UseG1GC, "the following code assumes G1"); - - FileMapRegion* r = region_at(AOTMetaspace::hp); - size_t size = r->used(); - if (size == 0) { - return false; // no archived java heap data - } - - size_t word_size = size / HeapWordSize; - address requested_start = heap_region_requested_address(); - - aot_log_info(aot)("Preferred address to map heap data (to avoid relocation) is " INTPTR_FORMAT, p2i(requested_start)); - - // allocate from java heap - HeapWord* start = G1CollectedHeap::heap()->alloc_archive_region(word_size, (HeapWord*)requested_start); - if (start == nullptr) { - AOTMetaspace::report_loading_error("UseSharedSpaces: Unable to allocate java heap region for archive heap."); - return false; - } - - _mapped_heap_memregion = MemRegion(start, word_size); - - // Map the archived heap data. No need to call MemTracker::record_virtual_memory_tag() - // for mapped region as it is part of the reserved java heap, which is already recorded. - char* addr = (char*)_mapped_heap_memregion.start(); - char* base; - - if (AOTMetaspace::use_windows_memory_mapping() || UseLargePages) { - // With UseLargePages, memory mapping may fail on some OSes if the size is not - // large page aligned, so let's use read() instead. In this case, the memory region - // is already commited by G1 so we don't need to commit it again. - if (!read_region(AOTMetaspace::hp, addr, - align_up(_mapped_heap_memregion.byte_size(), os::vm_page_size()), - /* do_commit = */ !UseLargePages)) { - dealloc_heap_region(); - aot_log_error(aot)("Failed to read archived heap region into " INTPTR_FORMAT, p2i(addr)); - return false; - } - // Checks for VerifySharedSpaces is already done inside read_region() - base = addr; - } else { - base = map_memory(_fd, _full_path, r->file_offset(), - addr, _mapped_heap_memregion.byte_size(), r->read_only(), - r->allow_exec(), mtJavaHeap); - if (base == nullptr || base != addr) { - dealloc_heap_region(); - AOTMetaspace::report_loading_error("UseSharedSpaces: Unable to map at required address in java heap. " - INTPTR_FORMAT ", size = %zu bytes", - p2i(addr), _mapped_heap_memregion.byte_size()); - return false; - } - - if (VerifySharedSpaces && !r->check_region_crc(base)) { - dealloc_heap_region(); - AOTMetaspace::report_loading_error("UseSharedSpaces: mapped heap region is corrupt"); - return false; - } - } - - r->set_mapped_base(base); - - // If the requested range is different from the range allocated by GC, then - // the pointers need to be patched. - address mapped_start = (address) _mapped_heap_memregion.start(); - ptrdiff_t delta = mapped_start - requested_start; - if (UseCompressedOops && - (narrow_oop_mode() != CompressedOops::mode() || - narrow_oop_shift() != CompressedOops::shift())) { - _heap_pointers_need_patching = true; - } - if (delta != 0) { - _heap_pointers_need_patching = true; - } - ArchiveHeapLoader::init_mapped_heap_info(mapped_start, delta, narrow_oop_shift()); - - if (_heap_pointers_need_patching) { - char* bitmap_base = map_bitmap_region(); - if (bitmap_base == nullptr) { - AOTMetaspace::report_loading_error("CDS heap cannot be used because bitmap region cannot be mapped"); - dealloc_heap_region(); - _heap_pointers_need_patching = false; - return false; - } - } - aot_log_info(aot)("Heap data mapped at " INTPTR_FORMAT ", size = %8zu bytes", - p2i(mapped_start), _mapped_heap_memregion.byte_size()); - aot_log_info(aot)("CDS heap data relocation delta = %zd bytes", delta); - return true; -} - -narrowOop FileMapInfo::encoded_heap_region_dumptime_address() { - assert(CDSConfig::is_using_archive(), "runtime only"); - assert(UseCompressedOops, "sanity"); - FileMapRegion* r = region_at(AOTMetaspace::hp); - return CompressedOops::narrow_oop_cast(r->mapping_offset() >> narrow_oop_shift()); -} - -void FileMapInfo::patch_heap_embedded_pointers() { - if (!ArchiveHeapLoader::is_mapped() || !_heap_pointers_need_patching) { - return; - } - - char* bitmap_base = map_bitmap_region(); - assert(bitmap_base != nullptr, "must have already been mapped"); - - FileMapRegion* r = region_at(AOTMetaspace::hp); - ArchiveHeapLoader::patch_embedded_pointers( - this, _mapped_heap_memregion, - (address)(region_at(AOTMetaspace::bm)->mapped_base()) + r->oopmap_offset(), - r->oopmap_size_in_bits()); -} - -void FileMapInfo::fixup_mapped_heap_region() { - if (ArchiveHeapLoader::is_mapped()) { - assert(!_mapped_heap_memregion.is_empty(), "sanity"); - - // Populate the archive regions' G1BlockOffsetTables. That ensures - // fast G1BlockOffsetTable::block_start operations for any given address - // within the archive regions when trying to find start of an object - // (e.g. during card table scanning). - G1CollectedHeap::heap()->populate_archive_regions_bot(_mapped_heap_memregion); - } -} - -// dealloc the archive regions from java heap -void FileMapInfo::dealloc_heap_region() { - G1CollectedHeap::heap()->dealloc_archive_regions(_mapped_heap_memregion); -} #endif // INCLUDE_CDS_JAVA_HEAP +// Unmap a memory region in the address space. + void FileMapInfo::unmap_regions(int regions[], int num_regions) { for (int r = 0; r < num_regions; r++) { int idx = regions[r]; @@ -1775,8 +1636,6 @@ void FileMapInfo::unmap_regions(int regions[], int num_regions) { } } -// Unmap a memory region in the address space. - void FileMapInfo::unmap_region(int i) { FileMapRegion* r = region_at(i); char* mapped_base = r->mapped_base(); @@ -1808,7 +1667,6 @@ void FileMapInfo::assert_mark(bool check) { FileMapInfo* FileMapInfo::_current_info = nullptr; FileMapInfo* FileMapInfo::_dynamic_archive_info = nullptr; -bool FileMapInfo::_heap_pointers_need_patching = false; bool FileMapInfo::_memory_mapping_failed = false; // Open the shared archive file, read and validate the header diff --git a/src/hotspot/share/cds/filemap.hpp b/src/hotspot/share/cds/filemap.hpp index a58271eefc7..b97b46a7c26 100644 --- a/src/hotspot/share/cds/filemap.hpp +++ b/src/hotspot/share/cds/filemap.hpp @@ -27,12 +27,14 @@ #include "cds/aotMetaspace.hpp" #include "cds/archiveUtils.hpp" +#include "cds/heapShared.hpp" #include "include/cds.h" #include "logging/logLevel.hpp" #include "memory/allocation.hpp" #include "oops/array.hpp" #include "oops/compressedOops.hpp" #include "utilities/align.hpp" +#include "utilities/bitMap.hpp" // To understand the layout of the CDS archive file: // @@ -43,7 +45,6 @@ static const int JVM_IDENT_MAX = 256; class AOTClassLocationConfig; -class ArchiveHeapInfo; class BitMapView; class CHeapBitMap; class ClassFileStream; @@ -114,6 +115,7 @@ private: bool _compact_headers; // value of UseCompactObjectHeaders uintx _max_heap_size; // java max heap size during dumping CompressedOops::Mode _narrow_oop_mode; // compressed oop encoding mode + bool _object_streaming_mode; // dump was created for object streaming bool _compressed_oops; // save the flag UseCompressedOops bool _compressed_class_ptrs; // save the flag UseCompressedClassPointers int _narrow_klass_pointer_bits; // save number of bits in narrowKlass @@ -139,12 +141,12 @@ private: // some expensive operations. bool _has_aot_linked_classes; // Was the CDS archive created with -XX:+AOTClassLinking bool _has_full_module_graph; // Does this CDS archive contain the full archived module graph? - HeapRootSegments _heap_root_segments; // Heap root segments info - size_t _heap_oopmap_start_pos; // The first bit in the oopmap corresponds to this position in the heap. - size_t _heap_ptrmap_start_pos; // The first bit in the ptrmap corresponds to this position in the heap. size_t _rw_ptrmap_start_pos; // The first bit in the ptrmap corresponds to this position in the rw region size_t _ro_ptrmap_start_pos; // The first bit in the ptrmap corresponds to this position in the ro region + ArchiveMappedHeapHeader _mapped_heap_header; + ArchiveStreamedHeapHeader _streamed_heap_header; + // The following are parameters that affect MethodData layout. u1 _compiler_type; uint _type_profile_level; @@ -192,6 +194,7 @@ public: char* cloned_vtables() const { return from_mapped_offset(_cloned_vtables_offset); } char* early_serialized_data() const { return from_mapped_offset(_early_serialized_data_offset); } char* serialized_data() const { return from_mapped_offset(_serialized_data_offset); } + bool object_streaming_mode() const { return _object_streaming_mode; } const char* jvm_ident() const { return _jvm_ident; } char* requested_base_address() const { return _requested_base_address; } char* mapped_base_address() const { return _mapped_base_address; } @@ -201,23 +204,25 @@ public: bool compressed_class_pointers() const { return _compressed_class_ptrs; } int narrow_klass_pointer_bits() const { return _narrow_klass_pointer_bits; } int narrow_klass_shift() const { return _narrow_klass_shift; } - HeapRootSegments heap_root_segments() const { return _heap_root_segments; } bool has_full_module_graph() const { return _has_full_module_graph; } - size_t heap_oopmap_start_pos() const { return _heap_oopmap_start_pos; } - size_t heap_ptrmap_start_pos() const { return _heap_ptrmap_start_pos; } size_t rw_ptrmap_start_pos() const { return _rw_ptrmap_start_pos; } size_t ro_ptrmap_start_pos() const { return _ro_ptrmap_start_pos; } + // Heap archiving + const ArchiveMappedHeapHeader* mapped_heap() const { return &_mapped_heap_header; } + const ArchiveStreamedHeapHeader* streamed_heap() const { return &_streamed_heap_header; } + + void set_streamed_heap_header(ArchiveStreamedHeapHeader header) { _streamed_heap_header = header; } + void set_mapped_heap_header(ArchiveMappedHeapHeader header) { _mapped_heap_header = header; } + void set_has_platform_or_app_classes(bool v) { _has_platform_or_app_classes = v; } void set_cloned_vtables(char* p) { set_as_offset(p, &_cloned_vtables_offset); } void set_early_serialized_data(char* p) { set_as_offset(p, &_early_serialized_data_offset); } void set_serialized_data(char* p) { set_as_offset(p, &_serialized_data_offset); } void set_mapped_base_address(char* p) { _mapped_base_address = p; } - void set_heap_root_segments(HeapRootSegments segments) { _heap_root_segments = segments; } - void set_heap_oopmap_start_pos(size_t n) { _heap_oopmap_start_pos = n; } - void set_heap_ptrmap_start_pos(size_t n) { _heap_ptrmap_start_pos = n; } void set_rw_ptrmap_start_pos(size_t n) { _rw_ptrmap_start_pos = n; } void set_ro_ptrmap_start_pos(size_t n) { _ro_ptrmap_start_pos = n; } + void copy_base_archive_name(const char* name); void set_class_location_config(AOTClassLocationConfig* table) { @@ -273,7 +278,6 @@ private: static FileMapInfo* _current_info; static FileMapInfo* _dynamic_archive_info; - static bool _heap_pointers_need_patching; static bool _memory_mapping_failed; public: @@ -303,11 +307,12 @@ public: address narrow_oop_base() const { return header()->narrow_oop_base(); } int narrow_oop_shift() const { return header()->narrow_oop_shift(); } uintx max_heap_size() const { return header()->max_heap_size(); } - HeapRootSegments heap_root_segments() const { return header()->heap_root_segments(); } size_t core_region_alignment() const { return header()->core_region_alignment(); } - size_t heap_oopmap_start_pos() const { return header()->heap_oopmap_start_pos(); } - size_t heap_ptrmap_start_pos() const { return header()->heap_ptrmap_start_pos(); } + const ArchiveMappedHeapHeader* mapped_heap() const { return header()->mapped_heap(); } + const ArchiveStreamedHeapHeader* streamed_heap() const { return header()->streamed_heap(); } + + bool object_streaming_mode() const { return header()->object_streaming_mode(); } CompressedOops::Mode narrow_oop_mode() const { return header()->narrow_oop_mode(); } char* cloned_vtables() const { return header()->cloned_vtables(); } @@ -324,6 +329,7 @@ public: bool is_mapped() const { return _is_mapped; } void set_is_mapped(bool v) { _is_mapped = v; } const char* full_path() const { return _full_path; } + char* map_heap_region(FileMapRegion* r, char* addr, size_t bytes); void set_requested_base(char* b) { header()->set_requested_base(b); } char* requested_base_address() const { return header()->requested_base_address(); } @@ -363,23 +369,29 @@ public: void write_region(int region, char* base, size_t size, bool read_only, bool allow_exec); size_t remove_bitmap_zeros(CHeapBitMap* map); - char* write_bitmap_region(CHeapBitMap* rw_ptrmap, CHeapBitMap* ro_ptrmap, ArchiveHeapInfo* heap_info, + char* write_bitmap_region(CHeapBitMap* rw_ptrmap, + CHeapBitMap* ro_ptrmap, + ArchiveMappedHeapInfo* mapped_heap_info, + ArchiveStreamedHeapInfo* streamed_heap_info, size_t &size_in_bytes); - size_t write_heap_region(ArchiveHeapInfo* heap_info); + size_t write_mapped_heap_region(ArchiveMappedHeapInfo* heap_info) NOT_CDS_JAVA_HEAP_RETURN_(0); + size_t write_streamed_heap_region(ArchiveStreamedHeapInfo* heap_info) NOT_CDS_JAVA_HEAP_RETURN_(0); void write_bytes(const void* buffer, size_t count); void write_bytes_aligned(const void* buffer, size_t count); size_t read_bytes(void* buffer, size_t count); static size_t readonly_total(); MapArchiveResult map_regions(int regions[], int num_regions, char* mapped_base_address, ReservedSpace rs); void unmap_regions(int regions[], int num_regions); + + // Object loading support + void stream_heap_region() NOT_CDS_JAVA_HEAP_RETURN; void map_or_load_heap_region() NOT_CDS_JAVA_HEAP_RETURN; - void fixup_mapped_heap_region() NOT_CDS_JAVA_HEAP_RETURN; - void patch_heap_embedded_pointers() NOT_CDS_JAVA_HEAP_RETURN; + bool has_heap_region() NOT_CDS_JAVA_HEAP_RETURN_(false); - MemRegion get_heap_region_requested_range() NOT_CDS_JAVA_HEAP_RETURN_(MemRegion()); bool read_region(int i, char* base, size_t size, bool do_commit); char* map_bitmap_region(); bool map_aot_code_region(ReservedSpace rs); + char* map_forwarding_region(); void unmap_region(int i); void close(); bool is_open() { return _file_open; } @@ -434,25 +446,17 @@ public: const char* vm_version() { return header()->jvm_ident(); } + bool can_use_heap_region(); private: bool open_for_read(); void seek_to_position(size_t pos); - bool map_heap_region_impl() NOT_CDS_JAVA_HEAP_RETURN_(false); - void dealloc_heap_region() NOT_CDS_JAVA_HEAP_RETURN; - bool can_use_heap_region(); - bool load_heap_region() NOT_CDS_JAVA_HEAP_RETURN_(false); - bool map_heap_region() NOT_CDS_JAVA_HEAP_RETURN_(false); - void init_heap_region_relocation(); + MapArchiveResult map_region(int i, intx addr_delta, char* mapped_base_address, ReservedSpace rs); bool relocate_pointers_in_core_regions(intx addr_delta); - - static MemRegion _mapped_heap_memregion; + char* map_auxiliary_region(int region_index, bool read_only); public: - address heap_region_dumptime_address() NOT_CDS_JAVA_HEAP_RETURN_(nullptr); - address heap_region_requested_address() NOT_CDS_JAVA_HEAP_RETURN_(nullptr); - narrowOop encoded_heap_region_dumptime_address(); private: diff --git a/src/hotspot/share/cds/heapShared.cpp b/src/hotspot/share/cds/heapShared.cpp index 3f4d584b0f5..357b317ee49 100644 --- a/src/hotspot/share/cds/heapShared.cpp +++ b/src/hotspot/share/cds/heapShared.cpp @@ -26,17 +26,20 @@ #include "cds/aotClassInitializer.hpp" #include "cds/aotClassLocation.hpp" #include "cds/aotLogging.hpp" +#include "cds/aotMappedHeapLoader.hpp" +#include "cds/aotMappedHeapWriter.hpp" #include "cds/aotMetaspace.hpp" #include "cds/aotOopChecker.hpp" #include "cds/aotReferenceObjSupport.hpp" +#include "cds/aotStreamedHeapLoader.hpp" +#include "cds/aotStreamedHeapWriter.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapLoader.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/archiveUtils.hpp" +#include "cds/cds_globals.hpp" #include "cds/cdsConfig.hpp" #include "cds/cdsEnumKlass.hpp" #include "cds/cdsHeapVerifier.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "cds/regeneratedClasses.hpp" #include "classfile/classLoaderData.hpp" #include "classfile/javaClasses.inline.hpp" @@ -64,6 +67,7 @@ #include "prims/jvmtiExport.hpp" #include "runtime/arguments.hpp" #include "runtime/fieldDescriptor.inline.hpp" +#include "runtime/globals_extension.hpp" #include "runtime/init.hpp" #include "runtime/javaCalls.hpp" #include "runtime/mutexLocker.hpp" @@ -91,7 +95,57 @@ struct ArchivableStaticFieldInfo { } }; -DumpedInternedStrings *HeapShared::_dumped_interned_strings = nullptr; +// Anything that goes in the header must be thoroughly purged from uninitialized memory +// as it will be written to disk. Therefore, the constructors memset the memory to 0. +// This is not the prettiest thing, but we need to know every byte is initialized, +// including potential padding between fields. + +ArchiveMappedHeapHeader::ArchiveMappedHeapHeader(size_t ptrmap_start_pos, + size_t oopmap_start_pos, + HeapRootSegments root_segments) { + memset((char*)this, 0, sizeof(*this)); + _ptrmap_start_pos = ptrmap_start_pos; + _oopmap_start_pos = oopmap_start_pos; + _root_segments = root_segments; +} + +ArchiveMappedHeapHeader::ArchiveMappedHeapHeader() { + memset((char*)this, 0, sizeof(*this)); +} + +ArchiveMappedHeapHeader ArchiveMappedHeapInfo::create_header() { + return ArchiveMappedHeapHeader{_ptrmap_start_pos, + _oopmap_start_pos, + _root_segments}; +} + +ArchiveStreamedHeapHeader::ArchiveStreamedHeapHeader(size_t forwarding_offset, + size_t roots_offset, + size_t num_roots, + size_t root_highest_object_index_table_offset, + size_t num_archived_objects) { + memset((char*)this, 0, sizeof(*this)); + _forwarding_offset = forwarding_offset; + _roots_offset = roots_offset; + _num_roots = num_roots; + _root_highest_object_index_table_offset = root_highest_object_index_table_offset; + _num_archived_objects = num_archived_objects; +} + +ArchiveStreamedHeapHeader::ArchiveStreamedHeapHeader() { + memset((char*)this, 0, sizeof(*this)); +} + +ArchiveStreamedHeapHeader ArchiveStreamedHeapInfo::create_header() { + return ArchiveStreamedHeapHeader{_forwarding_offset, + _roots_offset, + _num_roots, + _root_highest_object_index_table_offset, + _num_archived_objects}; +} + +HeapArchiveMode HeapShared::_heap_load_mode = HeapArchiveMode::_uninitialized; +HeapArchiveMode HeapShared::_heap_write_mode = HeapArchiveMode::_uninitialized; size_t HeapShared::_alloc_count[HeapShared::ALLOC_STAT_SLOTS]; size_t HeapShared::_alloc_size[HeapShared::ALLOC_STAT_SLOTS]; @@ -142,8 +196,6 @@ static ArchivableStaticFieldInfo fmg_archive_subgraph_entry_fields[] = { KlassSubGraphInfo* HeapShared::_dump_time_special_subgraph; ArchivedKlassSubGraphInfoRecord* HeapShared::_run_time_special_subgraph; GrowableArrayCHeap* HeapShared::_pending_roots = nullptr; -GrowableArrayCHeap* HeapShared::_root_segments = nullptr; -int HeapShared::_root_segment_max_size_elems; OopHandle HeapShared::_scratch_basic_type_mirrors[T_VOID+1]; MetaspaceObjToOopHandleTable* HeapShared::_scratch_objects_table = nullptr; @@ -239,10 +291,147 @@ void HeapShared::reset_archived_object_states(TRAPS) { HeapShared::ArchivedObjectCache* HeapShared::_archived_object_cache = nullptr; +bool HeapShared::is_archived_heap_in_use() { + if (HeapShared::is_loading()) { + if (HeapShared::is_loading_streaming_mode()) { + return AOTStreamedHeapLoader::is_in_use(); + } else { + return AOTMappedHeapLoader::is_in_use(); + } + } + + return false; +} + +bool HeapShared::can_use_archived_heap() { + FileMapInfo* static_mapinfo = FileMapInfo::current_info(); + if (static_mapinfo == nullptr) { + return false; + } + if (!static_mapinfo->has_heap_region()) { + return false; + } + if (!static_mapinfo->object_streaming_mode() && + !Universe::heap()->can_load_archived_objects() && + !UseG1GC) { + // Incompatible object format + return false; + } + + return true; +} + +bool HeapShared::is_too_large_to_archive(size_t size) { + if (HeapShared::is_writing_streaming_mode()) { + return false; + } else { + return AOTMappedHeapWriter::is_too_large_to_archive(size); + } +} + +bool HeapShared::is_too_large_to_archive(oop obj) { + if (HeapShared::is_writing_streaming_mode()) { + return false; + } else { + return AOTMappedHeapWriter::is_too_large_to_archive(obj); + } +} + +bool HeapShared::is_string_too_large_to_archive(oop string) { + typeArrayOop value = java_lang_String::value_no_keepalive(string); + return is_too_large_to_archive(value); +} + +void HeapShared::initialize_loading_mode(HeapArchiveMode mode) { + assert(_heap_load_mode == HeapArchiveMode::_uninitialized, "already set?"); + assert(mode != HeapArchiveMode::_uninitialized, "sanity"); + _heap_load_mode = mode; +}; + +void HeapShared::initialize_writing_mode() { + assert(!FLAG_IS_ERGO(AOTStreamableObjects), "Should not have been ergonomically set yet"); + + if (!CDSConfig::is_dumping_archive()) { + // We use FLAG_IS_CMDLINE below because we are specifically looking to warn + // a user that explicitly sets the flag on the command line for a JVM that is + // not dumping an archive. + if (FLAG_IS_CMDLINE(AOTStreamableObjects)) { + log_warning(cds)("-XX:%cAOTStreamableObjects was specified, " + "AOTStreamableObjects is only used for writing " + "the AOT cache.", + AOTStreamableObjects ? '+' : '-'); + } + } + + // The below checks use !FLAG_IS_DEFAULT instead of FLAG_IS_CMDLINE + // because the one step AOT cache creation transfers the AOTStreamableObjects + // flag value from the training JVM to the assembly JVM using an environment + // variable that sets the flag as ERGO in the assembly JVM. + if (FLAG_IS_DEFAULT(AOTStreamableObjects)) { + // By default, the value of AOTStreamableObjects should match !UseCompressedOops. + FLAG_SET_DEFAULT(AOTStreamableObjects, !UseCompressedOops); + } else if (!AOTStreamableObjects && UseZGC) { + // Never write mapped heap with ZGC + if (CDSConfig::is_dumping_archive()) { + log_warning(cds)("Heap archiving without streaming not supported for -XX:+UseZGC"); + } + FLAG_SET_ERGO(AOTStreamableObjects, true); + } + + if (CDSConfig::is_dumping_archive()) { + // Select default mode + assert(_heap_write_mode == HeapArchiveMode::_uninitialized, "already initialized?"); + _heap_write_mode = AOTStreamableObjects ? HeapArchiveMode::_streaming : HeapArchiveMode::_mapping; + } +} + +void HeapShared::initialize_streaming() { + assert(is_loading_streaming_mode(), "shouldn't call this"); + if (can_use_archived_heap()) { + AOTStreamedHeapLoader::initialize(); + } +} + +void HeapShared::enable_gc() { + if (AOTStreamedHeapLoader::is_in_use()) { + AOTStreamedHeapLoader::enable_gc(); + } +} + +void HeapShared::materialize_thread_object() { + if (AOTStreamedHeapLoader::is_in_use()) { + AOTStreamedHeapLoader::materialize_thread_object(); + } +} + +void HeapShared::add_to_dumped_interned_strings(oop string) { + assert(HeapShared::is_writing_mapping_mode(), "Only used by this mode"); + AOTMappedHeapWriter::add_to_dumped_interned_strings(string); +} + +void HeapShared::finalize_initialization(FileMapInfo* static_mapinfo) { + if (HeapShared::is_loading()) { + if (HeapShared::is_loading_streaming_mode()) { + // Heap initialization can be done only after vtables are initialized by ReadClosure. + AOTStreamedHeapLoader::finish_initialization(static_mapinfo); + } else { + // Finish up archived heap initialization. These must be + // done after ReadClosure. + AOTMappedHeapLoader::finish_initialization(static_mapinfo); + } + } +} + +HeapShared::CachedOopInfo* HeapShared::get_cached_oop_info(oop obj) { + OopHandle oh(Universe::vm_global(), obj); + CachedOopInfo* result = _archived_object_cache->get(oh); + oh.release(Universe::vm_global()); + return result; +} + bool HeapShared::has_been_archived(oop obj) { assert(CDSConfig::is_dumping_heap(), "dump-time only"); - OopHandle oh(&obj); - return archived_object_cache()->get(oh) != nullptr; + return get_cached_oop_info(obj) != nullptr; } int HeapShared::append_root(oop obj) { @@ -256,59 +445,45 @@ int HeapShared::append_root(oop obj) { return _pending_roots->append(obj); } -objArrayOop HeapShared::root_segment(int segment_idx) { - if (CDSConfig::is_dumping_heap()) { - assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread"); - } else { - assert(CDSConfig::is_using_archive(), "must be"); - } - - objArrayOop segment = (objArrayOop)_root_segments->at(segment_idx).resolve(); - assert(segment != nullptr, "should have been initialized"); - return segment; -} - -void HeapShared::get_segment_indexes(int idx, int& seg_idx, int& int_idx) { - assert(_root_segment_max_size_elems > 0, "sanity"); - - // Try to avoid divisions for the common case. - if (idx < _root_segment_max_size_elems) { - seg_idx = 0; - int_idx = idx; - } else { - seg_idx = idx / _root_segment_max_size_elems; - int_idx = idx % _root_segment_max_size_elems; - } - - assert(idx == seg_idx * _root_segment_max_size_elems + int_idx, - "sanity: %d index maps to %d segment and %d internal", idx, seg_idx, int_idx); -} - -// Returns an objArray that contains all the roots of the archived objects oop HeapShared::get_root(int index, bool clear) { assert(index >= 0, "sanity"); assert(!CDSConfig::is_dumping_heap() && CDSConfig::is_using_archive(), "runtime only"); - assert(!_root_segments->is_empty(), "must have loaded shared heap"); - int seg_idx, int_idx; - get_segment_indexes(index, seg_idx, int_idx); - oop result = root_segment(seg_idx)->obj_at(int_idx); + assert(is_archived_heap_in_use(), "getting roots into heap that is not used"); + + oop result; + if (HeapShared::is_loading_streaming_mode()) { + result = AOTStreamedHeapLoader::get_root(index); + } else { + assert(HeapShared::is_loading_mapping_mode(), "must be"); + result = AOTMappedHeapLoader::get_root(index); + } + if (clear) { clear_root(index); } + return result; } +void HeapShared::finish_materialize_objects() { + if (AOTStreamedHeapLoader::is_in_use()) { + AOTStreamedHeapLoader::finish_materialize_objects(); + } +} + void HeapShared::clear_root(int index) { assert(index >= 0, "sanity"); assert(CDSConfig::is_using_archive(), "must be"); - if (ArchiveHeapLoader::is_in_use()) { - int seg_idx, int_idx; - get_segment_indexes(index, seg_idx, int_idx); + if (is_archived_heap_in_use()) { if (log_is_enabled(Debug, aot, heap)) { - oop old = root_segment(seg_idx)->obj_at(int_idx); - log_debug(aot, heap)("Clearing root %d: was " PTR_FORMAT, index, p2i(old)); + log_debug(aot, heap)("Clearing root %d: was %zu", index, p2i(get_root(index, false /* clear */))); + } + if (HeapShared::is_loading_streaming_mode()) { + AOTStreamedHeapLoader::clear_root(index); + } else { + assert(HeapShared::is_loading_mapping_mode(), "must be"); + AOTMappedHeapLoader::clear_root(index); } - root_segment(seg_idx)->obj_at_put(int_idx, nullptr); } } @@ -320,81 +495,84 @@ bool HeapShared::archive_object(oop obj, oop referrer, KlassSubGraphInfo* subgra return true; } - if (ArchiveHeapWriter::is_too_large_to_archive(obj->size())) { + if (is_too_large_to_archive(obj)) { log_debug(aot, heap)("Cannot archive, object (" PTR_FORMAT ") is too large: %zu", p2i(obj), obj->size()); debug_trace(); return false; - } else { - AOTOopChecker::check(obj); // Make sure contents of this oop are safe. - - count_allocation(obj->size()); - ArchiveHeapWriter::add_source_obj(obj); - CachedOopInfo info = make_cached_oop_info(obj, referrer); - - OopHandle oh(Universe::vm_global(), obj); - archived_object_cache()->put_when_absent(oh, info); - archived_object_cache()->maybe_grow(); - mark_native_pointers(obj); - - Klass* k = obj->klass(); - if (k->is_instance_klass()) { - // Whenever we see a non-array Java object of type X, we mark X to be aot-initialized. - // This ensures that during the production run, whenever Java code sees a cached object - // of type X, we know that X is already initialized. (see TODO comment below ...) - - if (InstanceKlass::cast(k)->is_enum_subclass() - // We can't rerun of enum classes (see cdsEnumKlass.cpp) so - // we must store them as AOT-initialized. - || (subgraph_info == _dump_time_special_subgraph)) - // TODO: we do this only for the special subgraph for now. Extending this to - // other subgraphs would require more refactoring of the core library (such as - // move some initialization logic into runtimeSetup()). - // - // For the other subgraphs, we have a weaker mechanism to ensure that - // all classes in a subgraph are initialized before the subgraph is programmatically - // returned from jdk.internal.misc.CDS::initializeFromArchive(). - // See HeapShared::initialize_from_archived_subgraph(). - { - AOTArtifactFinder::add_aot_inited_class(InstanceKlass::cast(k)); - } - - if (java_lang_Class::is_instance(obj)) { - Klass* mirror_k = java_lang_Class::as_Klass(obj); - if (mirror_k != nullptr) { - AOTArtifactFinder::add_cached_class(mirror_k); - } - } else if (java_lang_invoke_ResolvedMethodName::is_instance(obj)) { - Method* m = java_lang_invoke_ResolvedMethodName::vmtarget(obj); - if (m != nullptr) { - if (RegeneratedClasses::has_been_regenerated(m)) { - m = RegeneratedClasses::get_regenerated_object(m); - } - InstanceKlass* method_holder = m->method_holder(); - AOTArtifactFinder::add_cached_class(method_holder); - } - } - } - - if (log_is_enabled(Debug, aot, heap)) { - ResourceMark rm; - LogTarget(Debug, aot, heap) log; - LogStream out(log); - out.print("Archived heap object " PTR_FORMAT " : %s ", - p2i(obj), obj->klass()->external_name()); - if (java_lang_Class::is_instance(obj)) { - Klass* k = java_lang_Class::as_Klass(obj); - if (k != nullptr) { - out.print("%s", k->external_name()); - } else { - out.print("primitive"); - } - } - out.cr(); - } - - return true; } + + AOTOopChecker::check(obj); // Make sure contents of this oop are safe. + count_allocation(obj->size()); + + if (HeapShared::is_writing_streaming_mode()) { + AOTStreamedHeapWriter::add_source_obj(obj); + } else { + AOTMappedHeapWriter::add_source_obj(obj); + } + + OopHandle oh(Universe::vm_global(), obj); + CachedOopInfo info = make_cached_oop_info(obj, referrer); + archived_object_cache()->put_when_absent(oh, info); + archived_object_cache()->maybe_grow(); + + Klass* k = obj->klass(); + if (k->is_instance_klass()) { + // Whenever we see a non-array Java object of type X, we mark X to be aot-initialized. + // This ensures that during the production run, whenever Java code sees a cached object + // of type X, we know that X is already initialized. (see TODO comment below ...) + + if (InstanceKlass::cast(k)->is_enum_subclass() + // We can't rerun of enum classes (see cdsEnumKlass.cpp) so + // we must store them as AOT-initialized. + || (subgraph_info == _dump_time_special_subgraph)) + // TODO: we do this only for the special subgraph for now. Extending this to + // other subgraphs would require more refactoring of the core library (such as + // move some initialization logic into runtimeSetup()). + // + // For the other subgraphs, we have a weaker mechanism to ensure that + // all classes in a subgraph are initialized before the subgraph is programmatically + // returned from jdk.internal.misc.CDS::initializeFromArchive(). + // See HeapShared::initialize_from_archived_subgraph(). + { + AOTArtifactFinder::add_aot_inited_class(InstanceKlass::cast(k)); + } + + if (java_lang_Class::is_instance(obj)) { + Klass* mirror_k = java_lang_Class::as_Klass(obj); + if (mirror_k != nullptr) { + AOTArtifactFinder::add_cached_class(mirror_k); + } + } else if (java_lang_invoke_ResolvedMethodName::is_instance(obj)) { + Method* m = java_lang_invoke_ResolvedMethodName::vmtarget(obj); + if (m != nullptr) { + if (RegeneratedClasses::has_been_regenerated(m)) { + m = RegeneratedClasses::get_regenerated_object(m); + } + InstanceKlass* method_holder = m->method_holder(); + AOTArtifactFinder::add_cached_class(method_holder); + } + } + } + + if (log_is_enabled(Debug, aot, heap)) { + ResourceMark rm; + LogTarget(Debug, aot, heap) log; + LogStream out(log); + out.print("Archived heap object " PTR_FORMAT " : %s ", + p2i(obj), obj->klass()->external_name()); + if (java_lang_Class::is_instance(obj)) { + Klass* k = java_lang_Class::as_Klass(obj); + if (k != nullptr) { + out.print("%s", k->external_name()); + } else { + out.print("primitive"); + } + } + out.cr(); + } + + return true; } class MetaspaceObjToOopHandleTable: public HashTableget_oop(src); } -void HeapShared::init_dumping() { - _scratch_objects_table = new (mtClass)MetaspaceObjToOopHandleTable(); - _pending_roots = new GrowableArrayCHeap(500); + void HeapShared::init_dumping() { + _scratch_objects_table = new (mtClass)MetaspaceObjToOopHandleTable(); + _pending_roots = new GrowableArrayCHeap(500); } void HeapShared::init_scratch_objects_for_basic_type_mirrors(TRAPS) { @@ -641,7 +819,7 @@ void HeapShared::copy_java_mirror(oop orig_mirror, oop scratch_m) { static objArrayOop get_archived_resolved_references(InstanceKlass* src_ik) { if (SystemDictionaryShared::is_builtin_loader(src_ik->class_loader_data())) { objArrayOop rr = src_ik->constants()->resolved_references_or_null(); - if (rr != nullptr && !ArchiveHeapWriter::is_too_large_to_archive(rr)) { + if (rr != nullptr && !HeapShared::is_too_large_to_archive(rr)) { return HeapShared::scratch_resolved_references(src_ik->constants()); } } @@ -649,6 +827,7 @@ static objArrayOop get_archived_resolved_references(InstanceKlass* src_ik) { } void HeapShared::archive_strings() { + assert(HeapShared::is_writing_mapping_mode(), "should not reach here"); oop shared_strings_array = StringTable::init_shared_strings_array(); bool success = archive_reachable_objects_from(1, _dump_time_special_subgraph, shared_strings_array); assert(success, "shared strings array must not point to arrays or strings that are too large to archive"); @@ -661,15 +840,6 @@ int HeapShared::archive_exception_instance(oop exception) { return append_root(exception); } -void HeapShared::mark_native_pointers(oop orig_obj) { - if (java_lang_Class::is_instance(orig_obj)) { - ArchiveHeapWriter::mark_native_pointer(orig_obj, java_lang_Class::klass_offset()); - ArchiveHeapWriter::mark_native_pointer(orig_obj, java_lang_Class::array_klass_offset()); - } else if (java_lang_invoke_ResolvedMethodName::is_instance(orig_obj)) { - ArchiveHeapWriter::mark_native_pointer(orig_obj, java_lang_invoke_ResolvedMethodName::vmtarget_offset()); - } -} - void HeapShared::get_pointer_info(oop src_obj, bool& has_oop_pointers, bool& has_native_pointers) { OopHandle oh(&src_obj); CachedOopInfo* info = archived_object_cache()->get(oh); @@ -698,7 +868,7 @@ void HeapShared::start_scanning_for_oops() { // Cache for recording where the archived objects are copied to create_archived_object_cache(); - if (UseCompressedOops || UseG1GC) { + if (HeapShared::is_writing_mapping_mode() && (UseG1GC || UseCompressedOops)) { aot_log_info(aot)("Heap range = [" PTR_FORMAT " - " PTR_FORMAT "]", UseCompressedOops ? p2i(CompressedOops::begin()) : p2i((address)G1CollectedHeap::heap()->reserved().start()), @@ -714,19 +884,26 @@ void HeapShared::start_scanning_for_oops() { } void HeapShared::end_scanning_for_oops() { - archive_strings(); + if (is_writing_mapping_mode()) { + archive_strings(); + } delete_seen_objects_table(); } -void HeapShared::write_heap(ArchiveHeapInfo *heap_info) { +void HeapShared::write_heap(ArchiveMappedHeapInfo* mapped_heap_info, ArchiveStreamedHeapInfo* streamed_heap_info) { { NoSafepointVerifier nsv; CDSHeapVerifier::verify(); check_special_subgraph_classes(); } - StringTable::write_shared_table(); - ArchiveHeapWriter::write(_pending_roots, heap_info); + if (HeapShared::is_writing_mapping_mode()) { + StringTable::write_shared_table(); + AOTMappedHeapWriter::write(_pending_roots, mapped_heap_info); + } else { + assert(HeapShared::is_writing_streaming_mode(), "are there more modes?"); + AOTStreamedHeapWriter::write(_pending_roots, streamed_heap_info); + } ArchiveBuilder::OtherROAllocMark mark; write_subgraph_info_table(); @@ -1067,19 +1244,6 @@ void HeapShared::write_subgraph_info_table() { } } -void HeapShared::add_root_segment(objArrayOop segment_oop) { - assert(segment_oop != nullptr, "must be"); - assert(ArchiveHeapLoader::is_in_use(), "must be"); - if (_root_segments == nullptr) { - _root_segments = new GrowableArrayCHeap(10); - } - _root_segments->push(OopHandle(Universe::vm_global(), segment_oop)); -} - -void HeapShared::init_root_segment_sizes(int max_size_elems) { - _root_segment_max_size_elems = max_size_elems; -} - void HeapShared::serialize_tables(SerializeClosure* soc) { #ifndef PRODUCT @@ -1100,10 +1264,10 @@ static void verify_the_heap(Klass* k, const char* which) { log_info(aot, heap)("Verify heap %s initializing static field(s) in %s", which, k->external_name()); - VM_Verify verify_op; - VMThread::execute(&verify_op); - - if (VerifyArchivedFields > 1 && is_init_completed()) { + if (VerifyArchivedFields == 1) { + VM_Verify verify_op; + VMThread::execute(&verify_op); + } else if (VerifyArchivedFields == 2 && is_init_completed()) { // At this time, the oop->klass() of some archived objects in the heap may not // have been loaded into the system dictionary yet. Nevertheless, oop->klass() should // have enough information (object size, oop maps, etc) so that a GC can be safely @@ -1129,7 +1293,7 @@ static void verify_the_heap(Klass* k, const char* which) { // this case, we will not load the ArchivedKlassSubGraphInfoRecord and will clear its roots. void HeapShared::resolve_classes(JavaThread* current) { assert(CDSConfig::is_using_archive(), "runtime only!"); - if (!ArchiveHeapLoader::is_in_use()) { + if (!is_archived_heap_in_use()) { return; // nothing to do } resolve_classes_for_subgraphs(current, archive_subgraph_entry_fields); @@ -1188,7 +1352,7 @@ void HeapShared::initialize_java_lang_invoke(TRAPS) { // should be initialized before any Java code can access the Fruit class. Note that // HashSet itself doesn't necessary need to be an aot-initialized class. void HeapShared::init_classes_for_special_subgraph(Handle class_loader, TRAPS) { - if (!ArchiveHeapLoader::is_in_use()) { + if (!is_archived_heap_in_use()) { return; } @@ -1220,7 +1384,7 @@ void HeapShared::init_classes_for_special_subgraph(Handle class_loader, TRAPS) { void HeapShared::initialize_from_archived_subgraph(JavaThread* current, Klass* k) { JavaThread* THREAD = current; - if (!ArchiveHeapLoader::is_in_use()) { + if (!is_archived_heap_in_use()) { return; // nothing to do } @@ -1356,9 +1520,6 @@ void HeapShared::resolve_or_init(Klass* k, bool do_init, TRAPS) { void HeapShared::init_archived_fields_for(Klass* k, const ArchivedKlassSubGraphInfoRecord* record) { verify_the_heap(k, "before"); - // Load the subgraph entry fields from the record and store them back to - // the corresponding fields within the mirror. - oop m = k->java_mirror(); Array* entry_field_records = record->entry_field_records(); if (entry_field_records != nullptr) { int efr_len = entry_field_records->length(); @@ -1366,7 +1527,10 @@ void HeapShared::init_archived_fields_for(Klass* k, const ArchivedKlassSubGraphI for (int i = 0; i < efr_len; i += 2) { int field_offset = entry_field_records->at(i); int root_index = entry_field_records->at(i+1); + // Load the subgraph entry fields from the record and store them back to + // the corresponding fields within the mirror. oop v = get_root(root_index, /*clear=*/true); + oop m = k->java_mirror(); if (k->has_aot_initialized_mirror()) { assert(v == m->obj_field(field_offset), "must be aot-initialized"); } else { @@ -1445,7 +1609,7 @@ class HeapShared::OopFieldPusher: public BasicOopIterateClosure { template void do_oop_work(T *p) { int field_offset = pointer_delta_as_int((char*)p, cast_from_oop(_referencing_obj)); oop obj = HeapAccess::oop_load_at(_referencing_obj, field_offset); - if (!CompressedOops::is_null(obj)) { + if (obj != nullptr) { if (_is_java_lang_ref && AOTReferenceObjSupport::skip_field(field_offset)) { // Do not follow these fields. They will be cleared to null. return; @@ -1494,7 +1658,7 @@ HeapShared::CachedOopInfo HeapShared::make_cached_oop_info(oop obj, oop referrer } void HeapShared::init_box_classes(TRAPS) { - if (ArchiveHeapLoader::is_in_use()) { + if (is_archived_heap_in_use()) { vmClasses::Boolean_klass()->initialize(CHECK); vmClasses::Character_klass()->initialize(CHECK); vmClasses::Float_klass()->initialize(CHECK); @@ -1739,8 +1903,8 @@ class VerifySharedOopClosure: public BasicOopIterateClosure { protected: template void do_oop_work(T *p) { - oop obj = RawAccess<>::oop_load(p); - if (!CompressedOops::is_null(obj)) { + oop obj = HeapAccess<>::oop_load(p); + if (obj != nullptr) { HeapShared::verify_reachable_objects_from(obj); } } @@ -2041,7 +2205,7 @@ bool HeapShared::is_a_test_class_in_unnamed_module(Klass* ik) { void HeapShared::initialize_test_class_from_archive(JavaThread* current) { Klass* k = _test_class; - if (k != nullptr && ArchiveHeapLoader::is_in_use()) { + if (k != nullptr && is_archived_heap_in_use()) { JavaThread* THREAD = current; ExceptionMark em(THREAD); const ArchivedKlassSubGraphInfoRecord* record = @@ -2062,11 +2226,18 @@ void HeapShared::initialize_test_class_from_archive(JavaThread* current) { void HeapShared::init_for_dumping(TRAPS) { if (CDSConfig::is_dumping_heap()) { setup_test_class(ArchiveHeapTestClass); - _dumped_interned_strings = new (mtClass)DumpedInternedStrings(INITIAL_TABLE_SIZE, MAX_TABLE_SIZE); init_subgraph_entry_fields(CHECK); } } +void HeapShared::init_heap_writer() { + if (HeapShared::is_writing_streaming_mode()) { + AOTStreamedHeapWriter::init(); + } else { + AOTMappedHeapWriter::init(); + } +} + void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[], bool is_full_module_graph) { _num_total_subgraph_recordings = 0; @@ -2117,23 +2288,12 @@ void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[], #endif } -// Keep track of the contents of the archived interned string table. This table -// is used only by CDSHeapVerifier. -void HeapShared::add_to_dumped_interned_strings(oop string) { - assert_at_safepoint(); // DumpedInternedStrings uses raw oops - assert(!ArchiveHeapWriter::is_string_too_large_to_archive(string), "must be"); - bool created; - _dumped_interned_strings->put_if_absent(string, true, &created); - if (created) { - // Prevent string deduplication from changing the value field to - // something not in the archive. - java_lang_String::set_deduplication_forbidden(string); - _dumped_interned_strings->maybe_grow(); - } -} - bool HeapShared::is_dumped_interned_string(oop o) { - return _dumped_interned_strings->get(o) != nullptr; + if (is_writing_mapping_mode()) { + return AOTMappedHeapWriter::is_dumped_interned_string(o); + } else { + return AOTStreamedHeapWriter::is_dumped_interned_string(o); + } } // These tables should be used only within the CDS safepoint, so @@ -2142,10 +2302,12 @@ bool HeapShared::is_dumped_interned_string(oop o) { void HeapShared::delete_tables_with_raw_oops() { assert(_seen_objects_table == nullptr, "should have been deleted"); - delete _dumped_interned_strings; - _dumped_interned_strings = nullptr; - - ArchiveHeapWriter::delete_tables_with_raw_oops(); + if (is_writing_mapping_mode()) { + AOTMappedHeapWriter::delete_tables_with_raw_oops(); + } else { + assert(is_writing_streaming_mode(), "what other mode?"); + AOTStreamedHeapWriter::delete_tables_with_raw_oops(); + } } void HeapShared::debug_trace() { @@ -2242,6 +2404,35 @@ void HeapShared::print_stats() { avg_size(_total_obj_size, _total_obj_count)); } +bool HeapShared::is_metadata_field(oop src_obj, int offset) { + bool result = false; + do_metadata_offsets(src_obj, [&](int metadata_offset) { + if (metadata_offset == offset) { + result = true; + } + }); + return result; +} + +void HeapShared::remap_dumped_metadata(oop src_obj, address archived_object) { + do_metadata_offsets(src_obj, [&](int offset) { + Metadata** buffered_field_addr = (Metadata**)(archived_object + offset); + Metadata* native_ptr = *buffered_field_addr; + + if (native_ptr == nullptr) { + return; + } + + if (RegeneratedClasses::has_been_regenerated(native_ptr)) { + native_ptr = RegeneratedClasses::get_regenerated_object(native_ptr); + } + + address buffered_native_ptr = ArchiveBuilder::current()->get_buffered_addr((address)native_ptr); + address requested_native_ptr = ArchiveBuilder::current()->to_requested(buffered_native_ptr); + *buffered_field_addr = (Metadata*)requested_native_ptr; + }); +} + bool HeapShared::is_archived_boot_layer_available(JavaThread* current) { TempNewSymbol klass_name = SymbolTable::new_symbol(ARCHIVED_BOOT_LAYER_CLASS); InstanceKlass* k = SystemDictionary::find_instance_klass(current, klass_name, Handle()); diff --git a/src/hotspot/share/cds/heapShared.hpp b/src/hotspot/share/cds/heapShared.hpp index cc41fb1dec7..2c782f7231b 100644 --- a/src/hotspot/share/cds/heapShared.hpp +++ b/src/hotspot/share/cds/heapShared.hpp @@ -47,7 +47,6 @@ class MetaspaceObjToOopHandleTable; class ResourceBitMap; struct ArchivableStaticFieldInfo; -class ArchiveHeapInfo; #define ARCHIVED_BOOT_LAYER_CLASS "jdk/internal/module/ArchivedBootLayer" #define ARCHIVED_BOOT_LAYER_FIELD "archivedBootLayer" @@ -137,12 +136,152 @@ class ArchivedKlassSubGraphInfoRecord { }; #endif // INCLUDE_CDS_JAVA_HEAP -struct LoadedArchiveHeapRegion; +enum class HeapArchiveMode { + _uninitialized, + _mapping, + _streaming +}; + +class ArchiveMappedHeapHeader { + size_t _ptrmap_start_pos; // The first bit in the ptrmap corresponds to this position in the heap. + size_t _oopmap_start_pos; // The first bit in the oopmap corresponds to this position in the heap. + HeapRootSegments _root_segments; // Heap root segments info + +public: + ArchiveMappedHeapHeader(); + ArchiveMappedHeapHeader(size_t ptrmap_start_pos, + size_t oopmap_start_pos, + HeapRootSegments root_segments); + + size_t ptrmap_start_pos() const { return _ptrmap_start_pos; } + size_t oopmap_start_pos() const { return _oopmap_start_pos; } + HeapRootSegments root_segments() const { return _root_segments; } + + // This class is trivially copyable and assignable. + ArchiveMappedHeapHeader(const ArchiveMappedHeapHeader&) = default; + ArchiveMappedHeapHeader& operator=(const ArchiveMappedHeapHeader&) = default; +}; + + +class ArchiveStreamedHeapHeader { + size_t _forwarding_offset; // Offset of forwarding information in the heap region. + size_t _roots_offset; // Start position for the roots + size_t _root_highest_object_index_table_offset; // Offset of root dfs depth information + size_t _num_roots; // Number of embedded roots + size_t _num_archived_objects; // The number of archived heap objects + +public: + ArchiveStreamedHeapHeader(); + ArchiveStreamedHeapHeader(size_t forwarding_offset, + size_t roots_offset, + size_t num_roots, + size_t root_highest_object_index_table_offset, + size_t num_archived_objects); + + size_t forwarding_offset() const { return _forwarding_offset; } + size_t roots_offset() const { return _roots_offset; } + size_t num_roots() const { return _num_roots; } + size_t root_highest_object_index_table_offset() const { return _root_highest_object_index_table_offset; } + size_t num_archived_objects() const { return _num_archived_objects; } + + // This class is trivially copyable and assignable. + ArchiveStreamedHeapHeader(const ArchiveStreamedHeapHeader&) = default; + ArchiveStreamedHeapHeader& operator=(const ArchiveStreamedHeapHeader&) = default; +}; + +class ArchiveMappedHeapInfo { + MemRegion _buffer_region; // Contains the archived objects to be written into the CDS archive. + CHeapBitMap _oopmap; + CHeapBitMap _ptrmap; + HeapRootSegments _root_segments; + size_t _oopmap_start_pos; // How many zeros were removed from the beginning of the bit map? + size_t _ptrmap_start_pos; // How many zeros were removed from the beginning of the bit map? + +public: + ArchiveMappedHeapInfo() : + _buffer_region(), + _oopmap(128, mtClassShared), + _ptrmap(128, mtClassShared), + _root_segments(), + _oopmap_start_pos(), + _ptrmap_start_pos() {} + bool is_used() { return !_buffer_region.is_empty(); } + + MemRegion buffer_region() { return _buffer_region; } + void set_buffer_region(MemRegion r) { _buffer_region = r; } + + char* buffer_start() { return (char*)_buffer_region.start(); } + size_t buffer_byte_size() { return _buffer_region.byte_size(); } + + CHeapBitMap* oopmap() { return &_oopmap; } + CHeapBitMap* ptrmap() { return &_ptrmap; } + + void set_oopmap_start_pos(size_t start_pos) { _oopmap_start_pos = start_pos; } + void set_ptrmap_start_pos(size_t start_pos) { _ptrmap_start_pos = start_pos; } + + void set_root_segments(HeapRootSegments segments) { _root_segments = segments; }; + HeapRootSegments root_segments() { return _root_segments; } + + ArchiveMappedHeapHeader create_header(); +}; + +class ArchiveStreamedHeapInfo { + MemRegion _buffer_region; // Contains the archived objects to be written into the CDS archive. + CHeapBitMap _oopmap; + size_t _roots_offset; // Offset of the HeapShared::roots() object, from the bottom + // of the archived heap objects, in bytes. + size_t _num_roots; + + size_t _forwarding_offset; // Offset of forwarding information from the bottom + size_t _root_highest_object_index_table_offset; // Offset to root dfs depth information + size_t _num_archived_objects; // The number of archived objects written into the CDS archive. + +public: + ArchiveStreamedHeapInfo() + : _buffer_region(), + _oopmap(128, mtClassShared), + _roots_offset(), + _forwarding_offset(), + _root_highest_object_index_table_offset(), + _num_archived_objects() {} + + bool is_used() { return !_buffer_region.is_empty(); } + + void set_buffer_region(MemRegion r) { _buffer_region = r; } + MemRegion buffer_region() { return _buffer_region; } + char* buffer_start() { return (char*)_buffer_region.start(); } + size_t buffer_byte_size() { return _buffer_region.byte_size(); } + + CHeapBitMap* oopmap() { return &_oopmap; } + void set_roots_offset(size_t n) { _roots_offset = n; } + size_t roots_offset() { return _roots_offset; } + void set_num_roots(size_t n) { _num_roots = n; } + size_t num_roots() { return _num_roots; } + void set_forwarding_offset(size_t n) { _forwarding_offset = n; } + void set_root_highest_object_index_table_offset(size_t n) { _root_highest_object_index_table_offset = n; } + void set_num_archived_objects(size_t n) { _num_archived_objects = n; } + size_t num_archived_objects() { return _num_archived_objects; } + + ArchiveStreamedHeapHeader create_header(); +}; class HeapShared: AllStatic { friend class VerifySharedOopClosure; public: + static void initialize_loading_mode(HeapArchiveMode mode) NOT_CDS_JAVA_HEAP_RETURN; + static void initialize_writing_mode() NOT_CDS_JAVA_HEAP_RETURN; + + inline static bool is_loading() NOT_CDS_JAVA_HEAP_RETURN_(false); + + inline static bool is_loading_streaming_mode() NOT_CDS_JAVA_HEAP_RETURN_(false); + inline static bool is_loading_mapping_mode() NOT_CDS_JAVA_HEAP_RETURN_(false); + + inline static bool is_writing() NOT_CDS_JAVA_HEAP_RETURN_(false); + + inline static bool is_writing_streaming_mode() NOT_CDS_JAVA_HEAP_RETURN_(false); + inline static bool is_writing_mapping_mode() NOT_CDS_JAVA_HEAP_RETURN_(false); + static bool is_subgraph_root_class(InstanceKlass* ik); // Scratch objects for archiving Klass::java_mirror() @@ -151,9 +290,22 @@ public: static oop scratch_java_mirror(oop java_mirror) NOT_CDS_JAVA_HEAP_RETURN_(nullptr); static bool is_archived_boot_layer_available(JavaThread* current) NOT_CDS_JAVA_HEAP_RETURN_(false); + static bool is_archived_heap_in_use() NOT_CDS_JAVA_HEAP_RETURN_(false); + static bool can_use_archived_heap() NOT_CDS_JAVA_HEAP_RETURN_(false); + static bool is_too_large_to_archive(size_t size); + static bool is_string_too_large_to_archive(oop string); + static bool is_too_large_to_archive(oop obj); + + static void initialize_streaming() NOT_CDS_JAVA_HEAP_RETURN; + static void enable_gc() NOT_CDS_JAVA_HEAP_RETURN; + static void materialize_thread_object() NOT_CDS_JAVA_HEAP_RETURN; + static void add_to_dumped_interned_strings(oop string) NOT_CDS_JAVA_HEAP_RETURN; + static void finalize_initialization(FileMapInfo* static_mapinfo) NOT_CDS_JAVA_HEAP_RETURN; + private: #if INCLUDE_CDS_JAVA_HEAP - static DumpedInternedStrings *_dumped_interned_strings; + static HeapArchiveMode _heap_load_mode; + static HeapArchiveMode _heap_write_mode; // statistics constexpr static int ALLOC_STAT_SLOTS = 16; @@ -282,8 +434,6 @@ private: static ArchivedKlassSubGraphInfoRecord* _run_time_special_subgraph; // for initializing classes during run time. static GrowableArrayCHeap* _pending_roots; - static GrowableArrayCHeap* _root_segments; - static int _root_segment_max_size_elems; static OopHandle _scratch_basic_type_mirrors[T_VOID+1]; static MetaspaceObjToOopHandleTable* _scratch_objects_table; @@ -326,16 +476,6 @@ private: static void resolve_or_init(Klass* k, bool do_init, TRAPS); static void init_archived_fields_for(Klass* k, const ArchivedKlassSubGraphInfoRecord* record); - static int init_loaded_regions(FileMapInfo* mapinfo, LoadedArchiveHeapRegion* loaded_regions, - MemRegion& archive_space); - static void sort_loaded_regions(LoadedArchiveHeapRegion* loaded_regions, int num_loaded_regions, - uintptr_t buffer); - static bool load_regions(FileMapInfo* mapinfo, LoadedArchiveHeapRegion* loaded_regions, - int num_loaded_regions, uintptr_t buffer); - static void init_loaded_heap_relocation(LoadedArchiveHeapRegion* reloc_info, - int num_loaded_regions); - static void fill_failed_loaded_region(); - static void mark_native_pointers(oop orig_obj); static bool has_been_archived(oop orig_obj); static void prepare_resolved_references(); static void archive_strings(); @@ -380,10 +520,7 @@ private: return _archived_object_cache; } - static CachedOopInfo* get_cached_oop_info(oop orig_obj) { - OopHandle oh(&orig_obj); - return _archived_object_cache->get(oh); - } + static CachedOopInfo* get_cached_oop_info(oop orig_obj); static int archive_exception_instance(oop exception); @@ -391,14 +528,19 @@ private: KlassSubGraphInfo* subgraph_info, oop orig_obj); - static void add_to_dumped_interned_strings(oop string); static bool is_dumped_interned_string(oop o); // Scratch objects for archiving Klass::java_mirror() static void set_scratch_java_mirror(Klass* k, oop mirror); static void remove_scratch_objects(Klass* k); + static bool is_metadata_field(oop src_obj, int offset); + template static void do_metadata_offsets(oop src_obj, T callback); + static void remap_dumped_metadata(oop src_obj, address archived_object); + inline static void remap_loaded_metadata(oop obj); + inline static oop maybe_remap_referent(bool is_java_lang_ref, size_t field_offset, oop referent); static void get_pointer_info(oop src_obj, bool& has_oop_pointers, bool& has_native_pointers); static void set_has_native_pointers(oop src_obj); + static uintptr_t archive_location(oop src_obj); // We use the HeapShared::roots() array to make sure that objects stored in the // archived heap region are not prematurely collected. These roots include: @@ -432,7 +574,9 @@ private: #endif // INCLUDE_CDS_JAVA_HEAP public: - static void write_heap(ArchiveHeapInfo* heap_info) NOT_CDS_JAVA_HEAP_RETURN; + static void finish_materialize_objects() NOT_CDS_JAVA_HEAP_RETURN; + + static void write_heap(ArchiveMappedHeapInfo* mapped_heap_info, ArchiveStreamedHeapInfo* streamed_heap_info) NOT_CDS_JAVA_HEAP_RETURN; static objArrayOop scratch_resolved_references(ConstantPool* src); static void add_scratch_resolved_references(ConstantPool* src, objArrayOop dest) NOT_CDS_JAVA_HEAP_RETURN; static void init_dumping() NOT_CDS_JAVA_HEAP_RETURN; @@ -448,9 +592,8 @@ private: static void initialize_from_archived_subgraph(JavaThread* current, Klass* k) NOT_CDS_JAVA_HEAP_RETURN; static void init_for_dumping(TRAPS) NOT_CDS_JAVA_HEAP_RETURN; + static void init_heap_writer() NOT_CDS_JAVA_HEAP_RETURN; static void write_subgraph_info_table() NOT_CDS_JAVA_HEAP_RETURN; - static void add_root_segment(objArrayOop segment_oop) NOT_CDS_JAVA_HEAP_RETURN; - static void init_root_segment_sizes(int max_size_elems) NOT_CDS_JAVA_HEAP_RETURN; static void serialize_tables(SerializeClosure* soc) NOT_CDS_JAVA_HEAP_RETURN; #ifndef PRODUCT @@ -472,22 +615,13 @@ private: static void scan_java_class(Klass* k); static void scan_java_mirror(oop orig_mirror); static void copy_and_rescan_aot_inited_mirror(InstanceKlass* ik); -}; -#if INCLUDE_CDS_JAVA_HEAP -class DumpedInternedStrings : - public ResizeableHashTable -{ -public: - DumpedInternedStrings(unsigned size, unsigned max_size) : - ResizeableHashTable(size, max_size) {} + static void log_heap_roots(); + + static intptr_t log_target_location(oop source_oop); + static void log_oop_info(outputStream* st, oop source_oop, address archived_object_start, address archived_object_end); + static void log_oop_info(outputStream* st, oop source_oop); + static void log_oop_details(oop source_oop, address buffered_addr); }; -#endif #endif // SHARE_CDS_HEAPSHARED_HPP diff --git a/src/hotspot/share/cds/heapShared.inline.hpp b/src/hotspot/share/cds/heapShared.inline.hpp new file mode 100644 index 00000000000..8b323b067d7 --- /dev/null +++ b/src/hotspot/share/cds/heapShared.inline.hpp @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_CDS_HEAPSHARED_INLINE_HPP +#define SHARE_CDS_HEAPSHARED_INLINE_HPP + +#include "cds/heapShared.hpp" + +#include "cds/aotReferenceObjSupport.hpp" +#include "cds/regeneratedClasses.hpp" +#include "classfile/javaClasses.hpp" +#include "utilities/macros.hpp" + +#if INCLUDE_CDS_JAVA_HEAP + +inline bool HeapShared::is_loading() { + return _heap_load_mode != HeapArchiveMode::_uninitialized; +} + +inline bool HeapShared::is_loading_streaming_mode() { + assert(_heap_load_mode != HeapArchiveMode::_uninitialized, "not initialized yet"); + return _heap_load_mode == HeapArchiveMode::_streaming; +} + +inline bool HeapShared::is_loading_mapping_mode() { + assert(_heap_load_mode != HeapArchiveMode::_uninitialized, "not initialized yet"); + return _heap_load_mode == HeapArchiveMode::_mapping; +} + +inline bool HeapShared::is_writing() { + return _heap_write_mode != HeapArchiveMode::_uninitialized; +} + +inline bool HeapShared::is_writing_streaming_mode() { + assert(_heap_write_mode != HeapArchiveMode::_uninitialized, "not initialized yet"); + return _heap_write_mode == HeapArchiveMode::_streaming; +} + +inline bool HeapShared::is_writing_mapping_mode() { + assert(_heap_write_mode != HeapArchiveMode::_uninitialized, "not initialized yet"); + return _heap_write_mode == HeapArchiveMode::_mapping; +} + +// Keep the knowledge about which objects have what metadata in one single place +template +void HeapShared::do_metadata_offsets(oop src_obj, T callback) { + if (java_lang_Class::is_instance(src_obj)) { + assert(java_lang_Class::klass_offset() < java_lang_Class::array_klass_offset(), + "metadata offsets must be sorted"); + callback(java_lang_Class::klass_offset()); + callback(java_lang_Class::array_klass_offset()); + } else if (java_lang_invoke_ResolvedMethodName::is_instance(src_obj)) { + callback(java_lang_invoke_ResolvedMethodName::vmtarget_offset()); + } +} + +inline void HeapShared::remap_loaded_metadata(oop src_obj) { + do_metadata_offsets(src_obj, [&](int offset) { + Metadata* metadata = src_obj->metadata_field(offset); + if (metadata != nullptr) { + metadata = (Metadata*)(address(metadata) + AOTMetaspace::relocation_delta()); + src_obj->metadata_field_put(offset, metadata); + } + }); +} + +inline oop HeapShared::maybe_remap_referent(bool is_java_lang_ref, size_t field_offset, oop referent) { + if (referent == nullptr) { + return nullptr; + } + + if (is_java_lang_ref && AOTReferenceObjSupport::skip_field((int)field_offset)) { + return nullptr; + } + + if (java_lang_Class::is_instance(referent)) { + Klass* k = java_lang_Class::as_Klass(referent); + if (RegeneratedClasses::has_been_regenerated(k)) { + referent = RegeneratedClasses::get_regenerated_object(k)->java_mirror(); + } + // When the source object points to a "real" mirror, the buffered object should point + // to the "scratch" mirror, which has all unarchivable fields scrubbed (to be reinstated + // at run time). + referent = HeapShared::scratch_java_mirror(referent); + assert(referent != nullptr, "must be"); + } + + return referent; +} + +#endif // INCLUDE_CDS_JAVA_HEAP + +#endif // SHARE_CDS_HEAPSHARED_INLINE_HPP diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.cpp b/src/hotspot/share/classfile/classLoaderDataGraph.cpp index 61404fdf9db..b6f7915db71 100644 --- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp +++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp @@ -38,6 +38,7 @@ #include "memory/resourceArea.hpp" #include "runtime/atomicAccess.hpp" #include "runtime/handles.inline.hpp" +#include "runtime/init.hpp" #include "runtime/mutex.hpp" #include "runtime/safepoint.hpp" #include "runtime/safepointVerifiers.hpp" @@ -149,7 +150,8 @@ ClassLoaderData* ClassLoaderDataGraph::add_to_graph(Handle loader, bool has_clas // We mustn't GC until we've installed the ClassLoaderData in the Graph since the CLD // contains oops in _handles that must be walked. GC doesn't walk CLD from the // loader oop in all collections, particularly young collections. - NoSafepointVerifier no_safepoints; + // Before is_init_completed(), GC is not allowed to run. + NoSafepointVerifier no_safepoints(is_init_completed()); cld = new ClassLoaderData(loader, has_class_mirror_holder); diff --git a/src/hotspot/share/classfile/classLoaderDataShared.cpp b/src/hotspot/share/classfile/classLoaderDataShared.cpp index 2a59a3339b6..7a7743edd03 100644 --- a/src/hotspot/share/classfile/classLoaderDataShared.cpp +++ b/src/hotspot/share/classfile/classLoaderDataShared.cpp @@ -24,7 +24,7 @@ #include "cds/aotLogging.hpp" #include "cds/cdsConfig.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "cds/serializeClosure.hpp" #include "classfile/classLoaderData.inline.hpp" #include "classfile/classLoaderDataShared.hpp" @@ -152,6 +152,35 @@ void ArchivedClassLoaderData::clear_archived_oops() { // ------------------------------ +void ClassLoaderDataShared::load_archived_platform_and_system_class_loaders() { +#if INCLUDE_CDS_JAVA_HEAP + // The streaming object loader prefers loading the class loader related objects before + // the CLD constructor which has a NoSafepointVerifier. + if (!HeapShared::is_loading_streaming_mode()) { + return; + } + + // Ensure these class loaders are eagerly materialized before their CLDs are created. + HeapShared::get_root(_platform_loader_root_index, false /* clear */); + HeapShared::get_root(_system_loader_root_index, false /* clear */); + + if (Universe::is_module_initialized() || !CDSConfig::is_using_full_module_graph()) { + return; + } + + // When using the full module graph, we need to load unnamed modules too. + ModuleEntry* platform_loader_module_entry = _archived_platform_loader_data.unnamed_module(); + if (platform_loader_module_entry != nullptr) { + platform_loader_module_entry->preload_archived_oops(); + } + + ModuleEntry* system_loader_module_entry = _archived_system_loader_data.unnamed_module(); + if (system_loader_module_entry != nullptr) { + system_loader_module_entry->preload_archived_oops(); + } +#endif +} + static ClassLoaderData* null_class_loader_data() { ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data(); assert(loader_data != nullptr, "must be"); diff --git a/src/hotspot/share/classfile/classLoaderDataShared.hpp b/src/hotspot/share/classfile/classLoaderDataShared.hpp index 944d415af5c..39d0a89418f 100644 --- a/src/hotspot/share/classfile/classLoaderDataShared.hpp +++ b/src/hotspot/share/classfile/classLoaderDataShared.hpp @@ -38,6 +38,7 @@ class ClassLoaderDataShared : AllStatic { static bool _full_module_graph_loaded; CDS_JAVA_HEAP_ONLY(static void ensure_module_entry_table_exists(oop class_loader);) public: + static void load_archived_platform_and_system_class_loaders() NOT_CDS_JAVA_HEAP_RETURN; static void restore_archived_modules_for_preloading_classes(JavaThread* current) NOT_CDS_JAVA_HEAP_RETURN; #if INCLUDE_CDS_JAVA_HEAP static void ensure_module_entry_tables_exist(); diff --git a/src/hotspot/share/classfile/javaClasses.cpp b/src/hotspot/share/classfile/javaClasses.cpp index ac701e8364f..e41af702601 100644 --- a/src/hotspot/share/classfile/javaClasses.cpp +++ b/src/hotspot/share/classfile/javaClasses.cpp @@ -25,9 +25,8 @@ #include "cds/aotMetaspace.hpp" #include "cds/aotReferenceObjSupport.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapLoader.hpp" #include "cds/cdsConfig.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/altHashing.hpp" #include "classfile/classLoaderData.inline.hpp" #include "classfile/javaClasses.inline.hpp" @@ -978,7 +977,7 @@ void java_lang_Class::fixup_mirror(Klass* k, TRAPS) { } if (k->in_aot_cache() && k->has_archived_mirror_index()) { - if (ArchiveHeapLoader::is_in_use()) { + if (HeapShared::is_archived_heap_in_use()) { bool present = restore_archived_mirror(k, Handle(), Handle(), Handle(), CHECK); assert(present, "Missing archived mirror for %s", k->external_name()); return; diff --git a/src/hotspot/share/classfile/moduleEntry.cpp b/src/hotspot/share/classfile/moduleEntry.cpp index 88b59540d04..5fb3d6f2d13 100644 --- a/src/hotspot/share/classfile/moduleEntry.cpp +++ b/src/hotspot/share/classfile/moduleEntry.cpp @@ -546,6 +546,10 @@ void ModuleEntry::load_from_archive(ClassLoaderData* loader_data) { JFR_ONLY(INIT_ID(this);) } +void ModuleEntry::preload_archived_oops() { + (void)HeapShared::get_root(_archived_module_index, false /* clear */); +} + void ModuleEntry::restore_archived_oops(ClassLoaderData* loader_data) { assert(CDSConfig::is_using_archive(), "runtime only"); Handle module_handle(Thread::current(), HeapShared::get_root(_archived_module_index, /*clear=*/true)); diff --git a/src/hotspot/share/classfile/moduleEntry.hpp b/src/hotspot/share/classfile/moduleEntry.hpp index 1074c88f010..2e1852c5369 100644 --- a/src/hotspot/share/classfile/moduleEntry.hpp +++ b/src/hotspot/share/classfile/moduleEntry.hpp @@ -206,6 +206,7 @@ public: static Array* write_growable_array(GrowableArray* array); static GrowableArray* restore_growable_array(Array* archived_array); void load_from_archive(ClassLoaderData* loader_data); + void preload_archived_oops(); void restore_archived_oops(ClassLoaderData* loader_data); void clear_archived_oops(); static void verify_archived_module_entries() PRODUCT_RETURN; diff --git a/src/hotspot/share/classfile/modules.cpp b/src/hotspot/share/classfile/modules.cpp index 522d1d0842d..baf2acfb78c 100644 --- a/src/hotspot/share/classfile/modules.cpp +++ b/src/hotspot/share/classfile/modules.cpp @@ -739,6 +739,8 @@ void Modules::init_archived_modules(JavaThread* current, Handle h_platform_loade ModuleEntryTable::patch_javabase_entries(current, java_base_module); } + ClassLoaderDataShared::load_archived_platform_and_system_class_loaders(); + ClassLoaderData* platform_loader_data = SystemDictionary::register_loader(h_platform_loader); SystemDictionary::set_platform_loader(platform_loader_data); ClassLoaderDataShared::restore_java_platform_loader_from_archive(platform_loader_data); diff --git a/src/hotspot/share/classfile/stringTable.cpp b/src/hotspot/share/classfile/stringTable.cpp index c6c1c7a31bd..6f9d5d11562 100644 --- a/src/hotspot/share/classfile/stringTable.cpp +++ b/src/hotspot/share/classfile/stringTable.cpp @@ -22,11 +22,10 @@ * */ +#include "cds/aotMappedHeapLoader.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapLoader.inline.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/cdsConfig.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/altHashing.hpp" #include "classfile/compactHashtable.hpp" #include "classfile/javaClasses.inline.hpp" @@ -80,7 +79,7 @@ OopHandle StringTable::_shared_strings_array; int StringTable::_shared_strings_array_root_index; inline oop StringTable::read_string_from_compact_hashtable(address base_address, u4 index) { - assert(ArchiveHeapLoader::is_in_use(), "sanity"); + assert(AOTMappedHeapLoader::is_in_use(), "sanity"); objArrayOop array = (objArrayOop)(_shared_strings_array.resolve()); oop s; @@ -316,13 +315,13 @@ void StringTable::create_table() { _local_table = new StringTableHash(start_size_log_2, END_SIZE, REHASH_LEN, true); _oop_storage = OopStorageSet::create_weak("StringTable Weak", mtSymbol); _oop_storage->register_num_dead_callback(&gc_notification); +} #if INCLUDE_CDS_JAVA_HEAP - if (ArchiveHeapLoader::is_in_use()) { - _shared_strings_array = OopHandle(Universe::vm_global(), HeapShared::get_root(_shared_strings_array_root_index)); - } -#endif +void StringTable::load_shared_strings_array() { + _shared_strings_array = OopHandle(Universe::vm_global(), HeapShared::get_root(_shared_strings_array_root_index)); } +#endif void StringTable::item_added() { AtomicAccess::inc(&_items_count); @@ -932,10 +931,14 @@ void StringtableDCmd::execute(DCmdSource source, TRAPS) { // Sharing #if INCLUDE_CDS_JAVA_HEAP size_t StringTable::shared_entry_count() { + assert(HeapShared::is_loading_mapping_mode(), "should not reach here"); return _shared_table.entry_count(); } oop StringTable::lookup_shared(const StringWrapper& name, unsigned int hash) { + if (!AOTMappedHeapLoader::is_in_use()) { + return nullptr; + } assert(hash == hash_wrapped_string(name), "hash must be computed using java_lang_String::hash_code"); // len is required but is already part of StringWrapper, so 0 is used @@ -943,6 +946,9 @@ oop StringTable::lookup_shared(const StringWrapper& name, unsigned int hash) { } oop StringTable::lookup_shared(const jchar* name, int len) { + if (!AOTMappedHeapLoader::is_in_use()) { + return nullptr; + } StringWrapper wrapped_name(name, len); // len is required but is already part of StringWrapper, so 0 is used return _shared_table.lookup(wrapped_name, java_lang_String::hash_code(name, len), 0); @@ -955,6 +961,8 @@ void StringTable::allocate_shared_strings_array(TRAPS) { return; } + assert(HeapShared::is_writing_mapping_mode(), "should not reach here"); + CompileBroker::wait_for_no_active_tasks(); precond(CDSConfig::allow_only_single_java_thread()); @@ -977,7 +985,7 @@ void StringTable::allocate_shared_strings_array(TRAPS) { log_info(aot)("allocated string table for %d strings", total); - if (!ArchiveHeapWriter::is_too_large_to_archive(single_array_size)) { + if (!HeapShared::is_too_large_to_archive(single_array_size)) { // The entire table can fit in a single array objArrayOop array = oopFactory::new_objArray(vmClasses::Object_klass(), total, CHECK); _shared_strings_array = OopHandle(Universe::vm_global(), array); @@ -988,7 +996,7 @@ void StringTable::allocate_shared_strings_array(TRAPS) { size_t primary_array_size = objArrayOopDesc::object_size(primary_array_length); size_t secondary_array_size = objArrayOopDesc::object_size(_secondary_array_max_length); - if (ArchiveHeapWriter::is_too_large_to_archive(secondary_array_size)) { + if (HeapShared::is_too_large_to_archive(secondary_array_size)) { // This can only happen if you have an extremely large number of classes that // refer to more than 16384 * 16384 = 26M interned strings! Not a practical concern // but bail out for safety. @@ -1014,7 +1022,7 @@ void StringTable::allocate_shared_strings_array(TRAPS) { primaryHandle()->obj_at_put(i, secondary); log_info(aot)("string table array (secondary)[%d] length = %d", i, len); - assert(!ArchiveHeapWriter::is_too_large_to_archive(secondary), "sanity"); + assert(!HeapShared::is_too_large_to_archive(secondary), "sanity"); } assert(total == 0, "must be"); @@ -1024,10 +1032,11 @@ void StringTable::allocate_shared_strings_array(TRAPS) { #ifndef PRODUCT void StringTable::verify_secondary_array_index_bits() { + assert(HeapShared::is_writing_mapping_mode(), "should not reach here"); int max; for (max = 1; ; max++) { size_t next_size = objArrayOopDesc::object_size(1 << (max + 1)); - if (ArchiveHeapWriter::is_too_large_to_archive(next_size)) { + if (HeapShared::is_too_large_to_archive(next_size)) { break; } } @@ -1050,6 +1059,7 @@ void StringTable::verify_secondary_array_index_bits() { // [2] Store the index and hashcode into _shared_table. oop StringTable::init_shared_strings_array() { assert(CDSConfig::is_dumping_heap(), "must be"); + assert(HeapShared::is_writing_mapping_mode(), "should not reach here"); objArrayOop array = (objArrayOop)(_shared_strings_array.resolve()); verify_secondary_array_index_bits(); @@ -1057,11 +1067,11 @@ oop StringTable::init_shared_strings_array() { int index = 0; auto copy_into_array = [&] (WeakHandle* val) { oop string = val->peek(); - if (string != nullptr && !ArchiveHeapWriter::is_string_too_large_to_archive(string)) { + if (string != nullptr && !HeapShared::is_string_too_large_to_archive(string)) { // If string is too large, don't put it into the string table. - // - If there are no other refernences to it, it won't be stored into the archive, + // - If there are no other references to it, it won't be stored into the archive, // so we are all good. - // - If there's a referece to it, we will report an error inside HeapShared.cpp and + // - If there's a reference to it, we will report an error inside HeapShared.cpp and // dumping will fail. HeapShared::add_to_dumped_interned_strings(string); if (!_is_two_dimensional_shared_strings_array) { @@ -1095,7 +1105,7 @@ void StringTable::write_shared_table() { int index = 0; auto copy_into_shared_table = [&] (WeakHandle* val) { oop string = val->peek(); - if (string != nullptr && !ArchiveHeapWriter::is_string_too_large_to_archive(string)) { + if (string != nullptr && !HeapShared::is_string_too_large_to_archive(string)) { unsigned int hash = java_lang_String::hash_code(string); writer.add(hash, index); index ++; @@ -1109,6 +1119,7 @@ void StringTable::write_shared_table() { } void StringTable::set_shared_strings_array_index(int root_index) { + assert(HeapShared::is_writing_mapping_mode(), "should not reach here"); _shared_strings_array_root_index = root_index; } @@ -1118,7 +1129,7 @@ void StringTable::serialize_shared_table_header(SerializeClosure* soc) { if (soc->writing()) { // Sanity. Make sure we don't use the shared table at dump time _shared_table.reset(); - } else if (!ArchiveHeapLoader::is_in_use()) { + } else if (!AOTMappedHeapLoader::is_in_use()) { _shared_table.reset(); } diff --git a/src/hotspot/share/classfile/stringTable.hpp b/src/hotspot/share/classfile/stringTable.hpp index 9194d0b8002..839e9d9053d 100644 --- a/src/hotspot/share/classfile/stringTable.hpp +++ b/src/hotspot/share/classfile/stringTable.hpp @@ -128,7 +128,7 @@ private: // [2] _is_two_dimensional_shared_strings_array = true: _shared_strings_array is an Object[][] // This happens when there are too many elements in the shared table. We store them // using two levels of objArrays, such that none of the arrays are too big for - // ArchiveHeapWriter::is_too_large_to_archive(). In this case, the index is splited into two + // AOTMappedHeapWriter::is_too_large_to_archive(). In this case, the index is splited into two // parts. Each shared string is stored as _shared_strings_array[primary_index][secondary_index]: // // [bits 31 .. 14][ bits 13 .. 0 ] @@ -147,6 +147,7 @@ private: static oop lookup_shared(const jchar* name, int len) NOT_CDS_JAVA_HEAP_RETURN_(nullptr); static size_t shared_entry_count() NOT_CDS_JAVA_HEAP_RETURN_(0); static void allocate_shared_strings_array(TRAPS) NOT_CDS_JAVA_HEAP_RETURN; + static void load_shared_strings_array() NOT_CDS_JAVA_HEAP_RETURN; static oop init_shared_strings_array() NOT_CDS_JAVA_HEAP_RETURN_(nullptr); static void write_shared_table() NOT_CDS_JAVA_HEAP_RETURN; static void set_shared_strings_array_index(int root_index) NOT_CDS_JAVA_HEAP_RETURN; diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp index 2f7001c86b3..5c49a32b8d0 100644 --- a/src/hotspot/share/classfile/systemDictionary.cpp +++ b/src/hotspot/share/classfile/systemDictionary.cpp @@ -1185,6 +1185,7 @@ void SystemDictionary::preload_class(Handle class_loader, InstanceKlass* ik, TRA ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader()); oop java_mirror = ik->archived_java_mirror(); precond(java_mirror != nullptr); + assert(java_lang_Class::module(java_mirror) != nullptr, "must have been archived"); Handle pd(THREAD, java_lang_Class::protection_domain(java_mirror)); PackageEntry* pkg_entry = ik->package(); @@ -1202,7 +1203,6 @@ void SystemDictionary::preload_class(Handle class_loader, InstanceKlass* ik, TRA update_dictionary(THREAD, ik, loader_data); } - assert(java_lang_Class::module(java_mirror) != nullptr, "must have been archived"); assert(ik->is_loaded(), "Must be in at least loaded state"); } diff --git a/src/hotspot/share/classfile/vmClasses.cpp b/src/hotspot/share/classfile/vmClasses.cpp index fbb234d95c0..0a3d33f4c5b 100644 --- a/src/hotspot/share/classfile/vmClasses.cpp +++ b/src/hotspot/share/classfile/vmClasses.cpp @@ -23,10 +23,12 @@ */ #include "cds/aotLinkedClassBulkLoader.hpp" -#include "cds/archiveHeapLoader.hpp" +#include "cds/aotMappedHeapLoader.hpp" #include "cds/cdsConfig.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/classLoader.hpp" #include "classfile/classLoaderData.hpp" +#include "classfile/classLoaderDataShared.hpp" #include "classfile/dictionary.hpp" #include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" @@ -132,21 +134,28 @@ void vmClasses::resolve_all(TRAPS) { CollectedHeap::set_filler_object_klass(vmClasses::Object_klass()); #if INCLUDE_CDS if (CDSConfig::is_using_archive()) { - // It's unsafe to access the archived heap regions before they - // are fixed up, so we must do the fixup as early as possible - // before the archived java objects are accessed by functions - // such as java_lang_Class::restore_archived_mirror and - // ConstantPool::restore_unshareable_info (restores the archived - // resolved_references array object). - // - // ArchiveHeapLoader::fixup_regions fills the empty - // spaces in the archived heap regions and may use - // vmClasses::Object_klass(), so we can do this only after - // Object_klass is resolved. See the above resolve_through() - // call. No mirror objects are accessed/restored in the above call. - // Mirrors are restored after java.lang.Class is loaded. - ArchiveHeapLoader::fixup_region(); - +#if INCLUDE_CDS_JAVA_HEAP + if (HeapShared::is_loading() && HeapShared::is_loading_mapping_mode()) { + // It's unsafe to access the archived heap regions before they + // are fixed up, so we must do the fixup as early as possible + // before the archived java objects are accessed by functions + // such as java_lang_Class::restore_archived_mirror and + // ConstantPool::restore_unshareable_info (restores the archived + // resolved_references array object). + // + // AOTMappedHeapLoader::fixup_regions fills the empty + // spaces in the archived heap regions and may use + // vmClasses::Object_klass(), so we can do this only after + // Object_klass is resolved. See the above resolve_through() + // call. No mirror objects are accessed/restored in the above call. + // Mirrors are restored after java.lang.Class is loaded. + AOTMappedHeapLoader::fixup_region(); + } + if (HeapShared::is_archived_heap_in_use() && !CDSConfig::is_using_full_module_graph()) { + // Need to remove all the archived java.lang.Module objects from HeapShared::roots(). + ClassLoaderDataShared::clear_archived_oops(); + } +#endif // INCLUDE_CDS_JAVA_HEAP // Initialize the constant pool for the Object_class assert(Object_klass()->in_aot_cache(), "must be"); Object_klass()->constants()->restore_unshareable_info(CHECK); diff --git a/src/hotspot/share/gc/shared/collectedHeap.cpp b/src/hotspot/share/gc/shared/collectedHeap.cpp index bed6a2f22e6..c8dd39e72be 100644 --- a/src/hotspot/share/gc/shared/collectedHeap.cpp +++ b/src/hotspot/share/gc/shared/collectedHeap.cpp @@ -631,6 +631,10 @@ void CollectedHeap::before_exit() { stop(); } +size_t CollectedHeap::bootstrap_max_memory() const { + return MaxNewSize; +} + #ifndef PRODUCT bool CollectedHeap::promotion_should_fail(volatile size_t* count) { diff --git a/src/hotspot/share/gc/shared/collectedHeap.hpp b/src/hotspot/share/gc/shared/collectedHeap.hpp index 3b5865e0001..659106f9c19 100644 --- a/src/hotspot/share/gc/shared/collectedHeap.hpp +++ b/src/hotspot/share/gc/shared/collectedHeap.hpp @@ -500,6 +500,7 @@ protected: virtual bool can_load_archived_objects() const { return false; } virtual HeapWord* allocate_loaded_archive_space(size_t size) { return nullptr; } virtual void complete_loaded_archive_space(MemRegion archive_space) { } + virtual size_t bootstrap_max_memory() const; virtual bool is_oop(oop object) const; // Non product verification and debugging. diff --git a/src/hotspot/share/gc/shared/stringdedup/stringDedupConfig.cpp b/src/hotspot/share/gc/shared/stringdedup/stringDedupConfig.cpp index 50155a66951..128ba4152dc 100644 --- a/src/hotspot/share/gc/shared/stringdedup/stringDedupConfig.cpp +++ b/src/hotspot/share/gc/shared/stringdedup/stringDedupConfig.cpp @@ -22,6 +22,7 @@ * */ +#include "cds/cdsConfig.hpp" #include "classfile/altHashing.hpp" #include "gc/shared/stringdedup/stringDedupConfig.hpp" #include "logging/log.hpp" diff --git a/src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp b/src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp index 5f04be97b74..cfa276c0de0 100644 --- a/src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp +++ b/src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp @@ -22,6 +22,8 @@ * */ +#include "cds/aotMappedHeapLoader.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/altHashing.hpp" #include "classfile/javaClasses.inline.hpp" #include "classfile/stringTable.hpp" @@ -514,6 +516,7 @@ void StringDedup::Table::install(typeArrayOop obj, uint hash_code) { // access to a String that is incompletely constructed; the value could be // set before the coder. bool StringDedup::Table::try_deduplicate_shared(oop java_string) { + assert(!HeapShared::is_loading_streaming_mode(), "should not reach here"); typeArrayOop value = java_lang_String::value(java_string); assert(value != nullptr, "precondition"); assert(TypeArrayKlass::cast(value->klass())->element_type() == T_BYTE, "precondition"); @@ -559,6 +562,7 @@ bool StringDedup::Table::try_deduplicate_shared(oop java_string) { } bool StringDedup::Table::try_deduplicate_found_shared(oop java_string, oop found) { + assert(!HeapShared::is_loading_streaming_mode(), "should not reach here"); _cur_stat.inc_known_shared(); typeArrayOop found_value = java_lang_String::value(found); if (found_value == java_lang_String::value(java_string)) { @@ -609,7 +613,8 @@ bool StringDedup::Table::deduplicate_if_permitted(oop java_string, void StringDedup::Table::deduplicate(oop java_string) { assert(java_lang_String::is_instance(java_string), "precondition"); _cur_stat.inc_inspected(); - if ((StringTable::shared_entry_count() > 0) && + if (AOTMappedHeapLoader::is_in_use() && + (StringTable::shared_entry_count() > 0) && try_deduplicate_shared(java_string)) { return; // Done if deduplicated against shared StringTable. } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index 38f055c34b6..22a59b5ac18 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -25,7 +25,7 @@ */ -#include "cds/archiveHeapWriter.hpp" +#include "cds/aotMappedHeapWriter.hpp" #include "classfile/systemDictionary.hpp" #include "gc/shared/classUnloadingContext.hpp" #include "gc/shared/fullGCForwarding.hpp" @@ -2770,7 +2770,7 @@ HeapWord* ShenandoahHeap::allocate_loaded_archive_space(size_t size) { // // CDS would guarantee no objects straddle multiple regions, as long as regions are as large // as MIN_GC_REGION_ALIGNMENT. - guarantee(ShenandoahHeapRegion::region_size_bytes() >= ArchiveHeapWriter::MIN_GC_REGION_ALIGNMENT, "Must be"); + guarantee(ShenandoahHeapRegion::region_size_bytes() >= AOTMappedHeapWriter::MIN_GC_REGION_ALIGNMENT, "Must be"); ShenandoahAllocRequest req = ShenandoahAllocRequest::for_cds(size); return allocate_memory(req); diff --git a/src/hotspot/share/gc/z/zArguments.cpp b/src/hotspot/share/gc/z/zArguments.cpp index 2435c6fb31f..f2ff35a6a43 100644 --- a/src/hotspot/share/gc/z/zArguments.cpp +++ b/src/hotspot/share/gc/z/zArguments.cpp @@ -208,6 +208,13 @@ void ZArguments::initialize() { FLAG_SET_DEFAULT(LogEventsBufferEntries, 250); } + if (VerifyArchivedFields > 0) { + // ZGC doesn't support verifying at arbitrary points as our normal state is that everything in the + // heap looks completely insane. Only at some particular points does the heap look sort of sane. + // So instead of verifying we trigger a GC that does its own verification when it's suitable. + FLAG_SET_DEFAULT(VerifyArchivedFields, 2); + } + // Verification before startup and after exit not (yet) supported FLAG_SET_DEFAULT(VerifyDuringStartup, false); FLAG_SET_DEFAULT(VerifyBeforeExit, false); diff --git a/src/hotspot/share/gc/z/zCollectedHeap.cpp b/src/hotspot/share/gc/z/zCollectedHeap.cpp index 1fbb4b25e2d..db55fff673a 100644 --- a/src/hotspot/share/gc/z/zCollectedHeap.cpp +++ b/src/hotspot/share/gc/z/zCollectedHeap.cpp @@ -34,6 +34,7 @@ #include "gc/z/zGeneration.inline.hpp" #include "gc/z/zGlobals.hpp" #include "gc/z/zHeap.inline.hpp" +#include "gc/z/zHeuristics.hpp" #include "gc/z/zJNICritical.hpp" #include "gc/z/zNMethod.hpp" #include "gc/z/zObjArrayAllocator.hpp" @@ -298,6 +299,10 @@ void ZCollectedHeap::unregister_nmethod(nmethod* nm) { ZNMethod::purge_nmethod(nm); } +size_t ZCollectedHeap::bootstrap_max_memory() const { + return MaxHeapSize - ZHeuristics::significant_young_overhead(); +} + void ZCollectedHeap::verify_nmethod(nmethod* nm) { // Does nothing } diff --git a/src/hotspot/share/gc/z/zCollectedHeap.hpp b/src/hotspot/share/gc/z/zCollectedHeap.hpp index 07366b35d30..19c9ab1bbdf 100644 --- a/src/hotspot/share/gc/z/zCollectedHeap.hpp +++ b/src/hotspot/share/gc/z/zCollectedHeap.hpp @@ -115,6 +115,8 @@ public: void pin_object(JavaThread* thread, oop obj) override; void unpin_object(JavaThread* thread, oop obj) override; + size_t bootstrap_max_memory() const override; + void print_heap_on(outputStream* st) const override; void print_gc_on(outputStream* st) const override; bool print_location(outputStream* st, void* addr) const override; diff --git a/src/hotspot/share/gc/z/zDirector.cpp b/src/hotspot/share/gc/z/zDirector.cpp index a85d3df6a81..9ff56ce74bb 100644 --- a/src/hotspot/share/gc/z/zDirector.cpp +++ b/src/hotspot/share/gc/z/zDirector.cpp @@ -32,6 +32,7 @@ #include "gc/z/zLock.inline.hpp" #include "gc/z/zStat.hpp" #include "logging/log.hpp" +#include "runtime/init.hpp" ZDirector* ZDirector::_director; @@ -916,6 +917,12 @@ void ZDirector::run_thread() { // Main loop while (wait_for_tick()) { ZDirectorStats stats = sample_stats(); + + if (!is_init_completed()) { + // Not allowed to start GCs yet + continue; + } + if (!start_gc(stats)) { adjust_gc(stats); } diff --git a/src/hotspot/share/jfr/support/jfrThreadLocal.cpp b/src/hotspot/share/jfr/support/jfrThreadLocal.cpp index 480d28f8c55..5fe5546e0a9 100644 --- a/src/hotspot/share/jfr/support/jfrThreadLocal.cpp +++ b/src/hotspot/share/jfr/support/jfrThreadLocal.cpp @@ -477,11 +477,10 @@ traceid JfrThreadLocal::external_thread_id(const Thread* t) { return JfrRecorder::is_recording() ? thread_id(t) : jvm_thread_id(t); } -static inline traceid load_java_thread_id(const Thread* t) { +static inline traceid load_java_thread_id(const JavaThread* t) { assert(t != nullptr, "invariant"); - assert(t->is_Java_thread(), "invariant"); - oop threadObj = JavaThread::cast(t)->threadObj(); - return threadObj != nullptr ? AccessThreadTraceId::id(threadObj) : 0; + oop threadObj = t->threadObj(); + return threadObj != nullptr ? AccessThreadTraceId::id(threadObj) : static_cast(t->monitor_owner_id()); } #ifdef ASSERT @@ -502,7 +501,7 @@ traceid JfrThreadLocal::assign_thread_id(const Thread* t, JfrThreadLocal* tl) { if (tid == 0) { assert(can_assign(t), "invariant"); if (t->is_Java_thread()) { - tid = load_java_thread_id(t); + tid = load_java_thread_id(JavaThread::cast(t)); tl->_jvm_thread_id = tid; AtomicAccess::store(&tl->_vthread_id, tid); return tid; diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp index 69afe5c6450..db0435044ca 100644 --- a/src/hotspot/share/memory/universe.cpp +++ b/src/hotspot/share/memory/universe.cpp @@ -23,10 +23,9 @@ */ #include "cds/aotMetaspace.hpp" -#include "cds/archiveHeapLoader.hpp" #include "cds/cdsConfig.hpp" #include "cds/dynamicArchive.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/classLoader.hpp" #include "classfile/classLoaderDataGraph.hpp" #include "classfile/classLoaderDataShared.hpp" @@ -323,7 +322,7 @@ void Universe::archive_exception_instances() { } void Universe::load_archived_object_instances() { - if (ArchiveHeapLoader::is_in_use()) { + if (HeapShared::is_archived_heap_in_use()) { for (int i = T_BOOLEAN; i < T_VOID+1; i++) { int index = _archived_basic_type_mirror_indices[i]; if (!is_reference_type((BasicType)i) && index >= 0) { @@ -559,10 +558,8 @@ void Universe::genesis(TRAPS) { void Universe::initialize_basic_type_mirrors(TRAPS) { #if INCLUDE_CDS_JAVA_HEAP if (CDSConfig::is_using_archive() && - ArchiveHeapLoader::is_in_use() && + HeapShared::is_archived_heap_in_use() && _basic_type_mirrors[T_INT].resolve() != nullptr) { - assert(ArchiveHeapLoader::can_use(), "Sanity"); - // check that all basic type mirrors are mapped also for (int i = T_BOOLEAN; i < T_VOID+1; i++) { if (!is_reference_type((BasicType)i)) { @@ -571,7 +568,7 @@ void Universe::initialize_basic_type_mirrors(TRAPS) { } } } else - // _basic_type_mirrors[T_INT], etc, are null if archived heap is not mapped. + // _basic_type_mirrors[T_INT], etc, are null if not using an archived heap #endif { for (int i = T_BOOLEAN; i < T_VOID+1; i++) { @@ -911,6 +908,21 @@ jint universe_init() { return JNI_EINVAL; } + // Add main_thread to threads list to finish barrier setup with + // on_thread_attach. Should be before starting to build Java objects in + // the AOT heap loader, which invokes barriers. + { + JavaThread* main_thread = JavaThread::current(); + MutexLocker mu(Threads_lock); + Threads::add(main_thread); + } + + HeapShared::initialize_writing_mode(); + + // Create the string table before the AOT object archive is loaded, + // as it might need to access the string table. + StringTable::create_table(); + #if INCLUDE_CDS if (CDSConfig::is_using_archive()) { // Read the data structures supporting the shared spaces (shared @@ -933,7 +945,6 @@ jint universe_init() { #endif SymbolTable::create_table(); - StringTable::create_table(); if (strlen(VerifySubSet) > 0) { Universe::initialize_verify_flags(); @@ -1178,6 +1189,7 @@ bool universe_post_init() { MemoryService::add_metaspace_memory_pools(); MemoryService::set_universe_heap(Universe::heap()); + #if INCLUDE_CDS AOTMetaspace::post_initialize(CHECK_false); #endif diff --git a/src/hotspot/share/oops/constantPool.cpp b/src/hotspot/share/oops/constantPool.cpp index b072c7f26ec..95a43b07bd7 100644 --- a/src/hotspot/share/oops/constantPool.cpp +++ b/src/hotspot/share/oops/constantPool.cpp @@ -24,10 +24,8 @@ #include "cds/aotConstantPoolResolver.hpp" #include "cds/archiveBuilder.hpp" -#include "cds/archiveHeapLoader.hpp" -#include "cds/archiveHeapWriter.hpp" #include "cds/cdsConfig.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/classLoader.hpp" #include "classfile/classLoaderData.hpp" #include "classfile/javaClasses.inline.hpp" @@ -358,7 +356,7 @@ objArrayOop ConstantPool::prepare_resolved_references_for_archiving() { int index = object_to_cp_index(i); if (tag_at(index).is_string()) { assert(java_lang_String::is_instance(obj), "must be"); - if (!ArchiveHeapWriter::is_string_too_large_to_archive(obj)) { + if (!HeapShared::is_string_too_large_to_archive(obj)) { scratch_rr->obj_at_put(i, obj); } continue; @@ -398,7 +396,7 @@ void ConstantPool::restore_unshareable_info(TRAPS) { if (vmClasses::Object_klass_is_loaded()) { ClassLoaderData* loader_data = pool_holder()->class_loader_data(); #if INCLUDE_CDS_JAVA_HEAP - if (ArchiveHeapLoader::is_in_use() && + if (HeapShared::is_archived_heap_in_use() && _cache->archived_references() != nullptr) { oop archived = _cache->archived_references(); // Create handle for the archived resolved reference array object diff --git a/src/hotspot/share/oops/klass.cpp b/src/hotspot/share/oops/klass.cpp index d9041cc54f4..b30ec2f4887 100644 --- a/src/hotspot/share/oops/klass.cpp +++ b/src/hotspot/share/oops/klass.cpp @@ -22,9 +22,8 @@ * */ -#include "cds/archiveHeapLoader.hpp" #include "cds/cdsConfig.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/classLoader.hpp" #include "classfile/classLoaderData.inline.hpp" #include "classfile/classLoaderDataGraph.inline.hpp" @@ -900,7 +899,7 @@ void Klass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protec if (this->has_archived_mirror_index()) { ResourceMark rm(THREAD); log_debug(aot, mirror)("%s has raw archived mirror", external_name()); - if (ArchiveHeapLoader::is_in_use()) { + if (HeapShared::is_archived_heap_in_use()) { bool present = java_lang_Class::restore_archived_mirror(this, loader, module_handle, protection_domain, CHECK); diff --git a/src/hotspot/share/oops/objArrayOop.hpp b/src/hotspot/share/oops/objArrayOop.hpp index 27042b22e7e..82bb41b5fd1 100644 --- a/src/hotspot/share/oops/objArrayOop.hpp +++ b/src/hotspot/share/oops/objArrayOop.hpp @@ -35,7 +35,7 @@ class Klass; // Evaluating "String arg[10]" will create an objArrayOop. class objArrayOopDesc : public arrayOopDesc { - friend class ArchiveHeapWriter; + friend class AOTMappedHeapWriter; friend class ObjArrayKlass; friend class Runtime1; friend class psPromotionManager; diff --git a/src/hotspot/share/oops/oopsHierarchy.cpp b/src/hotspot/share/oops/oopsHierarchy.cpp index a62d37ce2ba..21b8a57795d 100644 --- a/src/hotspot/share/oops/oopsHierarchy.cpp +++ b/src/hotspot/share/oops/oopsHierarchy.cpp @@ -33,7 +33,6 @@ CheckOopFunctionPointer check_oop_function = nullptr; void oop::register_oop() { assert (CheckUnhandledOops, "should only call when CheckUnhandledOops"); - if (!Universe::is_fully_initialized()) return; // This gets expensive, which is why checking unhandled oops is on a switch. Thread* t = Thread::current_or_null(); if (t != nullptr && t->is_Java_thread()) { @@ -43,7 +42,6 @@ void oop::register_oop() { void oop::unregister_oop() { assert (CheckUnhandledOops, "should only call when CheckUnhandledOops"); - if (!Universe::is_fully_initialized()) return; // This gets expensive, which is why checking unhandled oops is on a switch. Thread* t = Thread::current_or_null(); if (t != nullptr && t->is_Java_thread()) { diff --git a/src/hotspot/share/prims/jni.cpp b/src/hotspot/share/prims/jni.cpp index 34d2d614d22..5af8edbb758 100644 --- a/src/hotspot/share/prims/jni.cpp +++ b/src/hotspot/share/prims/jni.cpp @@ -3491,6 +3491,10 @@ enum VM_Creation_State { volatile VM_Creation_State vm_created = NOT_CREATED; +bool is_vm_created() { + return AtomicAccess::load(&vm_created) == COMPLETE; +} + // Indicate whether it is safe to recreate VM. Recreation is only // possible after a failed initial creation attempt in some cases. volatile int safe_to_recreate_vm = 1; diff --git a/src/hotspot/share/prims/jvmtiExport.cpp b/src/hotspot/share/prims/jvmtiExport.cpp index 96437882584..69d1fa2c974 100644 --- a/src/hotspot/share/prims/jvmtiExport.cpp +++ b/src/hotspot/share/prims/jvmtiExport.cpp @@ -22,6 +22,7 @@ * */ +#include "cds/aotThread.hpp" #include "classfile/javaClasses.inline.hpp" #include "classfile/moduleEntry.hpp" #include "classfile/vmClasses.hpp" @@ -1485,6 +1486,13 @@ void JvmtiExport::post_thread_start(JavaThread *thread) { } assert(thread->thread_state() == _thread_in_vm, "must be in vm state"); + if (thread->is_aot_thread()) { + // The AOT thread is hidden from view but has no thread oop when it starts due + // to bootstrapping complexity, so we check for it before checking for bound + // virtual threads. When exiting it is filtered out due to being hidden. + return; + } + EVT_TRIG_TRACE(JVMTI_EVENT_THREAD_START, ("[%s] Trg Thread Start event triggered", JvmtiTrace::safe_get_thread_name(thread))); diff --git a/src/hotspot/share/prims/jvmtiRawMonitor.cpp b/src/hotspot/share/prims/jvmtiRawMonitor.cpp index 85a7714fb29..df8a0fb0275 100644 --- a/src/hotspot/share/prims/jvmtiRawMonitor.cpp +++ b/src/hotspot/share/prims/jvmtiRawMonitor.cpp @@ -22,6 +22,7 @@ * */ +#include "cds/aotThread.hpp" #include "memory/allocation.inline.hpp" #include "prims/jvmtiRawMonitor.hpp" #include "runtime/atomicAccess.hpp" @@ -29,6 +30,7 @@ #include "runtime/javaThread.hpp" #include "runtime/orderAccess.hpp" #include "runtime/threads.hpp" +#include "runtime/threadSMR.hpp" JvmtiRawMonitor::QNode::QNode(Thread* thread) : _next(nullptr), _prev(nullptr), _event(thread->_ParkEvent), @@ -39,10 +41,15 @@ GrowableArray* JvmtiPendingMonitors::_monitors = new (mtServiceability) GrowableArray(1, mtServiceability); void JvmtiPendingMonitors::transition_raw_monitors() { - assert((Threads::number_of_threads()==1), - "Java thread has not been created yet or more than one java thread " - "is running. Raw monitor transition will not work"); JavaThread* current_java_thread = JavaThread::current(); + +#ifdef ASSERT + for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) { + assert(thread == current_java_thread || thread->is_aot_thread(), + "Didn't expect concurrent application threads at this point"); + } +#endif + { ThreadToNativeFromVM ttnfvm(current_java_thread); for (int i = 0; i < count(); i++) { diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index f5d1edd28f4..8f0a2320288 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -23,11 +23,11 @@ */ #include "cds.h" +#include "cds/aotMappedHeapLoader.hpp" #include "cds/aotMetaspace.hpp" -#include "cds/archiveHeapLoader.hpp" #include "cds/cdsConstants.hpp" #include "cds/filemap.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/classLoader.hpp" #include "classfile/classLoaderDataGraph.hpp" #include "classfile/classLoaderStats.hpp" @@ -2205,6 +2205,9 @@ WB_ENTRY(jboolean, WB_CDSMemoryMappingFailed(JNIEnv* env, jobject wb)) WB_END WB_ENTRY(jboolean, WB_IsSharedInternedString(JNIEnv* env, jobject wb, jobject str)) + if (!HeapShared::is_loading_mapping_mode()) { + return false; + } ResourceMark rm(THREAD); oop str_oop = JNIHandles::resolve(str); int length; @@ -2217,7 +2220,7 @@ WB_ENTRY(jboolean, WB_IsSharedClass(JNIEnv* env, jobject wb, jclass clazz)) WB_END WB_ENTRY(jboolean, WB_AreSharedStringsMapped(JNIEnv* env)) - return ArchiveHeapLoader::is_mapped(); + return AOTMappedHeapLoader::is_mapped(); WB_END WB_ENTRY(void, WB_LinkClass(JNIEnv* env, jobject wb, jclass clazz)) @@ -2230,7 +2233,7 @@ WB_ENTRY(void, WB_LinkClass(JNIEnv* env, jobject wb, jclass clazz)) WB_END WB_ENTRY(jboolean, WB_AreOpenArchiveHeapObjectsMapped(JNIEnv* env)) - return ArchiveHeapLoader::is_mapped(); + return AOTMappedHeapLoader::is_mapped(); WB_END WB_ENTRY(jboolean, WB_IsCDSIncluded(JNIEnv* env)) @@ -2260,10 +2263,21 @@ WB_ENTRY(jboolean, WB_IsJVMCISupportedByGC(JNIEnv* env)) #endif WB_END -WB_ENTRY(jboolean, WB_CanWriteJavaHeapArchive(JNIEnv* env)) +static bool canWriteJavaHeapArchive() { return !CDSConfig::are_vm_options_incompatible_with_dumping_heap(); +} + +WB_ENTRY(jboolean, WB_CanWriteJavaHeapArchive(JNIEnv* env)) + return canWriteJavaHeapArchive(); WB_END +WB_ENTRY(jboolean, WB_CanWriteMappedJavaHeapArchive(JNIEnv* env)) + return canWriteJavaHeapArchive() && !AOTStreamableObjects; +WB_END + +WB_ENTRY(jboolean, WB_CanWriteStreamedJavaHeapArchive(JNIEnv* env)) + return canWriteJavaHeapArchive() && AOTStreamableObjects; +WB_END WB_ENTRY(jboolean, WB_IsJFRIncluded(JNIEnv* env)) #if INCLUDE_JFR @@ -3040,6 +3054,8 @@ static JNINativeMethod methods[] = { {CC"isC2OrJVMCIIncluded", CC"()Z", (void*)&WB_isC2OrJVMCIIncluded }, {CC"isJVMCISupportedByGC", CC"()Z", (void*)&WB_IsJVMCISupportedByGC}, {CC"canWriteJavaHeapArchive", CC"()Z", (void*)&WB_CanWriteJavaHeapArchive }, + {CC"canWriteMappedJavaHeapArchive", CC"()Z", (void*)&WB_CanWriteMappedJavaHeapArchive }, + {CC"canWriteStreamedJavaHeapArchive", CC"()Z", (void*)&WB_CanWriteStreamedJavaHeapArchive }, {CC"cdsMemoryMappingFailed", CC"()Z", (void*)&WB_CDSMemoryMappingFailed }, {CC"clearInlineCaches0", CC"(Z)V", (void*)&WB_ClearInlineCaches }, diff --git a/src/hotspot/share/runtime/javaThread.cpp b/src/hotspot/share/runtime/javaThread.cpp index f52be5d740e..28bc47c4c74 100644 --- a/src/hotspot/share/runtime/javaThread.cpp +++ b/src/hotspot/share/runtime/javaThread.cpp @@ -121,7 +121,7 @@ size_t JavaThread::_stack_size_at_create = 0; #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_STOP #define DTRACE_THREAD_PROBE(probe, javathread) \ - { \ + if (!javathread->is_aot_thread()) { \ ResourceMark rm(this); \ int len = 0; \ const char* name = (javathread)->name(); \ @@ -763,7 +763,7 @@ void JavaThread::run() { void JavaThread::thread_main_inner() { assert(JavaThread::current() == this, "sanity check"); - assert(_threadObj.peek() != nullptr, "just checking"); + assert(_threadObj.peek() != nullptr || is_aot_thread(), "just checking"); // Execute thread entry point unless this thread has a pending exception. // Note: Due to JVMTI StopThread we can have pending exceptions already! diff --git a/src/hotspot/share/runtime/mutexLocker.cpp b/src/hotspot/share/runtime/mutexLocker.cpp index 8274d767e4e..e4707a342a7 100644 --- a/src/hotspot/share/runtime/mutexLocker.cpp +++ b/src/hotspot/share/runtime/mutexLocker.cpp @@ -79,6 +79,7 @@ Monitor* CompileThread_lock = nullptr; Monitor* Compilation_lock = nullptr; Mutex* CompileStatistics_lock = nullptr; Mutex* DirectivesStack_lock = nullptr; +Monitor* AOTHeapLoading_lock = nullptr; Monitor* Terminator_lock = nullptr; Monitor* InitCompleted_lock = nullptr; Monitor* BeforeExit_lock = nullptr; @@ -330,7 +331,9 @@ void mutex_init() { MUTEX_DEFL(Threads_lock , PaddedMonitor, CompileThread_lock, true); MUTEX_DEFL(Compile_lock , PaddedMutex , MethodCompileQueue_lock); - MUTEX_DEFL(JNICritical_lock , PaddedMonitor, AdapterHandlerLibrary_lock); // used for JNI critical regions + MUTEX_DEFL(Module_lock , PaddedMutex , AdapterHandlerLibrary_lock); + MUTEX_DEFL(AOTHeapLoading_lock , PaddedMonitor, Module_lock); + MUTEX_DEFL(JNICritical_lock , PaddedMonitor, AOTHeapLoading_lock); // used for JNI critical regions MUTEX_DEFL(Heap_lock , PaddedMonitor, JNICritical_lock); MUTEX_DEFL(PerfDataMemAlloc_lock , PaddedMutex , Heap_lock); @@ -353,7 +356,6 @@ void mutex_init() { MUTEX_DEFL(PSOldGenExpand_lock , PaddedMutex , Heap_lock, true); } #endif - MUTEX_DEFL(Module_lock , PaddedMutex , ClassLoaderDataGraph_lock); MUTEX_DEFL(SystemDictionary_lock , PaddedMonitor, Module_lock); #if INCLUDE_JVMCI // JVMCIRuntime_lock must be acquired before JVMCI_lock to avoid deadlock diff --git a/src/hotspot/share/runtime/mutexLocker.hpp b/src/hotspot/share/runtime/mutexLocker.hpp index 8cd408c99c9..74fe4650b7c 100644 --- a/src/hotspot/share/runtime/mutexLocker.hpp +++ b/src/hotspot/share/runtime/mutexLocker.hpp @@ -81,6 +81,7 @@ extern Monitor* TrainingReplayQueue_lock; // a lock held when class are a extern Monitor* CompileTaskWait_lock; // a lock held when CompileTasks are waited/notified extern Mutex* CompileStatistics_lock; // a lock held when updating compilation statistics extern Mutex* DirectivesStack_lock; // a lock held when mutating the dirstack and ref counting directives +extern Monitor* AOTHeapLoading_lock; // a lock used to guard materialization of AOT heap objects extern Monitor* Terminator_lock; // a lock used to guard termination of the vm extern Monitor* InitCompleted_lock; // a lock used to signal threads waiting on init completed extern Monitor* BeforeExit_lock; // a lock used to guard cleanups and shutdown hooks diff --git a/src/hotspot/share/runtime/safepointVerifiers.cpp b/src/hotspot/share/runtime/safepointVerifiers.cpp index 00b55e7d25f..6eb61efe0ca 100644 --- a/src/hotspot/share/runtime/safepointVerifiers.cpp +++ b/src/hotspot/share/runtime/safepointVerifiers.cpp @@ -30,13 +30,19 @@ #ifdef ASSERT -NoSafepointVerifier::NoSafepointVerifier() : _thread(Thread::current()) { +NoSafepointVerifier::NoSafepointVerifier(bool active) : _thread(Thread::current()), _active(active) { + if (!_active) { + return; + } if (_thread->is_Java_thread()) { JavaThread::cast(_thread)->inc_no_safepoint_count(); } } NoSafepointVerifier::~NoSafepointVerifier() { + if (!_active) { + return; + } if (_thread->is_Java_thread()) { JavaThread::cast(_thread)->dec_no_safepoint_count(); } diff --git a/src/hotspot/share/runtime/safepointVerifiers.hpp b/src/hotspot/share/runtime/safepointVerifiers.hpp index 62a1732803f..8d309a973d8 100644 --- a/src/hotspot/share/runtime/safepointVerifiers.hpp +++ b/src/hotspot/share/runtime/safepointVerifiers.hpp @@ -38,8 +38,9 @@ class NoSafepointVerifier : public StackObj { private: Thread *_thread; + bool _active; public: - NoSafepointVerifier() NOT_DEBUG_RETURN; + explicit NoSafepointVerifier(bool active = true) NOT_DEBUG_RETURN; ~NoSafepointVerifier() NOT_DEBUG_RETURN; }; diff --git a/src/hotspot/share/runtime/thread.hpp b/src/hotspot/share/runtime/thread.hpp index 4aa8c14056a..240821e90bd 100644 --- a/src/hotspot/share/runtime/thread.hpp +++ b/src/hotspot/share/runtime/thread.hpp @@ -313,6 +313,7 @@ class Thread: public ThreadShadow { virtual bool is_JfrRecorder_thread() const { return false; } virtual bool is_AttachListener_thread() const { return false; } virtual bool is_monitor_deflation_thread() const { return false; } + virtual bool is_aot_thread() const { return false; } // Convenience cast functions CompilerThread* as_Compiler_thread() const { diff --git a/src/hotspot/share/runtime/threads.cpp b/src/hotspot/share/runtime/threads.cpp index 10c3636273d..f7f755a37b3 100644 --- a/src/hotspot/share/runtime/threads.cpp +++ b/src/hotspot/share/runtime/threads.cpp @@ -27,7 +27,7 @@ #include "cds/aotMetaspace.hpp" #include "cds/cds_globals.hpp" #include "cds/cdsConfig.hpp" -#include "cds/heapShared.hpp" +#include "cds/heapShared.inline.hpp" #include "classfile/classLoader.hpp" #include "classfile/javaClasses.hpp" #include "classfile/javaThreadStatus.hpp" @@ -102,6 +102,7 @@ #include "services/management.hpp" #include "services/threadIdTable.hpp" #include "services/threadService.hpp" +#include "utilities/debug.hpp" #include "utilities/dtrace.hpp" #include "utilities/events.hpp" #include "utilities/macros.hpp" @@ -383,6 +384,8 @@ void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) { initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK); initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK); + HeapShared::materialize_thread_object(); + // Phase 1 of the system initialization in the library, java.lang.System class initialization call_initPhase1(CHECK); @@ -563,7 +566,8 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Initialize OopStorage for threadObj JavaThread::_thread_oop_storage = OopStorageSet::create_strong("Thread OopStorage", mtThread); - // Attach the main thread to this os thread + // Attach the main thread to this os thread. It is added to the threads list inside + // universe_init(), within init_globals(). JavaThread* main_thread = new JavaThread(); main_thread->set_thread_state(_thread_in_vm); main_thread->initialize_thread_current(); @@ -577,7 +581,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Set the _monitor_owner_id now since we will run Java code before the Thread instance // is even created. The same value will be assigned to the Thread instance on init. - main_thread->set_monitor_owner_id(ThreadIdentifier::next()); + const int64_t main_thread_tid = ThreadIdentifier::next(); + guarantee(main_thread_tid == 3, "Must equal the PRIMORDIAL_TID used in Threads.java"); + main_thread->set_monitor_owner_id(main_thread_tid); if (!Thread::set_as_starting_thread(main_thread)) { vm_shutdown_during_initialization( @@ -613,14 +619,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // of hangs during error reporting. WatcherThread::start(); - // Add main_thread to threads list to finish barrier setup with - // on_thread_attach. Should be before starting to build Java objects in - // init_globals2, which invokes barriers. - { - MutexLocker mu(Threads_lock); - Threads::add(main_thread); - } - status = init_globals2(); if (status != JNI_OK) { Threads::remove(main_thread, false); @@ -704,6 +702,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // No more stub generation allowed after that point. StubCodeDesc::freeze(); + // Prepare AOT heap loader for GC. + HeapShared::enable_gc(); + #ifdef ADDRESS_SANITIZER Asan::initialize(); #endif @@ -899,6 +900,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // take a while to process their first tick). WatcherThread::run_all_tasks(); + // Finish materializing AOT objects + HeapShared::finish_materialize_objects(); + create_vm_timer.end(); #ifdef ASSERT _vm_complete = true; diff --git a/src/hotspot/share/utilities/exceptions.cpp b/src/hotspot/share/utilities/exceptions.cpp index 22a8cd6e0ef..b54474ea6d6 100644 --- a/src/hotspot/share/utilities/exceptions.cpp +++ b/src/hotspot/share/utilities/exceptions.cpp @@ -581,12 +581,13 @@ inline void ExceptionMark::check_no_pending_exception() { } } +extern bool is_vm_created(); ExceptionMark::~ExceptionMark() { if (_thread->has_pending_exception()) { Handle exception(_thread, _thread->pending_exception()); _thread->clear_pending_exception(); // Needed to avoid infinite recursion - if (is_init_completed()) { + if (is_vm_created()) { ResourceMark rm; exception->print(); fatal("ExceptionMark destructor expects no pending exceptions"); diff --git a/src/hotspot/share/utilities/macros.hpp b/src/hotspot/share/utilities/macros.hpp index 1d2e651d674..9bdf4c2dd1f 100644 --- a/src/hotspot/share/utilities/macros.hpp +++ b/src/hotspot/share/utilities/macros.hpp @@ -615,7 +615,7 @@ #define COMPILER_HEADER(basename) XSTR(COMPILER_HEADER_STEM(basename).hpp) #define COMPILER_HEADER_INLINE(basename) XSTR(COMPILER_HEADER_STEM(basename).inline.hpp) -#if INCLUDE_CDS && INCLUDE_G1GC && defined(_LP64) +#if INCLUDE_CDS && defined(_LP64) #define INCLUDE_CDS_JAVA_HEAP 1 #define CDS_JAVA_HEAP_ONLY(x) x #define NOT_CDS_JAVA_HEAP(x) diff --git a/test/hotspot/jtreg/ProblemList-AotJdk.txt b/test/hotspot/jtreg/ProblemList-AotJdk.txt index 8be9a73359d..af3994289df 100644 --- a/test/hotspot/jtreg/ProblemList-AotJdk.txt +++ b/test/hotspot/jtreg/ProblemList-AotJdk.txt @@ -7,6 +7,7 @@ runtime/symbols/TestSharedArchiveConfigFile.java 0000000 generic-all gc/arguments/TestG1HeapSizeFlags.java 0000000 generic-all gc/arguments/TestParallelHeapSizeFlags.java 0000000 generic-all gc/arguments/TestSerialHeapSizeFlags.java 0000000 generic-all +gc/arguments/TestVerifyBeforeAndAfterGCFlags.java 0000000 generic-all gc/arguments/TestCompressedClassFlags.java 0000000 generic-all gc/TestAllocateHeapAtMultiple.java 0000000 generic-all diff --git a/test/hotspot/jtreg/TEST.ROOT b/test/hotspot/jtreg/TEST.ROOT index df8c0183b33..c298a74dc25 100644 --- a/test/hotspot/jtreg/TEST.ROOT +++ b/test/hotspot/jtreg/TEST.ROOT @@ -85,6 +85,8 @@ requires.properties= \ vm.cds.supports.aot.class.linking \ vm.cds.supports.aot.code.caching \ vm.cds.write.archived.java.heap \ + vm.cds.write.mapped.java.heap \ + vm.cds.write.streamed.java.heap \ vm.continuations \ vm.jvmti \ vm.graal.enabled \ diff --git a/test/hotspot/jtreg/TEST.groups b/test/hotspot/jtreg/TEST.groups index 2f58670b90e..d4f1470aea5 100644 --- a/test/hotspot/jtreg/TEST.groups +++ b/test/hotspot/jtreg/TEST.groups @@ -313,7 +313,8 @@ tier3_gc_gcold = \ tier1_gc_gcbasher = \ gc/stress/gcbasher/TestGCBasherWithG1.java \ gc/stress/gcbasher/TestGCBasherWithSerial.java \ - gc/stress/gcbasher/TestGCBasherWithParallel.java + gc/stress/gcbasher/TestGCBasherWithParallel.java \ + gc/stress/gcbasher/TestGCBasherWithZ.java tier1_gc_shenandoah = \ gc/shenandoah/options/ \ diff --git a/test/hotspot/jtreg/gc/TestPLABAdaptToMinTLABSize.java b/test/hotspot/jtreg/gc/TestPLABAdaptToMinTLABSize.java index e1e29432f53..8e201fb6e8a 100644 --- a/test/hotspot/jtreg/gc/TestPLABAdaptToMinTLABSize.java +++ b/test/hotspot/jtreg/gc/TestPLABAdaptToMinTLABSize.java @@ -24,7 +24,7 @@ package gc; /* - * @test TestPLABAdaptToMinTLABSizeG1 + * @test id=G1 * @bug 8289137 * @summary Make sure that Young/OldPLABSize adapt to MinTLABSize setting. * @requires vm.gc.G1 @@ -35,7 +35,7 @@ package gc; */ /* - * @test TestPLABAdaptToMinTLABSizeParallel + * @test id=Parallel * @bug 8289137 * @summary Make sure that Young/OldPLABSize adapt to MinTLABSize setting. * @requires vm.gc.Parallel diff --git a/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasherWithZ.java b/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasherWithZ.java index 4057dc0b9e8..310c090d017 100644 --- a/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasherWithZ.java +++ b/test/hotspot/jtreg/gc/stress/gcbasher/TestGCBasherWithZ.java @@ -33,7 +33,7 @@ import java.io.IOException; * @requires vm.gc.Z * @requires vm.flavor == "server" & !vm.emulatedClient * @summary Stress ZGC - * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx384m -server -XX:+UseZGC gc.stress.gcbasher.TestGCBasherWithZ 120000 + * @run main/othervm/timeout=200 -Xlog:gc*=info -Xmx384m -XX:+UseZGC gc.stress.gcbasher.TestGCBasherWithZ 120000 */ /* @@ -43,7 +43,7 @@ import java.io.IOException; * @requires vm.gc.Z * @requires vm.flavor == "server" & !vm.emulatedClient & vm.opt.ClassUnloading != false * @summary Stress ZGC with nmethod barrier forced deoptimization enabled. - * @run main/othervm/timeout=200 -Xlog:gc*=info,nmethod+barrier=trace -Xmx384m -server -XX:+UseZGC + * @run main/othervm/timeout=200 -Xlog:gc*=info,nmethod+barrier=trace -Xmx384m -XX:+UseZGC * -XX:+UnlockDiagnosticVMOptions -XX:+DeoptimizeNMethodBarriersALot -XX:-Inline * gc.stress.gcbasher.TestGCBasherWithZ 120000 */ diff --git a/test/hotspot/jtreg/runtime/cds/AOTMapTest.java b/test/hotspot/jtreg/runtime/cds/AOTMapTest.java index dff98090859..101e2ccc5d1 100644 --- a/test/hotspot/jtreg/runtime/cds/AOTMapTest.java +++ b/test/hotspot/jtreg/runtime/cds/AOTMapTest.java @@ -39,19 +39,27 @@ import java.util.ArrayList; public class AOTMapTest { public static void main(String[] args) throws Exception { - doTest(false); + doTest(false, false); + doTest(false, true); if (Platform.is64bit()) { // There's no oop/klass compression on 32-bit. - doTest(true); + doTest(true, false); + doTest(true, true); } } - public static void doTest(boolean compressed) throws Exception { + public static void doTest(boolean compressed, boolean streamHeap) throws Exception { ArrayList vmArgs = new ArrayList<>(); // Use the same heap size as make/Images.gmk vmArgs.add("-Xmx128M"); + vmArgs.add("-XX:+UnlockDiagnosticVMOptions"); + if (streamHeap) { + vmArgs.add("-XX:+AOTStreamableObjects"); + } else { + vmArgs.add("-XX:-AOTStreamableObjects"); + } if (Platform.is64bit()) { // These options are available only on 64-bit. diff --git a/test/hotspot/jtreg/runtime/cds/SharedStrings.java b/test/hotspot/jtreg/runtime/cds/SharedStrings.java index d6741790ff3..db0bc3264b2 100644 --- a/test/hotspot/jtreg/runtime/cds/SharedStrings.java +++ b/test/hotspot/jtreg/runtime/cds/SharedStrings.java @@ -25,7 +25,7 @@ * @test * @summary Check to make sure that shared strings in the bootstrap CDS archive * are actually shared - * @requires vm.cds.write.archived.java.heap + * @requires vm.cds.write.mapped.java.heap * @requires vm.flagless * @library /test/lib * @build SharedStringsWb jdk.test.whitebox.WhiteBox diff --git a/test/hotspot/jtreg/runtime/cds/SharedStringsDedup.java b/test/hotspot/jtreg/runtime/cds/SharedStringsDedup.java index c555268026d..da5025b07b5 100644 --- a/test/hotspot/jtreg/runtime/cds/SharedStringsDedup.java +++ b/test/hotspot/jtreg/runtime/cds/SharedStringsDedup.java @@ -24,7 +24,7 @@ /** * @test SharedStringsDedup * @summary Test -Xshare:auto with shared strings and -XX:+UseStringDeduplication - * @requires vm.cds.write.archived.java.heap + * @requires vm.cds.write.mapped.java.heap * @library /test/lib * @run driver SharedStringsDedup */ diff --git a/test/hotspot/jtreg/runtime/cds/SharedStringsRunAuto.java b/test/hotspot/jtreg/runtime/cds/SharedStringsRunAuto.java index 271fb2ec255..5774d71d089 100644 --- a/test/hotspot/jtreg/runtime/cds/SharedStringsRunAuto.java +++ b/test/hotspot/jtreg/runtime/cds/SharedStringsRunAuto.java @@ -24,7 +24,7 @@ /** * @test SharedStringsAuto * @summary Test -Xshare:auto with shared strings. - * @requires vm.cds.write.archived.java.heap + * @requires vm.cds.write.mapped.java.heap * @library /test/lib * @run driver SharedStringsRunAuto */ diff --git a/test/hotspot/jtreg/runtime/cds/SharedSymbolTableBucketSize.java b/test/hotspot/jtreg/runtime/cds/SharedSymbolTableBucketSize.java index e29bf18eb96..2db4ab2df23 100644 --- a/test/hotspot/jtreg/runtime/cds/SharedSymbolTableBucketSize.java +++ b/test/hotspot/jtreg/runtime/cds/SharedSymbolTableBucketSize.java @@ -43,8 +43,9 @@ public class SharedSymbolTableBucketSize { + Integer.valueOf(bucket_size)); CDSTestUtils.checkMappingFailure(output); - String s = output.firstMatch("Average bucket size : .*"); - Float f = Float.parseFloat(s.substring(25)); + String regex = "Average bucket size : ([0-9]+\\.[0-9]+).*"; + String s = output.firstMatch(regex, 1); + Float f = Float.parseFloat(s); int size = Math.round(f); if (size != bucket_size) { throw new Exception("FAILED: incorrect bucket size " + size + diff --git a/test/hotspot/jtreg/runtime/cds/TestDefaultArchiveLoading.java b/test/hotspot/jtreg/runtime/cds/TestDefaultArchiveLoading.java index 4bca1ed4581..acff3191300 100644 --- a/test/hotspot/jtreg/runtime/cds/TestDefaultArchiveLoading.java +++ b/test/hotspot/jtreg/runtime/cds/TestDefaultArchiveLoading.java @@ -55,6 +55,7 @@ * @requires vm.cds.default.archive.available * @requires vm.cds.write.archived.java.heap * @requires vm.bits == 64 + * @requires !vm.gc.Z * @library /test/lib * @modules java.base/jdk.internal.misc * java.management @@ -68,6 +69,7 @@ * @requires vm.cds.default.archive.available * @requires vm.cds.write.archived.java.heap * @requires vm.bits == 64 + * @requires !vm.gc.Z * @library /test/lib * @modules java.base/jdk.internal.misc * java.management diff --git a/test/hotspot/jtreg/runtime/cds/appcds/TestParallelGCWithCDS.java b/test/hotspot/jtreg/runtime/cds/appcds/TestParallelGCWithCDS.java index be7e69b076c..1730b569548 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/TestParallelGCWithCDS.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/TestParallelGCWithCDS.java @@ -121,24 +121,23 @@ public class TestParallelGCWithCDS { out.shouldNotContain(errMsg); out.shouldHaveExitValue(0); - if (!dumpWithParallel && execWithParallel) { - // We dumped with G1, so we have an archived heap. At exec time, try to load them into - // a small ParallelGC heap that may be too small. - System.out.println("2. Exec with " + execGC); - out = TestCommon.exec(helloJar, - execGC, - small1, - small2, - "-Xmx4m", - coops, - "-Xlog:cds", - "Hello"); - if (out.getExitValue() == 0) { - out.shouldContain(HELLO); - out.shouldNotContain(errMsg); - } else { - out.shouldNotHaveFatalError(); - } + // Regardless of which GC dumped the heap, there will be an object archive, either + // created with mapping if dumped with G1, or streaming if dumped with parallel GC. + // At exec time, try to load them into a small ParallelGC heap that may be too small. + System.out.println("2. Exec with " + execGC); + out = TestCommon.exec(helloJar, + execGC, + small1, + small2, + "-Xmx4m", + coops, + "-Xlog:cds", + "Hello"); + if (out.getExitValue() == 0) { + out.shouldContain(HELLO); + out.shouldNotContain(errMsg); + } else { + out.shouldNotHaveFatalError(); } } } diff --git a/test/hotspot/jtreg/runtime/cds/appcds/TestSerialGCWithCDS.java b/test/hotspot/jtreg/runtime/cds/appcds/TestSerialGCWithCDS.java index 402ad0b8744..87fa01956c8 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/TestSerialGCWithCDS.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/TestSerialGCWithCDS.java @@ -140,9 +140,8 @@ public class TestSerialGCWithCDS { out.shouldNotContain(errMsg); int n = 2; - if (dumpWithSerial == false && execWithSerial == true) { - // We dumped with G1, so we have an archived heap. At exec time, try to load them into - // a small SerialGC heap that may be too small. + if (execWithSerial == true) { + // At exec time, try to load archived objects into a small SerialGC heap that may be too small. String[] sizes = { "4m", // usually this will success load the archived heap "2m", // usually this will fail to load the archived heap, but app can launch diff --git a/test/hotspot/jtreg/runtime/cds/appcds/TestZGCWithAOTHeap.java b/test/hotspot/jtreg/runtime/cds/appcds/TestZGCWithAOTHeap.java new file mode 100644 index 00000000000..567c8da73cb --- /dev/null +++ b/test/hotspot/jtreg/runtime/cds/appcds/TestZGCWithAOTHeap.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test Loading and writing AOT archived heap objects with ZGC + * @requires vm.cds + * @requires vm.gc.Z + * @requires vm.gc.G1 + * + * @comment don't run this test if any -XX::+Use???GC options are specified, since they will + * interfere with the test. + * @requires vm.gc == null + * + * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds + * @compile test-classes/Hello.java + * @run driver TestZGCWithAOTHeap + */ + +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; + +public class TestZGCWithAOTHeap { + public final static String HELLO = "Hello World"; + static String helloJar; + + public static void main(String... args) throws Exception { + helloJar = JarBuilder.build("hello", "Hello"); + + // Check if we can use ZGC during dump time, or run time, or both. + test(false, true, true, true); + test(true, false, true, true); + test(true, true, true, true); + test(false, true, false, true); + test(false, true, true, false); + test(true, false, true, false); + test(true, true, true, false); + test(false, true, false, false); + } + + final static String G1 = "-XX:+UseG1GC"; + final static String Z = "-XX:+UseZGC"; + + static void test(boolean dumpWithZ, boolean execWithZ, boolean shouldStream, boolean shouldUseCOH) throws Exception { + String unlockDiagnostic = "-XX:+UnlockDiagnosticVMOptions"; + String dumpGC = dumpWithZ ? Z : G1; + String execGC = execWithZ ? Z : G1; + String generalErrMsg = "Cannot use CDS heap data."; + String coopsErrMsg = generalErrMsg + " Selected GC not compatible -XX:-UseCompressedOops"; + String coops = "-XX:-UseCompressedOops"; + String coh = shouldUseCOH ? "-XX:+UseCompactObjectHeaders" : "-XX:-UseCompactObjectHeaders"; + String stream = shouldStream ? "-XX:+AOTStreamableObjects" : "-XX:-AOTStreamableObjects"; + String eagerLoading = "-XX:+AOTEagerlyLoadObjects"; + OutputAnalyzer out; + + System.out.println("0. Dump with " + dumpGC + ", " + coops + ", " + coh + ", " + stream); + out = TestCommon.dump(helloJar, + new String[] {"Hello"}, + dumpGC, + coops, + coh, + "-XX:+UnlockDiagnosticVMOptions", + stream, + "-Xlog:cds,aot,aot+heap"); + out.shouldContain("Dumping shared data to file:"); + out.shouldHaveExitValue(0); + + System.out.println("1. Exec with " + execGC + ", " + coops + ", " + coh); + out = TestCommon.exec(helloJar, + unlockDiagnostic, + execGC, + coops, + coh, + "-Xlog:cds,aot,aot+heap", + "Hello"); + if (!shouldStream && execWithZ) { + // Only when dumping without streaming and executing with ZGC do we expect there + // to be a problem. With -XX:+AOTClassLinking, the problem is worse. + if (out.getExitValue() == 0) { + out.shouldContain(HELLO); + out.shouldContain(generalErrMsg); + } else { + out.shouldHaveExitValue(1); + } + } else { + out.shouldContain(HELLO); + out.shouldNotContain(generalErrMsg); + out.shouldHaveExitValue(0); + } + + // Regardless of which GC dumped the heap, there will be an object archive, either + // created with mapping if dumped with G1, or streaming if dumped with parallel GC. + // At exec time, try to load them into a small ZGC heap that may be too small. + System.out.println("2. Exec with " + execGC + ", " + coops + ", " + coh); + out = TestCommon.exec(helloJar, + unlockDiagnostic, + execGC, + "-Xmx4m", + coops, + coh, + "-Xlog:cds,aot,aot+heap", + "Hello"); + if (out.getExitValue() == 0) { + if (!shouldStream && execWithZ) { + out.shouldContain(coopsErrMsg); + } else { + out.shouldNotContain(generalErrMsg); + } + } else { + out.shouldHaveExitValue(1); + } + out.shouldNotHaveFatalError(); + + if (shouldStream) { + System.out.println("3. Exec with " + execGC + ", " + coops + ", " + coh + ", " + eagerLoading); + out = TestCommon.exec(helloJar, + unlockDiagnostic, + execGC, + coops, + coh, + eagerLoading, + "-Xlog:cds,aot,aot+heap", + "Hello"); + if (!shouldStream && execWithZ) { + // Only when dumping without streaming and executing with ZGC do we expect there + // to be a problem. With -XX:+AOTClassLinking, the problem is worse. + if (out.getExitValue() == 0) { + out.shouldContain(HELLO); + out.shouldContain(generalErrMsg); + } else { + out.shouldHaveExitValue(1); + } + } else { + out.shouldContain(HELLO); + out.shouldNotContain(generalErrMsg); + out.shouldHaveExitValue(0); + } + } + } +} diff --git a/test/hotspot/jtreg/runtime/cds/appcds/aotClassLinking/AOTCacheWithZGC.java b/test/hotspot/jtreg/runtime/cds/appcds/aotClassLinking/AOTCacheWithZGC.java deleted file mode 100644 index a7c7362b845..00000000000 --- a/test/hotspot/jtreg/runtime/cds/appcds/aotClassLinking/AOTCacheWithZGC.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -/** - * @test - * @summary -XX:AOTMode=create should be compatible with ZGC - * @bug 8352775 - * @requires vm.cds - * @requires vm.gc.Z - * @library /test/lib - * @build AOTCacheWithZGC - * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar app.jar AOTCacheWithZGCApp - * @run driver AOTCacheWithZGC - */ - -import jdk.test.lib.cds.SimpleCDSAppTester; -import jdk.test.lib.process.OutputAnalyzer; - -public class AOTCacheWithZGC { - public static void main(String... args) throws Exception { - SimpleCDSAppTester.of("AOTCacheWithZGC") - .addVmArgs("-XX:+UseZGC", "-Xlog:cds", "-Xlog:aot") - .classpath("app.jar") - .appCommandLine("AOTCacheWithZGCApp") - .setProductionChecker((OutputAnalyzer out) -> { - // AOT-linked classes required cached Java heap objects, which is not - // yet supported by ZGC. - out.shouldContain("Using AOT-linked classes: false"); - }) - .runAOTWorkflow(); - } -} - -class AOTCacheWithZGCApp { - public static void main(String[] args) { - - } -} diff --git a/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java b/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java index e1d132dd984..09290960d2f 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/aotCode/AOTCodeCompressedOopsTest.java @@ -27,6 +27,8 @@ * @summary Sanity test of AOT Code Cache with compressed oops configurations * @requires vm.cds.supports.aot.code.caching * @requires vm.compMode != "Xcomp" + * @requires vm.bits == 64 + * @requires vm.opt.final.UseCompressedOops * @comment The test verifies AOT checks during VM startup and not code generation. * No need to run it with -Xcomp. It takes a lot of time to complete all * subtests with this flag. diff --git a/test/hotspot/jtreg/runtime/cds/appcds/cacheObject/ArchivedIntegerCacheTest.java b/test/hotspot/jtreg/runtime/cds/appcds/cacheObject/ArchivedIntegerCacheTest.java index b92940c7f5e..8b18876aeb4 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/cacheObject/ArchivedIntegerCacheTest.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/cacheObject/ArchivedIntegerCacheTest.java @@ -28,9 +28,11 @@ * @requires vm.cds.write.archived.java.heap * @library /test/jdk/lib/testlibrary /test/lib /test/hotspot/jtreg/runtime/cds/appcds * @compile --add-exports java.base/jdk.internal.misc=ALL-UNNAMED CheckIntegerCacheApp.java ArchivedIntegerHolder.java + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar WhiteBox.jar jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar boxCache.jar CheckIntegerCacheApp * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar boxCache-boot.jar ArchivedIntegerHolder - * @run driver ArchivedIntegerCacheTest + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:./WhiteBox.jar ArchivedIntegerCacheTest */ import java.nio.file.Files; @@ -39,8 +41,10 @@ import java.nio.file.Paths; import jdk.test.lib.cds.CDSTestUtils; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.helpers.ClassFileInstaller; +import jdk.test.whitebox.WhiteBox; public class ArchivedIntegerCacheTest { + private static WhiteBox WB = WhiteBox.getWhiteBox(); public static String[] mixArgs(String... args) { String bootJar = ClassFileInstaller.getJarPath("boxCache-boot.jar"); @@ -133,7 +137,9 @@ public class ArchivedIntegerCacheTest { "-Xlog:cds+heap=info", "-Xlog:gc+region+cds", "-Xlog:gc+region=trace")); - TestCommon.checkDump(output, - "Cannot archive the sub-graph referenced from [Ljava.lang.Integer; object"); + if (WB.canWriteMappedJavaHeapArchive()) { + // The mapping AOT heap archiving mechanism is unable to cache larger objects. + TestCommon.checkDump(output, "Cannot archive the sub-graph referenced from [Ljava.lang.Integer; object"); + } } } diff --git a/test/hotspot/jtreg/runtime/cds/appcds/customLoader/PrintSharedArchiveAndExit.java b/test/hotspot/jtreg/runtime/cds/appcds/customLoader/PrintSharedArchiveAndExit.java index e44d02118c9..bc208fd3df9 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/customLoader/PrintSharedArchiveAndExit.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/customLoader/PrintSharedArchiveAndExit.java @@ -37,7 +37,7 @@ * jdk.test.lib.classloader.ClassUnloadCommon$TestFailure * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar hello_custom.jar CustomLoadee * @run driver jdk.test.lib.helpers.ClassFileInstaller -jar WhiteBox.jar jdk.test.whitebox.WhiteBox - * @run driver PrintSharedArchiveAndExit + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:./WhiteBox.jar PrintSharedArchiveAndExit */ import jdk.test.lib.process.OutputAnalyzer; @@ -45,6 +45,8 @@ import jdk.test.lib.helpers.ClassFileInstaller; import jdk.test.whitebox.WhiteBox; public class PrintSharedArchiveAndExit { + private static WhiteBox WB = WhiteBox.getWhiteBox(); + public static void main(String[] args) throws Exception { run(); } @@ -82,7 +84,11 @@ public class PrintSharedArchiveAndExit { .shouldContain("Shared Builtin Dictionary") .shouldContain("Shared Unregistered Dictionary") .shouldMatch("Number of shared symbols: \\d+") - .shouldMatch("Number of shared strings: \\d+") .shouldMatch("VM version: .*"); + + if (WB.canWriteMappedJavaHeapArchive()) { + // With the mapping object dumper, the string table is dumped. + output.shouldMatch("Number of shared strings: \\d+"); + } } } diff --git a/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/PrintSharedArchiveAndExit.java b/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/PrintSharedArchiveAndExit.java index a9e616021da..13fa84ac205 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/PrintSharedArchiveAndExit.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/dynamicArchive/PrintSharedArchiveAndExit.java @@ -43,8 +43,11 @@ import jdk.test.lib.cds.CDSTestUtils; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.helpers.ClassFileInstaller; +import jdk.test.whitebox.WhiteBox; + public class PrintSharedArchiveAndExit extends DynamicArchiveTestBase { private static final String ARCHIVE_NAME = CDSTestUtils.getOutputFileName("top.jsa"); + private static final WhiteBox WB = WhiteBox.getWhiteBox(); public static void main(String... args) throws Exception { runTest(PrintSharedArchiveAndExit::testPrtNExit); @@ -92,8 +95,11 @@ public class PrintSharedArchiveAndExit extends DynamicArchiveTestBase { .shouldContain("Shared Builtin Dictionary") .shouldContain("Shared Unregistered Dictionary") .shouldMatch("Number of shared symbols: \\d+") - .shouldMatch("Number of shared strings: \\d+") .shouldMatch("VM version: .*"); - }); + if (WB.canWriteMappedJavaHeapArchive()) { + // With the mapping object archiving mechanism, the string table is dumped + output.shouldMatch("Number of shared strings: \\d+"); + } + }); } } diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/ExerciseGC.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/ExerciseGC.java index 0668ebfa300..7cad887a5d9 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/ExerciseGC.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/ExerciseGC.java @@ -25,8 +25,7 @@ /* * @test * @summary Exercise GC with shared strings - * @requires vm.cds.write.archived.java.heap - * @requires vm.gc == null + * @requires vm.cds.write.mapped.java.heap * @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib * @build HelloStringGC jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/FlagCombo.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/FlagCombo.java index 18bcf6da79c..0f0820aaa34 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/FlagCombo.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/FlagCombo.java @@ -25,8 +25,7 @@ /** * @test * @summary Test relevant combinations of command line flags with shared strings - * @requires vm.cds.write.archived.java.heap & vm.hasJFR - * @requires vm.gc == null + * @requires vm.cds.write.mapped.java.heap & vm.hasJFR * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds * @build HelloString * @run driver FlagCombo @@ -36,8 +35,7 @@ * @test * @summary Test relevant combinations of command line flags with shared strings * @comment A special test excluding the case that requires JFR - * @requires vm.cds.write.archived.java.heap & !vm.hasJFR - * @requires vm.gc == null + * @requires vm.cds.write.mapped.java.heap & !vm.hasJFR * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds * @build HelloString * @run driver FlagCombo noJfr @@ -53,7 +51,7 @@ public class FlagCombo { SharedStringsUtils.dump(TestCommon.list("HelloString"), "SharedStringsBasic.txt", "-Xlog:cds,aot+hashtables"); - SharedStringsUtils.runWithArchive("HelloString", "-XX:+UseG1GC"); + SharedStringsUtils.runWithArchive("HelloString"); if (args.length == 0) { SharedStringsUtils.runWithArchiveAuto("HelloString", diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/IncompatibleOptions.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/IncompatibleOptions.java index 527c0043a6f..ddbfe2ed862 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/IncompatibleOptions.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/IncompatibleOptions.java @@ -100,8 +100,12 @@ public class IncompatibleOptions { // Uncompressed OOPs testDump(1, "-XX:+UseG1GC", "-XX:-UseCompressedOops", null, false); + testExec(1, "-XX:+UseG1GC", "-XX:-UseCompressedOops", null, false); + + // Try with ZGC if (GC.Z.isSupported()) { - testDump(1, "-XX:+UseZGC", "-XX:-UseCompressedOops", null, false); + testDump(2, "-XX:+UseZGC", "-XX:-UseCompressedOops", null, false); + testExec(2, "-XX:+UseZGC", "-XX:-UseCompressedOops", null, false); } // Dump heap objects with Parallel, Serial, Shenandoah GC @@ -112,39 +116,62 @@ public class IncompatibleOptions { } // Explicitly archive with compressed oops, run without. - testDump(5, "-XX:+UseG1GC", "-XX:+UseCompressedOops", null, false); - testExec(5, "-XX:+UseG1GC", "-XX:-UseCompressedOops", - COMPRESSED_OOPS_NOT_CONSISTENT, true); + testDump(3, "-XX:+UseG1GC", "-XX:+UseCompressedOops", null, false); + testExec(3, "-XX:+UseG1GC", "-XX:-UseCompressedOops", COMPRESSED_OOPS_NOT_CONSISTENT, true); // NOTE: No warning is displayed, by design // Still run, to ensure no crash or exception - testExec(6, "-XX:+UseParallelGC", "", "", false); - testExec(7, "-XX:+UseSerialGC", "", "", false); + testExec(3, "-XX:+UseParallelGC", "", "", false); + testExec(3, "-XX:+UseSerialGC", "", "", false); + + // Explicitly archive with object streaming with one GC, run with other GCs. + testDump(4, "-XX:+UseG1GC", "-XX:+AOTStreamableObjects", null, false); + testExec(4, "-XX:+UseParallelGC", "", "", false); + testExec(4, "-XX:+UseSerialGC", "", "", false); + + if (GC.Z.isSupported()) { + testExec(4, "-XX:+UseZGC", "", COMPRESSED_OOPS_NOT_CONSISTENT, true); + } + + // Explicitly archive with object streaming and COOPs with one GC, run with other GCs. + testDump(4, "-XX:-UseCompressedOops", "-XX:+AOTStreamableObjects", null, false); + testExec(4, "-XX:+UseG1GC", "", COMPRESSED_OOPS_NOT_CONSISTENT, true); + testExec(4, "-XX:+UseParallelGC", "", COMPRESSED_OOPS_NOT_CONSISTENT, true); + testExec(4, "-XX:+UseSerialGC", "", COMPRESSED_OOPS_NOT_CONSISTENT, true); + + testExec(4, "-XX:+UseParallelGC", "-XX:-UseCompressedOops", "", false); + testExec(4, "-XX:+UseSerialGC", "-XX:-UseCompressedOops", "", false); + testExec(4, "-XX:+UseG1GC", "-XX:-UseCompressedOops", "", false); // Test various oops encodings, by varying ObjectAlignmentInBytes and heap sizes - testDump(9, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=8", null, false); - testExec(9, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=16", - OBJ_ALIGNMENT_MISMATCH, true); + testDump(5, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=8", null, false); + testExec(5, "-XX:+UseG1GC", "-XX:ObjectAlignmentInBytes=16", OBJ_ALIGNMENT_MISMATCH, true); + + testDump(6, "-XX:+AOTStreamableObjects", "-XX:ObjectAlignmentInBytes=8", null, false); + testExec(6, "-XX:+AOTStreamableObjects", "-XX:ObjectAlignmentInBytes=16", OBJ_ALIGNMENT_MISMATCH, true); // Implicitly archive with compressed oops, run without. // Max heap size for compressed oops is around 31G. // UseCompressedOops is turned on by default when heap // size is under 31G, but will be turned off when heap // size is greater than that. - testDump(10, "-XX:+UseG1GC", "-Xmx1g", null, false); - testExec(10, "-XX:+UseG1GC", "-Xmx32g", null, true); + testDump(7, "-XX:+UseG1GC", "-Xmx1g", null, false); + testExec(7, "-XX:+UseG1GC", "-Xmx32g", null, true); // Explicitly archive without compressed oops and run with. - testDump(11, "-XX:+UseG1GC", "-XX:-UseCompressedOops", null, false); - testExec(11, "-XX:+UseG1GC", "-XX:+UseCompressedOops", null, true); + testDump(8, "-XX:+UseG1GC", "-XX:-UseCompressedOops", null, false); + testExec(8, "-XX:+UseG1GC", "-XX:+UseCompressedOops", null, true); // Implicitly archive without compressed oops and run with. - testDump(12, "-XX:+UseG1GC", "-Xmx32G", null, false); - testExec(12, "-XX:+UseG1GC", "-Xmx1G", null, true); + testDump(9, "-XX:+UseG1GC", "-Xmx32G", null, false); + testExec(9, "-XX:+UseG1GC", "-Xmx1G", null, true); // CompactStrings must match between dump time and run time - testDump(13, "-XX:+UseG1GC", "-XX:-CompactStrings", null, false); - testExec(13, "-XX:+UseG1GC", "-XX:+CompactStrings", + testDump(10, "-XX:+UseG1GC", "-XX:-CompactStrings", null, false); + testExec(10, "-XX:+UseG1GC", "-XX:+CompactStrings", COMPACT_STRING_MISMATCH, true); - testDump(14, "-XX:+UseG1GC", "-XX:+CompactStrings", null, false); - testExec(14, "-XX:+UseG1GC", "-XX:-CompactStrings", + testDump(11, "-XX:+UseG1GC", "-XX:+CompactStrings", null, false); + testExec(11, "-XX:+UseG1GC", "-XX:-CompactStrings", + COMPACT_STRING_MISMATCH, true); + testDump(11, "-XX:+AOTStreamableObjects", "-XX:+CompactStrings", null, false); + testExec(11, "-XX:+AOTStreamableObjects", "-XX:-CompactStrings", COMPACT_STRING_MISMATCH, true); } @@ -154,6 +181,7 @@ public class IncompatibleOptions { System.out.println("Testcase: " + testCaseNr); OutputAnalyzer output = TestCommon.dump(appJar, TestCommon.list("Hello"), TestCommon.concat(vmOptionsPrefix, + "-XX:+UnlockDiagnosticVMOptions", "-XX:+UseCompressedOops", collectorOption, "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile("SharedStringsBasic.txt"), @@ -181,11 +209,13 @@ public class IncompatibleOptions { if (!extraOption.isEmpty()) { output = TestCommon.exec(appJar, TestCommon.concat(vmOptionsPrefix, + "-XX:+UnlockDiagnosticVMOptions", "-XX:+UseCompressedOops", collectorOption, "-Xlog:cds", extraOption, "HelloString")); } else { output = TestCommon.exec(appJar, TestCommon.concat(vmOptionsPrefix, + "-XX:+UnlockDiagnosticVMOptions", "-XX:+UseCompressedOops", collectorOption, "-Xlog:cds", "HelloString")); } diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/InternSharedString.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/InternSharedString.java index ed8e582b213..89136ebdc4d 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/InternSharedString.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/InternSharedString.java @@ -25,8 +25,8 @@ /* * @test * @summary Test shared strings together with string intern operation - * @requires vm.cds.write.archived.java.heap * @requires vm.gc == null + * @requires vm.cds.write.mapped.java.heap * @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib * @compile InternStringTest.java * @build jdk.test.whitebox.WhiteBox @@ -34,6 +34,10 @@ * @run driver InternSharedString */ +// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations +// about using the mechanism for dumping the entire string table, which the streaming solution +// does not do. + public class InternSharedString { public static void main(String[] args) throws Exception { SharedStringsUtils.run(args, InternSharedString::test); diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/LargePages.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/LargePages.java index f431dd6e807..bab63d099c9 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/LargePages.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/LargePages.java @@ -25,8 +25,7 @@ /* * @test * @summary Basic shared string test with large pages - * @requires vm.cds.write.archived.java.heap - * @requires vm.gc == null + * @requires vm.cds.write.mapped.java.heap * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds * @build HelloString * @run driver LargePages diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasic.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasic.java index f746e2c0e73..7de1c48df2a 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasic.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasic.java @@ -25,7 +25,7 @@ /* * @test * @summary Basic test for shared strings - * @requires vm.cds.write.archived.java.heap + * @requires vm.cds.write.mapped.java.heap * @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib * @build HelloString * @run driver SharedStringsBasic @@ -33,6 +33,10 @@ import jdk.test.lib.cds.CDSOptions; import jdk.test.lib.cds.CDSTestUtils; +// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations +// about using the mechanism for dumping the entire string table, which the streaming solution +// does not do. + // This test does not use SharedStringsUtils.dumpXXX() // and SharedStringsUtils.runWithXXX() intentionally: // - in order to demonstrate the basic use of the functionality diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasicPlus.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasicPlus.java index dacf74ebe3a..6145ea7719b 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasicPlus.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsBasicPlus.java @@ -25,14 +25,17 @@ /* * @test * @summary Basic plus test for shared strings - * @requires vm.cds.write.archived.java.heap - * @requires vm.gc == null + * @requires vm.cds.write.mapped.java.heap * @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib * @build HelloStringPlus jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run driver SharedStringsBasicPlus */ +// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations +// about using the mechanism for dumping the entire string table, which the streaming solution +// does not do. + public class SharedStringsBasicPlus { public static void main(String[] args) throws Exception { SharedStringsUtils.run(args, SharedStringsBasicPlus::test); diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsHumongous.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsHumongous.java index 05519e1f4dd..cc470eb68d0 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsHumongous.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsHumongous.java @@ -26,7 +26,7 @@ * @test * @summary Use a shared string allocated in a humongous G1 region. * @comment -- the following implies that G1 is used (by command-line or by default) - * @requires vm.cds.write.archived.java.heap + * @requires vm.cds.write.mapped.java.heap * @requires vm.gc.G1 * * @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib @@ -35,6 +35,11 @@ * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. SharedStringsHumongous */ + +// The problem with humongous strings, or humongous objects in general, does not +// exist with the streaming heap loader. Therefore, this test requres the mapping mode. +// Further more, humongous regions are a bit specific to G1, so G1 is needed. + import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsStress.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsStress.java index 1114870d1d3..c51a67c445b 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsStress.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsStress.java @@ -25,11 +25,16 @@ /* * @test * @summary Write a lots of shared strings. - * @requires vm.cds.write.archived.java.heap + * @requires vm.cds.write.mapped.java.heap * @library /test/hotspot/jtreg/runtime/cds/appcds /test/lib * @build HelloString * @run driver/timeout=2600 SharedStringsStress */ + +// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations +// about using the mechanism for dumping the entire string table, which the streaming solution +// does not do. + import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsUtils.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsUtils.java index 181f23d8396..2b2e1194c63 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsUtils.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsUtils.java @@ -96,7 +96,7 @@ public class SharedStringsUtils { String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); String[] args = - TestCommon.concat(extraOptions, "-XX:+UseCompressedOops", + TestCommon.concat(extraOptions, "-XX:SharedArchiveConfigFile=" + TestCommon.getSourceFile(sharedDataFile)); args = TestCommon.concat(childVMOptionsPrefix, args); @@ -124,7 +124,7 @@ public class SharedStringsUtils { String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); String[] args = TestCommon.concat(extraOptions, - "-cp", appJar, "-XX:+UseCompressedOops", className); + "-cp", appJar, className); args = TestCommon.concat(childVMOptionsPrefix, args); OutputAnalyzer output = TestCommon.execAuto(args); @@ -142,8 +142,7 @@ public class SharedStringsUtils { String className, String... extraOptions) throws Exception { String appJar = TestCommon.getTestJar(TEST_JAR_NAME_FULL); - String[] args = TestCommon.concat(extraOptions, - "-XX:+UseCompressedOops", className); + String[] args = TestCommon.concat(extraOptions, className); args = TestCommon.concat(childVMOptionsPrefix, args); OutputAnalyzer output = TestCommon.exec(appJar, args); diff --git a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsWbTest.java b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsWbTest.java index 95ea1cf9bb0..20dbad30441 100644 --- a/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsWbTest.java +++ b/test/hotspot/jtreg/runtime/cds/appcds/sharedStrings/SharedStringsWbTest.java @@ -25,14 +25,17 @@ /* * @test * @summary White box test for shared strings - * @requires vm.cds.write.archived.java.heap - * @requires vm.gc == null + * @requires vm.cds.write.mapped.java.heap * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds * @build jdk.test.whitebox.WhiteBox SharedStringsWb * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run driver SharedStringsWbTest */ +// This test requires the vm.cds.write.mapped.java.heap specifically as it has expectations +// about using the mechanism for dumping the entire string table, which the streaming solution +// does not do. + import java.io.*; import jdk.test.whitebox.WhiteBox; diff --git a/test/hotspot/jtreg/serviceability/sa/ClhsdbPrintAll.java b/test/hotspot/jtreg/serviceability/sa/ClhsdbPrintAll.java index 4452abe3cc0..2c74eab945e 100644 --- a/test/hotspot/jtreg/serviceability/sa/ClhsdbPrintAll.java +++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbPrintAll.java @@ -34,7 +34,7 @@ import jtreg.SkippedException; * @requires vm.hasSA * @requires (os.arch != "riscv64" | !(vm.cpu.features ~= ".*qemu.*")) * @library /test/lib - * @run main/othervm/timeout=2400 -Xmx1g ClhsdbPrintAll + * @run main/othervm/timeout=2400 -Xmx2g ClhsdbPrintAll */ public class ClhsdbPrintAll { diff --git a/test/jdk/TEST.ROOT b/test/jdk/TEST.ROOT index c7605946a5f..f22b316e19a 100644 --- a/test/jdk/TEST.ROOT +++ b/test/jdk/TEST.ROOT @@ -100,6 +100,8 @@ requires.properties= \ vm.compiler2.enabled \ vm.cds \ vm.cds.write.archived.java.heap \ + vm.cds.write.mapped.java.heap \ + vm.cds.write.streamed.java.heap \ vm.continuations \ vm.musl \ vm.asan \ diff --git a/test/jtreg-ext/requires/VMProps.java b/test/jtreg-ext/requires/VMProps.java index 3c06c97b37a..dbc7a916885 100644 --- a/test/jtreg-ext/requires/VMProps.java +++ b/test/jtreg-ext/requires/VMProps.java @@ -126,6 +126,8 @@ public class VMProps implements Callable> { map.put("vm.cds.supports.aot.class.linking", this::vmCDSSupportsAOTClassLinking); map.put("vm.cds.supports.aot.code.caching", this::vmCDSSupportsAOTCodeCaching); map.put("vm.cds.write.archived.java.heap", this::vmCDSCanWriteArchivedJavaHeap); + map.put("vm.cds.write.mapped.java.heap", this::vmCDSCanWriteMappedArchivedJavaHeap); + map.put("vm.cds.write.streamed.java.heap", this::vmCDSCanWriteStreamedArchivedJavaHeap); map.put("vm.continuations", this::vmContinuations); // vm.graal.enabled is true if Graal is used as JIT map.put("vm.graal.enabled", this::isGraalEnabled); @@ -485,11 +487,28 @@ public class VMProps implements Callable> { /** * @return true if it's possible for "java -Xshare:dump" to write Java heap objects * with the current set of jtreg VM options. For example, false will be returned - * if -XX:-UseCompressedClassPointers is specified, + * if -XX:-UseCompressedClassPointers is specified. */ protected String vmCDSCanWriteArchivedJavaHeap() { - return "" + ("true".equals(vmCDS()) && WB.canWriteJavaHeapArchive() - && isCDSRuntimeOptionsCompatible()); + return "" + ("true".equals(vmCDS()) && WB.canWriteJavaHeapArchive()); + } + + /** + * @return true if it's possible for "java -Xshare:dump" to write Java heap objects + * with the current set of jtreg VM options. For example, false will be returned + * if -XX:-UseCompressedClassPointers is specified. + */ + protected String vmCDSCanWriteMappedArchivedJavaHeap() { + return "" + ("true".equals(vmCDS()) && WB.canWriteMappedJavaHeapArchive()); + } + + /** + * @return true if it's possible for "java -Xshare:dump" to write Java heap objects + * with the current set of jtreg VM options. For example, false will be returned + * if -XX:-UseCompressedClassPointers is specified. + */ + protected String vmCDSCanWriteStreamedArchivedJavaHeap() { + return "" + ("true".equals(vmCDS()) && WB.canWriteStreamedJavaHeapArchive()); } /** @@ -514,31 +533,6 @@ public class VMProps implements Callable> { } } - /** - * @return true if the VM options specified via the "test.cds.runtime.options" - * property is compatible with writing Java heap objects into the CDS archive - */ - protected boolean isCDSRuntimeOptionsCompatible() { - String jtropts = System.getProperty("test.cds.runtime.options"); - if (jtropts == null) { - return true; - } - String CCP_DISABLED = "-XX:-UseCompressedClassPointers"; - String G1GC_ENABLED = "-XX:+UseG1GC"; - String PARALLELGC_ENABLED = "-XX:+UseParallelGC"; - String SERIALGC_ENABLED = "-XX:+UseSerialGC"; - for (String opt : jtropts.split(",")) { - if (opt.equals(CCP_DISABLED)) { - return false; - } - if (opt.startsWith(GC_PREFIX) && opt.endsWith(GC_SUFFIX) && - !opt.equals(G1GC_ENABLED) && !opt.equals(PARALLELGC_ENABLED) && !opt.equals(SERIALGC_ENABLED)) { - return false; - } - } - return true; - } - /** * @return "true" if this VM supports continuations. */ diff --git a/test/lib/jdk/test/whitebox/WhiteBox.java b/test/lib/jdk/test/whitebox/WhiteBox.java index 558feeec78f..5741745e064 100644 --- a/test/lib/jdk/test/whitebox/WhiteBox.java +++ b/test/lib/jdk/test/whitebox/WhiteBox.java @@ -799,6 +799,8 @@ public class WhiteBox { public native boolean isJFRIncluded(); public native boolean isDTraceIncluded(); public native boolean canWriteJavaHeapArchive(); + public native boolean canWriteMappedJavaHeapArchive(); + public native boolean canWriteStreamedJavaHeapArchive(); public native void linkClass(Class c); public native boolean areOpenArchiveHeapObjectsMapped(); From 354910381a9319723d43a6182269b5449c02a527 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Fri, 7 Nov 2025 17:48:27 +0000 Subject: [PATCH 085/512] 8353755: Add a helper method to Util - findComponent() Reviewed-by: aivanov, tr --- test/jdk/javax/swing/regtesthelpers/Util.java | 68 ++++++++++++++----- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index 5f81384028e..ddbf32f938d 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,14 +21,32 @@ * questions. */ -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; +import java.awt.AWTException; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.concurrent.Callable; +import java.util.function.Predicate; + +import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.SwingUtilities; + +import static javax.swing.SwingUtilities.isEventDispatchThread; /** *

    This class contains utilities useful for regression testing. @@ -123,26 +141,44 @@ public class Util { } /** - * Find a sub component by class name. - * Always run this method on the EDT thread + * Find a subcomponent by class name. */ public static Component findSubComponent(Component parent, String className) { - String parentClassName = parent.getClass().getName(); + return findComponent((Container) parent, + c -> c.getClass() + .getName() + .contains(className)); + } - if (parentClassName.contains(className)) { - return parent; + /** + * Find a component based on predicate. + */ + public static Component findComponent(final Container container, + final Predicate predicate) { + try { + if (isEventDispatchThread()) { + return findComponentImpl(container, predicate); + } else { + return Util.invokeOnEDT(() -> findComponentImpl(container, predicate)); + } + } catch (Exception e) { + throw new RuntimeException("Error occurred while finding component", e); } + } - if (parent instanceof Container) { - for (Component child : ((Container) parent).getComponents()) { - Component subComponent = findSubComponent(child, className); - - if (subComponent != null) { - return subComponent; + private static Component findComponentImpl(final Container container, + final Predicate predicate) { + for (Component child : container.getComponents()) { + if (predicate.test(child)) { + return child; + } + if (child instanceof Container cont && cont.getComponentCount() > 0) { + Component result = findComponentImpl(cont, predicate); + if (result != null) { + return result; } } } - return null; } From a90fc2661a7c11077ea17d37563dfb3dfba28016 Mon Sep 17 00:00:00 2001 From: Roger Riggs Date: Fri, 7 Nov 2025 17:48:49 +0000 Subject: [PATCH 086/512] 8371421: [AIX] new test ProcessCloseTest fails Reviewed-by: mdoerr --- test/jdk/java/lang/Process/ProcessCloseTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jdk/java/lang/Process/ProcessCloseTest.java b/test/jdk/java/lang/Process/ProcessCloseTest.java index 3e4040b62f1..13fe8446f46 100644 --- a/test/jdk/java/lang/Process/ProcessCloseTest.java +++ b/test/jdk/java/lang/Process/ProcessCloseTest.java @@ -117,8 +117,8 @@ public class ProcessCloseTest { ProcessCommand.STDOUT_CLOSE, ExitStatus.NORMAL), List.of(ExitStatus.NORMAL)), - Arguments.of(List.of(CAT_PROGRAM, "NoSuchFile.txt"), - List.of(ProcessCommand.STDERR_PRINT_ALL_LINES, + Arguments.of(javaArgs(ChildCommand.STDERR_MARCO, ChildCommand.PROCESS_EXIT1), + List.of(ProcessCommand.STDERR_EXPECT_POLO, ProcessCommand.STDOUT_EXPECT_EMPTY), List.of(ExitStatus.FAIL)), Arguments.of(javaArgs(ChildCommand.STDOUT_MARCO), From 9bc23608fb5719c3e977b5839efed5bc3f64a268 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Fri, 7 Nov 2025 18:41:43 +0000 Subject: [PATCH 087/512] 8371364: Refactor javax/swing/JFileChooser/FileSizeCheck.java to use Util.findComponent() Reviewed-by: aivanov --- .../swing/JFileChooser/FileSizeCheck.java | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java index 056ce38a098..6d92032e0d1 100644 --- a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java +++ b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,6 @@ import java.nio.file.Paths; import java.util.Arrays; import java.util.Locale; import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Predicate; import javax.swing.AbstractButton; import javax.swing.JFileChooser; @@ -52,6 +51,8 @@ import javax.swing.WindowConstants; * @requires (os.family == "linux") * @summary Verifies if the size of an empty file is shown as 0.0 KB * as well as checks the displayed file sizes are rounded up + * @library /javax/swing/regtesthelpers + * @build Util * @run main FileSizeCheck */ public class FileSizeCheck { @@ -228,31 +229,15 @@ public class FileSizeCheck { } private static AbstractButton findDetailsButton(final Container container) { - Component result = findComponent(container, + Component result = Util.findComponent(container, c -> c instanceof JToggleButton button && "Details".equals(button.getToolTipText())); return (AbstractButton) result; } private static JTable findTable(final Container container) { - Component result = findComponent(container, - c -> c instanceof JTable); + Component result = Util.findComponent(container, + c -> c instanceof JTable); return (JTable) result; } - - private static Component findComponent(final Container container, - final Predicate predicate) { - for (Component child : container.getComponents()) { - if (predicate.test(child)) { - return child; - } - if (child instanceof Container cont && cont.getComponentCount() > 0) { - Component result = findComponent(cont, predicate); - if (result != null) { - return result; - } - } - } - return null; - } } From 2c3c4707c0ac7f4432ada9621f4b2e5fe4aef51f Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Fri, 7 Nov 2025 19:33:21 +0000 Subject: [PATCH 088/512] 8354548: Update CLDR to Version 48.0 Reviewed-by: joehw, jlu --- make/data/cldr/LICENSE | 2 +- make/data/cldr/common/bcp47/calendar.xml | 2 + make/data/cldr/common/bcp47/number.xml | 1 + make/data/cldr/common/bcp47/timezone.xml | 21 +- make/data/cldr/common/dtd/cldrTest.dtd | 14 +- make/data/cldr/common/dtd/ldml.dtd | 55 +- make/data/cldr/common/dtd/ldml.xsd | 131 +- make/data/cldr/common/dtd/ldmlBCP47.dtd | 5 +- make/data/cldr/common/dtd/ldmlBCP47.xsd | 7 +- make/data/cldr/common/dtd/ldmlOpenOffice.dtd | 13 +- .../data/cldr/common/dtd/ldmlSupplemental.dtd | 15 +- .../data/cldr/common/dtd/ldmlSupplemental.xsd | 11 +- make/data/cldr/common/main/ab.xml | 15 +- make/data/cldr/common/main/af.xml | 624 +- make/data/cldr/common/main/ak.xml | 1164 +- make/data/cldr/common/main/am.xml | 551 +- make/data/cldr/common/main/an.xml | 3 + make/data/cldr/common/main/ar.xml | 797 +- make/data/cldr/common/main/ar_SA.xml | 4 +- make/data/cldr/common/main/as.xml | 451 +- make/data/cldr/common/main/asa.xml | 4 + make/data/cldr/common/main/ast.xml | 41 +- make/data/cldr/common/main/az.xml | 428 +- make/data/cldr/common/main/az_Cyrl.xml | 4 + make/data/cldr/common/main/ba.xml | 12361 ++++++++++- make/data/cldr/common/main/bal.xml | 5 + make/data/cldr/common/main/bal_Latn.xml | 11 +- make/data/cldr/common/main/bas.xml | 4 + make/data/cldr/common/main/be.xml | 490 +- make/data/cldr/common/main/be_TARASK.xml | 12 +- make/data/cldr/common/main/bew.xml | 24 +- make/data/cldr/common/main/bg.xml | 304 +- make/data/cldr/common/main/blo.xml | 677 +- make/data/cldr/common/main/bm_Nkoo.xml | 2 + make/data/cldr/common/main/bn.xml | 596 +- make/data/cldr/common/main/bn_IN.xml | 1 + make/data/cldr/common/main/bqi.xml | 342 + make/data/cldr/common/main/bqi_IR.xml | 14 + make/data/cldr/common/main/br.xml | 549 +- make/data/cldr/common/main/brx.xml | 81 +- make/data/cldr/common/main/bs.xml | 1309 +- make/data/cldr/common/main/bs_Cyrl.xml | 25 +- make/data/cldr/common/main/bua.xml | 198 + make/data/cldr/common/main/bua_RU.xml | 14 + make/data/cldr/common/main/ca.xml | 457 +- make/data/cldr/common/main/ca_ES_VALENCIA.xml | 2 - make/data/cldr/common/main/ccp.xml | 29 +- make/data/cldr/common/main/ce.xml | 16 +- make/data/cldr/common/main/ceb.xml | 506 +- make/data/cldr/common/main/chr.xml | 230 +- make/data/cldr/common/main/ckb.xml | 204 +- make/data/cldr/common/main/co.xml | 299 +- make/data/cldr/common/main/cop.xml | 4190 ++++ make/data/cldr/common/main/cs.xml | 397 +- make/data/cldr/common/main/csw.xml | 4 - make/data/cldr/common/main/cu.xml | 4 + make/data/cldr/common/main/cv.xml | 17246 +++++++++++----- make/data/cldr/common/main/cy.xml | 474 +- make/data/cldr/common/main/da.xml | 317 +- make/data/cldr/common/main/de.xml | 422 +- make/data/cldr/common/main/de_AT.xml | 4 + make/data/cldr/common/main/de_CH.xml | 144 +- make/data/cldr/common/main/de_LI.xml | 6 +- make/data/cldr/common/main/de_LU.xml | 5 - make/data/cldr/common/main/doi.xml | 6 +- make/data/cldr/common/main/dsb.xml | 337 +- make/data/cldr/common/main/dua.xml | 4 + make/data/cldr/common/main/dv.xml | 6 + make/data/cldr/common/main/dyo.xml | 4 + make/data/cldr/common/main/dz.xml | 11 +- make/data/cldr/common/main/ee.xml | 25 +- make/data/cldr/common/main/el.xml | 272 +- make/data/cldr/common/main/en.xml | 1167 +- make/data/cldr/common/main/en_001.xml | 148 +- make/data/cldr/common/main/en_150.xml | 2 + make/data/cldr/common/main/en_AE.xml | 12 +- make/data/cldr/common/main/en_AT.xml | 2 + make/data/cldr/common/main/en_AU.xml | 114 +- make/data/cldr/common/main/en_CA.xml | 237 +- make/data/cldr/common/main/en_CH.xml | 4 +- make/data/cldr/common/main/en_EE.xml | 20 + make/data/cldr/common/main/en_GB.xml | 197 +- make/data/cldr/common/main/en_GE.xml | 25 + make/data/cldr/common/main/en_IN.xml | 75 +- make/data/cldr/common/main/en_JP.xml | 458 + make/data/cldr/common/main/en_LT.xml | 20 + make/data/cldr/common/main/en_LV.xml | 20 + make/data/cldr/common/main/en_MH.xml | 12 +- make/data/cldr/common/main/en_MP.xml | 12 +- make/data/cldr/common/main/en_MV.xml | 1 + make/data/cldr/common/main/en_NL.xml | 3 + make/data/cldr/common/main/en_PL.xml | 2 + make/data/cldr/common/main/en_PT.xml | 2 + make/data/cldr/common/main/en_RO.xml | 2 + make/data/cldr/common/main/en_SI.xml | 2 + make/data/cldr/common/main/en_SK.xml | 2 + make/data/cldr/common/main/en_Shaw.xml | 1462 ++ make/data/cldr/common/main/en_UA.xml | 20 + make/data/cldr/common/main/en_US_POSIX.xml | 2 + make/data/cldr/common/main/eo.xml | 6906 ++++--- make/data/cldr/common/main/es.xml | 352 +- make/data/cldr/common/main/es_419.xml | 248 +- make/data/cldr/common/main/es_AR.xml | 7 +- make/data/cldr/common/main/es_BO.xml | 2 - make/data/cldr/common/main/es_CL.xml | 8 +- make/data/cldr/common/main/es_CO.xml | 6 +- make/data/cldr/common/main/es_CR.xml | 2 - make/data/cldr/common/main/es_DO.xml | 4 +- make/data/cldr/common/main/es_EC.xml | 8 +- make/data/cldr/common/main/es_GQ.xml | 4 + make/data/cldr/common/main/es_GT.xml | 2 - make/data/cldr/common/main/es_HN.xml | 2 - make/data/cldr/common/main/es_MX.xml | 83 +- make/data/cldr/common/main/es_NI.xml | 2 - make/data/cldr/common/main/es_PA.xml | 2 - make/data/cldr/common/main/es_PE.xml | 2 - make/data/cldr/common/main/es_PY.xml | 8 +- make/data/cldr/common/main/es_US.xml | 189 +- make/data/cldr/common/main/es_UY.xml | 1 + make/data/cldr/common/main/es_VE.xml | 8 +- make/data/cldr/common/main/et.xml | 408 +- make/data/cldr/common/main/eu.xml | 714 +- make/data/cldr/common/main/ewo.xml | 4 + make/data/cldr/common/main/fa.xml | 634 +- make/data/cldr/common/main/fa_AF.xml | 10 + make/data/cldr/common/main/ff.xml | 4 + make/data/cldr/common/main/ff_Adlm.xml | 82 +- make/data/cldr/common/main/fi.xml | 430 +- make/data/cldr/common/main/fil.xml | 311 +- make/data/cldr/common/main/fo.xml | 52 +- make/data/cldr/common/main/fr.xml | 450 +- make/data/cldr/common/main/fr_CA.xml | 1352 +- make/data/cldr/common/main/frr.xml | 439 +- make/data/cldr/common/main/fur.xml | 2 - make/data/cldr/common/main/fy.xml | 14 +- make/data/cldr/common/main/ga.xml | 945 +- make/data/cldr/common/main/gaa.xml | 22 +- make/data/cldr/common/main/gd.xml | 749 +- make/data/cldr/common/main/gl.xml | 494 +- make/data/cldr/common/main/gsw.xml | 12 +- make/data/cldr/common/main/gu.xml | 286 +- make/data/cldr/common/main/ha.xml | 1064 +- make/data/cldr/common/main/haw.xml | 14 +- make/data/cldr/common/main/he.xml | 1120 +- make/data/cldr/common/main/hi.xml | 330 +- make/data/cldr/common/main/hi_Latn.xml | 69 +- make/data/cldr/common/main/hr.xml | 451 +- make/data/cldr/common/main/hsb.xml | 331 +- make/data/cldr/common/main/hu.xml | 336 +- make/data/cldr/common/main/hy.xml | 453 +- make/data/cldr/common/main/ia.xml | 247 +- make/data/cldr/common/main/id.xml | 323 +- make/data/cldr/common/main/ie.xml | 905 +- make/data/cldr/common/main/ig.xml | 1149 +- make/data/cldr/common/main/ii.xml | 2 +- make/data/cldr/common/main/is.xml | 283 +- make/data/cldr/common/main/it.xml | 442 +- make/data/cldr/common/main/it_CH.xml | 8 +- make/data/cldr/common/main/ja.xml | 372 +- make/data/cldr/common/main/jgo.xml | 2 +- make/data/cldr/common/main/jv.xml | 314 +- make/data/cldr/common/main/ka.xml | 541 +- make/data/cldr/common/main/kaa.xml | 44 +- make/data/cldr/common/main/kab.xml | 196 +- make/data/cldr/common/main/kea.xml | 51 +- make/data/cldr/common/main/kek.xml | 78 + make/data/cldr/common/main/kek_GT.xml | 14 + make/data/cldr/common/main/kgp.xml | 18 +- make/data/cldr/common/main/kk.xml | 510 +- make/data/cldr/common/main/kk_Arab.xml | 9843 ++++----- make/data/cldr/common/main/kl.xml | 14 +- make/data/cldr/common/main/km.xml | 228 +- make/data/cldr/common/main/kn.xml | 348 +- make/data/cldr/common/main/ko.xml | 393 +- make/data/cldr/common/main/kok.xml | 2962 ++- make/data/cldr/common/main/kok_Latn.xml | 1460 +- make/data/cldr/common/main/ks.xml | 20 +- make/data/cldr/common/main/ks_Deva.xml | 2 +- make/data/cldr/common/main/ksf.xml | 4 + make/data/cldr/common/main/ksh.xml | 10 +- make/data/cldr/common/main/ku.xml | 3691 +++- make/data/cldr/common/main/ku_Arab.xml | 27 + make/data/cldr/common/main/ku_Arab_IQ.xml | 15 + make/data/cldr/common/main/ku_Arab_IR.xml | 15 + make/data/cldr/common/main/ku_Latn.xml | 14 + make/data/cldr/common/main/ku_Latn_IQ.xml | 15 + make/data/cldr/common/main/ku_Latn_SY.xml | 15 + make/data/cldr/common/main/ku_Latn_TR.xml | 15 + make/data/cldr/common/main/kxv.xml | 61 +- make/data/cldr/common/main/kxv_Deva.xml | 29 +- make/data/cldr/common/main/kxv_Orya.xml | 29 +- make/data/cldr/common/main/kxv_Telu.xml | 29 +- make/data/cldr/common/main/ky.xml | 207 +- make/data/cldr/common/main/la.xml | 30 + make/data/cldr/common/main/lb.xml | 15 +- make/data/cldr/common/main/lij.xml | 15 +- make/data/cldr/common/main/lld.xml | 177 +- make/data/cldr/common/main/lmo.xml | 2 +- make/data/cldr/common/main/ln.xml | 4 + make/data/cldr/common/main/lo.xml | 346 +- make/data/cldr/common/main/lt.xml | 462 +- make/data/cldr/common/main/luy.xml | 6 + make/data/cldr/common/main/lv.xml | 371 +- make/data/cldr/common/main/lzz.xml | 24 + make/data/cldr/common/main/lzz_TR.xml | 14 + make/data/cldr/common/main/mai.xml | 23 +- make/data/cldr/common/main/mg.xml | 4 +- make/data/cldr/common/main/mgo.xml | 2 +- make/data/cldr/common/main/mi.xml | 93 +- make/data/cldr/common/main/mk.xml | 438 +- make/data/cldr/common/main/ml.xml | 761 +- make/data/cldr/common/main/mn.xml | 773 +- make/data/cldr/common/main/mr.xml | 573 +- make/data/cldr/common/main/ms.xml | 285 +- make/data/cldr/common/main/ms_Arab.xml | 2 + make/data/cldr/common/main/mt.xml | 5 - make/data/cldr/common/main/mww.xml | 101 + make/data/cldr/common/main/mww_Hmnp.xml | 14 + make/data/cldr/common/main/mww_Hmnp_US.xml | 15 + make/data/cldr/common/main/my.xml | 257 +- make/data/cldr/common/main/nds.xml | 10 +- make/data/cldr/common/main/ne.xml | 469 +- make/data/cldr/common/main/nl.xml | 1056 +- make/data/cldr/common/main/nmg.xml | 4 + make/data/cldr/common/main/nn.xml | 80 +- make/data/cldr/common/main/no.xml | 571 +- make/data/cldr/common/main/nqo.xml | 11 +- make/data/cldr/common/main/nso.xml | 66 +- make/data/cldr/common/main/oc.xml | 291 +- make/data/cldr/common/main/oc_ES.xml | 158 +- make/data/cldr/common/main/oka.xml | 23 + make/data/cldr/common/main/oka_CA.xml | 14 + make/data/cldr/common/main/oka_US.xml | 14 + make/data/cldr/common/main/om.xml | 210 +- make/data/cldr/common/main/or.xml | 349 +- make/data/cldr/common/main/pa.xml | 783 +- make/data/cldr/common/main/pap.xml | 453 +- make/data/cldr/common/main/pcm.xml | 274 +- make/data/cldr/common/main/pi.xml | 16 + make/data/cldr/common/main/pi_Latn.xml | 14 + make/data/cldr/common/main/pi_Latn_GB.xml | 15 + make/data/cldr/common/main/pl.xml | 329 +- make/data/cldr/common/main/pms.xml | 120 + make/data/cldr/common/main/pms_IT.xml | 14 + make/data/cldr/common/main/prg.xml | 4 + make/data/cldr/common/main/ps.xml | 543 +- make/data/cldr/common/main/ps_PK.xml | 5 + make/data/cldr/common/main/pt.xml | 335 +- make/data/cldr/common/main/pt_PT.xml | 171 +- make/data/cldr/common/main/qu.xml | 89 +- make/data/cldr/common/main/rif.xml | 1534 +- make/data/cldr/common/main/rm.xml | 6027 +++++- make/data/cldr/common/main/ro.xml | 396 +- make/data/cldr/common/main/root.xml | 689 +- make/data/cldr/common/main/ru.xml | 654 +- make/data/cldr/common/main/rw.xml | 171 +- make/data/cldr/common/main/sa.xml | 10 + make/data/cldr/common/main/sah.xml | 4 + make/data/cldr/common/main/sat.xml | 7 +- make/data/cldr/common/main/sc.xml | 1007 +- make/data/cldr/common/main/scn.xml | 4231 ++-- make/data/cldr/common/main/sd.xml | 546 +- make/data/cldr/common/main/sd_Deva.xml | 32 +- make/data/cldr/common/main/se.xml | 4 + make/data/cldr/common/main/se_FI.xml | 9 +- make/data/cldr/common/main/sg.xml | 6 + make/data/cldr/common/main/sgs.xml | 39 + make/data/cldr/common/main/sgs_LT.xml | 14 + make/data/cldr/common/main/shn.xml | 11104 +++++++++- make/data/cldr/common/main/si.xml | 569 +- make/data/cldr/common/main/sk.xml | 288 +- make/data/cldr/common/main/sl.xml | 404 +- make/data/cldr/common/main/smn.xml | 4 + make/data/cldr/common/main/so.xml | 356 +- make/data/cldr/common/main/sq.xml | 270 +- make/data/cldr/common/main/sr.xml | 300 +- make/data/cldr/common/main/sr_Cyrl_BA.xml | 23 +- make/data/cldr/common/main/sr_Cyrl_ME.xml | 8 +- make/data/cldr/common/main/sr_Latn.xml | 310 +- make/data/cldr/common/main/sr_Latn_BA.xml | 23 +- make/data/cldr/common/main/sr_Latn_ME.xml | 8 +- make/data/cldr/common/main/st.xml | 4 +- make/data/cldr/common/main/su.xml | 4 - make/data/cldr/common/main/suz.xml | 19 + make/data/cldr/common/main/suz_Deva.xml | 14 + make/data/cldr/common/main/suz_Deva_NP.xml | 15 + make/data/cldr/common/main/suz_Sunu.xml | 20 + make/data/cldr/common/main/suz_Sunu_NP.xml | 15 + make/data/cldr/common/main/sv.xml | 513 +- make/data/cldr/common/main/sv_AX.xml | 59 + make/data/cldr/common/main/sv_FI.xml | 162 +- make/data/cldr/common/main/sw.xml | 407 +- make/data/cldr/common/main/sw_KE.xml | 65 +- make/data/cldr/common/main/syr.xml | 758 +- make/data/cldr/common/main/szl.xml | 18 +- make/data/cldr/common/main/ta.xml | 893 +- make/data/cldr/common/main/ta_MY.xml | 2 + make/data/cldr/common/main/ta_SG.xml | 2 + make/data/cldr/common/main/te.xml | 470 +- make/data/cldr/common/main/tg.xml | 178 +- make/data/cldr/common/main/th.xml | 349 +- make/data/cldr/common/main/ti.xml | 404 +- make/data/cldr/common/main/ti_ER.xml | 5 - make/data/cldr/common/main/tk.xml | 435 +- make/data/cldr/common/main/tn.xml | 22 +- make/data/cldr/common/main/to.xml | 243 +- make/data/cldr/common/main/tok.xml | 669 +- make/data/cldr/common/main/tpi.xml | 4 + make/data/cldr/common/main/tr.xml | 315 +- make/data/cldr/common/main/trv.xml | 2 +- make/data/cldr/common/main/trw.xml | 13 +- make/data/cldr/common/main/tt.xml | 1086 +- make/data/cldr/common/main/tyv.xml | 708 + make/data/cldr/common/main/tzm.xml | 4 + make/data/cldr/common/main/ug.xml | 11 +- make/data/cldr/common/main/uk.xml | 707 +- make/data/cldr/common/main/ur.xml | 478 +- make/data/cldr/common/main/ur_IN.xml | 3 +- make/data/cldr/common/main/uz.xml | 366 +- make/data/cldr/common/main/uz_Arab.xml | 4 + make/data/cldr/common/main/uz_Cyrl.xml | 71 +- make/data/cldr/common/main/vec.xml | 87 +- make/data/cldr/common/main/vi.xml | 431 +- make/data/cldr/common/main/vmw.xml | 6 +- make/data/cldr/common/main/vo.xml | 2 +- make/data/cldr/common/main/wae.xml | 2 +- make/data/cldr/common/main/wal.xml | 2 +- make/data/cldr/common/main/wo.xml | 69 +- make/data/cldr/common/main/xh.xml | 475 +- make/data/cldr/common/main/xnr.xml | 47 +- make/data/cldr/common/main/xog.xml | 4 + make/data/cldr/common/main/yav.xml | 2 + make/data/cldr/common/main/yo.xml | 391 +- make/data/cldr/common/main/yo_BJ.xml | 163 +- make/data/cldr/common/main/yrl.xml | 18 +- make/data/cldr/common/main/yrl_CO.xml | 6 +- make/data/cldr/common/main/yrl_VE.xml | 6 +- make/data/cldr/common/main/yue.xml | 385 +- make/data/cldr/common/main/yue_Hans.xml | 1146 +- make/data/cldr/common/main/zh.xml | 412 +- make/data/cldr/common/main/zh_Hans_MY.xml | 27 +- make/data/cldr/common/main/zh_Hant.xml | 410 +- make/data/cldr/common/main/zh_Hant_HK.xml | 203 +- make/data/cldr/common/main/zu.xml | 108 +- .../cldr/common/properties/coverageLevels.txt | 23 +- .../supplemental/attributeValueValidity.xml | 19 +- .../common/supplemental/coverageLevels.xml | 418 +- .../cldr/common/supplemental/dayPeriods.xml | 518 +- .../common/supplemental/languageGroup.xml | 102 +- .../cldr/common/supplemental/languageInfo.xml | 5 + .../common/supplemental/likelySubtags.xml | 175 +- .../cldr/common/supplemental/metaZones.xml | 87 +- .../common/supplemental/numberingSystems.xml | 1 + .../cldr/common/supplemental/ordinals.xml | 10 +- .../data/cldr/common/supplemental/plurals.xml | 20 +- .../data/cldr/common/supplemental/rgScope.xml | 32 +- .../cldr/common/supplemental/subdivisions.xml | 2 +- .../common/supplemental/supplementalData.xml | 1032 +- .../supplemental/supplementalMetadata.xml | 25 +- make/data/cldr/common/supplemental/units.xml | 27 +- .../cldr/common/supplemental/windowsZones.xml | 2 +- .../build/tools/cldrconverter/Bundle.java | 42 +- .../tools/cldrconverter/CopyrightHeaders.java | 84 +- .../tools/cldrconverter/LDMLParseHandler.java | 8 +- .../share/classes/java/util/Locale.java | 33 +- .../java/util/spi/LocaleServiceProvider.java | 2 + src/java.base/share/legal/cldr.md | 2 +- src/jdk.localedata/share/legal/cldr.md | 2 +- .../TestCompactNumber.java | 293 +- .../text/Format/NumberFormat/Bug8132125.java | 8 +- .../java/time/chrono/TestEraDisplayName.java | 6 +- .../time/format/Skeletons_en_US.properties | 27 +- .../java/time/format/Skeletons_ja.properties | 27 +- .../time/format/TestLocalizedPattern.java | 4 +- .../time/format/TestUnicodeExtension.java | 140 +- .../java/util/Calendar/CalendarDataTest.java | 7 +- .../util/Calendar/CldrFormatNamesTest.java | 62 +- .../util/Locale/bcp47u/DisplayNameTests.java | 12 +- .../java/util/Locale/bcp47u/FormatTests.java | 4 +- .../bcp47u/spi/LocaleNameProviderTests.java | 6 +- .../provider/foo/LocaleNameProviderImpl.java | 4 +- .../util/TimeZone/CLDRDisplayNamesTest.java | 22 +- test/jdk/sun/text/resources/LocaleData.cldr | 89 +- .../sun/text/resources/LocaleDataTest.java | 1 + .../util/resources/TimeZone/Bug6317929.java | 69 +- .../util/resources/TimeZone/Bug6442006.java | 8 +- .../util/resources/TimeZone/Bug8139107.java | 14 +- .../resources/cldr/DateTimeRoundTripTest.java | 62 + .../resources/cldr/TimeZoneNamesTest.java | 112 +- .../plugins/IncludeLocalesPluginTest.java | 26 +- 390 files changed, 116085 insertions(+), 37257 deletions(-) create mode 100644 make/data/cldr/common/main/bqi.xml create mode 100644 make/data/cldr/common/main/bqi_IR.xml create mode 100644 make/data/cldr/common/main/bua.xml create mode 100644 make/data/cldr/common/main/bua_RU.xml create mode 100644 make/data/cldr/common/main/en_EE.xml create mode 100644 make/data/cldr/common/main/en_GE.xml create mode 100644 make/data/cldr/common/main/en_JP.xml create mode 100644 make/data/cldr/common/main/en_LT.xml create mode 100644 make/data/cldr/common/main/en_LV.xml create mode 100644 make/data/cldr/common/main/en_UA.xml create mode 100644 make/data/cldr/common/main/kek.xml create mode 100644 make/data/cldr/common/main/kek_GT.xml create mode 100644 make/data/cldr/common/main/ku_Arab.xml create mode 100644 make/data/cldr/common/main/ku_Arab_IQ.xml create mode 100644 make/data/cldr/common/main/ku_Arab_IR.xml create mode 100644 make/data/cldr/common/main/ku_Latn.xml create mode 100644 make/data/cldr/common/main/ku_Latn_IQ.xml create mode 100644 make/data/cldr/common/main/ku_Latn_SY.xml create mode 100644 make/data/cldr/common/main/ku_Latn_TR.xml create mode 100644 make/data/cldr/common/main/lzz.xml create mode 100644 make/data/cldr/common/main/lzz_TR.xml create mode 100644 make/data/cldr/common/main/mww.xml create mode 100644 make/data/cldr/common/main/mww_Hmnp.xml create mode 100644 make/data/cldr/common/main/mww_Hmnp_US.xml create mode 100644 make/data/cldr/common/main/oka.xml create mode 100644 make/data/cldr/common/main/oka_CA.xml create mode 100644 make/data/cldr/common/main/oka_US.xml create mode 100644 make/data/cldr/common/main/pi.xml create mode 100644 make/data/cldr/common/main/pi_Latn.xml create mode 100644 make/data/cldr/common/main/pi_Latn_GB.xml create mode 100644 make/data/cldr/common/main/pms.xml create mode 100644 make/data/cldr/common/main/pms_IT.xml create mode 100644 make/data/cldr/common/main/sgs.xml create mode 100644 make/data/cldr/common/main/sgs_LT.xml create mode 100644 make/data/cldr/common/main/suz.xml create mode 100644 make/data/cldr/common/main/suz_Deva.xml create mode 100644 make/data/cldr/common/main/suz_Deva_NP.xml create mode 100644 make/data/cldr/common/main/suz_Sunu.xml create mode 100644 make/data/cldr/common/main/suz_Sunu_NP.xml create mode 100644 test/jdk/sun/util/resources/cldr/DateTimeRoundTripTest.java diff --git a/make/data/cldr/LICENSE b/make/data/cldr/LICENSE index ca907d75617..9065fe54d8b 100644 --- a/make/data/cldr/LICENSE +++ b/make/data/cldr/LICENSE @@ -1,4 +1,4 @@ -UNICODE LICENSE V3 +UNICODE LICENSE V3 COPYRIGHT AND PERMISSION NOTICE diff --git a/make/data/cldr/common/bcp47/calendar.xml b/make/data/cldr/common/bcp47/calendar.xml index 33640c1c1db..9b8bc3e9c1b 100644 --- a/make/data/cldr/common/bcp47/calendar.xml +++ b/make/data/cldr/common/bcp47/calendar.xml @@ -45,6 +45,8 @@ For terms of use, see http://www.unicode.org/copyright.html + + diff --git a/make/data/cldr/common/bcp47/number.xml b/make/data/cldr/common/bcp47/number.xml index 7d242ac07e1..b74bb44f574 100644 --- a/make/data/cldr/common/bcp47/number.xml +++ b/make/data/cldr/common/bcp47/number.xml @@ -105,6 +105,7 @@ For terms of use, see http://www.unicode.org/copyright.html + diff --git a/make/data/cldr/common/bcp47/timezone.xml b/make/data/cldr/common/bcp47/timezone.xml index b173ad4c80d..c0bb0793473 100644 --- a/make/data/cldr/common/bcp47/timezone.xml +++ b/make/data/cldr/common/bcp47/timezone.xml @@ -17,14 +17,14 @@ For terms of use, see http://www.unicode.org/copyright.html - + - + - + @@ -130,6 +130,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -167,7 +168,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -177,7 +178,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -193,8 +194,8 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + @@ -202,7 +203,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -220,7 +221,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -305,7 +306,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + diff --git a/make/data/cldr/common/dtd/cldrTest.dtd b/make/data/cldr/common/dtd/cldrTest.dtd index 456c842c735..b2111d754b0 100644 --- a/make/data/cldr/common/dtd/cldrTest.dtd +++ b/make/data/cldr/common/dtd/cldrTest.dtd @@ -1,13 +1,12 @@ + + @@ -48,4 +47,3 @@ Except as contained in this notice, the name of a copyright holder shall not be - diff --git a/make/data/cldr/common/dtd/ldml.dtd b/make/data/cldr/common/dtd/ldml.dtd index 4ef94ba67ca..aebedd33a43 100644 --- a/make/data/cldr/common/dtd/ldml.dtd +++ b/make/data/cldr/common/dtd/ldml.dtd @@ -42,7 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -64,6 +64,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + @@ -277,6 +279,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + @@ -456,7 +460,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -1528,7 +1532,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -1718,7 +1722,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -1765,6 +1769,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + + + + + @@ -1963,7 +1976,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -2267,6 +2280,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + + + + + + + + + + + + + + + + + + @@ -3100,12 +3135,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + + + + + + + + + diff --git a/make/data/cldr/common/dtd/ldml.xsd b/make/data/cldr/common/dtd/ldml.xsd index 973251f2f69..3ee2c75ed75 100644 --- a/make/data/cldr/common/dtd/ldml.xsd +++ b/make/data/cldr/common/dtd/ldml.xsd @@ -128,10 +128,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + - + @@ -182,6 +182,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -203,6 +204,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -696,6 +698,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -718,6 +721,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -1196,12 +1200,15 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - - - + + + + + + + @@ -4512,6 +4519,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -4634,6 +4642,28 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + + + + + + + + + + + + + + + + + + + + + @@ -5099,6 +5129,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -5830,6 +5861,72 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8049,6 +8146,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -8070,6 +8168,27 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + + + + + + + + + + + + + + + + + + + + diff --git a/make/data/cldr/common/dtd/ldmlBCP47.dtd b/make/data/cldr/common/dtd/ldmlBCP47.dtd index 21ab9e836b7..f379972009c 100644 --- a/make/data/cldr/common/dtd/ldmlBCP47.dtd +++ b/make/data/cldr/common/dtd/ldmlBCP47.dtd @@ -12,7 +12,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -72,6 +72,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + diff --git a/make/data/cldr/common/dtd/ldmlBCP47.xsd b/make/data/cldr/common/dtd/ldmlBCP47.xsd index 3abe9785334..6ba36d5feb6 100644 --- a/make/data/cldr/common/dtd/ldmlBCP47.xsd +++ b/make/data/cldr/common/dtd/ldmlBCP47.xsd @@ -24,10 +24,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + - + @@ -120,6 +120,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -134,6 +135,8 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + diff --git a/make/data/cldr/common/dtd/ldmlOpenOffice.dtd b/make/data/cldr/common/dtd/ldmlOpenOffice.dtd index a643b80f392..557d0250a6e 100644 --- a/make/data/cldr/common/dtd/ldmlOpenOffice.dtd +++ b/make/data/cldr/common/dtd/ldmlOpenOffice.dtd @@ -1,11 +1,8 @@ @@ -60,7 +57,7 @@ openOffice:quarter4Abbreviation?)> - + diff --git a/make/data/cldr/common/dtd/ldmlSupplemental.dtd b/make/data/cldr/common/dtd/ldmlSupplemental.dtd index 6667ea902b9..271e50dbfcf 100644 --- a/make/data/cldr/common/dtd/ldmlSupplemental.dtd +++ b/make/data/cldr/common/dtd/ldmlSupplemental.dtd @@ -12,7 +12,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -147,6 +147,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -274,7 +275,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -770,7 +771,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -996,6 +997,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + + @@ -1090,7 +1097,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + diff --git a/make/data/cldr/common/dtd/ldmlSupplemental.xsd b/make/data/cldr/common/dtd/ldmlSupplemental.xsd index b7c64ddb38d..17445fc07b0 100644 --- a/make/data/cldr/common/dtd/ldmlSupplemental.xsd +++ b/make/data/cldr/common/dtd/ldmlSupplemental.xsd @@ -65,10 +65,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + - + @@ -374,6 +374,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + @@ -2183,12 +2184,18 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + + + + + diff --git a/make/data/cldr/common/main/ab.xml b/make/data/cldr/common/main/ab.xml index 07e0dfa4fae..a2348a2f634 100644 --- a/make/data/cldr/common/main/ab.xml +++ b/make/data/cldr/common/main/ab.xml @@ -2072,7 +2072,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пномпен - + Кантон @@ -2746,9 +2746,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Мраҭашәаратәи Африка - Мраҭашәаратәи Африка, астандартә аамҭа - Мраҭашәаратәи Африка, аԥхынтәи аамҭа + Мраҭашәаратәи Африка @@ -3136,6 +3134,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Гаиана + + + Ҳаваи-алеуттәи астандартә аамҭа + + Ҳаваи-алеуттәи аамҭа @@ -3686,6 +3689,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ {0} {1} diff --git a/make/data/cldr/common/main/af.xml b/make/data/cldr/common/main/af.xml index 17355745ca1..269c1767e37 100644 --- a/make/data/cldr/common/main/af.xml +++ b/make/data/cldr/common/main/af.xml @@ -46,6 +46,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Azerbeidjans Azeri Baskir + Baloetsji Balinees Basaa Belarussies @@ -118,8 +119,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ekajuk Grieks Engels - Engels (VK) - Engels (VSA) Esperanto Spaans Estnies @@ -230,6 +229,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bafia Keuls Koerdies + Koerdies + Koermandji Kumyk Komi Kornies @@ -328,7 +329,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Wes-Ojibwa Okanagan Oromo - Oriya + Odia Osseties Pandjabi Pangasinan @@ -522,7 +523,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + @@ -629,6 +630,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Colombië Clippertoneiland + Sark Costa Rica Kuba Kaap Verde @@ -874,33 +876,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Numeriese rangskikking Rangskiksterkte Geldeenheid - Uursiklus (12 vs 24) + Emoji-voorstelling + Uursiklus (12 vs. 24) Reëlafbreek-styl + Lynafbrekingsteken in woorde Maatstelsel Syfers + Afbrekingsteken ná afkorting Tydsone Lokaalvariant Privaat gebruik Boeddhistiese kalender + Boeddhis Chinese kalender + Chinees Koptiese kalender + Kopties Dangi-kalender + Dangi Etiopiese kalender + Etiopies Etiopiese Amete Alem-kalender + Etiopiese Amete Alem Gregoriaanse kalender + Gregoriaans Hebreeuse kalender + Hebreeus Indiese nasionale kalender Islamitiese kalender + Hijri Islamitiese siviele kalender + Hijri (tabelvormige burgerlike kalender) Islamitiese kalender (Umm al-Qura) + Hijri (Umm al-Qura) ISO-8601-kalender Japannese kalender + Japannees Persiese kalender + Persies Minguo-kalender + Minguo Rekeningkundige geldeenheidformaat + Rekeningkunde Standaard geldeenheidformaat + Standaard Sorteer simbole Sorteer ignoreersimbole Sorteer aksente gewoonweg @@ -910,16 +931,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sorteer hoofletters eerste Sorteer nie kassensitief nie Sorteer kassensitief - Tradisionele Chinese sorteervolgorde - Groot5 Woordeboek-sorteervolgorde Verstek Unicode-rangskikvolgorde - Vereenvoudigde Chinese sorteervolgorde - GB2312 + Verstek Unicode Foonboek-sorteervolgorde Fonetiese sorteerorde Pinyin-sorteervolgorde Algemenedoel-soektog + Soektog Soek volgens Hangul-beginkonsonant Standaard rangskikvolgorde + Standaard Slag-sorteervolgorde Tradisionele sorteervolgorde Radikale-slag-sorteervolgorde @@ -935,18 +957,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Vollewydte Halfwydte Numeries + Verstek + Emoji + Teks 12-uur-stelsel (0-11) + 12 (0–11) 12-uur-stelsel (1-12) + 12 (1–12) 24-uur-stelsel (0-23) + 24 (0–23) 24-uur-stelsel (1-24) + 24 (1–24) Losse reëlafbreek-styl + Los Normale reëlafbreek-styl + Normaal Streng reëlafbreek-styl + Streng + Breek als + Hou als + Normaal + Hou in frases BGN-transliterasie UNGEGN-transliterasie Metrieke stelsel + Metriek Imperiale maatstelsel + VK VSA-maatstelsel + VSA Arabies-Indiese syfers Uitgebreide Arabies-Indiese syfers Armeense syfers @@ -991,6 +1030,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tibettaanse syfers Tradisionele syfers Vai-syfers + Af + Aan Metrieke stelsel @@ -1007,7 +1048,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [aáâ b c d eéèêë f g h iîï j k l m n oôö p q r s t uû v w x y z] [àåäã æ ç íì óò úùü ý] [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] - [  \- ‑ , % ‰ + 0 1 2 3 4 5 6 7 8 9] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] @@ -1046,6 +1086,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -1054,6 +1097,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -1071,18 +1117,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E hh:mm B E hh:mm:ss B E d - E hh:mm a - E hh:mm:ss a y G + MM-y G M/d/y GGGGG + E, dd-MM-y G MMM y G d MMM y G E d MMM y G - h a hh:mm a hh:mm:ss a d/M - E M/d + E, d/M d MMM E d MMM d MMMM @@ -1100,9 +1145,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ QQQQ y G - - h B – h B - d – d @@ -1335,10 +1377,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mn v n - o - m - a - n + die oggend + in die middag + in die aand + in die nag @@ -1348,15 +1390,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ aand nag - - mn - v - n - o - m - a - n - @@ -1432,6 +1465,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -1440,6 +1476,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -1463,7 +1502,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM y G dd MMM y G E dd MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1488,9 +1526,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 'week' w 'van' Y - - h B – h B - hh:mm B – hh:mm B hh:mm B – hh:mm B @@ -1535,7 +1570,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d MMM y – E d MMM y G - h a – h a h – h a @@ -1552,7 +1586,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm a – h:mm a v - h a – h a v h – h a v @@ -2072,7 +2105,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Onbekende stad + Onbekende ligging Doebai @@ -2080,8 +2113,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kaboel + + Rothera-navorsingstasie + + + Troll-stasie + + + Syowa-stasie + + + Mawson-stasie + + + Davis-stasie + - Wostok + Wostok-stasie + + + Casey-stasie + + + Dumont d’Urville-stasie + + + McMurdo-stasie Wene @@ -2120,7 +2177,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zürich - Paas + Paaseiland Kaap Verde @@ -2194,7 +2251,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bisjkek - Enderbury + Kantoneiland Comore @@ -2223,36 +2280,39 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Luxemburg + + Kwajalein Atoll + Macau Maledive - - Bahia Banderas - Meksikostad Koeala-Loempoer - - Nouméa - Katmandoe Muskat + + Marquesas-eilande + Karatsji Warskou + + Pitcairn-eilande + Asore @@ -2316,6 +2376,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiëf + + Wake-eiland + Beulah, Noord-Dakota @@ -2337,9 +2400,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ho Tsji Minhstad - - Mata-Utu - Afganistan-tyd @@ -2371,14 +2431,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Wes-Afrika-tyd - Wes-Afrika-standaardtyd - Wes-Afrika-somertyd + Wes-Afrika-tyd - WAT WAT - WAST @@ -2502,9 +2558,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Aserbeidjan-tyd - Aserbeidjan-standaardtyd - Aserbeidjan-somertyd + Azerbeidjan-tyd + Azerbeidjan-standaardtyd + Azerbeidjan-somertyd @@ -2614,7 +2670,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Dumont-d’Urville-tyd + Dumont d’Urville-tyd @@ -2735,6 +2791,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guiana-tyd + + + Hawaii-Aleoete-standaardtyd + + Hawaii-Aleoete-tyd @@ -3316,7 +3377,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -3327,34 +3387,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤0 k + ¤ 0 k ¤0 k + ¤ 0 k ¤00 k + ¤ 00 k ¤00 k + ¤ 00 k ¤000 k + ¤ 000 k ¤000 k + ¤ 000 k ¤0 m + ¤ 0 m ¤0 m + ¤ 0 m ¤00 m + ¤ 00 m ¤00 m + ¤ 00 m ¤000 m ¤ 000 m ¤000 m ¤ 000 m ¤0 mjd + ¤ 0 mjd ¤0 mjd + ¤ 0 mjd ¤00 mjd + ¤ 00 mjd ¤00 mjd + ¤ 00 mjd ¤000 mjd ¤ 000 mjd ¤000 mjd ¤ 000 mjd ¤0 bn + ¤ 0 bn ¤0 bn + ¤ 0 bn ¤00 bn + ¤ 00 bn ¤00 bn + ¤ 00 bn ¤000 bn ¤ 000 bn - ¤ 000 bn + ¤000 bn ¤ 000 bn @@ -3434,7 +3512,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Botswana-pula - Belarusiese roebel + Belarussiese roebel + Belarussiese roebel + Belarussiese roebel р. @@ -3502,7 +3582,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Etiopiese birr - Euro + euro euro euro @@ -3538,8 +3618,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guatemalaanse kwetsal - Guatemalaanse kwetsal - Guatemalaanse kwetsal Guyanese dollar @@ -3567,8 +3645,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Indiese roepee - Indiese rupee - Indiese rupee + Indiese roepee + Indiese roepee Irakse dinar @@ -3631,7 +3709,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Liberiese dollar - Lesotho loti + Lesotho-loti + Lesotho-loti + Lesotho-loti Litause litas @@ -3781,7 +3861,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sierra Leoniese leone - Sierra Leoniese leone (1964—2022) + Sierra Leoniese leone (1964–2022) + Sierra Leoniese leone (1964–2022) + Sierra Leoniese leone (1964–2022) Somaliese sjieling @@ -3875,6 +3957,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Oos-Karibiese dollar + + Karibiese gulde + Karibiese gulde + Karibiese gulde + Wes-Afrikaanse CFA-frank @@ -3902,6 +3989,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabwiese dollar + + Zimbabwiese goud + Zimbabwiese goud + Zimbabwiese goud + {0}+ @@ -4098,7 +4190,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} item {0} items - + + dele + {0} deel + {0} dele + + dele per miljoen {0} deel per miljoen {0} dele per miljoen @@ -4116,6 +4213,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} per tienduisend {0} per tienduisend + + glukose + {0} glukose + {0} glukose + liter per kilometer {0} liter per kilometer @@ -4316,6 +4418,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} newton {0} newton + + kilowattuur per 100 kilometer + {0} kilowattuur per 100 kilometer + {0} kilowattuur per 100 kilometer + gigahertz {0} gigahertz @@ -4583,6 +4690,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimeter kwik {0} millimeter kwik + + kwik + {0} kwik + {0} kwik + pond per vierkante duim {0} pond per vierkante duim @@ -4667,7 +4779,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kelvin - pondvoet + pondvoetkrag {0} pondvoetkrag {0} pondvoet @@ -4677,20 +4789,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} newtonmeter - kubieke kilometers + kubieke kilometer {0} kubieke kilometer - {0} kubieke kilometers + {0} kubieke kilometer - kubieke meters + kubieke meter {0} kubieke meter - {0} kubieke meters + {0} kubieke meter {0} per kubieke meter - kubieke sentimeters + kubieke sentimeter {0} kubieke sentimeter - {0} kubieke sentimeters + {0} kubieke sentimeter {0} per kubieke sentimeter @@ -4714,18 +4826,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kubieke duim - megaliters + megaliter {0} megaliter - {0} megaliters + {0} megaliter - hektoliters + hektoliter {0} hektoliter - {0} hektoliters + {0} hektoliter + liter {0} liter - {0} liters + {0} liter {0} per liter @@ -4753,6 +4866,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metrieke koppie {0} metrieke koppies + + m. vl. ons + {0} m. vl. ons + {0} m. vl. ons + {0} acre-voet {0} acre-voet @@ -4765,7 +4883,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Britse gelling - {0} Britse gelling + {0} Br. gelling {0} Britse gelling @@ -4788,9 +4906,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} vloeistofons - Imp. vloeistofonse - {0} Imp. vloeistofons - {0} Imp. vloeistofonse + Br. vloeistofonse + {0} Br. vloeistofons + {0} Br. vloeistofonse eetlepels @@ -4808,11 +4926,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dessertlepel {0} dessertlepel - {0} dessertlepel + {0} dessertlepels Engelse dessertlepel - {0} Engelse dessertlepel + {0} Br. dessertlepel {0} Engelse dessertlepel @@ -4825,20 +4943,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Engelse kwartgelling {0} Engelse kwartgelling - - lig - {0} lig - {0} lig + + steradiaal + {0} steradiaal + {0} steradiaal - + + katal + {0} katal + {0} katal + + + coulomb + {0} coulomb + {0} coulomb + + + farads + {0} farad + {0} farad + + + henries + {0} henry + {0} henries + + + siemens + {0} siemens + {0} siemens + + + IT-kalorie + {0} IT-kalorie + {0} IT-kalorieë + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + kilogramkrag + {0} kilogramkrag + {0} kilogramkrag + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} webers + + deeltjies per miljard {0} deeltjie per miljard {0} deeltjies per miljard - nagte - {0} nag - {0} nagte {0} per nag @@ -4927,7 +5102,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmol/l {0} mmol/l - + + deel + {0} deel + {0} deel + + dele/miljoen {0} d.p.m. {0} d.p.m. @@ -4941,6 +5121,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ per tienduisend + + Glk + {0} Glk + {0} Glk + liter/km {0} l/km @@ -5087,8 +5272,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ megapieksels - {0} MP - {0} MP dpcm @@ -5102,6 +5285,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ stippels + {0} stippel + {0} stippels myl @@ -5297,9 +5482,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} hl {0} hl - - liters - dl {0} dl @@ -5325,6 +5507,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} m. kop {0} m. kop + + m. vl. ons + {0} m. vl. ons + {0} m. vl. ons + acre-voet {0} acre-vt. @@ -5368,9 +5555,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} vl.oz. - Imp. vl.oz. - {0} Imp. vl.oz. - {0} Imp. vl.oz. + Br. vl. oz. + {0} Br. vl. oz. + {0} Br. vl. oz. e. @@ -5378,7 +5565,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} e. - tl. + t. {0} tl. {0} tl. @@ -5393,9 +5580,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} dstlpl. - dstlpl. Eng. - {0} dstlpl. Eng. - {0} dstlpl. Eng. + Br. dessertlepels + {0} Br. dl. + {0} Br. dl. druppel @@ -5404,7 +5591,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dragme vloeistof - {0} dr. vl. + {0} dragme {0} dr. vl. @@ -5422,12 +5609,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kwart Eng. {0} kwart Eng. + + IT-kal. + {0} IT-kal. + {0} IT-kal. + lig {0} lig {0} lig - + deeltjies/miljard {0} deeltjie/miljard {0} deeltjies/miljard @@ -5479,22 +5671,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}″ {0}″ - - {0}km² - {0}km² - - - {0}ha - {0}ha - - meters² - {0}m² - {0}m² - - - {0}cm² - {0}cm² + meter² {0}myl² @@ -5505,20 +5683,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ac - {0}jt.² - {0}jt.² - - - {0}vt.² - {0}vt.² - - - {0}dm.² - {0}dm.² - - - {0}donum - {0}donum + jt.² {0}kar. @@ -5537,10 +5702,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}item {0}item - + + deel + {0} deel + {0} deel + + d.p.m. - {0}d.p.m. - {0} d.p.m. % @@ -5555,6 +5723,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mol {0}mol + + Glk + {0} Glk + {0} Glk + l/km {0}l/km @@ -5611,8 +5784,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}kb - {0}greep - {0}greep + {0} B + {0} B {0}bis @@ -5716,10 +5889,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}N {0}N - - {0}kWh/100km - {0}kWh/100km - {0}GHz {0}GHz @@ -5745,10 +5914,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}px {0}px - - {0} MP - {0} MP - {0}ppcm {0}ppcm @@ -5763,8 +5928,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ stippel - {0}stippel - {0}stippel + {0} stippel + {0} stippels {0}R⊕ @@ -5781,69 +5946,28 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}μm {0}μm - - {0}nm - {0}nm - - - {0}pm - {0}pm - - - {0}myl - {0}myl - - {0}jt. - {0}jt. + jt. vt. - {0}vt. - {0}vt. {0}″ {0}″ - - {0}pc - {0}pc - lj - {0} lj - {0} lj {0}AE {0}AE - - {0}fur - {0}fur - - - {0}vaam - {0}vaam - - - {0}sm. - {0}sm. - - - {0}smi - {0}smi - pte. - {0}pt. - {0}pt. R☉ - {0}R☉ - {0}R☉ {0}lx @@ -5951,6 +6075,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmHg {0}mmHg + + {0} Hg + {0} Hg + {0}lb./vk.dm {0}lb./vk.dm @@ -6021,14 +6149,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}Nm {0}Nm - - {0}km³ - {0}km³ - - - {0}cm³ - {0}cm³ - {0}myl³ {0}myl³ @@ -6047,39 +6167,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}dm³ {0}dm³ - - {0}ML - {0}ML - - - {0}hl - {0}hl - liter - {0}l - {0}l - - - {0}dl - {0}dl - - - {0}cl - {0}cl - - - {0}ml - {0}ml pt. - {0}mpt. - {0}mpt. - - {0}m.kop - {0}m.kop + + m. vl. ons + {0} m. vl. ons + {0} m. vl. ons {0}ac.-vt. @@ -6116,15 +6213,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}vl.oz. - Imp vl.oz. - {0}Im.vl.oz. - {0}Im.vl.oz. + Br. vl. oz. + {0} Br. vl. oz. + {0} Br. vl. oz. {0}e. {0}e. + t. {0}tl. {0}tl. @@ -6137,14 +6235,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}dstlpl. - {0}dlpl.Eng - {0}dlpl.Eng + Br. dl. + {0} Br. dl. + {0} Br. dl. - {0}dr - {0}dr + {0} dr. + {0} dr. + vl. dr. {0}dr.vl. {0}dr.vl. @@ -6161,22 +6261,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}kw.Eng. {0}kw.Eng - - lig - {0} lig - {0} lig + + {0} C + {0} C - - deeltjies/miljard + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + IT-kal. + {0} IT-kal. + {0} IT-kal. + + + {0} Gy + {0} Gy + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + + ppb {0}deeltjie/miljard {0}deeltjies/miljard - - nagte - {0} nag - {0} nagte - {0}/nag - hh:mm @@ -6200,10 +6322,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}, {1} - - {0}, {1} - {0}, {1} - {0} {1} {0} {1} @@ -6536,7 +6654,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Müller - Zalta + Zelda Herman Stander diff --git a/make/data/cldr/common/main/ak.xml b/make/data/cldr/common/main/ak.xml index f2417e895de..773fdfc5530 100644 --- a/make/data/cldr/common/main/ak.xml +++ b/make/data/cldr/common/main/ak.xml @@ -14,12 +14,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Afrikaans Akan - Amarik + Amariki Arabeke Arabeke Kasa Nhyehyɛeɛ Foforɔ Asamese Asturiani Asabegyanni + Balukyi Belarus kasa Bɔlgeria kasa Harianvi @@ -42,13 +43,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Swisalande Gyaaman Dɔgri Sɔɔbia a ɛwɔ fam + Ayigbe Greek kasa Borɔfo Ngresi Borɔfo Amɛrika Borɔfo Esperanto Spain kasa - Spain kasa (Laaten Amɛrika) Estonia kasa Baske Pɛɛhyia kasa @@ -306,7 +307,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bolivia Caribbean Netherlands Brazil - Bahama + Bahamase Butan Bouvet Island Bɔtswana @@ -327,8 +328,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kyaena Kolombia Klepatin Aeland + Sark Kɔsta Rika - Kuba + Kiuba Kepvɛdfo Islands Kurakaw Buronya Supɔ @@ -349,7 +351,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sahara Atɔeɛ Ɛritrea Spain - Ithiopia + Yitiopia Yuropu Nkabomkuo Yuropu Fam Finland @@ -386,7 +388,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Heiti Hangari Canary Islands - Indɔnehyia + Ndoniihyia Aereland Israe Isle of Man @@ -394,7 +396,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Britenfo Man Wɔ India Po No Mu Kyagɔso Akyipalego Irak - Iran + Yiran Aesland Itali Gyɛsi @@ -406,7 +408,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kambodia Kiribati Kɔmɔrɔs - Saint Kitts ne Nɛves + Saint Kitts ne Nevis Korea Atifi Korea Anaafoɔ Kuweti @@ -489,7 +491,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sweden Singapɔ Saint Helena - Slovinia + Slovenia Svalbard ne Jan Mayen Slovakia Sɛra Liɔn @@ -553,9 +555,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nyiyie Kwan Sika Dɔnhwere Nkɔmmaeɛ (12 anaa 24) - Line Break Nhyehyɛeɛ + Line Break Nhyehyɛeɛ Ketee Nsusudeɛ Sestɛm - Nɛma + Nɔma Budafoɔ Kalɛnna @@ -565,12 +567,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yitiopia Kalɛnna Yitiopia Amete Alɛm Kalɛnna Gregorian Kalɛnna + Gregorian Hibri Kalɛnda Higyiri Kalɛnda Higyiri Kalɛnda (tabula, sivil epokyi Higyiri Kalɛnda (Ummm al-Kura) ISO-8601 Kalɛnna - Gyapanfoɔ Kalɛnda + Gyapanfoɔ Kalɛnna Pɛɛsiafoɔ Kalɛnda Minguo Kalɛnda Sika Nkotabuo Fɔmate @@ -578,6 +581,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Koodu Korɔ Nyiyie Kwan a ɛdi Kan Daa-Botaeɛ Adehwehwɛ Nyiyie Kwan Susudua + Susudua Nnɔnhwere 12 Sestɛm (0–11) Nnɔnhwere 12 Sestɛm (1–12 Nnɔnhwere 24 Sestɛm (0–23) @@ -713,33 +717,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Ɔpɛpɔn - Ɔgyefoɔ - Ɔbɛnem - Oforisuo - Kɔtɔnimma - Ayɛwohomumu - Kutawonsa - Ɔsanaa - Ɛbɔ - Ahinime - Obubuo - Ɔpɛnimma - - Ɔ - Ɔ - Ɔ + Ɔp + Ɔg + Ɔb O K A - K - Ɔ - Ɛ - A - O - Ɔ + Ku + A + S + O + N + D Ɔpɛpɔn @@ -757,20 +747,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Ɔpɛpɔn - Ɔgyefoɔ - Ɔbɛnem - Oforisuo - Kɔtɔnimma - Ayɛwohomumu - Kutawonsa - Ɔsanaa - Ɛbɔ - Ahinime - Obubuo - Ɔpɛnimma - Ɔ Ɔ @@ -785,26 +761,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic O Ɔ - - Ɔpɛpɔn - Ɔgyefoɔ - Ɔbɛnem - Oforisuo - Kɔtɔnimma - Ayɛwohomumu - Kutawonsa - Ɔsanaa - Ɛbɔ - Ahinime - Obubuo - Ɔpɛnimma - - Kwe + Kwa + Dwo + Ben + Wuk + Yaw + Fia + Mem + + + Kwa Dwo Ben Wuk @@ -813,7 +784,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mem - Kwasiada + Sun Dwoada Benada Wukuada @@ -823,6 +794,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + Kwa + Dwo + Ben + Wuk + Yaw + Fia + Mem + K D @@ -832,8 +812,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic F M + + Kwa + Dwo + Ben + Wuk + Yaw + Fia + Mem + - Kwasiada + Sun Dwoada Benada Wukuada @@ -858,29 +847,31 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kɔta a ɛtɔ so nnan - - - Kɔta1 - Kɔta2 - Kɔta3 - Kɔta4 - - - Kɔta a ɛdi kan - kɔta a ɛtɔ so mmienu - Kɔta a ɛtɔ so mmiɛnsa - Kɔta a ɛtɔ so nnan - - AN - EW + ANW + + + an + anw + + + AN + ANW + + AN + ANW + + + AN + ANW + AN ANW @@ -903,23 +894,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic - EEE, MMMM d, y + EEE, d, MMMM, y yMMMMEEEEdd - MMMM d, y + d, MMMM, y - MMM d, y + d, MMM, y - M/d/yy + d/M/yy yyMMdd @@ -976,9 +967,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} - - {1}, {0} - h:mm a @@ -1045,9 +1033,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM – MMM - - MMM d – MMM d - E, MMM d – E, MMM d E, MMM d – E, MMM d @@ -1087,12 +1072,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic berɛ - - berɛ - - - berɛ - Afe afe a atwam @@ -1107,32 +1086,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic mfeɛ {0} a atwam - - afe a atwam - afe yi - afe a ɛdi hɔ - - afe {0} mu - mfeɛ {0} mu - - - afe {0} a atwam - mfeɛ {0} a atwam - - - - afe a atwam - afe yi - afe a ɛdi hɔ - - afe {0} mu - mfeɛ {0} mu - - - afe {0} a atwam - mfeɛ {0} a atwam - - kɔta kɔta a atwam @@ -1147,19 +1100,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kɔta ahodoɔ {0} a atwam - - kɔta - - kɔta {0} mu - kɔta ahodoɔ {0} mu - - - kɔta {0} a atwam - kɔta ahodoɔ {0} a atwam - - - kɔta kɔta {0} mu kɔta {0} mu @@ -1184,22 +1125,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - bosome a atwam - bosome yi - bosome a ɛdi hɔ - - bosome {0} mu - abosome{0} mu - - - bosome {0} a atwam - abosome{0} a atwam - - - - bosome a atwam - bosome yi - bosome a ɛdi hɔ bosome {0} mu abosome{0} mu @@ -1224,26 +1149,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic nnawɔtwe a ɛtɔ so {0}mu - - Nnawɔtwe - nnawɔtwe a atwam - nnawɔtwe yi - nnawɔtwe a ɛdi hɔ - - nnawɔtwe {0} mu - nnawɔtwe {0} mu - - - nnawɔtwe{0} a atwam - nnawɔtwe{0} a atwam - - nnawɔtwe a ɛtɔ so {0}mu - - Nnawɔtwe - nnawɔtwe a atwam - nnawɔtwe yi - nnawɔtwe a ɛdi hɔ nnawɔtwe {0} mu. nnawɔtwe {0} mu @@ -1252,17 +1158,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic nnawɔtwe{0} a atwam nnawɔtwe {0} a atwam - nnawɔtwe a ɛtɔ so {0}mu bosome mu nnawɔtwe - - bosome mu nnawɔtwe - - - bosome mu nnawɔtwe - Da nnora @@ -1277,59 +1176,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic nna{0} a atwam - - Ndeda ɛnnora - Ndɛ ɛnnɛ - Ɔkyena - - da {0} mu - nna {0} mu - - - da{0} a atwam - nna{0} a atwam - - ɛnnora ɛnnɛ Ɔkyena - - da {0} mu - nna {0} mu - - - da{0} a atwam - nna{0} a atwam - afe mu da - - afe mu da - - - afe mu da - nnawɔtwe mu da - - nnawɔtwe mu da - - - nnawɔtwe mu da - nnawɔtwe mu da wɔ bosome mu - - nnawɔtwe mu da wɔ bosome mu - - - nnawɔtwe mu da wɔ bosome mu - Kwasiada a atwam Kwasiada yi @@ -1343,32 +1203,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kwasiada {0} a atwam - - Kwasiada a atwam - Kwasiada yi - Kwasiada a ɛdi hɔ - - Kwasiada {0} mu - Kwasiada {0} mu - - - Kwasiada {0} a atwam - Kwasiada {0} a atwam - - - - Kwasiada a atwam - Kwasiada yi - Kwasiada a ɛdi hɔ - - Kwasiada {0} mu - Kwasiada {0} mu - - - Kwasiada {0} a atwam - Kwasiada {0} a atwam - - Dwoada a atwam Dwoada yi @@ -1382,32 +1216,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dwoada {0} a atwam - - Dwoada a atwam - Dwoada yi - Dwoada a ɛdi hɔ - - Dwoada {0} mu - Dwoada {0} mu - - - Dwoada {0} a atwam - Dwoada {0} a atwam - - - - Dwoada a atwam - Dwoada yi - Dwoada a ɛdi hɔ - - Dwoada {0} mu - Dwoada {0} mu - - - Dwoada {0} a atwam - Dwoada {0} a atwam - - Benada a atwam Benada yi @@ -1421,32 +1229,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Benada {0} a atwam - - Benada a atwam - Benada yi - Benada a ɛdi hɔ - - Benada {0} mu - Benada {0} mu - - - Benada {0} a atwam - Benada {0} a atwam - - - - Benada a atwam - Benada yi - Benada a ɛdi hɔ - - Benada {0} mu - Benada {0} mu - - - Benada {0} a atwam - Benada {0} a atwam - - Wukuada a atwam Wukuada yi @@ -1460,32 +1242,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wukuada {0} a atwam - - Wukuada a atwam - Wukuada yi - Wukuada a ɛdi hɔ - - Wukuada {0} mu - Wukuada {0} mu - - - Wukuada {0} a atwam - Wukuada {0} a atwam - - - - Wukuada a atwam - Wukuada yi - Wukuada a ɛdi hɔ - - Wukuada {0} mu - Wukuada {0} mu - - - Wukuada {0} a atwam - Wukuada {0} a atwam - - Yawoada a atwam Yawoada yi @@ -1499,32 +1255,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yawoada {0} a atwam - - Yawoada a atwam - Yawoada yi - Yawoada a ɛdi hɔ - - Yawoada {0} mu - Yawoada {0} mu - - - Yawoada {0} a atwam - Yawoada {0} a atwam - - - - Yawoada a atwam - Yawoada yi - Yawoada a ɛdi hɔ - - Yawoada {0} mu - Yawoada {0} mu - - - Yawoada {0} a atwam - Yawoada {0} a atwam - - Fiada a atwam Fiada yi @@ -1538,49 +1268,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Fiada {0} a atwam - - Fiada a atwam - Fiada yi - Fiada a ɛdi hɔ - - Fiada {0} mu - Fiada {0} mu - - - Fiada {0} a atwam - Fiada {0} a atwam - - - - Fiada a atwam - Fiada yi - Fiada a ɛdi hɔ - - Fiada {0} mu - Fiada {0} mu - - - Fiada {0} a atwam - Fiada {0} a atwam - - Memeneda a atwam Memeneda yi - Memeneda a ɛdi hɔ - - Memeneda {0} mu - Memeneda {0} mu - - - Memeneda {0} a atwam - Memeneda {0} a atwam - - - - Memeneda a atwam - Memeneda yi - Memeneda a ɛdi hɔ + next Saturday Memeneda {0} mu Memeneda {0} mu @@ -1593,25 +1284,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Memeneda a atwam Memeneda yi - Memeneda a ɛdi hɔ - - Memeneda {0} mu - Memeneda {0} mu - - - Memeneda {0} a atwam - Memeneda {0} a atwam - - - - anɔpa/anwummerɛ + next Saturday anɔpa/anwummerɛ - - anɔpa/anwummerɛ - dɔnhwere dɔnhwere yi @@ -1624,28 +1301,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic nnɔnhwere {0} a atwam - - dɔnhwere - - dɔnhwere {0} mu - nnɔnhwere {0} mu - - - dɔnhwere {0} a atwam - nnɔnhwere {0} a atwam - - - - dɔnhwere - - dɔnhwere {0} mu - nnɔnhwere {0} mu - - - dɔnhwere {0} a atwam - nnɔnhwere {0} a atwam - - sima sima yi @@ -1658,60 +1313,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic sima {0} a atwam - - sima - - sima {0} mu - sima {0} mu - - - sima {0} a atwam - sima {0} a atwam - - - - sima - - sima {0} mu - sima {0} mu - - - sima {0} a atwam - sima {0} a atwam - - Simasin seesei - anibuo {0} mu - nnibuo {0} mu + simasin {0} mu + simasin {0} mu - anibuo {0} a atwam - nnibuo {0} a atwam + simasin {0} a atwam + simasin {0} a atwam - Simasin - anibuo {0} mu - nnibuo {0} mu + simasin {0} mu + simasin {0} mu - anibuo {0} a atwam - nnibuo {0} a atwam + simasin {0} a atwam + simasin {0} a atwam - Simasin - anibuo {0} mu - nnibuo {0} mu + simasin {0} mu + simasin {0} mu - anibuo {0} a atwam - nnibuo {0} a atwam + simasin {0} a atwam + simasin {0} a atwam @@ -1720,9 +1351,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic nkyekyɛmu - - nkyekyɛmu - Berɛ {0} @@ -1829,9 +1457,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wagadugu - - Sɔfia - Budwumbura @@ -1949,6 +1574,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nikosia + + Prage + Busingye @@ -1959,7 +1587,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gyibuuti - Kɔpɛhangɛne + Kopehegan Dɔmeneka @@ -1980,7 +1608,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kanari - Kyuta + kiweta Hɛlsinki @@ -1997,9 +1625,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Pɔnpei + + Farosu + - Ingresi Awia Berɛ + Engresi Awia Berɛ Lɔndɔn @@ -2063,9 +1694,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yerusalem - - Kɔɔkata - Kyagɔs @@ -2075,9 +1703,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Rɛɛkgyavik - - Roma - Jɛɛsi @@ -2090,14 +1715,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kɔmɔrɔ - - Kemanfo - Aktau - Aktopɛ + Aatobe Kostanay @@ -2117,12 +1739,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lɛsembɛg - - Kasablanka - - - Monako - Kyisinau @@ -2136,7 +1752,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kwagyaleene - Magyuro + Madwuro Skɔpgye @@ -2183,6 +1799,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Matamɔrɔso + + Kankun + Kukyin @@ -2208,7 +1827,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Muskat - Maakesase + Maakesase Supᴐ Pɔt Morɛsbi @@ -2246,15 +1865,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yɛkatɛrinbɛg + + Yiikusk + Kyita Kamkyatka - - Guadaakanaa - Stɔkhɔm @@ -2279,9 +1898,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lowa Prinse Kɔta - - Damaskɔso - Grand Tuk @@ -2297,6 +1913,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Spain Pɔɔto + + Kiivu + + + Wake Supᴐ + Ankɔragyi @@ -2388,9 +2010,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Afrika Atɔeɛ Berɛ - Afrika Atɔeɛ Susudua Berɛ - Afrika Atɔeɛ Awia Berɛ + Afrika Atɔeɛ Berɛ @@ -2545,7 +2165,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Brunei Darusalam Berɛ + Brunei Berɛ @@ -2740,6 +2360,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gayana Berɛ + + + Hawaii-Aleutian Susudua Berɛ + + Hawaii-Aleutian Berɛ @@ -2800,9 +2425,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Irkutsk Berɛ - Irkutsk Susudua Berɛ - Irkutsk Awia Berɛ + Yiikusk Berɛ + Yiikusk Susudua Berɛ + Yiikusk Awia Berɛ @@ -3275,7 +2900,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -3309,11 +2933,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ 000M ¤000M ¤ 000M + ¤0G ¤ 0G + ¤0G ¤ 0G - ¤00B - ¤ 00B - ¤00B + ¤00G + ¤ 00G + ¤00G ¤ 00G ¤000G ¤ 000G @@ -3340,8 +2966,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Afghanfoɔ Afghani - Afghanfoɔ Afghani - Afghanfoɔ Afghani Albania Lek @@ -3350,49 +2974,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic Amɛnia dram - Amɛnia dram - Amɛnia dram Nɛdɛlande Antɛlia guuda - Nɛdɛlande Antɛlia guuda - Nɛdɛlande Antɛlia guuda Angola Kwanza Agɛntina peso - Agɛntina peso - Agɛntina peso Ɔstrelia Dɔla Aruba flɔrin - Aruba flɔrin - Aruba flɔrin Azɛbagyan manat - Azɛbagyan manat - Azɛbagyan manat Bɔsnia-Hɛzegɔvina nsesa maake - Bɔsnia-Hɛzegɔvina nsesa maake - Bɔsnia-Hɛzegɔvina nsesa maake Babadɔso dɔla - Babadɔso dɔla - Babadɔso dɔla Bangladehye taka - Bangladehye taka - Bangladehye taka Bɔɔgaria lɛv @@ -3407,46 +3015,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bɛɛmuda dɔla - Bɛɛmuda dɔla - Bɛɛmuda dɔla Brunei dɔla - Brunei dɔla - Brunei dɔla Bolivia boliviano - Bolivia boliviano - Bolivia boliviano Brazil reale - Brazil reale - Brazil reale Bahama dɔla - Bahama dɔla - Bahama dɔla Butanfoɔ ngutrum - Butanfoɔ ngutrum - Butanfoɔ ngutrum Botswana Pula Bɛlaruhyia ruble - Bɛlaruhyia ruble - Bɛlaruhyia ruble Belize Dɔla - Belize Dɔla - Belize Dɔla Kanada Dɔla @@ -3461,59 +3053,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kyili Peso - Kyili Peso - Kyili Peso kyaena yuan (offshore) - kyaena yuan (offshore) - kyaena yuan (offshore) - kyaena yuan - kyaena yuan - kyaena yuan + Kyaena yuan + Kyaena yuan + Kyaena yuan Kolombia peso - Kolombia peso - Kolombia peso Kɔsta Rika kɔlɔn - Kɔsta Rika kɔlɔn - Kɔsta Rika kɔlɔn Kuba nsesa peso - Kuba nsesa peso - Kuba nsesa peso Kuba peso - Kuba peso - Kuba peso Ɛskudo Kyɛk koruna - Kyɛk koruna - Kyɛk koruna Gyebuti Frank Danefoɔ krone - Danefoɔ krone - Danefoɔ krone Dɔmenika peso - Dɔmenika peso - Dɔmenika peso Ɔlgyeria Dina @@ -3528,25 +3102,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Itiopia Bir - Iro + yuro + yuro + yuro Figyi Dɔla - Figyi Dɔla - Figyi Dɔla Fɔkland Aelande Pɔn - Fɔkland Aelande Pɔn - Fɔkland Aelande Pɔn Breten Pɔn Gyɔɔgyia lari - Gyɔɔgyia lari - Gyɔɔgyia lari Ghana Sidi (1979–2007) @@ -3557,39 +3127,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gyebrotaa pɔn - Gyebrotaa pɔn - Gyebrotaa pɔn Gambia Dalasi Gini franke - Gini franke - Gini franke Gini Frank Guatemala kwɛtsaa - Guatemala kwɛtsaa - Guatemala kwɛtsaa Gayana dɔla - Gayana dɔla - Gayana dɔla Hɔnkɔn Dɔla - Hɔnkɔn Dɔla - Hɔnkɔn Dɔla Hɔndura lɛmpira - Hɔndura lɛmpira - Hɔndura lɛmpira Krohyia kuna @@ -3598,52 +3156,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic Haiti gɔɔde - Haiti gɔɔde - Haiti gɔɔde Hangari fɔrint - Hangari fɔrint - Hangari fɔrint Indɔnihyia rupia - Indɔnihyia rupia - Indɔnihyia rupia Israel hyekel foforɔ - Israel hyekel foforɔ - Israel hyekel foforɔ India Rupi Irak dinaa - Irak dinaa - Irak dinaa Irak dinaa Yiranfoɔ rial - Yiranfoɔ rial - Yiranfoɔ rial Icelandfoɔ Króna - Icelandfoɔ króna + Icelandfoɔ krónur Icelandfoɔ krónur Gyameka dɔla - Gyameka dɔla - Gyameka dɔla Gyɔɔdan dinaa - Gyɔɔdan dinaa - Gyɔɔdan dinaa Gyapan Yɛn @@ -3653,56 +3195,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kagyɛstan som - Kagyɛstan som - Kagyɛstan som Kambodia riel - Kambodia riel - Kambodia riel Komoro Frank Korea Atifi won - Korea Atifi won - Korea Atifi won Korea Anaafoɔ won - Korea Anaafoɔ won - Korea Anaafoɔ won Kuwait dinaa - Kuwait dinaa - Kuwait dinaa Kayemanfo Aelande dɔla - Kayemanfo Aelande dɔla - Kayemanfo Aelande dɔla Kagyastan tenge - Kagyastan tenge - Kagyastan tenge Laohyia kip - Laohyia kip - Laohyia kip Lɛbanon pɔn - Lɛbanon pɔn - Lɛbanon pɔn Sri Lankafoɔ rupee - Sri Lankafoɔ rupee - Sri Lankafoɔ rupee Laeberia Dɔla @@ -3731,18 +3253,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mayamaa kyat - Mayamaa kyat - Mayamaa kyat Mongoliafoɔ tugrike - Mongoliafoɔ tugrike - Mongoliafoɔ tugrike Makaw pataka - Makaw pataka - Makaw pataka Mɔretenia Ouguiya (1973–2017) @@ -3755,31 +3271,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Maldivefoɔ rufiyaa - Maldivefoɔ rufiyaa - Maldivefoɔ rufiyaa Malawi Kwakya - Malawi Kwakya - Malawi Kwakya Mɛksiko pɛso - Mɛksiko pɛso - Mɛksiko pɛso Malaahyia ringgit - Malaahyia ringgit - Malaahyia ringgit Mozambik Metical Mozambik mɛtikaa - Mozambik mɛtikaa - Mozambik mɛtikaa Namibia Dɔla @@ -3789,8 +3295,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nikaragua kɔɔdɔba - Nikaragua kɔɔdɔba - Nikaragua kɔɔdɔba Nɔɔwee Krone @@ -3799,58 +3303,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nepalfoɔ rupee - Nepalfoɔ rupee - Nepalfoɔ rupee New Zealand Dɔla - New Zealand Dɔla - New Zealand Dɔla Oman rial - Oman rial - Oman rial Panama baaboa - Panama baaboa - Panama baaboa Pɛruvia sol - Pɛruvia sol - Pɛruvia sol Papua New Gini kina - Papua New Gini kina - Papua New Gini kina Filipine peso - Filipine peso - Filipine peso Pakistanfoɔ rupee - Pakistanfoɔ rupee - Pakistanfoɔ rupee Pɔlihye zloty - Pɔlihye zloty - Pɔlihye zloty Paragayana guarani - Paragayana guarani - Paragayana guarani Kata riyaa - Kata riyaa - Kata riyaa Romania Leu @@ -3859,13 +3341,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sɛɛbia dinaa - Sɛɛbia dinaa - Sɛɛbia dinaa Rɔhyia rubuu - Rɔhyia rubuu - Rɔhyia rubuu Rewanda Frank @@ -3875,8 +3353,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Solomon Aeland Dɔla - Solomon Aeland Dɔla - Solomon Aeland Dɔla Seyhyɛls Rupi @@ -3894,8 +3370,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Singapɔɔ dɔla - Singapɔɔ dɔla - Singapɔɔ dɔla St Helena Pɔn @@ -3911,13 +3385,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Suriname dɔla - Suriname dɔla - Suriname dɔla Sudan Anaafoɔ Pɔn - Sudan Anaafoɔ Pɔn - Sudan Anaafoɔ Pɔn Sao Tome ne Principe Dobra (1977–2017) @@ -3927,26 +3397,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic Siria pɔn - Siria pɔn - Siria pɔn - Lilangeni + Swazi lilangeni + Swazi lilangeni + Swazi lilangeni Tai bat - Tai bat - Tai bat Tagyikistan somoni - Tagyikistan somoni - Tagyikistan somoni Tɛkmɛstan manat - Tɛkmɛstan manat - Tɛkmɛstan manat Tunisia Dina @@ -3958,13 +3422,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tɛki lira - Tɛki lira - Tɛki lira Trinidad ne Tobago dɔla - Trinidad ne Tobago dɔla - Trinidad ne Tobago dɔla Taewanfoɔ dɔla foforɔ @@ -3976,8 +3436,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yukren hryvnia - Yukren hryvnia - Yukren hryvnia Uganda Hyelen @@ -3987,13 +3445,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yurugueɛ peso - Yurugueɛ peso - Yurugueɛ peso Yusbɛkistan som - Yusbɛkistan som - Yusbɛkistan som Venezuelan bolívar @@ -4002,13 +3456,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Viɛtnamfoɔ dɔn - Viɛtnamfoɔ dɔn - Viɛtnamfoɔ dɔn Vanuatu vatu - Vanuatu vatu - Vanuatu vatu Samoa Tala @@ -4017,18 +3467,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Afrika Mfinimfini Sefa - Afrika Mfinimfini Sefa - Afrika Mfinimfini Sefa Karibine Apueeɛ dɔla - Karibine Apueeɛ dɔla - Karibine Apueeɛ dɔla + + + Karibiafoᴐ giida + Karibiafoᴐ giida + Karibiafoᴐ giida ahodoᴐ Afrika Atɔeɛ Sefa - Afrika Atɔeɛ Sefa - Afrika Atɔeɛ Sefa AAS @@ -4043,8 +3492,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yɛmɛn rial - Yɛmɛn rial - Yɛmɛn rial Afrika Anaafo Rand @@ -4054,12 +3501,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Zambia Kwakya - Zambia Kwakya - Zambia Kwakya Zimbabwe Dɔla + + Zimbabwe sika kᴐkᴐᴐ + Zimbabwe sika kᴐkᴐᴐ + Zimbabwe sika kᴐkᴐᴐ + da {0} @@ -4072,9 +3522,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic dɛci{0} - - sɛnti{0} - mili{0} @@ -4135,32 +3582,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic ntwaho {0} - radian {0} radian {0} radian - digrii digrii {0} digrii {0} - aakesima aakesima {0} aakesima {0} - - aakesɛkɛnse - {0} aakesɛkɛnse - {0} aakesɛkɛnse - - Eka {0} eka {0} eka - karat {0} karat {0} karat @@ -4174,18 +3611,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimole lita biara {0} milimole lita biara {0} - - adeɛ - adeɛ {0} - adeɛ {0} - - - paat ɔpepem biara + paat ɔpepem biara {0} paat ɔpepem biara {0} - ɔha nkyɛmu ɔha nkyɛmu {0} ɔha nkyɛmu {0} @@ -4195,17 +3625,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic pɛɛmile {0} - pɛɛmiride pɛɛmiride {0} pɛɛmiride {0} - mole {0} mole {0} mole - lita kilomita biara lita kilomita biara {0} lita kilomita biara {0} @@ -4215,12 +3642,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic lita kilomita 100 biara {0} - mile galɔn biara mile galɔn biara {0} - mile galɔn biara {0} + {0} mpg US - mile Imp. galɔn biara mile Imp. galɔn biara {0} mile Imp. galɔn biara {0} @@ -4280,7 +3705,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} dec - mfeɛ mfeɛ {0} mfeɛ {0} mfeɛ biara {0} @@ -4291,24 +3715,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} q - bosome Bosome {0} Bosome {0} bosome biara {0} - nnawɔtwe nnawɔtwe {0} nnawɔtwe {0} nnawɔtwe biara {0} - - nna - da {0} - nna {0} - - dɔnhwere dɔnhwere {0} dɔnhwere {0} @@ -4319,9 +3735,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic sima sini - sima sini {0} + {0} s sima sini {0} - sima sini biara {0} millisɛkɛns @@ -4329,22 +3744,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} millisɛkɛns - μsecs {0} mikrosɛkɛn {0} mikrosɛkɛns - nanosɛkɛns {0} nanosɛkɛn - {0} nanosɛkɛns + {0} ns - fɔs mu pɔn fɔs mu pɔn {0} fɔs mu pɔn {0} - newton {0} newton {0} newton @@ -4357,7 +3768,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic taipografik ems - pixels {0} pixel {0} pixels @@ -4371,12 +3781,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic pixels sɛntimita biara{0} - pixels inkye biara pixels inkye biara{0} pixels inkye biara{0} - asaase radiɔs asaase radiɔs {0} asaase radiɔs{0} @@ -4406,7 +3814,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimita milimita {0} - milimita {0} + {0} mm mikromita @@ -4424,40 +3832,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic pikomita {0} - kwansini kwansini {0} kwansini {0} - yaase yaase {0} yaase {0} - ananmɔn ananmɔn {0} {0} ft ananmɔn biara {0} - inkyisi inkyisi {0} inkyisi {0} inkyisi biara {0} - paasɛk paasɛk {0} paasɛk {0} - kanea mfeɛ kanea mfeɛ {0} kanea mfeɛ {0} astrɔnɔmikaa winit - astrɔnɔmikaa winit {0} + {0} au astrɔnɔmikaa winit {0} @@ -4481,35 +3883,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic miaase-skandinavian {0} - pɔnse pɔnse {0} pɔnse {0} - sola radii sola radii {0} sola radii {0} - lux {0} lux {0} lux - kandela {0} kandela {0} kandela - - lumen - - sola luminɔsitise sola luminɔsitise {0} sola luminɔsitise {0} - mɛtreke tons mɛtreke tons {0} mɛtreke tons {0} @@ -4520,7 +3913,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic kilograme biara {0} - grame grame {0} {0} g grame biara {0} @@ -4533,14 +3925,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic mikrograme mikrograme {0} - mikrograme {0} + {0} μg {0} ton {0} tons - pɔns pɔns {0} pɔns {0} pɔns biara {0} @@ -4557,30 +3948,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic troy awnse {0} - karat - karat {0} + {0} CD karat {0} - daatin daatin {0} daatin {0} - Asaase mass Asaase mass {0} Asaase mass {0} - sola mass sola mass {0} sola mass {0} + + poma + {0}poma + {0}poma + - - Pɔ {0} + {0} kn Pɔ {0} + + hyew° + {0} hyew digrii + {0} hyew digrii + pɔn-fɔs-ananmɔn pɔn-fɔs-ananmɔn {0} @@ -4592,15 +3988,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} newton-mita - lita {0} l {0} lita - - pints - - kuruwa kuruwa {0} kuruwa {0} @@ -4615,42 +4006,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic atere fa {0} - bare bare {0} bare {0} - atere atere {0} atere {0} - koko ko {0} koko {0} - drɔm drɔm fl {0} drɔm fl {0} - - gyega - gyega {0} - gyega {0} - - - kanea - kanea {0} - kanea {0} - - - paat ɔpepepem biara + paat ɔpepepem biara {0} paat ɔpepepem biara {0} - anadwo {0} anadwo anadwo{0} anadwo biara{0} @@ -4658,7 +4033,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic kadinaa akwankyerɛ {0} apueɛ - {0} atifi {0} anaafoɔ {0} atɔeɛ @@ -4692,7 +4066,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic adeɛ {0} adeɛ {0} - + paat ɔpepem biara @@ -4760,8 +4134,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic dɔnhwere - - μsecs + + simasini nanosɛkɛns @@ -4848,10 +4222,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} gr {0} gr + + poma + {0}poma + {0}poma + {0} mph {0} mph + + hyew° + lita @@ -4875,7 +4257,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ko {0} - drɔm drɔm {0} drɔm {0} @@ -4893,7 +4274,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kanea {0} kanea {0} - + paat ɔpepepem biara @@ -4907,106 +4288,38 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - radian - - - digrii - - - aakesima - - aakesɛkɛnse - - - Eka - - - karat - - - milimol/lita - - - adeɛ - adeɛ {0} - adeɛ {0} - - - paat ɔpepem biara - - - ɔha nkyɛmu - - - pɛɛmiride - - - lita kilomita biara - - - mile galɔn biara + {0}″ + {0}″ mpg UK - - PByte + + GB B {0}B {0}B - - mfeɛ - - - bosome - - - nnawɔtwe - da - da {0} - nna {0} - - dɔnhwere + + simasini μsec - - fɔs mu pɔn - - - asaase radiɔs - - - m - - - yaase - - ananmɔn {0}′ - {0}′ + {0} ft - inkyisi {0}″ {0}″ - - paasɛk - - - kanea mfeɛ - fɛɛlɔɔne @@ -5016,47 +4329,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic pts - - sola radii - - - lux - - - sola luminɔsitise - - - grame - - - pɔns - - - oz troy - - - karat - - - daatin - - - Asaase mass - - - sola mass - gr {0}gr {0}gr - - {0} mph - {0} mph - - - lita + + poma + {0}poma + {0}poma pt @@ -5064,51 +4345,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}/gal - - kuruwa - - dsp - {0}dsp + {0} dsp {0}dsp dr - ko {0} - ko {0} fl.dr. - drɔm fl {0} + drɔm {0} drɔm fl {0} - - gyega - gyega {0} - gyega {0} - pn - {0} pn - {0} pn - - kanea - kanea {0} - kanea {0} - - - paat ɔpepepem biara - - - anadwo - anadwo{0} - anadwo{0} - {0}/anadwo - - - akwankyerɛ - @@ -5120,35 +4371,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}, anaa {1} {0} anaa {1} - - {0}, anaa {1} - {0} anaa {1} - - - {0}, anaa {1} - {0} anaa {1} - - - {0}, ne {1} - - - {0}, ne {1} - {0} ne {1} - - - {0}, ne {1} - {0} ne {1} - {0} {1} {0} {1} {0} {1} {0} {1} - - {0}, ne {1} - {0} ne {1} - @@ -5160,7 +4388,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} — kɔmpatebiliti {0} — ɛnkloso {0} — ɛstɛndɛde - {0} rehwɛ bɛnkum {0} rehwɛ nifa {0} — histɔrike {0} — mɛsɛleniɔso @@ -5290,7 +4517,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic tete nɔma deɛ ɔdinaafoɔ prɔpɔɔhyen nɔma - atwerɛdeɛ akɛseɛ nkumaa pono so nɔma ziro a yɛapae mu @@ -5317,7 +4543,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ∅∅∅ Wooster ∅∅∅ - Jr + Ketewa MP diff --git a/make/data/cldr/common/main/am.xml b/make/data/cldr/common/main/am.xml index aa3e9dbded4..c3ddab8d741 100644 --- a/make/data/cldr/common/main/am.xml +++ b/make/data/cldr/common/main/am.xml @@ -215,7 +215,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ደቡባዊ ሃይዳ ዕብራይስጥ ሕንድኛ - ሕንድኛ (ላቲን) ሂሊጋይኖን ህሞንግ ክሮሽያንኛ @@ -283,6 +282,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ባፊያ ኮሎኝኛ ኩርድሽ + ኩርድሽ + ኩርድሽ ኩማይክ ኮሚ ኮርኒሽ @@ -711,6 +712,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ቻይና ኮሎምቢያ ክሊፐርቶን ደሴት + ሳርክ ኮስታሪካ ኩባ ኬፕቨርዴ @@ -952,33 +954,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ የቁጥር ድርደራ የድርደራ አቅም ምንዛሪ + ስሜት ገላጭ ምስል አቀራረብ የሰዓት ዑደት (12 ወይም 24) መስመር መስበሪያ ቅጥ + የመስመር መሰባበር በቃላት ውስጥ የመለኪያ ስርዓት ቁጥሮች + ከአህጽሮተ ቃል በኋላ የዐረፍተ ነገር መቋረጥ የሰዓት ሰቅ የአካባቢ አይነት ለግል ጥቅም የቡዲስት ቀን አቆጣጠር + ቡዲስት የቻይና የቀን አቆጣጠር + ቻይንኛ የኮፕቲክ የቀን አቆጣጠር + ኮፕቲክ የዳንጊ የቀን አቆጣጠር + ዳንጊ የኢትዮጵያ የቀን አቆጣጠር + ኢትዮፒክ የኢትዮፒክ አመተ አለም የቀን አቆጣጠር + ኢትዮፒክ ዓመተ ዓለም የግሪጎሪያን የቀን አቆጣጠር + ግሪጎሪያን የእብራዊያን የቀን አቆጣጠር + ሂብሩ የህንድ ብሔራዊ የቀን አቆጣጠር የሂጅራ የቀን አቆጣጠር + ሂጅራ የሂጅራ የቀን አቆጣጠር (ታቡላር፣ ሲቪል አፖች) + ሂጅራ (ታቡላር፣ የሲቪል ዘመን) የሂጅራ የቀን አቆጣጠር (ኡም አል-ቁራ) + ሂጅራ (ኡሙ አል-ቁራ) ISO-8601 የቀን አቆጣጠር የጃፓን የቀን አቆጣጠር + ጃፓንኛ የፐርሽያ የቀን አቆጣጠር + ፐርሽያን የሚንጉ የቀን አቆጣጠር + ሚንጉ የሂሳብ ምንዛሪ ቅርጸት + የሂሳብ አያያዝ መደበኛ የምንዛሪ ቅርጸት + መደበኛ ምልክቶችን ደርድር ችላ ባይ ምልክቶችን ደርድር የፊደል ጭረቶችን እንደመደበኛ ደርድር @@ -988,16 +1009,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ አቢይ ሆሄ መጀመሪያ ደርድር ያለመልከፊደል ትብ ደርድር በመልከፊደል ትብ ደርድር - የባህላዊ ቻይንኛ የድርድር ቅደም ተከተል - ትልቅ5 የመዝገበ ቃላት የድርድር ቅደም ተከተል የነባሪ ዩኒኮድ የድርድር ቅደም ተከተል - የቀለለ የቻይንኛ የድርደራ ቅደም ተከተል - GB2312 + ነባሪ ዩኒኮድ የስልክ ደብተር ድርድር ቅደም ተከተል የፎነቲክ ድርደራ ቅደም ተከተል ፒንይን የድርድር ቅደም ተከተል ለጠቅላላ ጉዳይ ፍለጋ + ፍለጋ በሃንጉል የመጀመሪያ ተነባቢ ፈልግ መደበኛ የድርድር ቅደም ተከተል + መደበኛ የበትር ድርድር ቅደም ተከተል ባህላዊ የድርድር ቅደም ተከተል የመሰረታዊ በትር ድርድር ቅደም ተከተል @@ -1013,18 +1035,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ሙሉ ወርድ ግማሽ ወርድ አሃዛዊ + ነባሪ + ስሜት ገላጭ ምስል + ጽሑፍ የ12 ሰዓት ስርዓት (0–11) + 12 (0–11) የ12 ሰዓት ስርዓት (1–12) + 12 (1–12) የ24 ሰዓት ስርዓት (0–23) + 24 (0–23) የ24 ሰዓት ስርዓት (1–24) + 24 (1–24) ላላ ያለ መስመር መስበሪያ ቅጥ + ልቅ መደበኛ መስመር መስበሪያ ቅጥ + መደበኛ ጠበቅ ያለ መስመር መስበሪያ ቅጥ + ጥብቅ + ሁሉንም ሰብረው + ሁሉንም አቆይ + መደበኛ + በዓረፍተ ነገሮች ውስጥ ያስቀምጡ ዩኤስ ቢጂኤን ትራንስሊትሬሽን ዩኤን ጂኢጂኤን ትራንስሊትሬሽን ሜትሪክ ስርዓት + መለኪያ ኢምፔሪያል የመለኪያ ስርዓት + ዩኬ የአሜሪካ መለኪያ ስርዓት + ዩኤስ የአረቢክ-ኢንዲክ አሃዞች የተራዘሙ የአረቢክ-ኢንዲክ አሃዞች የአርመንኛ ቁጥሮች @@ -1069,6 +1108,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ የቲቤት አሃዞች ተለምዷዊ ቁጥሮች የቫይ አሃዞች + ጠፍቷል + በርቷል ሜትሪክ @@ -1098,13 +1139,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM፣ y G + GGGGG y-MM + GGGGG y-MM-dd + GGGGG y-MM-dd, E + + + HH–HH + + + HH–HH v + + - ዓ/ዓ ዓ/ም @@ -1133,7 +1184,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM፣ y G E, MMMM d + GGGGG y-MM + GGGGG y-MM-dd + GGGGG y-MM-dd, E + + + HH–HH + + + HH–HH v + + @@ -1164,21 +1226,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1} በ {0} + {1} {0} + + {1} በ {0} + {1} {0} + + {1} በ {0} + {1} {0} + + {1} በ {0} + E d @@ -1415,10 +1489,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ጥዋት - ከሰዓት - ማታ - ሌሊት @@ -1426,7 +1496,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ዓመተ ዓለም ዓመተ ምሕረት - ዓ/ም ዓ/ዓ @@ -1506,13 +1575,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h E B h:mm E B h:mm:ss E d + E a h E a h:mm E a h:mm:ss y G + M/y G d/M/y GGGGG + E d/M/y G MMM y G MMM d y G E MMM d y G @@ -1520,6 +1593,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H a h:mm a h:mm:ss + a h v d/M E፣ d/M E፣ MMM d @@ -1538,6 +1612,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} – {1} + + B h – B h + GGGGG M/y – GGGGG M/y GGGGG M/y – M/y @@ -1681,14 +1758,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ይህ ሩብ የሚቀጥለው ሩብ - +{0} ሩብ - +{0} ሩብ + በ{0} ሩብ + በ{0} ሩብ {0} ሩብ በፊት {0} ሩብ በፊት + + + በ{0} ሩብ + በ{0} ሩብ + + + + + በ{0} ሩብ + በ{0} ሩብ + + ወር ያለፈው ወር @@ -1990,6 +2079,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ +HHmm;-HHmm ጂ ኤም ቲ{0} ጂ ኤም ቲ + ጂ ኤም ቲ+ {0} ሰዓት {0} የቀን ብርሃን ሰዓት {0} መደበኛ ሰዓት @@ -2611,9 +2701,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ፍኖም ፔንህ - ኢንደርበሪ - - ካንቶን @@ -3283,9 +3370,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - የምዕራብ አፍሪካ ሰዓት - የምዕራብ አፍሪካ መደበኛ ሰዓት - የምዕራብ አፍሪካ ክረምት ሰዓት + የምዕራብ አፍሪካ ሰዓት @@ -3642,6 +3727,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ የጉያና ሰዓት + + + የሃዋይ አሌኡት መደበኛ ሰዓት አቆጣጠር + + የሃዋይ አሌኡት ሰዓት አቆጣጠር @@ -4225,7 +4315,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4775,6 +4864,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ የምዕራብ ካሪብያን ዶላር + + የካሪቢያን ጊልደር + የካሪቢያን ጊልደር + የካሪቢያን ጊልደር + የምዕራብ አፍሪካ ሴፋ ፍራንክ @@ -4799,6 +4893,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ የዚምቧቡዌ ዶላር + + የዚምባብዌ ወርቅ + የዚምባብዌ ወርቅ + የዚምባብዌ ወርቅ + {0}+ @@ -4822,9 +4921,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ሚሊ{0} - - ማይክሮ{0} - ናኖ{0} @@ -4861,18 +4957,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ኤክሳ {0} - - ዜታ {0} - - - ዮታ {0} - - - ሮና {0} - - - ዮቢ {0} - {0} በ{1} @@ -4891,14 +4975,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ጂ-ኃይል - ኡደት {0} ኡደት {0} ኡደት {0} ኡደት {0} ኡደቶች - ራዲ {0} ራዲ {0} ራዲያን {0} ራዲ @@ -4922,11 +5004,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ካሬ ሜትር {0} ካሬ ሜትር - - ስኴር ያርድ - {0} ስኴር ያርድ - {0} ስኴር ያርድ - ጋሻ @@ -4940,7 +5017,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ንጥሎች {0} ንጥሎች - + + ክፍል + {0} ክፍል + {0} ክፍል + + {0} ppm {0} ክፍል በየሚሊዮን {0} ppm @@ -4964,6 +5046,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} moles + + ግሉኮስ + {0} ግሉኮስ + {0} ግሉኮስ + ሊትሮች በ100 ኪሎሜትሮች {0} ሊትር በ100 ኪሎሜትሮች @@ -5031,7 +5118,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ማይክሮሰከንድ - አምፒር {0} አምፒር {0} አምፒር {0} አምፒር @@ -5044,33 +5130,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ohms - ቮልት {0} ቮልት {0} ቮልት {0} ቮልት {0} ቮልቶች - - ኪሎ ካሎሪ - {0} ኪሎ ካሎሪ - {0} ኪሎ ካሎሪ - {0} ኪሎ ካሎሪ - {0} ኪሎ ካሎሪ - - - ኪጁ - {0} ኪጁ - {0} ኪጁ - {0} ኪጁ - {0} ኪጁ - - - ጁልስ - {0} ጁልስ - {0} ጁልስ - {0} ጁልስ - {0} ጁልስ - {0} ኒ {0} ኒውተን @@ -5084,34 +5148,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ኪሎዋት-ሰዓታት በየ 100 ኪሎሜትሮች {0} ኪሎዋት-ሰዓታት በየ 100 ኪሎሜትሮች - - ጊጋኸርዝ - {0} ጊጋኸርዝ - {0} ጊጋኸርዝ - {0} ጊጋኸርዝ - {0} ጊጋኸርዝ - - - ሜጋኸርዝ - {0} ሜጋኸርዝ - {0} ሜጋኸርዝ - {0} ሜጋኸርዝ - {0} ሜጋኸርዝ - - - ኪሎኸርዝ - {0} ኪሎኸርዝ - {0} ኪሎኸርዝ - {0} ኪሎኸርዝ - {0} ኪሎኸርዝ - - - ኸርዝ - {0} ኸርዝ - {0} ኸርዝ - {0} ኸርዝ - {0} ኸርዝ - ታይፖግራፊክ em @@ -5202,15 +5238,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ግራም {0} ግራም - - ሚግ - {0} ሚግ - {0} ሚግ - {0} ሚግ - {0} ሚግ - - ማግ {0} ማግ {0} ማይክሮ ግራም {0} ማግ @@ -5223,11 +5251,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} CD {0} ካራቶች - - ዳልተንስ - {0} ዳልተንስ - {0} ዳልተንስ - {0} ኤርዝማስስ {0} ኤርዝማስስ @@ -5236,19 +5259,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ሶላር ማስስ {0} ሶላር ማስስ - - ጊጋ ዋት - {0} ጊዋ - {0} ጊዋ - {0} ጊዋ - {0} ጊዋ - ሜጋ ዋት - {0} ሜዋ - {0} ሜዋ - {0} ሜዋ - {0} ሜዋ {0} ኪሎዋት @@ -5264,10 +5276,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ሚሊ ዋት - {0} ሚዋ - {0} ሚዋ - {0} ሚዋ - {0} ሚዋ {0} የፈረስ ጉልበት @@ -5316,7 +5324,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ዲግሪ ፋራንሃይት - {0} ኬ {0} ኬልቪን {0} ኬ @@ -5332,24 +5339,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ኩቢክ ማይል {0} ኩቢክ ማይል - - ኪዩቢክ ያርድ - {0} ኪዩቢክ ያርድ - {0} ኪዩቢክ ያርድ - - - ሜጋሊትር - {0} ሜሊ - {0} ሜሊ - {0} ሜሊ - {0} ሜሊ - ሄክቶሊትር - {0} ሄሊ - {0} ሄሊ - {0} ሄሊ - {0} ሄሊ {0} ሊትር @@ -5378,46 +5369,47 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ሜትሪክ ፒንቶች - ጋሎን {0}/ጋሎን {0}/ጋሎን - {0}/ጋሎን - - - ኳርትስ - {0} ኳርትስ - {0} ኳርትስ - - - ኩባያ - {0} ኩባያ - {0} ኩባያ Imp. fluid ኦንስስ {0} Imp. fluid ኦንስስ {0} Imp. fluid ኦንስስ - - የሻይ ማንኪያ - {0} የሻይ ማንኪያ - {0} የሻይ ማንኪያ - - - የሻይ ማንኪያዎች - {0} የሻይ ማንኪያዎች - {0} የሻይ ማንኪያዎች - {0} በርሜል {0} በርሜሎች - - ብርሃን - {0} ብርሃን - {0} ብርሃን - {0} ብርሃን - {0} ብርሃን + + ካታልስ + {0} ካት + {0} ካት + + + ሄነሪስ + {0} ሄ + {0} ሄ + + + ካሎሪ [IT] + {0} ካሎሪ [IT] + {0} ካሎሪ [IT] + + + ኪሎግራም - ኃይል + {0} ኪግ-ኃይል + {0} ኪግ-ኃይል + + + ቴስላስ + {0} ቴ + {0} ቴ + + + ዌበርስ + {0} ዌበ + {0} ዌበ ለሊት @@ -5425,7 +5417,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/ለሊት {0}/ለሊት {0}/ለሊት - {0}/ለሊት ዓቢይ አቅጣጫ @@ -5613,12 +5604,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ንጥል {0} ንጥል + + ክፍል + {0} ክፍል + {0} ክፍል + ፐርሰንት በማይል + + ግሉኮስ + {0} ግሉኮስ + {0} ግሉኮስ + ሊ/ኪሜ {0} ሊ/ኪሜ @@ -6284,6 +6285,36 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} የፈሳሽ መለኪያ {0} የፈሳሽ መለኪያ + + ካት + {0} ካት + {0} ካት + + + + {0} ሄ + {0} ሄ + + + ካሎሪ-IT + {0} ካሎሪ-IT + {0} ካሎሪ-IT + + + ኪግ-ኃይል + {0} ኪግ-ኃይል + {0} ኪግ-ኃይል + + + + {0} ቴ + {0} ቴ + + + ዌበ + {0} ዌበ + {0} ዌበ + ብርሃን {0} ብርሃን @@ -6304,28 +6335,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - ማይክሮ{0} - - - ዜታ {0} - - - ዮታ {0} - - - ሮና {0} - - - ዮቢ {0} - ኡደ {0} ኡደ {0}ኡደ - ራዲ {0}ራዲ {0}ራዲ @@ -6345,17 +6360,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ማይል² {0} ማይል² - - {0} ስኴር ያርድ - {0} ስኴር ያርድ - {0} ጫማ² {0} ጫማ² + + ክፍል + {0} ክፍል + {0} ክፍል + % + + ግሉኮስ + {0} ግሉኮስ + {0} ግሉኮስ + {0}ሊበ100ኪሜ {0}ሊበ100ኪሜ @@ -6403,51 +6424,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ሰ {0} ሰ - - አምፒር - {0} አምፒር - {0} አምፒር - - - ቮልት - {0} ቮልት - {0} ቮልት - - - ኪሎ ካሎሪ - {0} ኪሎ ካሎሪ - {0} ኪሎ ካሎሪ - - - ኪጁ - {0} ኪጁ - {0} ኪጁ - - - ጁልስ - {0} ጁልስ - {0} ጁልስ - - - ጊጋኸርዝ - {0} ጊጋኸርዝ - {0} ጊጋኸርዝ - - - ሜጋኸርዝ - {0} ሜጋኸርዝ - {0} ሜጋኸርዝ - - - ኪሎኸርዝ - {0} ኪሎኸርዝ - {0} ኪሎኸርዝ - - - ኸርዝ - {0} ኸርዝ - {0} ኸርዝ - {0} ሜፒ {0} ሜፒ @@ -6465,33 +6441,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ሚሊግራም {0} ሚሊግራም - - ማግ - {0} ማግ - {0} ማግ - ካራት - - ዳልተንስ - {0} ዳልተንስ - {0} ዳልተንስ - ጊዋ - {0} ጊዋ - {0} ጊዋ - - - ሜዋ - {0} ሜዋ - {0} ሜዋ - - - ሚዋ - {0} ሚዋ - {0} ሚዋ {0} የፈረስ ኃይል @@ -6521,26 +6475,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}° {0}° - - - {0} ኬ - {0} ኬ - - - ኪዩቢክ ያርድ - {0} ኪዩቢክ ያርድ - {0} ኪዩቢክ ያርድ - - ሜጋሊትር {0} ሜጋሊትር {0} ሜጋሊትር - - ሄሊ - {0} ሄሊ - {0} ሄሊ - {0} ሚሊ {0} ሚሊ @@ -6550,30 +6488,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ኤጫ - ጋሎን {0} ጋሎን {0} ጋሎን - {0}/ጋሎን - - - ኳርትስ - {0} ኳርትስ - {0} ኳርትስ - - - ኩባያ - {0} ኩባያ - {0} ኩባያ - - - የሻይ ማንኪያ - {0} የሻይ ማንኪያ - {0} የሻይ ማንኪያ - - - የሻይ ማንኪያዎች - {0} የሻይ ማንኪያዎች - {0} የሻይ ማንኪያዎች {0} ክመ @@ -6583,16 +6499,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ፈመ {0} ፈመ - - ብርሃን - {0} ብርሃን - {0} ብርሃን + + ካት + {0} ካት + {0} ካት - - ለሊቶች - {0} ለሊት - {0} ለሊት - {0}/ለሊት + + + {0} ሄ + {0} ሄ + + + ካሎሪ-IT + {0} ካሎሪ-IT + {0} ካሎሪ-IT + + + ኪግ-ኃይል + {0} ኪግ-ኃይል + {0} ኪግ-ኃይል + + + + {0} ቴ + {0} ቴ + + + ዌበ + {0} ዌበ + {0} ዌበ @@ -6609,22 +6544,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ወይም {1} {0} ወይም {1} - - {0} ወይም {1} - - - {0} ወይም {1} - - - {0} እና {1} - - - {0} እና {1} - - - {0} እና {1} - {0} እና {1} - diff --git a/make/data/cldr/common/main/an.xml b/make/data/cldr/common/main/an.xml index 6349366dec4..cd6d6405d07 100644 --- a/make/data/cldr/common/main/an.xml +++ b/make/data/cldr/common/main/an.xml @@ -1066,9 +1066,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) {0} {1} diff --git a/make/data/cldr/common/main/ar.xml b/make/data/cldr/common/main/ar.xml index a17155fcd2e..63ae709d94b 100644 --- a/make/data/cldr/common/main/ar.xml +++ b/make/data/cldr/common/main/ar.xml @@ -291,6 +291,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ لغة البافيا لغة الكولونيان الكردية + الكردية + الكرمانجية القموقية الكتيناي الكومي @@ -478,7 +480,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ لوشوتسيد الجنوبية الساموائية السامي الجنوبي - اللول سامي + السامي لولي الإيناري سامي السكولت سامي الشونا @@ -555,7 +557,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ الفيندا البندقية الفيتنامية - الماكوا + الماكوا لغة الفولابوك الفوتيك الفونجو @@ -809,6 +811,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ الصين كولومبيا جزيرة كليبيرتون + سارك كوستاريكا كوبا الرأس الأخضر @@ -1067,35 +1070,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ الفرز الرقمي قوة الفرز العملة + عرض الرموز التعبيرية نظام التوقيت (12 مقابل 24) نمط فصل السطور + فصل السطور وسط الكلمات نظام القياس الأرقام + فاصل الجملة بعد الاختصار المنطقة الزمنية متغيرات اللغة استخدام خاص التقويم البوذي + البوذي التقويم الصيني + الصيني التقويم القبطي + القبطي تقويم دانجي + دانجي التقويم الإثيوبي + الإثيوبي تقويم أميتي أليم الإثيوبي + أميتي أليم الإثيوبي التقويم الميلادي + الميلادي التقويم العبري + العبري التقويم القومي الهندي التقويم الهجري + الهجري التقويم الهجري المدني + الهجري المدني التقويم الهجري (السعودية - الرؤية) التقويم الهجري (الحسابات الفلكية) + الهجري (الحسابات الفلكية) التقويم الهجري (أم القرى) + الهجري (أم القرى) تقويم ISO-8601 التقويم الياباني + الياباني التقويم الفارسي + الفارسي تقويم مينجو + مينجو تنسيق العملة للحسابات + حسابات تنسيق العملة القياسي + قياسي تصنيف الرموز تصنيف تجاهل الرموز تصنيف اللكنات بشكل عادي @@ -1105,21 +1128,31 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ تصنيف الأحرف الكبيرة أولاً تصنيف بحسب الأحرف غير الحساسة لحالة الأحرف تصنيف بحسب حساسية الأحرف - الترتيب حسب اللغة الصينية التقليدية (Big5) ترتيب الفرز السابق: للتوافق + التوافق الترتيب حسب القاموس + القاموس ترتيب فرز Unicode الافتراضي - الترتيب حسب اللغة الصينية المبسّطة (GB2312) + Unicode افتراضي الترتيب حسب دليل الهاتف + دليل الهاتف الترتيب حسب اللفظ + حسب اللفظ الترتيب حسب نظام بنيين الصيني + بنيين الصيني بحث لأغراض عامة + بحث بحث باستخدام حرف الهانغول الساكن الأول ترتيب الفرز القياسي + قياسي الترتيب حسب نظام كتابة المجموع الصيني + نظام كتابة المجموع الصيني ترتيب تقليدي + تقليدي الترتيب حسب نظام الكتابة بالجذر والمجموع + نظام الكتابة بالجذر والمجموع الترتيب حسب نظام بوبوموفو + نظام بوبوموفو التصفية بدون تسوية تصنيف Unicode طبيعي تصنيف الأرقام على حدة @@ -1132,18 +1165,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ عرض كامل نصف العرض رقمي + افتراضي + رمز تعبيري + نص نظام 12 ساعة (0–11) + 12 (0–11) نظام 12 ساعة (1–12) + 12 (1–12) نظام 24 ساعة (0–23) + 24 (0–23) نظام 24 ساعة (1–24) + 24 (1–24) نمط فصل السطور: متباعد + متباعد نمط فصل السطور: عادي + عادي نمط فصل السطور: متقارب + متقارب + فصل الكل + الاحتفاظ بالكل + عادي + عدم فصل العبارات بي جي إن يو إن جي إي جي إن النظام المتري + متري نظام القياس البريطاني + بريطاني نظام القياس الأمريكي + أمريكي الأرقام العربية الهندية الأرقام العربية الهندية الممتدة الأرقام الأرمينية @@ -1188,6 +1238,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ الأرقام التبتية أرقام تقليدية أرقام فاي + غير مفعّل + مفعّل النظام المتري @@ -1211,6 +1263,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي] [\u061C\u200E \- ‑ , ٫ ٬ . % ٪ ‰ ؉ + 0٠ 1١ 2٢ 3٣ 4٤ 5٥ 6٦ 7٧ 8٨ 9٩] [\- ‐‑ – — ، ؛ \: ! ؟ . … ' " « » ( ) \[ \]] + [\- ‐‑ ، . /] ؟ [\: ∶] @@ -1344,11 +1397,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}، {0} + E، d y G d‏/M‏/y G + E، M/d/y G MMM y G d MMM y G E، d MMM y G @@ -1694,6 +1751,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} في {0} + + {1} في {0} + @@ -1702,6 +1762,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} في {0} + + {1} في {0} + @@ -1716,7 +1779,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E، d y G + MM، y G dd-MM-y GGGGG + E d/M/y G MMM y G d MMM y G E، d MMM y G @@ -1954,6 +2019,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + y-MM G + E، y/M/d G + + @@ -2812,6 +2883,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ غرينتش{0} غرينتش + غرينتش+? توقيت {0} توقيت {0} الصيفي توقيت {0} الرسمي @@ -3168,6 +3240,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ استر + + كويهايكيو + بونتا أريناز @@ -3433,9 +3508,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ بنوم بنه - اندربيرج - - كانتون @@ -4105,9 +4177,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - توقيت غرب أفريقيا - توقيت غرب أفريقيا الرسمي - توقيت غرب أفريقيا الصيفي + توقيت غرب أفريقيا @@ -4463,15 +4533,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ توقيت الخليج - - GST - توقيت غيانا + + + توقيت هاواي ألوتيان الرسمي + + توقيت هاواي ألوتيان @@ -5128,6 +5200,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + {1}⁄{0} + {1} {0} + {1} {0}⁠ + + + {1}⁄{0} + {1} {0} + {1} {0}⁠ + + + {1} {0}⁠ + @@ -5142,92 +5227,103 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} {1} {0} {1} + + + + ‏#,##0.00 ¤;‏-#,##0.00 ¤ + + + ؜#,##0.00;(؜#,##0.00) + + + ‏#,##0.00 ¤;‏-#,##0.00 ¤ - ‏#,##0.00;‏-#,##0.00 + ‏#,##0.00 ¤;‏-#,##0.00 ¤ + ‏#,##0.00;‏-#,##0.00 ؜#,##0.00¤;(؜#,##0.00¤) ؜#,##0.00 ¤;(؜#,##0.00 ¤) - #,##0.00;(#,##0.00) + ؜#,##0.00;(؜#,##0.00) - 0 ألف ¤ - 0 ألف ¤ - 0 ألف ¤ - 0 ألف ¤ - 0 ألف ¤ - 0 ألف ¤ - 00 ألف ¤ - 00 ألف ¤ - 00 ألف ¤ - 00 ألف ¤ - 00 ألف ¤ - 00 ألف ¤ - 000 ألف ¤ - 000 ألف ¤ - 000 ألف ¤ - 000 ألف ¤ - 000 ألف ¤ - 000 ألف ¤ - 0 مليون ¤ - 0 مليون ¤ - 0 مليون ¤ - 0 مليون ¤ - 0 مليون ¤ - 0 مليون ¤ - 00 مليون ¤ - 00 مليون ¤ - 00 مليون ¤ - 00 مليون ¤ - 00 مليون ¤ - 00 مليون ¤ - 000 مليون ¤ - 000 مليون ¤ - 000 مليون ¤ - 000 مليون ¤ - 000 مليون ¤ - 000 مليون ¤ - 0 مليار ¤ - 0 مليار ¤ - 0 مليار ¤ - 0 مليار ¤ - 0 مليار ¤ - 0 مليار ¤ - 00 مليار ¤ - 00 مليار ¤ - 00 مليار ¤ - 00 مليار ¤ - 00 مليار ¤ - 00 مليار ¤ - 000 مليار ¤ - 000 مليار ¤ - 000 مليار ¤ - 000 مليار ¤ - 000 مليار ¤ - 000 مليار ¤ - 0 ترليون ¤ - 0 ترليون ¤ - 0 ترليون ¤ - 0 ترليون ¤ - 0 ترليون ¤ - 0 ترليون ¤ - 00 ترليون ¤ - 00 ترليون ¤ - 00 ترليون ¤ - 00 ترليون ¤ - 00 ترليون ¤ - 00 ترليون ¤ - 000 ترليون ¤ - 000 ترليون ¤ - 000 ترليون ¤ - 000 ترليون ¤ - 000 ترليون ¤ - 000 ترليون ¤ + ‏0 ألف ¤ + ‏0 ألف ¤ + ‏0 ألف ¤ + ‏0 آلاف ¤ + ‏0 ألف ¤ + ‏0 ألف ¤ + ‏00 ألف ¤ + ‏00 ألف ¤ + ‏00 ألف ¤ + ‏00 ألف ¤ + ‏00 ألف ¤ + ‏00 ألف ¤ + ‏000 ألف ¤ + ‏000 ألف ¤ + ‏000 ألف ¤ + ‏000 ألف ¤ + ‏000 ألف ¤ + ‏000 ألف ¤ + ‏0 مليون ¤ + ‏0 مليون ¤ + ‏0 مليون ¤ + ‏0 مليون ¤ + ‏0 مليون ¤ + ‏0 مليون ¤ + ‏00 مليون ¤ + ‏00 مليون ¤ + ‏00 مليون ¤ + ‏00 مليون ¤ + ‏00 مليون ¤ + ‏00 مليون ¤ + ‏000 مليون ¤ + ‏000 مليون ¤ + ‏000 مليون ¤ + ‏000 مليون ¤ + ‏000 مليون ¤ + ‏000 مليون ¤ + ‏0 مليار ¤ + ‏0 مليار ¤ + ‏0 مليار ¤ + ‏0 مليار ¤ + ‏0 مليار ¤ + ‏0 مليار ¤ + ‏00 مليار ¤ + ‏00 مليار ¤ + ‏00 مليار ¤ + ‏00 مليار ¤ + ‏00 مليار ¤ + ‏00 مليار ¤ + ‏000 مليار ¤ + ‏000 مليار ¤ + ‏000 مليار ¤ + ‏000 مليار ¤ + ‏000 مليار ¤ + ‏000 مليار ¤ + ‏0 ترليون ¤ + ‏0 ترليون ¤ + ‏0 ترليون ¤ + ‏0 ترليون ¤ + ‏0 ترليون ¤ + ‏0 ترليون ¤ + ‏00 ترليون ¤ + ‏00 ترليون ¤ + ‏00 ترليون ¤ + ‏00 ترليون ¤ + ‏00 ترليون ¤ + ‏00 ترليون ¤ + ‏000 ترليون ¤ + ‏000 ترليون ¤ + ‏000 ترليون ¤ + ‏000 ترليون ¤ + ‏000 ترليون ¤ + ‏000 ترليون ¤ {0} ¤¤ @@ -6132,6 +6228,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ دولار شرق الكاريبي + + غيلدر كاريبي + غيلدر كاريبي + غيلدر كاريبي + غيلدر كاريبي + غيلدر كاريبي + غيلدر كاريبي + غيلدر كاريبي + حقوق السحب الخاصة @@ -6202,6 +6307,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ دولار زمبابوي + + ذهب زيمبابوي + ذهب زيمبابوي + ذهب زيمبابوي + ذهب زيمبابوي + ذهب زيمبابوي + ذهب زيمبابوي + ذهب زيمبابوي + دولار زمبابوي 2009 @@ -6492,7 +6606,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} عنصرًا {0} عنصر - + + جزء + {0} جزء + {0} جزء + جزآن + {0} أجزاء + {0} جزءًا + {0} جزء + + masculine جزء في المليون {0} جزء في المليون @@ -6526,6 +6649,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + + سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + masculine لتر لكل كيلومتر @@ -7147,6 +7279,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} مليمتر زئبقي {0} مليمتر زئبقي + + زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + رطل لكل بوصة مربعة {0} رطل لكل بوصة مربعة @@ -7367,6 +7508,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + + أونصة سائلة مترية + {0} أونصة سائلة مترية + {0} أونصة سائلة مترية + {0} أونصة سائلة مترية + {0} أونصة سائلة مترية + {0} أونصة سائلة مترية + {0} أونصة سائلة مترية + {0} لكل غالون @@ -7461,7 +7611,133 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} رشّة {0} رشّة - + + ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + + + كاتال + {0} كاتال + {0} كاتال + {0} كاتال + {0} كاتال + {0} كاتال + {0} كاتال + + + كولوم + {0} كولوم + {0} كولوم + {0} كولوم + {0} كولوم + {0} كولوم + {0} كولوم + + + فاراد + {0} فاراد + {0} فاراد + {0} فاراد + {0} فاراد + {0} فاراد + {0} فاراد + + + هنري + {0} هنري + {0} هنري + {0} هنري + {0} هنري + {0} هنري + {0} هنري + + + سيمنز + {0} سيمنز + {0} سيمنز + {0} سيمنز + {0} سيمنز + {0} سيمنز + {0} سيمنز + + + سعرة-it + {0} سعرة-it + {0} سعرة-it + {0} سعرة-it + {0} سعرة-it + {0} سعرة-it + {0} سعرة-it + + + بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + + + زيفرت + {0} زيفرت + {0} زيفرت + {0} زيفرت + {0} زيفرت + {0} زيفرت + {0} زيفرت + + + جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + + + كيلوغرام ثقلي + {0} كيلوغرام ثقلي + {0} كيلوغرام ثقلي + {0} كيلوغرام ثقلي + {0} كيلوغرام ثقلي + {0} كيلوغرام ثقلي + {0} كيلوغرام ثقلي + + + تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + + + ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + + + ضوئي + {0} ضوئي + {0} ضوئي + {0} ضوئي + {0} ضوئية + {0} ضوئي + {0} ضوئي + + masculine جزء بالمليار {0} جزء بالمليار @@ -7474,12 +7750,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine ليالي - {0} ليلة - ليلة - ليلتان - {0} ليالٍ - {0} ليلةً - {0} ليلة {0} في الليلة @@ -7781,7 +8051,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} عنصرًا {0} عنصر - + + جزء + {0} جزء + {0} جزء + جزآن + {0} أجزاء + {0} جزءًا + {0} جزء + + جزء/مليون {0} جزء/مليون {0} جزء/مليون @@ -7817,6 +8096,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} مول {0} مول + + سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + لتر/كم {0} لتر/كم @@ -8761,6 +9049,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ملم زئبقي {0} ملم زئبقي + + زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + رطل/بوصة مربعة {0} رطل/بوصة² @@ -9070,6 +9367,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} كوب متري {0} كوب متري + + أونصة س مترية + {0} أونصة س مترية + {0} أونصة س مترية + {0} أونصة س مترية + {0} أونصة س مترية + {0} أونصة س مترية + {0} أونصة س مترية + فدان قدم {0} فدان قدم @@ -9243,7 +9549,133 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ربع غالون إمبراطوري {0} ربع غالون إمبراطوري - + + ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + + + كات + {0} كات + {0} كات + {0} كات + {0} كات + {0} كات + {0} كات + + + كول + {0} كول + {0} كول + {0} كول + {0} كول + {0} كول + {0} كول + + + ف + {0} ف + {0} ف + {0} ف + {0} ف + {0} ف + {0} ف + + + ه + {0} ه + {0} ه + {0} ه + {0} ه + {0} ه + {0} ه + + + س + {0} س + {0} س + {0} س + {0} س + {0} س + {0} س + + + سع-it + {0} سع-it + {0} سع-it + {0} سع-it + {0} سع-it + {0} سع-it + {0} سع-it + + + بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + + + زيف + {0} زيف + {0} زيف + {0} زيف + {0} زيف + {0} زيف + {0} زيف + + + جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + + + كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + + + تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + + + ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + + + ضوئي + {0} ضوئي + {0} ضوئي + {0} ضوئي + {0} ضوئية + {0} ضوئي + {0} ضوئي + + جزء/مليار {0} جزء/مليار {0} جزء/مليار @@ -9326,6 +9758,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} عنصر {0} عنصر + + جزء + {0} جزء + {0} جزء + جزآن + {0} أجزاء + {0} جزءًا + {0} جزء + ٪ @@ -9341,6 +9782,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ؊ {0} ؊ + + سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + {0} سكّري + ل/كم {0} ل/كم @@ -9596,6 +10046,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ك واط {0} ك واط + + زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + {0} زئبقي + رطل/بوصة² @@ -9640,6 +10099,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ل {0} ل + + أونصة س م + {0} أونصة س م + {0} أونصة س م + {0} أونصة س م + {0} أونصة س م + {0} أونصة س م + {0} أونصة س م + أونصة س {0} أونصة س @@ -9683,24 +10151,139 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} قدح {0} قدح - - جزء/مليار - {0} جزء/مليار - {0} جزء/مليار - جزآن/مليار - {0} أجزاء/مليار - {0} جزءًا/مليار - {0} جزء/مليار + + ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + {0} ستراديان + + + كات + {0} كات + {0} كات + {0} كات + {0} كات + {0} كات + {0} كات + + + كول + {0} كول + {0} كول + {0} كول + {0} كول + {0} كول + {0} كول + + + ف + {0} ف + {0} ف + {0} ف + {0} ف + {0} ف + {0} ف + + + ه + {0} ه + {0} ه + {0} ه + {0} ه + {0} ه + {0} ه + + + س + {0} س + {0} س + {0} س + {0} س + {0} س + {0} س + + + سع-it + {0} سع-it + {0} سع-it + {0} سع-it + {0} سع-it + {0} سع-it + {0} سع-it + + + بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + {0} بيكريل + + + زيف + {0} زيف + {0} زيف + {0} زيف + {0} زيف + {0} زيف + {0} زيف + + + جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + {0} جراي + + + كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + {0} كغ ث + + + تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + {0} تسلا + + + ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + {0} ويبر + + + ضوئي + {0} ضوئي + {0} ضوئي + {0} ضوئي + {0} ضوئية + {0} ضوئي + {0} ضوئي - ليلة {0} ل {0} ل {0} ل {0} ل {0} ل {0} ل - {0}/ل diff --git a/make/data/cldr/common/main/ar_SA.xml b/make/data/cldr/common/main/ar_SA.xml index aafe7e5e7c7..db79c9ea1c8 100644 --- a/make/data/cldr/common/main/ar_SA.xml +++ b/make/data/cldr/common/main/ar_SA.xml @@ -133,7 +133,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} بوصة مربعة {0} بوصة مربعة - + {0} جزء في المليون {0} جزء في المليون جزءان في المليون @@ -367,7 +367,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} قيراطًا {0} قيراط - + {0} جزء/مليون {0} جزء/مليون جزءان/مليون diff --git a/make/data/cldr/common/main/as.xml b/make/data/cldr/common/main/as.xml index 1eeb5591b56..b02fb84beea 100644 --- a/make/data/cldr/common/main/as.xml +++ b/make/data/cldr/common/main/as.xml @@ -42,8 +42,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ অৱধী আয়মাৰা আজেৰবাইজানী - আজেৰি বাছখিৰ + বালুচী বালিনীজ বাছা বেলাৰুছীয় @@ -226,6 +226,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ বাফিয়া কোলোগনিয়ান কুৰ্ডিচ + কুৰ্ডিশ্ব + কুৰ্ডিশ্ব কুমিক কোমি কোৰ্নিচ @@ -619,6 +621,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ চীন কলম্বিয়া ক্লিপাৰটোন দ্বীপ + চাৰ্ক কোষ্টা ৰিকা কিউবা কেপ ভার্দে @@ -852,49 +855,87 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ মুদ্ৰা সজ্জা সজোৱা ক্ৰম মুদ্ৰা + ইম’জীৰ উপস্থাপনা ঘণ্টীয়া চক্ৰ (১২ বনাম ২৪) পংক্তি বিচ্ছেদ শৈলী + শব্দৰ মাজত শাৰীৰ বিভাজন জোখ-মাখৰ প্ৰণালী সংখ্যা + বৌদ্ধ কেলেণ্ডাৰ + বৌদ্ধ চীনা কেলেণ্ডাৰ + চীনা ক’প্টিক কেলেণ্ডাৰ + ক’প্টিক দাংগি কেলেণ্ডাৰ + দাংগি ইথিঅ’পিক কেলেণ্ডাৰ + ইথিঅ’পিক ইথিঅ’পিক এমিটি এলেম কেলেণ্ডাৰ + ইথিঅ’পিক এমিটি এলেম গ্ৰেগোৰিয়ান কেলেণ্ডাৰ + গ্ৰেগোৰিয়ান হিব্ৰু কেলেণ্ডাৰ + হিব্ৰু ভাৰতীয় ৰাষ্ট্ৰীয় পঞ্জিকা + ভাৰতীয় ৰাষ্ট্ৰীয় হিজৰি কেলেণ্ডাৰ + হিজৰি হিজৰি কেলেণ্ডাৰ (টেবুলাৰ, নাগৰিক যুগ) + হিজৰি (টেবুলাৰ, নাগৰিক যুগ) হিজৰি কেলেণ্ডাৰ (উম অল-কুৰা) + হিজৰি (উম অল-কুৰা) আই. এছ. অ’.-৮৬০১ কেলেণ্ডাৰ জাপানী কেলেণ্ডাৰ + জাপানী ফাৰ্চী কেলেণ্ডাৰ + ফাৰ্চী চীনা প্ৰজাতন্ত্ৰৰ কেলেণ্ডাৰ + চীনা প্ৰজাতন্ত্ৰ গাণনিক মুদ্ৰা সজ্জা + গাণনিক মান্য মুদ্ৰা সজ্জা - পৰম্পৰাগত চীনা শৃঙ্খলাবদ্ধ কৰাৰ ক্ৰম - Big5 + মান্য ডিফ’ল্ট ইউনিকোড সজোৱা ক্ৰম - সৰল চীনা শৃঙ্খলাবদ্ধ কৰাৰ ক্ৰম - GB2312 + ডিফ’ল্ট ইউনিকোড টেলিফোন বহিৰ মতেশৃঙ্খলাবদ্ধ কৰাৰ ক্ৰম পিন্‌য়িন শৃঙ্খলাবদ্ধ কৰাৰ ক্ৰম - সাধাৰণ উদ্দেশ্যে অনুসন্ধান + সাধাৰণ উদ্দেশ্যে সন্ধান + সন্ধান মান্য সজোৱা ক্ৰম + মান্য স্ট্ৰোক শৃঙ্খলাবদ্ধ কৰাৰ ক্ৰম পৰম্পৰাগতভাবে শৃঙ্খলাবদ্ধ কৰাৰ ক্ৰম + ডিফ’ল্ট + ইম’জী + পাঠ্য ১২ ঘণ্টীয়া প্ৰণালী (০–১১) + ১২ (০–১১) ১২ (০–১১) ১২ ঘণ্টীয়া প্ৰণালী (১–১২) + ১২ (১–১২) ১২ (১–১২) ২৪ ঘণ্টীয়া প্ৰণালী (০–২৩) + 24 (0–23) Hour Cycle (12 vs 24) others… ২৪ (০–২৩) …অন্য ঘণ্টীয়া প্ৰণালী(১২ বনাম ২৪): ২৪ (০–২৩) ৩ (০–২৩) ২৪ ঘণ্টীয়া প্ৰণালী (১–২৪) + ২৪ (১–২৪) ২৪ (১–২৪) ঢিলা পংক্তি বিচ্ছেদ শৈলী + ঢিলা সাধাৰণ পংক্তি বিচ্ছেদ শৈলী + সাধাৰণ কঠোৰ পংক্তি বিচ্ছেদ শৈলী + পংক্তি বিচ্ছেদ + আটাইবোৰ বিভাজন কৰক + আটাইবোৰ ৰাখক + সাধাৰণ + ব্যাক্যাংশত ৰাখক মেট্ৰিক প্ৰণালী + মেট্ৰিক ইম্পেৰিয়েল জোখ-মাখৰ প্ৰণালী + ইম্পেৰিয়েল মাৰ্কিন যুক্তৰাষ্ট্ৰৰ জোখ-মাখৰ প্ৰণালী + মাৰ্কিন আৰবী-ভাৰতীয় অংক বিস্তাৰিত আৰবী-ভাৰতীয় অংক আৰ্মেনীয় সংখ্যা @@ -935,6 +976,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ থাই অংক তিব্বতী অংক ভেই সংখ্যা + + মেট্ৰিক @@ -982,7 +1025,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - GGGGG y-MM-dd + G y-MM-dd @@ -991,9 +1034,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} বজাত - - {1} 'at' {0} - @@ -1201,27 +1241,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - am - pm - - - AM - PM - - - - AM - PM - - - AM - PM - - - AM - PM + পূৰ্বাহ্ন + অপৰাহ্ন @@ -2158,6 +2180,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ইষ্টাৰ + + কোইহাইক + পুণ্টা এৰিনাছ @@ -2423,9 +2448,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ নোম পেন্‌হ - এণ্ডৰবাৰী - - কেণ্টন @@ -3095,9 +3117,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - পশ্চিম আফ্ৰিকাৰ সময় - পশ্চিম আফ্ৰিকাৰ মান সময় - পশ্চিম আফ্ৰিকাৰ গ্ৰীষ্মকালীন সময় + পশ্চিম আফ্ৰিকাৰ সময় @@ -3447,6 +3467,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ গায়ানাৰ সময় + + + হাৱাই-এলিউশ্বনৰ মান সময় + + হাৱাই-এলিউশ্বনৰ সময় @@ -3955,6 +3980,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ beng + + : + . @@ -4004,8 +4032,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 0 নিযুত 00 নিযুত 00 নিযুত - 000 নিঃ - 000 নিঃ + 0 নিঃ + 0 নিঃ 0 শঃ কোঃ 0 শঃ কোঃ 00 শঃ কোঃ @@ -4021,6 +4049,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + never + @@ -4031,7 +4062,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - #,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) @@ -4039,10 +4074,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##,##0.00 - #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) @@ -4052,26 +4089,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ 0 হাজাৰ ¤ 00 হাজাৰ ¤ 00 হাজাৰ - ¤ 000 লাখ - ¤ 000 লাখ + ¤ 0 লাখ + ¤ 0 লাখ ¤ 0 নিযুত ¤ 0 নিযুত ¤ 00 নিযুত ¤ 00 নিযুত - ¤ 000 নিযুত - ¤ 000 নিযুত - ¤ 0 শত কোটি - ¤ 0 শত কোটি - ¤ 00 শত কোটি - ¤ 00 শত কোটি - ¤ 000 শত কোটি - ¤ 000 শত কোটি - ¤ 0 শত পৰাৰ্দ্ধ - ¤ 0 শত পৰাৰ্দ্ধ - ¤ 00 শত পৰাৰ্দ্ধ - ¤ 00 শত পৰাৰ্দ্ধ - ¤ 000 শত পৰাৰ্দ্ধ - ¤ 000 শত পৰাৰ্দ্ধ + ¤ 0 নিঃ + ¤ 0 নিঃ + ¤ 0 শঃ কোঃ + ¤ 0 শঃ কোঃ + ¤ 00 শঃ কোঃ + ¤ 00 শঃ কোঃ + ¤ 000 শঃ কঃ + ¤ 000 শঃ কঃ + ¤ 0 শঃ পঃ + ¤ 0 শঃ পঃ + ¤ 00 শঃ পঃ + ¤ 00 শঃ পঃ + ¤ 000 শঃ পঃ + ¤ 000 শঃ পঃ {0} ¤¤ @@ -4079,8 +4116,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ সংযুক্ত আৰব আমিৰাত ডিৰহেম - UAE ডিৰহেম - UAE ডিৰহেম আফগান আফগানী @@ -4563,6 +4598,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ইষ্ট কেৰিবিয়ান ডলাৰ + + কেৰিবীয়ান গিল্ডাৰ + কেৰিবীয়ান গিল্ডাৰ + কেৰিবীয়ান গিল্ডাৰ + পশ্চিম আফ্ৰিকান CFA ফ্ৰেংক @@ -4583,6 +4623,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ জাম্বিয়ান কোৱাচা + + জিম্বাৱীয় সোণ + জিম্বাৱীয় সোণ + জিম্বাৱীয় সোণ + {0}+ @@ -4754,7 +4799,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ আইটেমসমূহ - + + অংশ + {0} অংশ + {0} অংশ + + প্ৰতি মিলিয়নত ভাগ প্ৰতি মিলিয়নত {0} ভাগ প্ৰতি মিলিয়নত {0} ভাগ @@ -4772,6 +4822,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} পাৰমিৰেইড {0} পাৰমিৰেইড + + গ্লুক’জ + {0} গ্লুঃ + {0}গ্লুঃ + প্ৰতি কিলোমিটাৰত লিটাৰ প্ৰতি কিলোমিটাৰত {0} লিটাৰ @@ -5131,6 +5186,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} মিলিমিটাৰ মাৰ্কিউৰী {0} মিলিমিটাৰ মাৰ্কিউৰী + + মাৰ্কিঃ + {0} মাৰ্কিঃ + {0} মাৰ্কিঃ + প্ৰতি বৰ্গ ইঞ্চিত পাউণ্ড {0} প্ৰতি বৰ্গ ইঞ্চিত পাউণ্ড @@ -5283,6 +5343,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} মেট্ৰিক কাপ {0} মেট্ৰিক কাপ + + ফ্লুঃ আঃ মেঃ + {0} ফ্লুঃ আঃ মেঃ + {0}ফ্লুঃ আঃ মেঃ + {0} একৰ-ফুট {0} একৰ-ফুট @@ -5334,22 +5399,76 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ইম্পেৰিয়েল কুৱাৰ্ট {0} ইম্পেৰিয়েল কুৱাৰ্ট - - আলোক - {0} আলোক - {0} আলোক + + ষ্টেৰাডিয়ান + {0} ষ্টেৰাঃ + {0} ষ্টেৰাঃ - + + কাটাল + {0} কাটাঃ + {0} কাটাঃ + + + কুলম্ব + {0} কুঃ + {0} কুঃ + + + ফাৰাড + {0}ফাঃ + {0} ফাঃ + + + হেনৰী + {0} হেনঃ + {0}হেনঃ + + + ছিয়েমেন + {0} ছিয়েঃ + {0} ছিয়েঃ + + + কেল’ৰি-আইটি + {0}কেল-আইটি + {0} কেল-আইটি + + + বেকাৰেল + {0} বেঃ + {0} বেঃ + + + চিয়েভাৰ্ট + {0} এচভিঃ + {0} এচভিঃ + + + গ্ৰে + {0} গ্ৰে + {0} গ্ৰে + + + কিলোগ্ৰাম-বল + {0} কিঃগ্ৰাঃবঃ + {0} কিঃগ্ৰাঃবঃ + + + টেচলা + {0} টেঃ + {0} টেঃ + + + ৱেবাৰ + {0} ৱেঃ + {0} ৱেঃ + + প্ৰতি বিলিয়নত অংশ {0} প্ৰতি বিলিয়নত অংশ {0} প্ৰতি বিলিয়নত অংশ - - নিশা - {0} নিশা - {0} নিশা - {0}/নিশা - প্ৰধান দিক্-নিৰ্দেশনা {0} পূব @@ -5542,7 +5661,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} টা আইটেম {0} টা আইটেম - + + অংশ + {0} অংশ + {0} অংশ + + ভাগ/মিলিয়ন @@ -5559,6 +5683,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ম’ল {0} ম’ল + + গ্লুঃ + {0} গ্লুঃ + {0} গ্লুঃ + লিটাৰ/কিঃ মিঃ {0} লিঃ/কিঃ মিঃ @@ -6056,8 +6185,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmHg - {0} mmHg - {0} mmHg + {0} মিঃমিঃমাৰ্কিঃ + {0}মিঃমিঃমাৰ্কিঃ + + + মাৰ্কিঃ + {0} মাৰ্কিঃ + {0} মাৰ্কিঃ বাৰ @@ -6181,6 +6315,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} মেঃ কাঃ {0} মেঃ কাঃ + + ফ্লুঃ আঃ মেঃ + {0}ফ্লুঃ আঃ মেঃ + {0} ফ্লুঃ আঃ মেঃ + একৰ-ফুট {0} এঃ-ফুঃ @@ -6259,12 +6398,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} পিঞ্চ {0} পিঞ্চ + + ষ্টেৰাঃ + {0} ষ্টেৰাঃ + {0}ষ্টেৰাঃ + + + কাটাঃ + {0} কাটাঃ + {0} কাটাঃ + + + কুঃ + {0} কুঃ + {0} কুঃ + + + ফাঃ + {0} ফাঃ + {0} ফাঃ + + + হেনঃ + {0} হেনঃ + {0} হেনঃ + + + ছিয়েঃ + {0} ছিয়েঃ + {0} ছিয়েঃ + + + কেল’ৰি-আইটি + {0} কেল-আইটি + {0} কেল-আইটি + + + বেঃ + {0}বেঃ + {0}বেঃ + + + এচভিঃ + {0} এচভিঃ + {0} এচভিঃ + + + গ্ৰে + {0}গ্ৰে + {0} গ্ৰে + + + কিঃগ্ৰাঃবঃ + {0} কিঃগ্ৰাঃবঃ + {0} কিঃগ্ৰাঃবঃ + + + টেঃ + {0} টেঃ + {0} টেঃ + + + ৱেঃ + {0} ৱেঃ + {0} ৱেঃ + আলোক {0} আলোক {0} আলোক - + অংশ/বিলিয়ন @@ -6367,7 +6571,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}″ {0}″ - + + অংশ + {0} অংশ + {0} অংশ + + ppm {0}ppm {0}ppm @@ -6381,6 +6590,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + গ্লুঃ + {0} গ্লুঃ + {0} গ্লুঃ + ল/১০০ ক.ম. @@ -6435,9 +6649,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}কেলৰি {0}কেলৰি - - N - {0}kWh/100km {0} kWh/100km @@ -6477,6 +6688,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ L☉ + + {0} মিঃমিঃমাৰ্কিঃ + {0}মিঃমিঃমাৰ্কিঃ + + + মাৰ্কিঃ + {0} মাৰ্কিঃ + {0} মাৰ্কিঃ + ″ Hg {0}″ Hg @@ -6502,6 +6722,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}° {0}° + + ফ্লুঃ আঃ মেঃ + {0}ফ্লুঃ আঃ মেঃ + {0} ফ্লুঃ আঃ মেঃ + {0}টিস্পুন {0}টিস্পুন @@ -6515,21 +6740,79 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}dsp-Imp {0}dsp-Imp + + ষ্টেৰাঃ + {0} ষ্টেৰাঃ + {0}ষ্টেৰাঃ + + + কাটাঃ + {0} কাটাঃ + {0} কাটাঃ + + + কুঃ + {0} কুঃ + {0} কুঃ + + + ফাঃ + {0} ফাঃ + {0} ফাঃ + + + হেনঃ + {0} হেনঃ + {0} হেনঃ + + + ছিয়েঃ + {0} ছিয়েঃ + {0} ছিয়েঃ + + + কেল’ৰি-আইটি + {0} কেল-আইটি + {0} কেল-আইটি + + + বেঃ + {0}বেঃ + {0}বেঃ + + + এচভিঃ + {0} এচভিঃ + {0} এচভিঃ + + + গ্ৰে + {0} গ্ৰে + {0}গ্ৰে + + + কিঃগ্ৰাঃবঃ + {0} কিঃগ্ৰাঃবঃ + {0} কিঃগ্ৰাঃবঃ + + + টেঃ + {0} টেঃ + {0} টেঃ + + + ৱেঃ + {0} ৱেঃ + {0} ৱেঃ + - আলোক {0}আলোক {0}আলোক - + {0}ppb {0}ppb - - নিশা - {0} নিশা - {0} নিশা - {0}/নিশা - diff --git a/make/data/cldr/common/main/asa.xml b/make/data/cldr/common/main/asa.xml index 1e8e9139baf..7830fb83ecd 100644 --- a/make/data/cldr/common/main/asa.xml +++ b/make/data/cldr/common/main/asa.xml @@ -556,6 +556,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/ast.xml b/make/data/cldr/common/main/ast.xml index bf948f4bead..f7b55524bed 100644 --- a/make/data/cldr/common/main/ast.xml +++ b/make/data/cldr/common/main/ast.xml @@ -1198,13 +1198,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic calendariu de la República de China formatu monetariu contable formatu monetariu estándar - orde de clasificación chinu tradicional - Big5 orde de clasificación anterior, por compatibilidá orde de clasificación de diccionariu orde de clasificación Unicode predetermináu orde de clasificación Emoji regles d’ordenamientu europees - orde de clasificación chinu simplificáu - GB2312 orde de clasificación de llista telefónica orde de clasificación pinyin gueta xeneral @@ -1705,20 +1703,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - antes de la Encarnación - después de la Encarnación - - - a. E. - d. E. - - - aE - dE - - @@ -3376,11 +3360,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora braniega de {0} Hora estándar de {0} - - HST - HST - HDT - Honolulu @@ -3556,9 +3535,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tokiu - - Enderbury - Pyong Yang @@ -3768,9 +3744,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Hora d’África del oeste - Hora estándar d’África del oeste - Hora braniega d’África del oeste + Hora d’África del oeste @@ -4206,6 +4180,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora de La Guyana + + + Hora estándar de Hawaii-Aleutianes + + Hora de Hawaii-Aleutianes @@ -4772,6 +4751,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -6431,7 +6414,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} milimol per llitru {0} milimoles per llitru - + partes per millón {0} parte per millón {0} partes per millón @@ -7343,7 +7326,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mmol/L {0}mmol/L - + {0}ppm {0}ppm diff --git a/make/data/cldr/common/main/az.xml b/make/data/cldr/common/main/az.xml index c349944c7a5..d7d104f7a97 100644 --- a/make/data/cldr/common/main/az.xml +++ b/make/data/cldr/common/main/az.xml @@ -124,7 +124,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ taita alman Avstriya almancası - İsveçrə yüksək almancası delaver slavey doqrib @@ -257,10 +256,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kabarda-çərkəz tiyap makond - kabuverdian + kabuverdianu koro konqo - kaiqanq + kaynqanq xazi xotan koyra çiini @@ -287,6 +286,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia köln kürd + kürd dili + kurmanci (kürd dili) dialekti kumık kutenay komi @@ -805,6 +806,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Çin Kolumbiya Klipperton adası + sark (ingilis dili) dialekti Kosta Rika Kuba Kabo-Verde @@ -1039,45 +1041,85 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Valyuta Formatı Sıralama Valyuta + Emojilərin təqdim edilməsi Saat Sikli (12 / 24) Sətirdən sətrə keçirmə üslubu + Sözlərin bölünərək sətirdən-sətrə keçirilməsi Ölçü Sistemi Rəqəmlər + Abreviaturadan sonra cümlə kəsintisi Buddist təqvimi + Buddist Çin təqvimi + Çin Kopt təqvimi + Qibti Dangi təqvimi + Dangi Efiop təqvimi + Efiop Efiop amet-alem təqvimi - Qreqorian təqvimi + Efiop Amete Alem + Qriqori təqvimi + Qriqori Yəhudi Təqvimi + Yəhudi Hindi təqvimi Hicri təqvimi + Hicri Hicri təqvimi (tabulyar, vətəndaşlıq dövrü) + Hicri (cədvəl, mülki dövr) Hicri təqvim (tabulyar, astromonik dövr) + Hicri (cədvəl, astronomik dövr) Hicri təqvim (Umm əl-Qura) + Hicri (Umm əl-Qura) ISO-8601 Təqvimi Yapon Təqvimi + Yapon İran Təqvimi + İran Minquo Təqvimi + Minquo Uçot Valyuta Formatı + Valyuta formatı: Uçot Standart Valyuta Formatı + Valyuta formatı: Standart Standart Unicode Sıralama + Defolt unikod Pinyin təqvimi Ümumi Məqsədli Axtarış + Axtarış Standart Sıralama + Standart + Emojilərin təqdim edilməsi: Standart + Emoji + Mətn 12 Saatlıq Sistem (0–11) + 12 (0–11) 12 Saatlıq Sistem (0–12) + 12 (1–12) 24 Saatlıq Sistem (0–23) + 24 (0–23) 24 Saatlıq Sistem (0–23) + 24 (1–24) Sərbəst sətirdən sətrə keçirmə üslubu + Sərbəst Normal sətirdən sətrə keçirmə üslubu + Normal Sərt sətirdən sətrə keçirmə üslubu + Ciddi + Hamısını böl + Hamısını saxla + Normal + İfadələrdə saxla Metrik Sistem + Metrik İmperial Ölçü Sistemi + Birləşmiş Krallıq ABŞ Ölçü Sistemi + Birləşmiş Ştatlar Ərəb-Hind Rəqəmləri Genişlənmiş Ərəb-Hind Rəqəmləri Erməni Rəqəmləri @@ -1118,6 +1160,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tay Rəqəmləri Tibet Rəqəmləri Vai rəqəmləri + Deaktiv + Aktiv Metrik @@ -1138,9 +1182,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1210,11 +1251,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a + G MM/y GGGGG d M y + G dd/MM/y, E G MMM y G d MMM y G d MMM y, E - h a h:mm a h:mm:ss a dd.MM @@ -1230,6 +1272,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G MMMM y + + B h – B h + B h – h + + + B h:mm – B h:mm + B h:mm – h:mm + B h:mm – h:mm + GGGGG MM/y– GGGGG MM/y GGGGG MM/y – MM/y @@ -1264,10 +1315,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G d MMM, E – d MMM y, E G d MMM y, E – d MMM y, E - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1278,10 +1325,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - dd.MM – dd.MM dd.MM – dd.MM @@ -1291,11 +1334,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dd.MM, E – dd.MM, E - MMM d – MMM d - - - MMM d, E – MMM d, E - MMM d, E – MMM d, E + d – d MMM GGGGG MM/y – MM/y @@ -1316,8 +1355,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G MMM y – MMM y - G d–d MMM y - G d MMM y – d MMM + G MMM d – d, y + G MMM d – MMM d, y G d MMM y – d MMM y @@ -1525,13 +1564,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}/{0} + + {1}/{0} + {1} {0} - {1} 'at' {0} + {1}/{0} + + + {1}/{0} @@ -1541,6 +1586,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1549,6 +1597,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + B h @@ -1559,11 +1610,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d E E h:mm a E h:mm:ss a - GGGGG d MMM y + G M y + G d M y + G d M y, E G MMM y G d MMM y G d MMM y, E - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1586,6 +1638,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Y, w 'həftə' + + B h – B h + B h–h + + + B h:mm–B h:mm + B h:mm–h:mm + B h:mm–h:mm + GGGGG MM.y – GGGGG MM.y GGGGG MM.y – MM.y @@ -1615,15 +1676,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G d MMM y – d MMM y - G d MMM, E – d MMM y, E + G d MMM, E – d MMM, E, y G d MMM y, E – d MMM y, E G d MMM, E – d MMM y, E G d MMM y, E – d MMM y, E - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1634,10 +1691,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - dd.MM – dd.MM dd.MM – dd.MM @@ -1673,12 +1726,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM y – MMM y - d MMM y – d MMM + d – d MMM y + d MMM – d MMM y d MMM y – d MMM y - d MMM y, E – d MMM, E - d MMM y, E – d MMM, E + E, d MMM – E, d MMM y + E, d MMM – E, d MMM y d MMM y, E – d MMM y, E @@ -1721,6 +1775,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + G MM/y + G dd/MM/y, E + + @@ -1843,7 +1903,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ hft. günü - ayın həftə günü + ayın həftəiçi günü ay hft. günü @@ -1899,9 +1959,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - keçən ÇƏ + keçən Ç.ax. bu ÇƏ gələn ÇƏ + + {0} çərşənbə axşamı sonra + {0} çərşənbə axşamı ərzində + keçən çərşənbə @@ -2057,9 +2121,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Angilya - - Tirana - Syova @@ -2300,6 +2361,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pasxa + + Koyayke + Santyaqo @@ -2512,7 +2576,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pnom Pen - Enderböri + Kanton Kirimati @@ -2977,9 +3041,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Qərbi Afrika Vaxtı - Qərbi Afrika Standart Vaxtı - Qərbi Afrika Yay Vaxtı + Qərbi Afrika Vaxtı @@ -2998,9 +3060,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Şimali Mərkəzi Amerika Vaxtı - Şimali Mərkəzi Amerika Standart Vaxtı - Şimali Mərkəzi Amerika Yay Vaxtı + Mərkəzi Amerika saat qurşağı + Mərkəzi Amerika Standart Vaxtı + Mərkəzi Amerika yay vaxtı @@ -3061,7 +3123,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Atlantik Vaxt + Atlantik saat qurşağı Atlantik Standart Vaxt Atlantik Yay Vaxtı @@ -3329,6 +3391,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Qayana Vaxtı + + + Havay-Aleut Standart Vaxtı + + Havay-Aleut Vaxtı @@ -3748,6 +3815,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Çuuk Vaxtı + + + Türkiya vaxtı + Türkiya standart vaxtı + Türkiya yay vaxtı + + Türkmənistan Vaxtı @@ -3926,13 +4000,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + #,##0.00 + + + #,##0.00 ¤ + #,##0.00 ¤ - #,##0.00;(#,##0.00) + #,##0.00 ¤ + #,##0.00 @@ -3943,24 +4030,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 00K ¤ 000K ¤ 000K ¤ - 0M ¤ - 0M ¤ - 00M ¤ - 00M ¤ - 000M ¤ - 000M ¤ - 0G ¤ - 0G ¤ - 00G ¤ - 00G ¤ - 000G ¤ - 000G ¤ - 0T ¤ - 0T ¤ - 00T ¤ - 00T ¤ - 000T ¤ - 000T ¤ + 0 mln ¤ + 0 mln ¤ + 00 mln ¤ + 00 mln ¤ + 000 mln ¤ + 000 mln ¤ + 0 mlrd ¤ + 0 mlrd ¤ + 00 mlrd ¤ + 00 mlrd ¤ + 000 mlrd ¤ + 000 mlrd ¤ + 0 trln ¤ + 0 trln ¤ + 00 trln ¤ + 00 trln ¤ + 000 trln ¤ + 000 trln ¤ @@ -5183,6 +5270,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Şərqi Karib dolları Şərqi Karib dolları + + Karib gilderi + Karib gilderi + Karib gilderi + Fransız Gızıl Frankı Fransız gızıl frankı @@ -5276,6 +5368,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabve dolları (1980–2008) Zimbabve dolları (1980–2008) + + Zimbabve Qızılı + Zimbabve qızılı + Zimbabve qızılı + Zimbabve Dolları (2009) Zimbabve dolları (2009) @@ -5486,7 +5583,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimol/litr {0} millimol/litr - + + hissə + {0} hissə + {0} hissə + + milyonda hissəcik {0} milyonda hissəcik {0} milyonda hissəcik @@ -5503,6 +5605,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} permiriada {0} permiriada + + qlükoza + {0} qlükoza + {0} qlükoza + litr/kilometr {0} litr/kilometr @@ -5890,6 +5997,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimetr civə sütunu {0} millimetr civə sütunu + + civə + funt/kvadrat düym {0} funt/kvadrat düym @@ -6021,6 +6131,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millilitr {0} millilitr + + metrik maye unsiyası + {0} metrik maye unsiyası + {0} metrik maye unsiyası + akr-fut {0} akr-fut @@ -6088,21 +6203,61 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} İmp. kvarta {0} İmp. kvarta - - işıq - {0} işıq - {0} işıq + + steradian - - bir milyarda düşən hissə sayı - bir milyarda düşən {0} hissə - bir milyarda düşən {0} hissə + + katal - - gecə - {0} gecə - {0} gecə - {0}/gecə + + kulomb + {0} kulomb + {0} kulomb + + + farad + + + henri + + + simen + + + kalori-IT + {0} kalori [IT] + {0} kal-IT + + + bekkerel + {0} bekkerel + {0} bekkerel + + + zivert + {0} zivert + {0} zivert + + + qrey + {0} Qy + {0} Qy + + + kiloqram qüvvə + {0} kqq + {0} kqq + + + tesla + + + veber + + + milyardda hissə + milyardda {0} hissə + milyardda {0} hissə kardinal istiqamət @@ -6220,7 +6375,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} element {0} element - + + hissə + {0} hissə + {0} hissə + + hissəcik/milyon {0} hs/mln {0} hs/mln @@ -6234,6 +6394,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ permiriada + + Qlk + {0} Qlk + {0} Qlk + l/km {0} l/km @@ -6585,6 +6750,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} sL {0} sL + + mmu + {0} mmu + {0} mmu + buşel {0} buşel @@ -6657,13 +6827,45 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kvarta İmp. {0} kvarta İmp. + + kulomb + {0} kulomb + {0} kulomb + + + kal-IT + {0} kal-IT + {0} kal-IT + + + Bk + {0} Bk + {0} Bk + + + Zv + {0} Zv + {0} Zv + + + Qy + {0} Qy + {0} Qy + + + kqq + {0} kqq + {0} kqq + işıq {0} işıq {0} işıq - + hissə/milyard + {0} hissə/milyard + {0} hissə/milyard gecə @@ -6707,9 +6909,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ft² {0} ft² - - {0} hs/mln - {0}ppm + + hissə + {0} hissə + {0} hissə % @@ -6720,6 +6923,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Qlk + {0} Qlk + {0} Qlk + {0} mil/imq {0} mil/imq @@ -6893,6 +7101,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mf {0} mf + + mmu + {0} mmu + {0} mmu + ak-ft {0} ak-ft @@ -6924,16 +7137,47 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt-Imp. {0}qt-Imp. + + K + {0} K + {0} K + + + kal-IT + {0} kal-IT + {0} kal-IT + + + Bk + {0} Bk + {0} Bk + + + Zv + {0} Zv + {0} Zv + + + Qy + {0} Qy + {0} Qy + + + kqq + {0} kqq + {0} kqq + - işıq {0}işıq {0}işıq + + {0} hissə/milyard + {0} hissə/milyard + - gecə {0}gecə {0}gecə - {0}/gecə diff --git a/make/data/cldr/common/main/az_Cyrl.xml b/make/data/cldr/common/main/az_Cyrl.xml index 64b3e0669f3..dc96f5cacd7 100644 --- a/make/data/cldr/common/main/az_Cyrl.xml +++ b/make/data/cldr/common/main/az_Cyrl.xml @@ -1070,6 +1070,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/ba.xml b/make/data/cldr/common/main/ba.xml index 468134a046d..72ba3e243ad 100644 --- a/make/data/cldr/common/main/ba.xml +++ b/make/data/cldr/common/main/ba.xml @@ -12,11 +12,12370 @@ CLDR data files are interpreted according to the LDML specification (http://unic - башҡорт теле + афар + абхаз + африкаанс + агем + акан + амхар + арагон + оболо + левант ғәрәп + ғәрәп + әҙәби ғәрәп + мапуче + ассам + асу + астурий + әзербайжан + әзери + башҡорт + балудж + басаа + белорус + бемба + бетави + бена + болгар + харьянви + көнбайыш белудж + бходжпури + ании + тай дам + бамбара + бенгал + тибет + бәхтиәр + бретон + бодо + босний + акоосе + бүрәт + блин + каталан + каддо + атсам + чакма + чечен + себуано + чига + чоктав + чероки + чикасо + үҙәк курд + курд, үҙәк + курд, сорани + корсика + копт + чех + һаҙлыҡлы кри + сиркәү славян + сыуаш + валлий + дат + таита + немец + немец (Австрия) + немец (Швейцария) + зарма + догри + түбәнге лужиц + дуала + дивехи + джола фоньи + дзонг-кэ + эмбу + эве + грек + инглиз + инглиз (Австралия) + инглиз (Канада) + инглиз (Британия) + инглиз (АҠШ) + эсперанто + испан + испан (Латин Америкаһы) + испан (Европа) + испан (Мексика) + эстон + баск + эвондо + фарсы + дари + фула + фин + филиппин + фарер + француз + француз (Канада) + француз (Швейцария) + каджун француз + төньяҡ фриз + фриул + көнбайыш фриз + ирланд + га + шотланд гэл + геэз + галисий + гуарани + швейцария немец + гуджарати + гусии + мэн + хауса + гавай + иврит + һинди + һинди (латиница) + һинглиш + хмонг нджуа + хорват + үрге лужи + гаити креол + венгр + әрмән + интерлингва + индонез + интерлингве + игбо + сычуань и + идо + исланд + итальян + инуктитут + япон + ложбан + нгомба + мачаме + ява + грузин + ҡарағалпаҡ + кабил + джу + камба + тьяп + маконде + кабувердьяну + кекчи + кеньянг + каинганг + койра Чиини + кикуйю + ҡаҙаҡ + како + калааллисут + календжин + кхмер + каннада + корей + конкани + кпелле + кашмири + шамбала + бафия + кёльн + курд + курд + курманджи + корн + куви + ҡырғыҙ + латин + ланги + люксембург + ганда + лигур + лакота + ладин + ломбард + лингала + лаос + луизиана креол + төньяҡ лури + литва + латгал + луба-катанга + луо + лухья + латыш + лаз + майтхили + масаи + мокша + меру + морисьен + малагаси + макуа-меетто + мета + мокено + маори + микмау + македон + малаялам + монгол + манипури + мохаук + маратхи + малай + мальта + мунданг + бер нисә тел + мускоги + хмонг дав + бирма + эрзә + мазандеран + мин нан ҡытай + нама + норвег букмол + төньяҡ ндебеле + түбәнге немец + түбәнге саксон + непал + нидерланд + фламанд + квасио + норвег нюнорск + нгиембун + норвег + н’ко + көньяҡ ндебеле + төньяҡ сото + нуэр + навахо + ньянджа + ньянколе + окситан + оканаган + оромо + одия + осетин + осейдж + панджаби + папьяменто + нигерия пиджины + пали + пиджин + поляк + пьемонт + прус + пушту + португал + португал (Бразилия) + португал (Европа) + кечуа + киче + раджастхани + рохинджа + риф + романш + рунди + румын + молдов + ромбо + урыҫ + киньяруанда + руа + санскрит + саха + самбуру + сантали + сангу + сардин + сицилия + синдхи + көньяҡ курд + төньяҡ саам + сена + койраборо Сенни + санго + самогит + ташельхит + шан + сингал + сидамо + словак + сараиики + словен + көньяҡ саам + луле саам + инари саам + сколт саам + шона + сомали + албан + серб + свати + сахо + көньяҡ сото + сундан + сунвар + швед + суахили + конго суахили + сүриә + силез + тамил + телугу + тесо + тажик + тай + тигринья + тигре + төркмән + тсвана + тонга + токи пона + ток писин + төрөк + тароко + торвали + тсонга + татар + тасавак + тува + үҙәк атлас тамазигхт + уйғыр + украин + билдәһеҙ тел + урду + үзбәк + ваи + венда + венет + вьетнам + макуа + волапюк + вунджо + валлон + вальзер + волайтта + вальпири + волоф + коса + кангри + сога + янгбен + идиш + йоруба + ньенгату + кантональ + кантональ ҡытай + чжуан + стандарт марокко тамазигхт + ҡытай + мандарин ҡытай + ҡытай (ябайлаштырылған) + мандарин ҡытай (ябайлаштырылған) + ҡытай (традицион) + мандарин ҡытай (традицион) + зулу + лингвистик йөкмәткеһеҙ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + донъя + Африка + Төньяҡ Америка + Көньяҡ Америка + Океания + Көнбайыш Африка + Үҙәк Америка + Көнсығыш Африка + Төньяҡ Африка + Үҙәк Африка + Көньяҡ Африка + Америка + Төньяҡ Америка төбәге + Кариб бассейны + Көнсығыш Азия + Көньяҡ Азия + Көньяҡ-Көнсығыш Азия + Көньяҡ Европа + Австралазия + Меланезия + Микронезия төбәге + Полинезия + Азия + Үҙәк Азия + Көнбайыш Азия + Европа + Көнсығыш Европа + Төньяҡ Европа + Көнбайыш Европа + Тропик Африка + Латин Америка + Асеншен утрауы + Андорра + Берләшкән Ғәрәп Әмирлектәре + Афғанстан + Антигуа һәм Барбуда + Ангилья + Албания + Әрмәнстан + Ангола + Антарктида + Аргентина + Америка Самоаһы + Австрия + Австралия + Аруба + Аланд утрауҙары + Әзербайжан + Босния һәм Герцеговина + Барбадос + Бангладеш + Бельгия + Буркина-Фасо + Болгария + Бәхрәйн + Бурунди + Бенин + Сен-Бартелеми + Бермуд утрауҙары + Бруней + Боливия + Карибтағы Нидерланд + Бразилия + Багам утрауҙары + Бутан + Буве утрауы + Ботсвана + Беларусь + Белиз + Канада + Кокос утрауҙары + Конго - Киншаса + Конго (КДР) + Үҙәк Африка Республикаһы + Конго - Браззавиль + Конго Республикаһы + Швейцария + Кот-д’Ивуар + Кук утрауҙары + Чили + Камерун + Ҡытай + Колумбия + Клиппертон утрауы + Сарк + Коста-Рика + Куба + Кабо-Верде + Кюрасао + Раштыуа Утрауы + Кипр + Чехия + Чех Республикаһы + Германия + Диего-Гарсия + Джибути + Дания + Доминика + Доминикан Республикаһы + Алжир + Сеута һәм Мелилья + Эквадор + Эстония + Мысыр + Көнбайыш Сахара + Эритрея + Испания + Эфиопия + Европа Берлеге + Еврозона + Финляндия + Фиджи + Фолкленд утрауҙары + Фолкленд (Мальвин) утрауҙары + Микронезия + Фарер утрауҙары + Франция + Габон + Бөйөк Британия + Британия + Гренада + Грузия + Француз Гвианаһы + Гернси + Гана + Гибралтар + Гренландия + Гамбия + Гвинея + Гваделупа + Экваториаль Гвинея + Греция + Көньяҡ Георгия һәм Көньяҡ Сандвич утрауҙары + Гватемала + Гуам + Гвинея-Бисау + Гайана + Гонконг, Ҡытай МАР-ы + Гонконг + Херд һәм Макдональд утрауҙары + Гондурас + Хорватия + Гаити + Венгрия + Канар утрауҙары + Индонезия + Ирландия + Израиль + Мэн утрауы + Һиндостан + Британияның Һинд океанындағы биләмәһе + Чагос архипелагы + Ираҡ + Иран + Исландия + Италия + Джерси + Ямайка + Иордания + Япония + Кения + Ҡырғыҙстан + Камбоджа + Кирибати + Комор утрауҙары + Сент-Китс һәм Невис + Төньяҡ Корея + Көньяҡ Корея + Кувейт + Кайман утрауҙары + Ҡаҙағстан + Лаос + Ливан + Сент-Люсия + Лихтенштейн + Шри-Ланка + Либерия + Лесото + Литва + Люксембург + Латвия + Ливия + Марокко + Монако + Молдова + Черногория + Сен-Мартен + Мадагаскар + Маршалл утрауҙары + Төньяҡ Македония + Мали + Мьянма (Бирма) + Монголия + Макао, Ҡытай МАР-ы + Макао + Төньяҡ Мариан утрауҙары + Мартиника + Мавритания + Монтсеррат + Мальта + Маврикий + Мальдив утрауҙары + Малави + Мексика + Малайзия + Мозамбик + Намибия + Яңы Каледония + Нигер + Норфолк утрауы + Нигерия + Никарагуа + Нидерланд + Норвегия + Непал + Науру + Ниуэ + Яңы Зеландия + Аотеароа (Яңы Зеландия) + Оман + Панама + Перу + Француз Полинезияһы + Папуа – Яңы Гвинея + Филиппин + Пакистан + Польша + Сен-Пьер һәм Микелон + Питкэрн утрауҙары + Пуэрто-Рико + Фәләстин территориялары + Фәләстин + Португалия + Палау + Парагвай + Катар + Тышҡы Океания + Реюньон + Румыния + Сербия + Рәсәй + Руанда + Сәғүд Ғәрәбстаны + Соломон утрауҙары + Сейшель утрауҙары + Судан + Швеция + Сингапур + Изге Елена утрауы + Словения + Шпицберген һәм Ян-Майен + Словакия + Сьерра-Леоне + Сан-Марино + Сенегал + Сомали + Суринам + Көньяҡ Судан + Сан-Томе һәм Принсипи + Сальвадор + Синт-Мартен + Сүриә + Эсватини + Свазиленд + Тристан-да-Кунья + Төркс һәм Кайкос утрауҙары + Чад + Францияның Көньяҡ Биләмәләре + Того + Тайланд + Тажикстан + Токелау + Тимор-Лесте + Көнсығыш Тимор + Төркмәнстан + Тунис + Тонга + Төркиә + Тринидад һәм Тобаго + Тувалу + Тайвань + Танзания + Украина + Уганда + АҠШ-ның ситтәге утрауҙары + Берләшкән Милләттәр Ойошмаһы + Америка Ҡушма Штаттары + АҠШ + Уругвай + Үзбәкстан + Ватикан + Сент-Винсент һәм Гренадиндар + Венесуэла + Британия Виргин утрауҙары + АҠШ Виргин утрауҙары + Вьетнам + Вануату + Уоллис һәм Футуна + Самоа + псевдоакценттар + псевдо ике яҡлы + Косово + Йәмән + Майотта + Көньяҡ Африка Республикаһы + Замбия + Зимбабве + Билдәһеҙ төбәк + + + традицион немец орфографияһы + Стандартлаштырылған резия орфографияһы + 1996 йылғы немец орфографияһы + 1606 йылға тиклемге һуңғы урта быуат француз теле + Иртә яңы француз + академик + 1943 йылғы орфографик формулировка + ALA-LC романлаштырыуы, 1997 йылғы баҫма + Алуку диалекты + 1990 йылғы португал теле орфография килешеүе + берҙәм төрки латин алфавиты + Ании (баланка диалекты) + Кабувердьяну (барлавенто диалект төркөмө) + Сан-Джорджио/Била диалекты + Богорич алфавиты + Бунтлинг + 1945 йылғы португал-бразил орфография конвенцияһы + Дайнко алфавиты + Серб (экав әйтелеше) + Иртә яңы инглиз + Халыҡ-ара фонетик алфавит + Урал фонетик алфавиты + Хепбёрн романлаштырыуы + Серб (иекав әйтелеше) + дөйөм орфография + Стандарт орфография + Резия (липоваз диалекты) + Метелько алфавиты + Монотоник + Ндьюка диалекты + Натисоне диалекты + Гнива/Нива диалекты + Хәҙерге волапюк + Осеакко/Осояне диалекты + Оксфорд инглиз һүҙлеге орфографияһы + Памака диалекты + пиньинь романизацияһы + Политоник + компьютер + Үҙгәртелгән орфография + Классик волапюк + Резия + Сахо + шотланд стандарт инглиз теле + скаус + столвиццо/солбица диалекты + Кабувердьяну (сотавенто диалект төркөмө) + тарашкевица орфографияһы + берҙәм орфография + берҙәм үҙгәртелгән орфография + унифон фонетик алфавиты + Валенсия + Уэйд-Джайлз романлаштырыуы + + + календарь + валюта форматы + теҙеү тәртибе + валюта + эмодзи күренеше + сәғәт форматы (12 йәки 24 сәғәтлек) + юл күсереү стиле + һүҙҙәрҙе күсереү стиле + үлсәү системаһы + һандар + ҡыҫҡартманан һуң һөйләмде бүлеү + + + будда календары + будда + ҡытай календары + ҡытай + копт календары + копт + данги календары + данги + эфиоп календары + эфиоп + эфиоп амете-алем календары + эфиоп (амете-алем) + григориан календары + григориан + йәһүд календары + йәһүд + Һиндостан милли календары + Һиндостан милли + һижри календарь + һижри + һижри календарь (таблицалы, граждандар эпохаһы) + һижри (таблицалы, граждандар дәүере) + Һижри календарь (Сәғүд Ғәрәбстаны) + һижри календарь (таблицалы, астрономик эпоха) + һижри (таблицалы, астрономик дәүер) + һижри календарь (Үмм әл-Ҡура) + һижри (Үмм әл-Ҡура) + ISO-8601 календары + япон календары + япон + фарсы календары + фарсы + минго календары + минго + бухгалтер валюта форматы + бухгалтер + стандарт валюта форматы + стандарт + элекке теҙеү тәртибе (ярашлылыҡ өсөн) + ярашлылыҡ + һүҙлексә теҙеү тәртибе + һүҙлексә + Стандарт Unicode теҙеү тәртибе + Стандарт Unicode + эмодзи + европа теҙеү ҡағиҙәләре + телефон китабыса теҙеү тәртибе + телефон китабы + фонетик + пиньинь теҙеү тәртибе + пиньинь + дөйөм маҡсатлы эҙләү + эҙләү + хангыль буйынса (баш тартынҡы менән) эҙләү + ғәҙәти тәртип + ғәҙәти + һыҙыҡтар буйынса теҙеү тәртибе + һыҙыҡтар буйынса + традицион теҙеү тәртибе + традицион + радикал-һыҙыҡ теҙеү тәртибе + радикал-һыҙыҡ + чжуинь теҙеү тәртибе + чжуинь + стандарт + эмодзи + текст + 12 сәғәтлек формат (0–11) + 12 сәғәтлек (0–11) + 12 сәғәтлек формат (1–12) + 12 сәғәтлек (1–12) + 24 сәғәтлек формат (0–23) + 24 сәғәтлек (0–23) + 24 сәғәтлек формат (1–24) + 24 сәғәтлек (1–24) + йомшаҡ юл күсереү + йомшаҡ + ғәҙәти юл күсереү + ғәҙәти + ҡаты юл күсереү + ҡаты + барыһын да күсереү + барыһын да һаҡлау + ғәҙәти стиль + фразаларҙа һаҡлау + метрик система + метрик + Британия үлсәмдәр системаһы + Бөйөк Британия + АҠШ үлсәү системаһы + АҠШ + ахом цифрҙары + ғәрәп-һинд цифрҙары + киңәйтелгән ғәрәп-һинд цифрҙары + әрмән һандары + әрмән бәләкәй һандары + бали цифрҙары + бенгал цифрҙары + брахми цифрҙары + чакма цифрҙары + чам цифрҙары + кириллица һандары + деванагари цифрҙары + дивес акуру цифрҙары + эфиоп һандары + тулы киңлектәге һандар + гарай цифрҙары + грузин цифрҙары + гунжала гонди цифрҙары + масарам гонди цифрҙары + грек цифрҙары + грек бәләкәй һандары + гуджарати цифрҙары + гурунг кхема цифрҙары + гурмукхи цифрҙары + ҡытай унлы цифрҙары + ябайлаштырылған ҡытай цифрҙары + ябайлаштырылған ҡытай финанс һандары + традицион ҡытай һандары + традицион ҡытай финанс һандары + йәһүд һандары + пахавх хмонг цифрҙары + ньякенг пуачуэ хмонг цифрҙары + ява цифрҙары + япон һандары + япон финанс һандары + кайа ли цифрҙары + кави цифрҙары + кхмер цифрҙары + каннада цифрҙары + кират рай цифрҙары + тай тхам хора цифрҙары + тай тхам тхам цифрҙары + лаос цифрҙары + ғәрәп цифрҙары + лепча цифрҙары + лимбу цифрҙары + математик ҡалын цифрҙар + математик ике һыҙыҡлы цифрҙар + математик монокиңлектәге цифрҙар + математик ҡырҡылмаған ҡалын цифрҙар + математик ҡырҡылмаған цифрҙар + малаялам цифрҙары + моди цифрҙары + монгол цифрҙары + мро цифрҙары + мейтей майек цифрҙары + мьянма цифрҙары + мьянма көнсығыш пво карен цифрҙары + мьянма пао цифрҙары + мьянма шан цифрҙары + мьянма тай лаинг цифрҙары + наг мундари цифрҙары + н’ко цифрҙары + ол чики цифрҙары + ол онал цифрҙары + одиа цифрҙары + османия цифрҙары + контурлы цифрҙар + ханифи рохинджа цифрҙары + рим һандары + рим бәләкәй һандары + саураштра цифрҙары + шарада цифрҙары + худавади цифрҙары + сингал лит цифрҙары + сора сомпенг цифрҙары + сундан цифрҙары + сунувар цифрҙары + такри цифрҙары + яңы тай луэ цифрҙары + традицион тамил цифрҙары + тамил цифрҙары + телугу цифрҙары + тай цифрҙары + тибет цифрҙары + тирхута цифрҙары + тангса цифрҙары + толонг сики цифрҙары + ваи цифрҙары + варанг сити цифрҙары + ванчо цифрҙары + һүндерелгән + ҡабыҙылған + + + метрик + Бөйөк Британия + АҠШ + + + Тел: {0} + Яҙыу: {0} + Төбәк: {0} + [а ә б в г ғ д ҙ её ж з и й к ҡ л м н ң о ө п р с ҫ т у ү ф х һ ц ч ш щ ъ ы ь э ю я] [А Ә Б В Г Ғ Д Ҙ ЕЁ Ж З И Й К Ҡ Л М Н Ң О Ө П Р С Ҫ Т У Ү Ф Х Һ Ц Ч Ш Щ Ъ Ы Ь Э Ю Я] + [\- ‐‑ – — , ; \: ! ? . … '‘‚ "“„ « » ( ) \[ \] \{ \} § @ * / \& #] + + + + + + будда эраһы + + + бэ + + + + + + EEEE, d MMMM y 'й'. G + + + + + d MMMM y 'й'. G + + + + + d MMM y 'й'. G + + + + + dd.MM.y G + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + y 'й'. G + dd.MM.y G + MMM y 'й'. G + d MMM y 'й'. G + E, d MMM y 'й'. G + dd.MM + E, dd.MM + d MMM + E, d MMM + d MMMM + MM.y GGGGG + dd.MM.y GGGGG + E, dd.MM.y GGGGG + MMM y 'й'. G + d MMM y 'й'. G + E, d MMM y 'й'. G + MMMM y 'й'. G + QQQ y 'й'. G + QQQQ y 'й'. G + + + {0} – {1} + + y G – y G + y – y G + + + MM.y GGGGG – MM.y GGGGG + MM.y – MM.y GGGGG + MM.y – MM.y GGGGG + + + dd.MM.y – dd.MM.y GGGGG + dd.MM.y GGGGG – dd.MM.y GGGGG + dd.MM.y – dd.MM.y GGGGG + dd.MM.y – dd.MM.y GGGGG + + + E, dd.MM.y – E, dd.MM.y GGGGG + E, dd.MM.y G – E, dd.MM.y GGGGG + E, dd.MM.y G – E, dd.MM.y GGGGG + E, dd.MM.y G – E, dd.MM.y GGGGG + + + MMM y 'й'. G – MMM y 'й'. G + MMM – MMM y 'й'. G + MMM y – MMM y 'йй'. G + + + d–d MMM y 'й'. G + d MMM y 'й'. G – d MMM y 'й'. G + d MMM – d MMM y 'й'. G + d MMM y – d MMM y 'йй'. G + + + E, d MMM – E, d MMM y 'й'. G + E, d MMM y 'й'. G – E, d MMM y 'й'. G + E, d MMM – E, d MMM y 'й'. G + E, d MMM y – E, d MMM y 'йй'. G + + + HH–HH 'сәғ'. + + + + + + + + + Тут + Баба + Хатор + Киахк + Тоба + Амшир + Барамхат + Барамуда + Башанс + Паона + Эпеп + Месра + Наси + + + Тут + Баба + Хатор + Киахк + Тоба + Амшир + Барамхат + Барамуда + Башанс + Паона + Эпеп + Месра + Наси + + + + + Тут + Баба + Хатор + Киахк + Тоба + Амшир + Барамхат + Барамуда + Башанс + Паона + Эпеп + Месра + Наси + + + Тут + Баба + Хатор + Киахк + Тоба + Амшир + Барамхат + Барамуда + Башанс + Паона + Эпеп + Месра + Наси + + + + + + + + + мескерем + текемт + хедар + тахсас + тер + йекатит + мегабит + миазиа + генбот + сене + хамле + нехассе + пагумен + + + мескерем + текемт + хедар + тахсас + тер + йекатит + мегабит + миазиа + генбот + сене + хамле + нехассе + пагумен + + + + + мескерем + текемт + хедар + тахсас + тер + йекатит + мегабит + миазиа + генбот + сене + хамле + нехассе + пагумен + + + мескерем + текемт + хедар + тахсас + тер + йекатит + мегабит + миазиа + генбот + сене + хамле + нехассе + пагумен + + + + + + Инкарнация эраһына тиклем + Инкарнация эраһы + + + И.Э.Т. + И.Э. + + + И.Э.Т. + И.Э. + + + + + + + + EEEE, d MMMM y 'й'. G + + + + + d MMMM y 'й'. G + + + + + d MMM y 'й'. G + + + + + dd.MM.y G + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + E, h a + E, h:mm a + E, HH:mm + E hh:mm:ss a + E, HH:mm:ss + y 'й'. G + dd.MM.y G + MMM y 'й'. G + d MMM y 'й'. G + E, d MMM y 'й'. G + HH 'сәғ'. + hh:mm a + hh:mm:ss a + HH 'сәғ'. v + dd.MM + E, dd.MM + d MMM + E, d MMM + d MMMM + MM.y GGGGG + dd.MM.y GGGGG + E, dd.MM.y GGGGG + MMM y 'й'. G + d MMM y 'й'. G + E, d MMM y 'й'. G + MMMM y 'й'. G + QQQ y 'й'. G + QQQQ y 'й'. G + + + {0} – {1} + + h B – h B + + + h:mm B – h:mm B + + + y G – y G + y – y G + + + MM.y GGGGG – MM.y GGGGG + MM.y – MM.y GGGGG + MM.y – MM.y GGGGG + + + dd.MM.y – dd.MM.y GGGGG + dd.MM.y GGGGG – dd.MM.y GGGGG + dd.MM.y – dd.MM.y GGGGG + dd.MM.y – dd.MM.y GGGGG + + + E, dd.MM.y – E, dd.MM.y GGGGG + E, dd.MM.y G – E, dd.MM.y GGGGG + E, dd.MM.y G – E, dd.MM.y GGGGG + E, dd.MM.y G – E, dd.MM.y GGGGG + + + MMM y 'й'. G – MMM y 'й'. G + MMM – MMM y 'й'. G + MMM y – MMM y 'йй'. G + + + d–d MMM y 'й'. G + d MMM y 'й'. G – d MMM y 'й'. G + d MMM – d MMM y 'й'. G + d MMM y – d MMM y 'йй'. G + + + E, d MMM – E, d MMM y 'й'. G + E, d MMM y 'й'. G – E, d MMM y 'й'. G + E, d MMM – E, d MMM y 'й'. G + E, d MMM y – E, d MMM y 'йй'. G + + + HH–HH 'сәғ'. + + + HH–HH 'сәғ'. v + + + dd.MM – dd.MM + dd.MM – dd.MM + + + E, dd.MM – E, dd.MM + E, dd.MM – E, dd.MM + + + d–d MMM + d MMM – d MMM + + + E, d MMM – E, d MMM + E, d MMM – E, d MMM + + + y – y G + + + MM.y – MM.y GGGGG + MM.y – MM.y GGGGG + + + dd.MM.y – dd.MM.y GGGGG + dd.MM.y – dd.MM.y GGGGG + dd.MM.y – dd.MM.y GGGGG + + + E, dd.MM.y – E, dd.MM.y GGGGG + E, dd.MM.y – E, dd.MM.y GGGGG + E, dd.MM.y – E, dd.MM.y GGGGG + + + MMM – MMM y 'й'. G + MMM y 'й'. – MMM y 'й'. G + + + d–d MMM y 'й'. G + d MMM – d MMM y 'й'. G + d MMM y 'й'. – d MMM y 'й'. G + + + E, d MMM – E, d MMM y 'й'. G + E, d MMM – E, d MMM y 'й'. G + E, d MMM y 'й'. – E, d MMM y 'й'. G + + + MMMM – MMMM y 'й'. G + MMMM y 'й'. – MMMM y 'й'. G + + + + + + + + + ғин. + фев. + мар. + апр. + май + июн. + июл. + авг. + сент. + окт. + нояб. + дек. + + + Ғ + Ф + М + А + М + И + И + А + С + О + Н + Д + + + ғинуар + февраль + март + апрель + май + июнь + июль + август + сентябрь + октябрь + ноябрь + декабрь + + + + + ғин. + фев. + мар. + апр. + май + июн. + июл. + авг. + сент. + окт. + нояб. + дек. + + + Ғ + Ф + М + А + М + И + И + А + С + О + Н + Д + + + ғинуар + февраль + март + апрель + май + июнь + июль + август + сентябрь + октябрь + ноябрь + декабрь + + + + + + + йәк. + дүш. + шиш. + шар. + кес. + йом. + шәм. + + + Й + Д + Ш + Ш + К + Й + Ш + + + йш + дш + шш + шр + кс + йм + шб + + + йәкшәмбе + дүшәмбе + шишәмбе + шаршамбы + кесаҙна + йома + шәмбе + + + + + йәк. + дүш. + шиш. + шар. + кес. + йом. + шәм. + + + Й + Д + Ш + Ш + К + Й + Ш + + + йш + дш + шш + шр + кс + йм + шб + + + йәкшәмбе + дүшәмбе + шишәмбе + шаршамбы + кесаҙна + йома + шәмбе + + + + + + + 1-се кв. + 2-се кв. + 3-сө кв. + 4-се кв. + + + 1-се квартал + 2-се квартал + 3-сө квартал + 4-се квартал + + + + + 1-се кв. + 2-се кв. + 3-сө кв. + 4-се кв. + + + 1-се квартал + 2-се квартал + 3-сө квартал + 4-се квартал + + + + + + беҙҙең эраға тиклем + беҙҙең эраға тиклем + беҙҙең эра + беҙҙең эра + + + б.э.т. + б.э. + + + б.э.т. + б.э.т. + б.э. + б.э. + + + + + + d MMMM, EEEE, y 'й'. + + + + + d MMMM, y 'й'. + + + + + d MMM, y 'й'. + + + + + dd.MM.y + + + + + + + HH:mm:ss zzzz + + + + + HH:mm:ss z + + + + + HH:mm:ss + + + + + HH:mm + + + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + E, h B + E, h a + E h:mm a + E, HH:mm + E h:mm:ss a + E, HH:mm:ss + G y 'й'. + G MM.y + G dd.MM.y + MMM, G y 'й'. + d MMM, G y 'й'. + d MMM, E, G y 'й'. + HH 'сәғ'. + h:mm a + h:mm:ss a + h:mm:ss a v + h:mm a v + HH 'сәғ'. v + dd.MM + dd.MM, E + d MMM + d MMM, E + d MMMM + MMMM 'айының' W 'аҙнаһы' + dd.MM.y + dd.MM.y, E + MMM, y 'й'. + d MMM, y 'й'. + d MMM, E, y 'й'. + MMMM, y 'й'. + QQQ, y 'й'. + QQQQ, y 'й'. + Y 'йылдың' w 'аҙнаһы' + + + {0} – {1} + + h B – h B + + + h:mm B – h:mm B + + + G y 'й'. – G y 'й'. + G y – y 'йй'. + + + G y.MM – G y.MM + G MM.y – MM.y + G MM.y – MM.y + + + G dd.MM.y – dd.MM.y + G dd.MM.y – G dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + + + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – G dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + + + MMM, G y 'й'. – MMM, G y 'й'. + MMM–MMM, G y 'й'. + MMM, G y 'й'. – MMM, G y 'й'. + + + d–d MMM, G y 'й'. + d MMM, G y 'й'. – d MMM, G y 'й'. + d MMM – d MMM, G y 'й'. + d MMM, G y 'й'. – d MMM, G y 'й'. + + + d MMM, E, G y 'й'. – d MMM, E, G y 'й'. + d MMM, E, G y 'й'. – d MMM, E, G y 'й'. + d MMM, E – d MMM, E, G y 'й'. + d MMM, E, G y 'й'. – d MMM, E, G y 'й'. + + + h a – h a + + + h:mm a – h:mm a + h:mm–h:mm a + h:mm–h:mm a + + + h:mm a – h:mm a v + h:mm–h:mm a v + h:mm–h:mm a v + + + h a – h a v + + + dd.MM – dd.MM + dd.MM – dd.MM + + + dd.MM, E – dd.MM, E + dd.MM, E – dd.MM, E + + + d–d MMM + d MMM – d MMM + + + d MMM, E – d MMM, E + d MMM, E – d MMM, E + + + MM.y – MM.y + MM.y – MM.y + + + dd.MM.y – dd.MM.y + dd.MM.y – dd.MM.y + dd.MM.y – dd.MM.y + + + dd.MM.y, E – dd.MM.y, E + dd.MM.y, E – dd.MM.y, E + dd.MM.y, E – dd.MM.y, E + + + MMM–MMM, y 'й'. + y 'й'., MMM – y 'й'., MMM + + + d–d MMM, y 'й'. + d MMM – d MMM, y 'й'. + d MMM, y 'й'. – d MMM, y 'й'. + + + d MMM, E – d MMM, E, y 'й'. + d MMM, E, – d MMM, E, y 'й'. + d MMM, E, y 'й'. – d MMM, E, y 'й'. + + + MMMM–MMMM, y 'й'. + MMMM, y 'й'. – MMMM, y 'й'. + + + + + + + + + тишрей + хешван + кислев + тевет + шват + адар I + адар + адар II + нисан + ияр + сиван + таммуз + ав + элул + + + тишрей + хешван + кислев + тевет + шват + адар I + адар + адар II + нисан + ияр + сиван + таммуз + ав + элул + + + + + тишрей + хешван + кислев + тевет + шват + адар I + адар + адар II + нисан + ияр + сиван + таммуз + ав + элул + + + тишрей + хешван + кислев + тевет + шват + адар I + адар + адар II + нисан + ияр + сиван + таммуз + ав + элул + + + + + + донъя яратылышынан + + + + + + + + Чайтра + Вайшакха + Джьештха + Ашадха + Сравана + Бхадра + Асвина + Картика + Аграхаяна + Пауша + Магха + Пхалгуна + + + Чайтра + Вайшакха + Джьештха + Ашадха + Сравана + Бхадра + Асвина + Картика + Аграхаяна + Пауша + Магха + Пхалгуна + + + + + Чайтра + Вайшакха + Джьештха + Ашадха + Сравана + Бхадра + Асвина + Картика + Аграхаяна + Пауша + Магха + Пхалгуна + + + Чайтра + Вайшакха + Джьештха + Ашадха + Сравана + Бхадра + Асвина + Картика + Аграхаяна + Пауша + Магха + Пхалгуна + + + + + + Сака + + + Сака + + + Сака + + + + + + + + мөх. + сәф. + раб. I + раб. II + йом. I + йом. II + рәж. + шәғ. + рам. + шәү. + зөлҡ. + зөлх. + + + мөхәррәм + сәфәр + рабиғүл әүүәл + рабиғүл ахыр + йомадиәл әүүәл + йомадиәл ахыр + рәжәб + шәғбан + рамаҙан + шәүүәл + зөлҡәғиҙә + зөлхизә + + + + + мөх. + сәф. + раб. I + раб. II + йом. I + йом. II + рәж. + шәғ. + рам. + шәү. + зөлҡ. + зөлх. + + + мөхәррәм + сәфәр + рабиғүл әүүәл + рабиғүл ахыр + йомадиәл әүүәл + йомадиәл ахыр + рәжәб + шәғбан + рамаҙан + шәүүәл + зөлҡәғиҙә + зөлхизә + + + + + + Һижрәттән һуң + Һижрәткә тиклем + + + + + + + Тайка (645–650) + Хакути (650–671) + Хакухо (672–686) + Сючё (686–701) + Тайхо (701–704) + Кэйун (704–708) + Вадо (708–715) + Рэйки (715–717) + Йоро (717–724) + Дзинки (724–729) + Тэмпьё (729–749) + Тэмпьё-кампо (749–749) + Тэмпьё-сёхо (749–757) + Тэмпьё-ходзи (757–765) + Тэмпьё-дзинго (765–767) + Дзинго-кэйун (767–770) + Хоки (770–780) + Тэн-о (781–782) + Энряку (782–806) + Дайдо (806–810) + Конин (810–824) + Тэнтё (824–834) + Дзёва (834–848) + Кадзё (848–851) + Ниндзю (851–854) + Сайко (854–857) + Тэн-ан (857–859) + Дзёган (859–877) + Гангё (877–885) + Нинна (885–889) + Кампё (889–898) + Сётай (898–901) + Энги (901–923) + Энтё (923–931) + Дзёхэй (931–938) + Тэнгё (938–947) + Тэнряку (947–957) + Тэнтоку (957–961) + Ова (961–964) + Кохо (964–968) + Анна (968–970) + Тэнроку (970–973) + Тэнъэн (973–976) + Дзёген (976–978) + Тэнгэн (978–983) + Эйкан (983–985) + Канна (985–987) + Эйэн (987–989) + Эйсо (989–990) + Сёряку (990–995) + Тётоку (995–999) + Тёхо (999–1004) + Канко (1004–1012) + Тёва (1012–1017) + Каннин (1017–1021) + Дзиан (1021–1024) + Мандзю (1024–1028) + Тёген (1028–1037) + Тёряку (1037–1040) + Тёкю (1040–1044) + Кантоку (1044–1046) + Эйсё (1046–1053) + Тэнги (1053–1058) + + + + + + + эра + + + эра + + + эра + + + йыл + былтыр + быйыл + киләһе йылда + + {0} йылдан + + + {0} йыл элек + + + + й. + былтыр + быйыл + киләһе йылда + + {0} йылдан + + + {0} йыл элек + + + + й. + былтыр + быйыл + киләһе йылда + + {0} йылдан + + + {0} йыл элек + + + + квартал + үткән кварталда + был кварталда + киләһе кварталда + + {0} кварталдан + + + {0} квартал элек + + + + кв. + үткән кв. + был кв. + киләһе кв. + + {0} кв. һуң + + + {0} кв. элек + + + + кв. + үткән кв. + был кв. + киләһе кв. + + {0} кв. һуң + + + {0} кв. элек + + + + ай + үткән айҙа + был айҙа + киләһе айҙа + + {0} айҙан + + + {0} ай элек + + + + ай + үткән айҙа + был айҙа + киләһе айҙа + + {0} айҙан + + + {0} ай элек + + + + ай + үткән айҙа + был айҙа + киләһе айҙа + + {0} айҙан + + + {0} ай элек + + + + аҙна + үткән аҙнала + был аҙнала + киләһе аҙнала + + {0} аҙнанан + + + {0} аҙна элек + + {0} аҙнаһында + + + аҙна + үткән аҙнала + был аҙнала + киләһе аҙнала + + {0} аҙнанан + + + {0} аҙн. элек + + {0} аҙнаһында + + + аҙна + үткән аҙнала + был аҙнала + киләһе аҙнала + + {0} аҙнанан + + + {0} аҙна элек + + {0} аҙнаһында + + + ай аҙнаһы + + + ай аҙн. + + + ай аҙн. + + + көн + кисә + бөгөн + иртәгә + + {0} көндән + + + {0} көн элек + + + + көн + кисә + бөгөн + иртәгә + + {0} көндән + + + {0} көн элек + + + + көн + кисә + бөгөн + иртәгә + + {0} көндән + + + {0} көн элек + + + + йыл көнө + + + йыл көнө + + + йыл көнө + + + аҙна көнө + + + аҙна көнө + + + аҙна көнө + + + айҙың аҙна көнө + + + айҙ. аҙн. к. + + + айҙ. аҙн. к. + + + үткән йәкшәмбелә + был йәкшәмбелә + киләһе йәкшәмбелә + + {0} йәкшәмбенән һуң + + + {0} йәкшәмбе элек + + + + үткән йәк. + был йәк. + киләһе йәк. + + {0} йәк. һуң + + + {0} йәк. элек + + + + үткән йш + был йш + киләһе йш + + {0} йш һуң + + + {0} йш элек + + + + үткән дүшәмбелә + был дүшәмбелә + киләһе дүшәмбелә + + {0} дүшәмбенән һуң + + + {0} дүшәмбе элек + + + + үткән дүш. + был дүш. + киләһе дүш. + + {0} дүш. һуң + + + {0} дүш. элек + + + + үткән дш + был дш + киләһе дш + + {0} дш һуң + + + {0} дш элек + + + + үткән шишәмбелә + был шишәмбелә + киләһе шишәмбелә + + {0} шишәмбенән һуң + + + {0} шишәмбелә элек + + + + үткән шиш. + был шиш. + киләһе шиш. + + {0} шиш. һуң + + + {0} шиш. элек + + + + үткән шш + был шш + киләһе шш + + {0} шш һуң + + + {0} шш элек + + + + үткән шаршамбыла + был шаршамбыла + киләһе шаршамбыла + + {0} шаршамбынан һуң + + + {0} шаршамбы элек + + + + үткән шар. + был шар. + киләһе шар. + + {0} шар. һуң + + + {0} шар. элек + + + + үткән шр + был шр + киләһе шр + + {0} шр һуң + + + {0} шр элек + + + + үткән кесаҙнала + был кесаҙнала + киләһе кесаҙнала + + {0} кесаҙнанан һуң + + + {0} кесаҙна элек + + + + үткән кес. + был кес. + киләһе кес. + + {0} кес. һуң + + + {0} кес. элек + + + + үткән кс + был кс + киләһе кс + + {0} кс һуң + + + {0} кс элек + + + + үткән йомала + был йомала + киләһе йомала + + {0} йоманан һуң + + + {0} йома элек + + + + үткән йом. + был йом. + киләһе йом. + + {0} йом. һуң + + + {0} йом. элек + + + + үткән йм + был йм + киләһе йм + + {0} йм һуң + + + {0} йм элек + + + + үткән шәмбелә + был шәмбелә + киләһе шәмбелә + + {0} шәмбенән һуң + + + {0} шәмбе элек + + + + үткән шәм. + был шәм. + киләһе шәм. + + {0} шәм. һуң + + + {0} шәм. элек + + + + үткән шб + был шб + киләһе шб + + {0} шб һуң + + + {0} шб элек + + + + AM/PM + + + AM/PM + + + AM/PM + + + сәғәт + был сәғәттә + + {0} сәғәттән + + + {0} сәғәт элек + + + + сәғ. + был сәғәттә + + {0} сәғәттән + + + {0} сәғ. элек + + + + сәғ + был сәғәттә + + {0} сәғәттән + + + {0} сәғ. элек + + + + минут + был минутта + + {0} минуттан + + + {0} минут элек + + + + мин. + был минутта + + {0} минуттан + + + {0} мин. элек + + + + мин + был минутта + + {0} минуттан + + + {0} мин. элек + + + + секунд + хәҙер + + {0} секундтан + + + {0} секунд элек + + + + сек. + хәҙер + + {0} секундтан + + + {0} сек. элек + + + + сек + хәҙер + + {0} секундтан + + + {0} сек. элек + + + + сәғәт бүлкәте + + + бүлкәт + + + бүлкәт + + + + {0} ваҡыты + {0} йәйге ваҡыты + {0} стандарт ваҡыты + + + Координацияланған универсаль ваҡыт + + + + Билдәһеҙ урын + + + Андорра + + + Дубай + + + Кабул + + + Антигуа + + + Ангилья + + + Тирана + + + Ереван + + + Луанда + + + Ротера станцияһы + + + Палмер + + + Тролль станцияһы + + + Сёва станцияһы + + + Моусон станцияһы + + + Дейвис + + + Восток станцияһы + + + Кейси станцияһы + + + Дюмон-д’Юрвиль станцияһы + + + Мак-Мердо станцияһы + + + Рио-Гальегос + + + Мендоса + + + Сан-Хуан + + + Ушуая + + + Ла-Риоха + + + Сан-Луис + + + Катамарка + + + Сальта + + + Жужуй + + + Тукуман + + + Кордова + + + Буэнос-Айрес + + + Паго-Паго + + + Вена + + + Перт + + + Юкла + + + Дарвин + + + Аделаида + + + Брокен-Хилл + + + Мельбурн + + + Хобарт + + + Линдеман + + + Сидней + + + Брисбен + + + Маккуори утрауы + + + Лорд-Хау утрауы + + + Аруба + + + Мариехамн + + + Баҡы + + + Сараево + + + Барбадос + + + Дакка + + + Брюссель + + + Уагадугу + + + София + + + Бәхрәйн + + + Бужумбура + + + Порто-Ново + + + Сен-Бартелеми + + + Бермуд + + + Бруней + + + Ла-Пас + + + Кралендейк + + + Эйрунепе + + + Риу-Бранку + + + Порту-Велью + + + Боа-Виста + + + Манаус + + + Куяба + + + Сантарен + + + Кампу-Гранди + + + Белен + + + Арагуаина + + + Сан-Паулу + + + Баия + + + Форталеза + + + Масейо + + + Ресифи + + + Фернанду-ди-Норонья + + + Нассау + + + Тхимпху + + + Габороне + + + Минск + + + Белиз + + + Доусон + + + Уайтхорс + + + Инувик + + + Ванкувер + + + Форт Нельсон + + + Доусон-Крик + + + Крестон + + + Эдмонтон + + + Свифт-Керрент + + + Кеймбридж-Бей + + + Регина + + + Виннипег + + + Резольют + + + Ранкин-Инлет + + + Атикокан + + + Торонто + + + Икалуит + + + Монктон + + + Галифакс + + + Гус-Бей + + + Глейс-Бей + + + Блан-Саблон + + + Сент-Джонс + + + Кокос утрауҙары + + + Киншаса + + + Лубумбаши + + + Банги + + + Браззавиль + + + Цюрих + + + Абиджан + + + Раротонга + + + Пасха утрауы + + + Койхайке + + + Пунта-Аренас + + + Сантьяго + + + Дуала + + + Өрөмсө + + + Шанхай + + + Богота + + + Коста-Рика + + + Гавана + + + Кабо-Верде + + + Кюрасао + + + Раштыуа утрауы + + + Никосия + + + Фамагуста + + + Прага + + + Бүзинген + + + Берлин + + + Джибути + + + Копенгаген + + + Доминика + + + Санто-Доминго + + + Алжир + + + Галапагос утрауҙары + + + Гуаякиль + + + Таллин + + + Ҡаһирә + + + Эль-Аюн + + + Асмэра + + + Канар утрауҙары + + + Сеута + + + Мадрид + + + Аддис-Абеба + + + Хельсинки + + + Фиджи + + + Стэнли + + + Трук + + + Понпеи + + + Косрае + + + Фарер утрауҙары + + + Париж + + + Либревиль + + + + Бөйөк Британия йәйге ваҡыты + + Лондон + + + Гренада + + + Тбилиси + + + Кайенна + + + Гернси + + + Аккра + + + Гибралтар + + + Туле + + + Нуук + + + Скорсбисунн + + + Денмарксхавн + + + Банжул + + + Конакри + + + Гваделупа + + + Малабо + + + Афина + + + Көньяҡ Георгия + + + Гватемала + + + Гуам + + + Бисау + + + Гайана + + + Гонконг + + + Тегусигальпа + + + Загреб + + + Порт-о-Пренс + + + Будапешт + + + Джакарта + + + Понтианак + + + Макасар + + + Джаяпура + + + + Ирландия стандарт ваҡыты + + Дублин + + + Иерусалим + + + Мэн утрауы + + + Калькутта + + + Чагос + + + Бағдад + + + Тәһран + + + Рейкьявик + + + Рим + + + Джерси + + + Ямайка + + + Амман + + + Токио + + + Найроби + + + Бешкәк + + + Пномпень + + + Кантон утрауы + + + Киритимати + + + Тарава + + + Комор утрауҙары + + + Сент-Китс + + + Пхеньян + + + Сеул + + + Кувейт + + + Кайман утрауҙары + + + Аҡтау + + + Уральск + + + Атырау + + + Аҡтүбә + + + Ҡостанай + + + Ҡыҙылурҙа + + + Алматы + + + Вьентьян + + + Бейрут + + + Сент-Люсия + + + Вадуц + + + Коломбо + + + Монровия + + + Масеру + + + Вильнюс + + + Люксембург + + + Рига + + + Триполи + + + Касабланка + + + Монако + + + Кишинев + + + Подгорица + + + Мариго + + + Антананариву + + + Кваджалейн + + + Маджуро + + + Скопье + + + Бамако + + + Янгон + + + Ховд + + + Улан-Батор + + + Макао + + + Сайпан + + + Мартиника + + + Нуакшот + + + Монтсеррат + + + Мальта + + + Маврикий + + + Мальдив утрауҙары + + + Блантайр + + + Тихуана + + + Эрмосильо + + + Сьюдад-Хуарес + + + Масатлан + + + Чиуауа + + + Баия-де-Бандерас + + + Охинага + + + Монтеррей + + + Мехико + + + Матаморос + + + Мерида + + + Канкун + + + Куала-Лумпур + + + Кучинг + + + Мапуту + + + Виндхук + + + Нумеа + + + Ниамей + + + Норфолк утрауы + + + Лагос + + + Манагуа + + + Амстердам + + + Осло + + + Катманду + + + Науру + + + Ниуэ + + + Чатем утрауҙары + + + Окленд + + + Маскат + + + Панама + + + Лима + + + Таити + + + Маркиз утрауҙары + + + Гамбье утрауҙары + + + Порт-Морсби + + + Бугенвиль + + + Манила + + + Карачи + + + Варшава + + + Сен-Пьер + + + Питкэрн утрауҙары + + + Пуэрто-Рико + + + Газа + + + Хеврон + + + Азор утрауҙары + + + Мадейра + + + Лиссабон + + + Палау + + + Асунсьон + + + Катар + + + Реюньон + + + Бухарест + + + Белград + + + Калининград + + + Мәскәү + + + Волгоград + + + Һарытау + + + Әстерхан + + + Ульяновск + + + Киров + + + Һамар + + + Екатеринбург + + + Омск + + + Новосибирск + + + Барнаул + + + Томск + + + Новокузнецк + + + Красноярск + + + Иркутск + + + Чита + + + Якутск + + + Владивосток + + + Хандыга + + + Сахалин + + + Усть-Нера + + + Магадан + + + Среднеколымск + + + Камчатка + + + Анадырь + + + Кигали + + + Эр-Рияд + + + Гуадалканал + + + Маэ + + + Хартум + + + Стокгольм + + + Сингапур + + + Изге Елена утрауы + + + Любляна + + + Лонгйир + + + Братислава + + + Фритаун + + + Сан-Марино + + + Дакар + + + Могадишо + + + Парамарибо + + + Джуба + + + Сан-Томе + + + Сальвадор + + + Лоуэр-Принс-Куотер + + + Дәмәшк + + + Мбабане + + + Гранд-Терк + + + Нджамена + + + Кергулен утрауҙары + + + Ломе + + + Бангкок + + + Дүшәнбе + + + Факаофо + + + Дили + + + Ашхабад + + + Тунис + + + Тонгатапу + + + Истанбул + + + Порт-оф-Спейн + + + Фунафути + + + Тайпей + + + Дар-эс-Салам + + + Киев + + + Симферополь + + + Кампала + + + Мидуэй атоллы + + + Уэйк утрауы + + + Адак + + + Ном + + + Анкоридж + + + Якутат + + + Ситка + + + Джуно + + + Метлакатла + + + Лос-Анджелес + + + Бойсе + + + Финикс + + + Денвер + + + Бойла, Төньяҡ Дакота + + + Нью-Салем, Төньяк Дакота + + + Үҙәк, Төньяҡ Дакота + + + Чикаго + + + Меномини + + + Винсеннес, Индиана + + + Питерсберг, Индиана + + + Телл-Сити + + + Нокс, Индиана + + + Уинамак, Индиана + + + Маренго, Индиана + + + Индианаполис + + + Луисвилл + + + Вевей, Индиана + + + Монтиселло, Кентукки + + + Детройт + + + Нью-Йорк + + + Монтевидео + + + Сәмәрҡәнд + + + Ташкент + + + Ватикан + + + Сент-Винсент + + + Каракас + + + Тортола + + + Сент-Томас + + + Хошимин + + + Эфате + + + Уоллис һәм Футуна + + + Апиа + + + Аден + + + Майотта + + + Йоханнесбург + + + Лусака + + + Хараре + + + + Акри ваҡыты + Акри стандарт ваҡыты + Акри йәйге ваҡыты + + + + + Афғанстан ваҡыты + + + + + Үҙәк Африка ваҡыты + + + + + Көнсығыш Африка ваҡыты + + + + + Көньяҡ Африка стандарт ваҡыты + + + + + Көнбайыш Африка ваҡыты + + + + + Аляска ваҡыты + Аляска стандарт ваҡыты + Аляска йәйге ваҡыты + + + AKT + AKST + AKST + + + + + Алматы ваҡыты + Алматы стандарт ваҡыты + Алматы йәйге ваҡыты + + + + + Амазон ваҡыты + Амазон стандарт ваҡыты + Амазон йәйге ваҡыты + + + + + Үҙәк Америка ваҡыты + Үҙәк Америка стандарт ваҡыты + Үҙәк Америка йәйге ваҡыты + + + CT + CST + CDT + + + + + Көнсығыш Америка ваҡыты + Көнсығыш Америка стандарт ваҡыты + Көнсығыш Америка йәйге ваҡыты + + + ET + EST + EDT + + + + + Төньяҡ Америка Тау ваҡыты + Төньяҡ Америка Тау стандарт ваҡыты + Төньяҡ Америка Тау йәйге ваҡыты + + + MT + MST + MDT + + + + + Тымыҡ океан ваҡыты + Тымыҡ океан стандарт ваҡыты + Тымыҡ океан йәйге ваҡыты + + + PT + PST + PDT + + + + + Анадырь ваҡыты + Анадырь стандарт ваҡыты + Анадырь йәйге ваҡыты + + + + + Самоа ваҡыты + Самоа стандарт ваҡыты + Самоа йәйге ваҡыты + + + + + Аҡтау ваҡыты + Аҡтау стандарт ваҡыты + Аҡтау йәйге ваҡыты + + + + + Аҡтүбә ваҡыты + Аҡтүбә стандарт ваҡыты + Аҡтүбә йәйге ваҡыты + + + + + Сәғүд Ғәрәбстаны ваҡыты + Сәғүд Ғәрәбстаны стандарт ваҡыты + Сәғүд Ғәрәбстаны йәйге ваҡыты + + + + + Аргентина ваҡыты + Аргентина стандарт ваҡыты + Аргентина йәйге ваҡыты + + + + + Көнбайыш Аргентина ваҡыты + Көнбайыш Аргентина стандарт ваҡыты + Көнбайыш Аргентина йәйге ваҡыты + + + + + Әрмәнстан ваҡыты + Әрмәнстан стандарт ваҡыты + Әрмәнстан йәйге ваҡыты + + + + + Атлантик ваҡыты + Атлантик стандарт ваҡыты + Атлантик йәйге ваҡыты + + + + + Үҙәк Австралия ваҡыты + Үҙәк Австралия стандарт ваҡыты + Үҙәк Австралия йәйге ваҡыты + + + + + Үҙәк Австралия көнбайыш ваҡыты + Үҙәк Австралия көнбайыш стандарт ваҡыты + Үҙәк Австралия көнбайыш йәйге ваҡыты + + + + + Көнсығыш Австралия ваҡыты + Көнсығыш Австралия стандарт ваҡыты + Көнсығыш Австралия йәйге ваҡыты + + + + + Көнбайыш Австралия ваҡыты + Көнбайыш Австралия стандарт ваҡыты + Көнбайыш Австралия йәйге ваҡыты + + + + + Әзербайжан ваҡыты + Әзербайжан стандарт ваҡыты + Әзербайжан йәйге ваҡыты + + + + + Азор утрауҙары ваҡыты + Азор утрауҙары стандарт ваҡыты + Азор утрауҙары йәйге ваҡыты + + + + + Бангладеш ваҡыты + Бангладеш стандарт ваҡыты + Бангладеш йәйге ваҡыты + + + + + Бутан ваҡыты + + + + + Боливия ваҡыты + + + + + Бразилия ваҡыты + Бразилия стандарт ваҡыты + Бразилия йәйге ваҡыты + + + + + Бруней ваҡыты + + + + + Кабо-Верде ваҡыты + Кабо-Верде стандарт ваҡыты + Кабо-Верде йәйге ваҡыты + + + + + Кейси ваҡыты + + + + + Чаморро стандарт ваҡыты + + + + + Чатем ваҡыты + Чатем стандарт ваҡыты + Чатем йәйге ваҡыты + + + + + Чили ваҡыты + Чили стандарт ваҡыты + Чили йәйге ваҡыты + + + + + Ҡытай ваҡыты + Ҡытай стандарт ваҡыты + Ҡытай йәйге ваҡыты + + + + + Раштыуа утрауы ваҡыты + + + + + Кокос утрауҙары ваҡыты + + + + + Колумбия ваҡыты + Колумбия стандарт ваҡыты + Колумбия йәйге ваҡыты + + + + + Кук утрауҙары ваҡыты + Кук утрауҙары стандарт ваҡыты + Кук утрауҙары йәйге ваҡыты + + + + + Куба ваҡыты + Куба стандарт ваҡыты + Куба йәйге ваҡыты + + + + + Дейвис ваҡыты + + + + + Дюмон-д’Юрвиль ваҡыты + + + + + Көнсығыш Тимор ваҡыты + + + + + Пасха утрауы ваҡыты + Пасха утрауы стандарт ваҡыты + Пасха утрауы йәйге ваҡыты + + + + + Эквадор ваҡыты + + + + + Үҙәк Европа ваҡыты + Үҙәк Европа стандарт ваҡыты + Үҙәк Европа йәйге ваҡыты + + + + + Көнсығыш Европа ваҡыты + Көнсығыш Европа стандарт ваҡыты + Көнсығыш Европа йәйге ваҡыты + + + + + Мәскәү ваҡыты + + + + + Көнбайыш Европа ваҡыты + Көнбайыш Европа стандарт ваҡыты + Көнбайыш Европа йәйге ваҡыты + + + + + Фолкленд утрауҙары ваҡыты + Фолкленд утрауҙары стандарт ваҡыты + Фолкленд утрауҙары йәйге ваҡыты + + + + + Фиджи ваҡыты + Фиджи стандарт ваҡыты + Фиджи йәйге ваҡыты + + + + + Француз Гвианаһы ваҡыты + + + + + Француз Көньяҡ һәм Антарктика ваҡыты + + + + + Галапагос ваҡыты + + + + + Гамбье ваҡыты + + + + + Грузия ваҡыты + Грузия стандарт ваҡыты + Грузия йәйге ваҡыты + + + + + Гилберт утрауҙары ваҡыты + + + + + Гринвич буйынса уртаса ваҡыт + + + + + Гренландия ваҡыты + Гренландия стандарт ваҡыты + Гренландия йәйге ваҡыты + + + + + Көнсығыш Гренландия ваҡыты + Көнсығыш Гренландия стандарт ваҡыты + Көнсығыш Гренландия йәйге ваҡыты + + + + + Көнбайыш Гренландия ваҡыты + Көнбайыш Гренландия стандарт ваҡыты + Көнбайыш Гренландия йәйге ваҡыты + + + + + Гуам стандарт ваҡыты + + + + + Фарсы ҡултығы стандарт ваҡыты + + + + + Гайана ваҡыты + + + + + Гавай-Алеут стандарт ваҡыты + + + + + Гавай-Алеут ваҡыты + Гавай-Алеут стандарт ваҡыты + Гавай-Алеут йәйге ваҡыты + + + + + Гонконг ваҡыты + Гонконг стандарт ваҡыты + Гонконг йәйге ваҡыты + + + + + Ховд ваҡыты + Ховд стандарт ваҡыты + Ховд йәйге ваҡыты + + + + + Һиндостан стандарт ваҡыты + + + + + Һинд океаны ваҡыты + + + + + Һинд-Ҡытай ваҡыты + + + + + Үҙәк Индонезия ваҡыты + + + + + Көнсығыш Индонезия + + + + + Көнбайыш Индонезия + + + + + Иран ваҡыты + Иран стандарт ваҡыты + Иран йәйге ваҡыты + + + + + Иркутск ваҡыты + Иркутск стандарт ваҡыты + Иркутск йәйге ваҡыты + + + + + Израиль ваҡыты + Израиль стандарт ваҡыты + Израиль йәйге ваҡыты + + + + + Япония ваҡыты + Япония стандарт ваҡыты + Япония йәйге ваҡыты + + + + + Камчатка ваҡыты + Камчатка стандарт ваҡыты + Камчатка йәйге ваҡыты + + + + + Ҡаҙағстан ваҡыты + + + + + Көнсығыш Ҡаҙағстан ваҡыты + + + + + Көнбайыш Ҡаҙағстан ваҡыты + + + + + Корея ваҡыты + Корея стандарт ваҡыты + Корея йәйге ваҡыты + + + + + Косрае ваҡыты + + + + + Красноярск ваҡыты + Красноярск стандарт ваҡыты + Красноярск йәйге ваҡыты + + + + + Ҡырғыҙстан ваҡыты + + + + + Ланка ваҡыты + + + + + Лайн утрауҙары ваҡыты + + + + + Лорд-Хау ваҡыты + Лорд-Хау стандарт ваҡыты + Лорд-Хау йәйге ваҡыты + + + + + Макао ваҡыты + Макао стандарт ваҡыты + Макао йәйге ваҡыты + + + + + Магадан ваҡыты + Магадан стандарт ваҡыты + Магадан йәйге ваҡыты + + + + + Малайзия ваҡыты + + + + + Мальдив утрауҙары ваҡыты + + + + + Маркиз утрауҙары ваҡыты + + + + + Маршалл Утрауҙары ваҡыты + + + + + Маврикий ваҡыты + Маврикий стандарт ваҡыты + Маврикий йәйге ваҡыты + + + + + Моусон ваҡыты + + + + + Мексика Тымыҡ океан ваҡыты + Мексика Тымыҡ океан стандарт ваҡыты + Мексика Тымыҡ океан йәйге ваҡыты + + + + + Улан-Батор ваҡыты + Улан-Батор стандарт ваҡыты + Улан-Батор йәйге ваҡыты + + + + + Мәскәү ваҡыты + Мәскәү стандарт ваҡыты + Мәскәү йәйге ваҡыты + + + + + Мьянма ваҡыты + + + + + Науру ваҡыты + + + + + Непал ваҡыты + + + + + Яңы Каледония ваҡыты + Яңы Каледония стандарт ваҡыты + Яңы Каледония йәйге ваҡыты + + + + + Яңы Зеландия ваҡыты + Яңы Зеландия стандарт ваҡыты + Яңы Зеландия йәйге ваҡыты + + + + + Ньюфаундленд ваҡыты + Ньюфаундленд стандарт ваҡыты + Ньюфаундленд йәйге ваҡыты + + + + + Ниуэ ваҡыты + + + + + Норфолк ваҡыты + Норфолк стандарт ваҡыты + Норфолк йәйге ваҡыты + + + + + Фернанду-ди-Норонья ваҡыты + Фернанду-ди-Норонья стандарт ваҡыты + Фернанду-ди-Норонья йәйге ваҡыты + + + + + Новосибирск ваҡыты + Новосибирск стандарт ваҡыты + Новосибирск йәйге ваҡыты + + + + + Омск ваҡыты + Омск стандарт ваҡыты + Омск йәйге ваҡыты + + + + + Пакистан ваҡыты + Пакистан стандарт ваҡыты + Пакистан йәйге ваҡыты + + + + + Палау ваҡыты + + + + + Папуа – Яңы Гвинея + + + + + Парагвай ваҡыты + Парагвай стандарт ваҡыты + Парагвай йәйге ваҡыты + + + + + Перу ваҡыты + Перу стандарт ваҡыты + Перу йәйге ваҡыты + + + + + Филиппин ваҡыты + Филиппин стандарт ваҡыты + Филиппин йәйге ваҡыты + + + + + Феникс утрауҙары ваҡыты + + + + + Сен-Пьер һәм Микелон ваҡыты + Сен-Пьер һәм Микелон стандарт ваҡыты + Сен-Пьер һәм Микелон йәйге ваҡыты + + + + + Питкэрн ваҡыты + + + + + Понпеи ваҡыты + + + + + Төньяҡ Корея ваҡыты + + + + + Ҡыҙылурҙа ваҡыты + Ҡыҙылурҙа стандарт ваҡыты + Ҡыҙылурҙа йәйге ваҡыты + + + + + Реюньон ваҡыты + + + + + Ротера ваҡыты + + + + + Сахалин ваҡыты + Сахалин стандарт ваҡыты + Сахалин йәйге ваҡыты + + + + + Һамар ваҡыты + Һамар стандарт ваҡыты + Һамар йәйге ваҡыты + + + + + Америка Самоаһы ваҡыты + Америка Самоаһы стандарт ваҡыты + Америка Самоаһы йәйге ваҡыты + + + + + Сейшел утрауҙары ваҡыты + + + + + Сингапур стандарт ваҡыты + + + + + Соломон утрауҙары ваҡыты + + + + + Көньяҡ Георгия ваҡыты + + + + + Суринам ваҡыты + + + + + Сёва ваҡыты + + + + + Таити ваҡыты + + + + + Тайвань ваҡыты + Тайвань стандарт ваҡыты + Тайвань йәйге ваҡыты + + + + + Тажикстан ваҡыты + + + + + Токелау ваҡыты + + + + + Тонга ваҡыты + Тонга стандарт ваҡыты + Тонга йәйге ваҡыты + + + + + Чуук ваҡыты + + + + + Төркмәнстан ваҡыты + Төркмәнстан стандарт ваҡыты + Төркмәнстан йәйге ваҡыты + + + + + Тувалу ваҡыты + + + + + Уругвай ваҡыты + Уругвай стандарт ваҡыты + Уругвай йәйге ваҡыты + + + + + Үзбәкстан ваҡыты + Үзбәкстан стандарт ваҡыты + Үзбәкстан йәйге ваҡыты + + + + + Вануату ваҡыты + Вануату стандарт ваҡыты + Вануату йәйге ваҡыты + + + + + Венесуэла ваҡыты + + + + + Владивосток ваҡыты + Владивосток стандарт ваҡыты + Владивосток йәйге ваҡыты + + + + + Волгоград ваҡыты + Волгоград стандарт ваҡыты + Волгоград йәйге ваҡыты + + + + + Восток ваҡыты + + + + + Уэйк утрауы ваҡыты + + + + + Уоллис һәм Футуна ваҡыты + + + + + Якутск ваҡыты + Якутск стандарт ваҡыты + Якутск йәйге ваҡыты + + + + + Екатеринбург ваҡыты + Екатеринбург стандарт ваҡыты + Екатеринбург йәйге ваҡыты + + + + + Юкон ваҡыты + + + + + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + +   + + + + + 0 мең + 00 мең + 000 мең + 0 миллион + 00 миллион + 000 миллион + 0 миллиард + 00 миллиард + 000 миллиард + 0 триллион + 00 триллион + 000 триллион + + + + + 0 мең + 00 мең + 000 мең + 0 млн + 00 млн + 000 млн + 0 млрд + 00 млрд + 000 млрд + 0 трлн + 00 трлн + 000 трлн + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ + #,##0.00 ¤ + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + + + + + + Андорра песетаһы + Андорра песетаһы + + + Берләшкән Ғәрәп Әмирлектәре дирһәме + Берләшкән Ғәрәп Әмирлектәре дирһамы + + + Афған афғаниһы (1927–2002) + Афған афғаниһы (1927–2002) + + + Афған афғаниһы + Афған афғаниһы + + + Албания лекы (1946–1965) + Албания лекы (1946–1965) + + + Албания лекы + Албания лекы + + + Әрмән драмы + Әрмән драмы + + + Нидерланд Антил гульдены + Нидерланд Антил гульдены + + + Ангола кванзаһы + Ангола кванзаһы + + + Ангола кванзаһы (1977–1991) + Ангола кванзаһы (1977–1991) + + + Ангола яңы кванзаһы (1990–2000) + Ангола яңы кванзаһы (1990–2000) + + + Ангола көйләнгән кванзаһы (1995–1999) + Ангола көйләнгән кванзаһы (1995–1999) + + + Аргентина аустралы + Аргентина аустралы + + + Аргентина песоһы (1970–1983) + Аргентина песоһы (1970–1983) + + + Аргентина песоһы (1881–1970) + Аргентина песоһы (1881–1970) + + + Аргентина песоһы (1983–1985) + Аргентина песоһы (1983–1985) + + + Аргентина песоһы + Аргентина песоһы + + + Австрия шиллингы + Австрия шиллингы + + + Австралия доллары + Австралия доллары + + + Аруба флорины + Аруба флорины + + + Әзербайжан манаты (1993–2006) + Әзербайжан манаты (1993–2006) + + + Әзербайжан манаты + Әзербайжан манаты + + + Босния һәм Герцеговина динары (1992–1994) + Босния һәм Герцеговина динары (1992–1994) + + + Босния һәм Герцеговина алмашынмалы маркаһы + Босния һәм Герцеговина алмашынмалы маркаһы + + + Босния һәм Герцеговина яңы динары (1994–1997) + Босния һәм Герцеговина яңы динары (1994–1997) + + + Барбадос доллары + Барбадос доллары + + + Бангладеш такаһы + Бангладеш такаһы + + + Бельгия франкы (алмашынмалы) + Бельгия франкы (алмашынмалы) + + + Бельгия франкы + Бельгия франкы + + + Бельгия франкы (финанс) + Бельгия франкы (финанс) + + + Болгар ҡаты левы + Болгар ҡаты левы + + + Болгар социалистик левы + Болгар социалистик левы + + + Болгария левы + Болгария левы + + + Болгар левы (1879–1952) + Болгар левы (1879–1952) + + + Бәхрәйн динары + Бәхрәйн динары + + + Бурунди франкы + Бурунди франкы + + + Бермуд доллары + Бермуд доллары + + + Бруней доллары + Бруней доллары + + + Боливия боливианоһы + Боливия боливианоһы + + + Боливия боливианоһы (1863–1963) + Боливия боливианоһы (1863–1963) + + + Боливия песоһы + Боливия песоһы + + + Боливия мвдолы + Боливия мвдолы + + + Бразилия яңы крузейроһы (1967–1986) + Бразилия яңы крузейроһы (1967–1986) + + + Бразилия крузадоһы (1986–1989) + Бразилия крузадоһы (1986–1989) + + + Бразилия крузейроһы (1990–1993) + Бразилия крузейроһы (1990–1993) + + + Бразилия реалы + Бразилия реалы + + + Бразилия яңы крузадоһы (1989–1990) + Бразилия яңы крузадоһы (1989–1990) + + + Бразилия крузейроһы (1993–1994) + Бразилия крузейроһы (1993–1994) + + + Бразилия крузейроһы (1942–1967) + Бразилия крузейроһы (1942–1967) + + + Багам доллары + Багам доллары + + + Бутан нгултрумы + Бутан нгултрумы + + + Бирма кьяты + Бирма кьяты + + + Ботсвана пулаһы + Ботсвана пулаһы + + + Беларусь рубле (1994–1999) + Беларусь рубле (1994–1999) + + + Беларусь рубле + Беларусь рубле + + + Беларусь рубле (2000–2016) + Беларусь рубле (2000–2016) + + + Белиз доллары + Белиз доллары + + + Канада доллары + Канада доллары + + + Конго франкы + Конго франкы + + + WIR евроһы + WIR евроһы + + + Швейцария франкы + Швейцария франкы + + + WIR франкы + WIR франкы + + + Чили эскудоһы + Чили эскудоһы + + + Чили иҫәп берәмеге (UF) + Чили иҫәп берәмеге (UF) + + + Чили песоһы + Чили песоһы + + + Ҡытай юане (офшор) + Ҡытай юане (офшор) + + + Ҡытай Халыҡ Банкы доллары + Ҡытай Халыҡ Банкы доллары + + + Ҡытай юане + Ҡытай юане + + + Колумбия песоһы + Колумбия песоһы + + + Колумбия реаль хаҡ берәмеге + Колумбия реаль хаҡ берәмеге + + + Коста-Рика колоны + Коста-Рика колоны + + + Сербия динары (2002–2006) + Сербия динары (2002–2006) + + + Чехословакия ҡаты кронаһы + Чехословакия ҡаты кронаһы + + + Куба алмашынмалы песоһы + Куба алмашынмалы песоһы + + + Куба песоһы + Куба песоһы + + + Кабо-Верде эскудоһы + Кабо-Верде эскудоһы + + + Кипр фунты + Кипр фунты + + + Чехия кронаһы + Чехия кронаһы + + + Көнсығыш Германия маркаһы + Көнсығыш Германия маркаһы + + + Германия маркаһы + Германия маркаһы + + + Джибути франкы + Джибути франкы + + + Дания кронаһы + Дания кронаһы + + + Доминикан песоһы + Доминикан песоһы + + + Алжир динары + Алжир динары + + + Эквадор сукреһы + Эквадор сукреһы + + + Эквадор даими хаҡ берәмеге + Эквадор даими хаҡ берәмеге + + + Эстония кронаһы + Эстония кронаһы + + + Мысыр фунты + Мысыр фунты + + + Эритрея накфаһы + Эритрея накфаһы + + + Испания песетаһы (A иҫәбе) + Испания песетаһы (A иҫәбе) + + + Испания песетаһы (алмашынмалы иҫәп) + Испания песетаһы (алмашынмалы иҫәп) + + + Испания песетаһы + Испания песетаһы + + + Эфиопия быры + Эфиопия быры + + + Евро + Евро + + + Финляндия маркаһы + Финляндия маркаһы + + + Фиджи доллары + Фиджи доллары + + + Фолкленд утрауҙары фунты + Фолкленд утрауҙары фунты + + + Франция франкы + Франция франкы + + + Британия фунт стерлингы + Британия фунт стерлингы + + + Грузия купон лариты + Грузия купон лариты + + + Грузия лариһы + Грузия лариһы + + + Гана седиһы (1979–2007) + Гана седиһы (1979–2007) + + + Гана седиһы + Гана седиһы + + + Гибралтар фунты + Гибралтар фунты + + + Гамбия даласиһы + Гамбия даласиһы + + + Гвинея франкы + Гвинея франкы + + + Гвинея силиһы + Гвинея силиһы + + + Экваториаль Гвинея эквелеһы + Экваториаль Гвинея эквелеһы + + + Греция драхмаһы + Греция драхмаһы + + + Гватемала кетсале + Гватемала кетсале + + + Португал Гвинея эскудоһы + Португал Гвинея эскудоһы + + + Гвинея-Бисау песоһы + Гвинея-Бисау песоһы + + + Гайана доллары + Гайана доллары + + + Гонконг доллары + Гонконг доллары + + + Гондурас лемпираһы + Гондурас лемпираһы + + + Хорватия динары + Хорватия динары + + + Хорватия кунаһы + Хорватия кунаһы + + + Гаити гурды + Гаити гурды + + + Венгрия форинты + Венгрия форинты + + + Индонезия рупияһы + Индонезия рупияһы + + + Ирландия фунты + Ирландия фунты + + + Израиль фунты + Израиль фунты + + + Израиль шекеле (1980–1985) + Израиль шекеле (1980–1985) + + + Израиль яңы шекеле + Израиль яңы шекеле + + + Һиндостан рупияһы + Һиндостан рупияһы + + + Ираҡ динары + Ираҡ динары + + + Иран риалы + Иран риалы + + + Исландия кронаһы (1918–1981) + Исландия кронаһы (1918–1981) + + + Исландия кронаһы + Исландия кронаһы + + + Италия лираһы + Италия лираһы + + + Ямайка доллары + Ямайка доллары + + + Иордания динары + Иордания динары + + + Япон иенаһы + Япон иенаһы + + + Кения шиллингы + Кения шиллингы + + + Ҡырғыҙстан һумы + Ҡырғыҙстан сомы + + + Камбоджа риеле + Камбоджа риеле + + + Комор франкы + Комор франкы + + + Төньяҡ Корея воны + Төньяҡ Корея воны + + + Көньяҡ Корея хваны (1953–1962) + Көньяҡ Корея хваны (1953–1962) + + + Көньяҡ Корея воны (1945–1953) + Көньяҡ Корея воны (1945–1953) + + + Көньяҡ Корея воны + Көньяҡ Корея воны + + + Кувейт динары + Кувейт динары + + + Кайман утрауҙары доллары + Кайман утрауҙары доллары + + + Ҡаҙағстан тәңкәһе + Ҡаҙағстан тәңкәһе + + + Лаос кипы + Лаос кипы + + + Ливан фунты + Ливан фунты + + + Шри-Ланка рупияһы + Шри-Ланка рупияһы + + + Либерия доллары + Либерия доллары + + + Лесото лотиһы + Лесото лотиһы + + + Латвия литы + Латвия литы + + + Литва талоны + Литва талоны + + + Люксембург алмашынмалы франкы + Люксембург алмашынмалы франкы + + + Люксембург франкы + Люксембург франкы + + + Люксембург финанс франкы + Люксембург финанс франкы + + + Латвия латы + Латвия латы + + + Латвия рубле + Латвия рубле + + + Ливия динары + Ливия динары + + + Марокко дирһәме + Марокко дирһәме + + + Марокко франкы + Марокко франкы + + + Монако франкы + Монако франкы + + + Молдова купоны + Молдова купоны + + + Молдова лейе + Молдова лейе + + + Мадагаскар ариариһы + Мадагаскар ариариһы + + + Мадагаскар франкы + Мадагаскар франкы + + + Македония денары + Македония денары + + + Македония денары (1992–1993) + Македония денары (1992–1993) + + + Мали франкы + Мали франкы + + + Мьянма кьяты + Мьянма кьяты + + + Монголия тугригы + Монголия тугригы + + + Макао патакаһы + Макао патакаһы + + + Мавритания угияһы (1973–2017) + Мавритания угияһы (1973–2017) + + + Мавритания угияһы + Мавритания угияһы + + + Мальта лираһы + Мальта лираһы + + + Мальта фунты + Мальта фунты + + + Маврикий рупияһы + Маврикий рупияһы + + + Мальдив рупияһы (1947–1981) + Мальдив рупияһы (1947–1981) + + + Мальдив руфияһы + Мальдив руфияһы + + + Малави квачаһы + Малави квачаһы + + + Мексика песоһы + Мексика песоһы + + + Мексика көмөш песоһы (1861–1992) + Мексика көмөш песоһы (1861–1992) + + + Мексика инвестиция берәмеге + Мексика инвестиция берәмеге + + + Малайзия ринггиты + Малайзия ринггиты + + + Мозамбик эскудоһы + Мозамбик эскудоһы + + + Мозамбик метикалы (1980–2006) + Мозамбик метикалы (1980–2006) + + + Мозамбик метикалы + Мозамбик метикалы + + + Намибия доллары + Намибия доллары + + + Нигерия найраһы + Нигерия найраһы + + + Никарагуа кордобаһы (1988–1991) + Никарагуа кордобаһы (1988–1991) + + + Никарагуа кордобаһы + Никарагуа кордобаһы + + + Нидерланд гульдены + Нидерланд гульдены + + + Норвегия кронаһы + Норвегия кронаһы + + + Непал рупияһы + Непал рупияһы + + + Яңы Зеландия доллары + Яңы Зеландия доллары + + + Оман риалы + Оман риалы + + + Панама бальбоаһы + Панама бальбоаһы + + + Перу интиһы + Перу интиһы + + + Перу соле + Перу соле + + + Перу солеһы (1863–1965) + Перу солеһы (1863–1965) + + + Папуа - Яңы Гвинея кинаһы + Папуа - Яңы Гвинея кинаһы + + + Филиппин песоһы + Филиппин песоһы + + + Пакистан рупияһы + Пакистан рупияһы + + + Польша злотыйы + Польша злотыйы + + + Польша злотыйы (1950–1995) + Польша злотыйы (1950–1995) + + + Португалия эскудоһы + Португалия эскудоһы + + + Парагвай гуараниһы + Парагвай гуараниһы + + + Катар риалы + Катар риалы + + + Родезия доллары + Родезия доллары + + + Румын лейе (1952–2006) + Румын лейе (1952–2006) + + + Румын лейе + Румын лейе + + + Сербия динары + Сербия динары + + + Рәсәй рубле + Рәсәй рубле + + + Рәсәй рубле (1991–1998) + Рәсәй рубле (1991–1998) + р. + + + Руанда франкы + Руанда франкы + + + Сәғүд риалы + Сәғүд риалы + + + Соломон утрауҙары доллары + Соломон утрауҙары доллары + + + Сейшел рупияһы + Сейшел рупияһы + + + Судан динары (1992–2007) + Судан динары (1992–2007) + + + Судан фунты + Судан фунты + + + Судан фунты (1957–1998) + Судан фунты (1957–1998) + + + Швеция кронаһы + Швеция кронаһы + + + Сингапур доллары + Сингапур доллары + + + Изге Елена утрауы фунты + Изге Елена утрауы фунты + + + Словения толары + Словения толары + + + Словакия кронаһы + Словакия кронаһы + + + Сьерра-Леоне леонеһы + Сьерра-Леоне леонеһы + + + Сьерра-Леоне леонеһы (1964–2022) + Сьерра-Леоне леонеһы (1964–2022) + + + Сомали шиллингы + Сомали шиллингы + + + Суринам доллары + Суринам доллары + + + Суринам гульдены + Суринам гульдены + + + Көньяҡ Судан фунты + Көньяҡ Судан фунты + + + Сан-Томе һәм Принсипи добраһы (1977–2017) + Сан-Томе һәм Принсипи добраһы (1977–2017) + + + Сан-Томе һәм Принсипи добраһы + Сан-Томе һәм Принсипи добраһы + + + СССР рубле + СССР рубле + + + Сальвадор колоны + Сальвадор колоны + + + Сүриә фунты + Сүриә фунты + + + Свазиленд лилангениһы + Свазиленд лилангениһы + + + Таиланд баты + Таиланд баты + + + Тажикстан рубле + Тажикстан рубле + + + Тажикстан сомониһы + Тажикстан сомониһы + + + Төркмәнстан манаты (1993–2009) + Төркмәнстан манаты (1993–2009) + + + Төркмәнстан манаты + Төркмәнстан манаты + + + Тунис динары + Тунис динары + + + Тонга паангаһы + Тонга паангаһы + + + Тимор эскудоһы + Тимор эскудоһы + + + Төрөк лираһы (1922–2005) + Төрөк лираһы (1922–2005) + + + Төрөк лираһы + Төрөк лираһы + + + Тринидад һәм Тобаго доллары + Тринидад һәм Тобаго доллары + + + Яңы Тайвань доллары + Яңы Тайвань доллары + + + Танзания шиллингы + Танзания шиллингы + + + Украина гривнаһы + Украина гривнаһы + + + Украина карбованецы + Украина карбованецы + + + Уганда шиллингы (1966–1987) + Уганда шиллингы (1966–1987) + + + Уганда шиллингы + Уганда шиллингы + + + АҠШ доллары + АҠШ доллары + $ + + + АҠШ доллары (киләһе көн) + АҠШ доллары (киләһе көн) + + + АҠШ доллары (шул уҡ көн) + АҠШ доллары (шул уҡ көн) + + + Уругвай песоһы (индексланған берәмектәр) + Уругвай песоһы (индексланған берәмектәр) + + + Уругвай песоһы (1975–1993) + Уругвай песоһы (1975–1993) + + + Уругвай песоһы + Уругвай песоһы + + + Уругвай номиналь эш хаҡы индексы берәмеге + Уругвай номиналь эш хаҡы индексы берәмеге + + + Үзбәкстан һумы + Үзбәкстан һумы + + + Венесуэла боливары (1871–2008) + Венесуэла боливары (1871–2008) + + + суверенлы боливар + суверенлы боливар + + + Венесуэла боливары (2008–2018) + Венесуэла боливары (2008–2018) + + + Венесуэла боливары + Венесуэла боливары + + + Вьетнам донгы + Вьетнам донгы + + + Вьетнам донгы (1978–1985) + Вьетнам донгы (1978–1985) + + + Вануату ватуһы + Вануату ватуһы + + + Самоа талаһы + Самоа талаһы + + + Үҙәк Африка КФА франкы + Үҙәк Африка КФА франкы + + + көмөш + труа унция көмөш + + + алтын + труа унция алтын + + + Европа композит берәмеге + Европа композит берәмеге + + + Европа аҡса берәмеге + Европа аҡса берәмеге + + + Европа иҫәп берәмеге (XBC) + Европа иҫәп берәмеге (XBC) + + + Европа иҫәп берәмеге (XBD) + Европа иҫәп берәмеге (XBD) + + + Көнсығыш Кариб доллары + Көнсығыш Кариб доллары + + + Кариб гульдены + Кариб гульдены + + + Махсус үтес алыу хоҡуҡтары + Махсус үтес алыу хоҡуҡтары + + + Европа валюта берәмеге + Европа валюта берәмеге + + + Франция алтын франкы + Франция алтын франкы + + + Франция UIC-франкы + Франция UIC-франкы + + + Көнбайыш Африка КФА франкы + Көнбайыш Африка КФА франкы + F CFA + + + палладий + труа унция палладий + + + Француз Тымыҡ океан франкы + Француз Тымыҡ океан франкы + + + ағалтын + труа унция ағалтын + + + RINET фондтары + RINET фондтары + + + Сукре + Сукре + + + тест валюта берәмеге + тест валюта берәмеге + + + АБР иҫәп берәмеге + АБР иҫәп берәмеге + + + Билдәһеҙ валюта + Билдәһеҙ валюта + + + Йәмән динары + Йәмән динары + + + Йәмән риалы + Йәмән риалы + + + Югославия ҡаты динары (1966–1990) + Югославия ҡаты динары (1966–1990) + + + Югославия яңы динары (1994–2002) + Югославия яңы динары (1994–2002) + + + Югославия алмашынмалы динары (1990–1992) + Югославия алмашынмалы динары (1990–1992) + + + Югославия реформаланған динары (1992–1993) + Югославия реформаланған динары (1992–1993) + + + Көньяҡ Африка рэнды (финанс) + Көньяҡ Африка рэнды (финанс) + + + Көньяҡ Африка рэнды + Көньяҡ Африка рэнды + + + Замбия квачаһы (1968–2012) + Замбия квачаһы (1968–2012) + + + Замбия квачаһы + Замбия квачаһы + + + Заир яңы заиры (1993–1998) + Заир яңы заиры (1993–1998) + + + Заир заиры (1971–1993) + Заир заиры (1971–1993) + + + Зимбабве доллары (1980–2008) + Зимбабве доллары (1980–2008) + + + Зимбабве алтыны + Зимбабве алтыны + + + Зимбабве доллары (2009–2024) + Зимбабве доллары (2009–2024) + + + Зимбабве доллары (2008) + Зимбабве доллары (2008) + + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0}+ + + + {0} көн + {0} уңға боролоғоҙ. + + + + + + деци{0} + + + санти{0} + + + милли{0} + + + микро{0} + + + нано{0} + + + пико{0} + + + фемто{0} + + + атто{0} + + + зепто{0} + + + иокто{0} + + + ронто{0} + + + квекто{0} + + + дека{0} + + + гекто{0} + + + кило{0} + + + мега{0} + + + гига{0} + + + тера{0} + + + пета{0} + + + экса{0} + + + зетта{0} + + + иотта{0} + + + ронна{0} + + + кветта{0} + + + киби{0} + + + меби{0} + + + гиби{0} + + + теби{0} + + + пеби{0} + + + эксби{0} + + + зеби{0} + + + йоби{0} + + + квадрат {0} + + + куб {0} + + + g-көс + {0} g-көс + + + квадрат секундҡа метр + {0} квадрат секундҡа метр + + + әйләнештәр + {0} әйләнеш + + + радиандар + {0} радиан + + + градустар + {0} градус + + + минуттар + {0} минут + + + секундтар + {0} секунд + + + квадрат километрҙар + {0} квадрат километр + квадрат километрға {0} + + + гектарҙар + {0} гектар + + + квадрат метрҙар + {0} квадрат метр + квадрат метрға {0} + + + квадрат сантиметрҙар + {0} квадрат сантиметр + квадрат сантиметрға {0} + + + квадрат милдәр + {0} квадрат миль + квадрат милгә {0} + + + акрҙар + {0} акр + + + квадрат ярдтар + {0} квадрат ярд + + + квадрат футтар + {0} квадрат фут + + + квадрат дюймдар + {0} квадрат дюйм + {0} квадрат дюймға + + + дунамдар + {0} дунам + + + караттар + {0} карат + + + децилитрға миллиграмм + {0} миллиграмм децилитрға + + + литрға миллимоль + {0} миллимоль литрға + + + әйберҙәр + {0} әйбер + + + өлөштәр + {0} өлөш + + + миллионға өлөш + {0} өлөш/млн + + + процент + {0} процент + + + промилле + {0} промилле + + + промириад + {0} промириад + + + молдәр + {0} моль + + + глюкоза + {0} глюкоза + + + километрға литр + {0} литр километрға + + + 100 километрға литр + {0} литр 100 километрға + + + галлонға милдәр + {0} галлонға миль + + + Империя галлонына милдәр + {0} Империя галлонына миль + + + петабайттар + {0} петабайт + + + терабайттар + {0} терабайт + + + терабиттар + {0} терабит + + + гигабайттар + {0} гигабайт + + + гигабиттар + {0} гигабит + + + мегабайттар + {0} мегабайт + + + мегабиттар + {0} мегабит + + + килобайттар + {0} килобайт + + + килобиттар + {0} килобит + + + байттар + {0} байт + + + биттар + {0} бит + + + быуаттар + {0} быуат + + + йыл тиҫтәләре + {0} йыл тиҫтәһе + + + йылдар + {0} йыл + {0}/йыл + + + кварталдар + {0} квартал + {0}/квартал + + + айҙар + {0} ай + {0} айына + + + аҙналар + {0} аҙна + {0}/аҙна + + + көндәр + {0} көн + {0}/көн + + + сәғәт + {0} сәғәт + {0}/сәғәт + + + минуттар + {0} минут + {0}/минут + + + секундтар + {0} секунд + {0}/секунд + + + миллисекундтар + {0} миллисекунд + + + микросекундтар + {0} микросекунд + + + наносекундтар + {0} наносекунд + + + амперҙар + {0} ампер + + + миллиамперҙар + {0} миллиампер + + + омдар + {0} Ом + + + вольттар + {0} вольт + + + килокалориялар + {0} килокалория + + + калориялар + {0} калория + + + килоджоулдәр + {0} килоджоуль + + + джоулдәр + {0} джоуль + + + киловатт-сәғәттәр + {0} киловатт-сәғәт + + + электронвольттар + {0} электронвольт + + + Британия йылылыҡ берәмектәре + {0} Британия йылылыҡ берәмеге + + + АҠШ термдары + {0} АҠШ термы + + + фунт-көс + {0} фунт-көс + + + ньютондар + {0} ньютон + + + 100 километрға киловатт-сәғәт + {0} киловатт-сәғәт 100 километрға + + + гигагерцтар + {0} гигагерц + + + мегагерцтар + {0} мегагерц + + + килогерцтар + {0} килогерц + + + герцтар + {0} герц + + + типографик эм + {0} эм + + + пикселдәр + {0} пиксел + + + мегапикселдәр + {0} мегапиксел + + + сантиметрға пикселдар + {0} пиксел сантиметрға + + + дюймға пикселдар + {0} пиксел дюймға + + + ер радиусы + {0} ер радиусы + + + километрҙар + {0} километр + километрға {0} + + + метрҙар + {0} метр + метрға {0} + + + дециметрҙар + {0} дециметр + + + сантиметрҙар + {0} сантиметр + {0}/см + + + миллиметрҙар + {0} миллиметр + + + микрометрҙар + {0} микрометр + + + нанометрҙар + {0} нанометр + + + пикометрҙар + {0} пикометр + + + милдәр + {0} миль + + + ярдтар + {0} ярд + + + футтар + {0} фут + футҡа {0} + + + дюймдар + {0} дюйм + дюймға {0} + + + парсектар + {0} парсек + + + яҡтылыҡ йылдары + {0} яҡтылыҡ йылы + + + астрономик берәмектәр + {0} астрономик берәмек + + + {0} сажин + + + диңгеҙ милдәре + {0} диңгеҙ миле + + + скандинав милдәре + {0} скандинав миле + + + пункттар + {0} пункт + + + ҡояш радиустары + {0} ҡояш радиусы + + + люкстар + {0} люкс + + + канделалар + {0} кандела + + + люмен + {0} люмен + + + ҡояш яҡтылыҡтары + {0} ҡояш яҡтылығы + + + тонналар + {0} т + + + килограммдар + {0} килограмм + {0} килограммға + + + граммдар + {0} грамм + {0} граммға + + + миллиграммдар + {0} миллиграмм + + + микрограммдар + {0} микрограмм + + + тонналар + {0} тонна + + + стоундар + {0} стоун + + + фунттар + {0} фунт + {0} фунтҡа + + + унциялар + {0} унция + {0} унцияға + + + трой унциялары + {0} трой унцияһы + + + караттар + {0} карат + + + дальтондар + {0} дальтон + + + Ер массалары + {0} Ер массаһы + + + ҡояш массалары + {0} ҡояш массаһы + + + грандар + {0} гран + + + гигаваттар + {0} гигаватт + + + мегаваттар + {0} мегаватт + + + киловаттар + {0} киловатт + + + ватттар + {0} ватт + + + милливаттар + {0} милливатт + + + ат көсө + {0} ат көсө + + + терегөмөш бағанаһы миллиметрҙары + {0} терегөмөш бағанаһы миллиметры + + + терегөмөш бағанаһы + {0} тер. бағ. + + + квадрат дюймға фунт-көс + {0} квадрат дюймға фунт-көс + + + терегөмөш бағанаһы дюймдары + {0} терегөмөш бағанаһы дюймдары + + + барҙар + {0} бар + + + миллибарҙар + {0} миллибар + + + атмосфералар + {0} атмосфера + + + паскалдәр + {0} паскаль + + + гектопаскалдәр + {0} гектопаскаль + + + килопаскалдәр + {0} килопаскаль + + + мегапаскалдәр + {0} мегапаскаль + + + сәғәтенә километр + {0} сәғәтенә километр + + + секундҡа метр + {0} секундҡа метр + + + сәғәтенә миль + {0} сәғәтенә миль + + + төйөндәр + {0} төйөн + + + Бофорт + Бофорт {0} + + + температура градустары + {0} градус + + + Цельсий градустары + {0} Цельсий градусы + + + Фаренгейт градустары + {0} Фаренгейт градусы + + + кельвиндар + {0} кельвин + + + фунт-фут + {0} фунт-фут + + + ньютон-метрҙар + {0} ньютон-метр + + + куб километрҙар + {0} куб километр + + + куб метрҙар + {0} куб метр + {0} куб метрға + + + куб сантиметрҙар + {0} куб сантиметр + {0} куб сантиметрға + + + куб милдәр + {0} куб миль + + + куб ярдтар + {0} куб ярд + + + куб футтар + {0} куб фут + + + куб дюймдар + {0} куб дюйм + + + мегалитрҙар + {0} мегалитр + + + гектолитрҙар + {0} гектолитр + + + литрҙар + {0} литр + {0} литрға + + + децилитрҙар + {0} децилитр + + + сантилитрҙар + {0} сантилитр + + + миллилитрҙар + {0} миллилитр + + + метрик пинталар + {0} метрик пинта + + + метрик сынаяҡтар + {0} метрик сынаяҡ + + + метрик шыйыҡ унциялар + {0} метрик шыйыҡ унция + + + акр-футтар + {0} акр-фут + + + бушелдәр + {0} бушель + + + галлондар + {0} галлон + галлонға {0} + + + империя галлондары + {0} империя галлоны + {0} империя галлонына + + + кварталар + {0} кварта + + + пинталар + {0} пинта + + + Империя пинталары + {0} Империя пинтаһы + + + сынаяҡтар + {0} сынаяҡ + + + шыйыҡ унциялар + {0} шыйыҡ унция + + + империя шыйыҡ унциялары + {0} империя шыйыҡ унцияһы + + + аш ҡалаҡтары + {0} аш ҡалағы + + + сәй ҡалаҡтары + {0} сәй ҡалағы + + + баррелдәр + {0} баррель + + + десерт ҡалаҡтары + {0} десерт ҡалағы + + + империя десерт ҡалаҡтары + {0} империя десерт ҡалағы + + + тамсылар + {0} тамсы + + + драхмалар + {0} драхма + + + джиггерҙар + {0} джиггер + + + семтемдәр + {0} семтем + + + Империя кварталары + {0} империя квартаһы + + + стерадиандар + {0} стерадиан + + + каталдар + {0} катал + + + кулондар + {0} кулон + + + фарадтар + {0} фарад + + + генри + {0} генри + + + сименстар + {0} сименс + + + халыҡ-ара калориялар + {0} халыҡ-ара калория + + + Британия йылылыҡ берәмектәре [IT] + {0} Британия йылылыҡ берәмеге [IT] + + + беккерелдәр + {0} беккерель + + + зиверттар + {0} зиверт + + + грейҙар + {0} грей + + + килограмм-көс + {0} килограмм-көс + + + родтар + {0} род + + + сылбырҙар + {0} сылбыр + + + теслалар + {0} тесла + + + веберҙар + {0} вебер + + + ранкиндар + {0} ранкин + + + фортнайттар + {0} фортнайт + + + слагтар + {0} слаг + + + бензин эквиваленты + {0} бензин эквиваленты + + + рин [JP] + + + сун [JP] + {0} сун [JP] + + + шаку [JP] + {0} шаку [JP] + + + шаку [туҡыма, JP] + {0} шаку [туҡыма, JP] + + + кен [JP] + {0} кен [JP] + + + джо [JP] + {0} джо [JP] + + + ри [JP] + {0} ри [JP] + + + бу [JP] + {0} бу [JP] + + + се [JP] + {0} се [JP] + + + чо [JP] + {0} чо [JP] + + + косажи [JP] + {0} косажи [JP] + + + осажи [JP] + {0} осажи [JP] + + + сынаяҡ [JP] + {0} сынаяҡ [JP] + + + шаку [күләм, JP] + {0} шаку [күләм, JP] + + + сай [JP] + {0} сай [JP] + + + то [JP] + {0} то [JP] + + + коку [JP] + {0} коку [JP] + + + яҡтылыҡ + {0} яҡтылыҡ + + + фун [JP] + {0} фун [JP] + + + миллиардҡа өлөш + {0} өлөш миллиардҡа + + + төндәр + {0} төн + {0}/төн + + + кардиналь йүнәлеш + {0} көнсығыш оҙонлоҡ + {0} төньяҡ киңлек + {0} көньяҡ киңлек + {0} көнбайыш оҙонлоҡ + + + + + д{0} + + + с{0} + + + м{0} + + + мк{0} + + + н{0} + + + п{0} + + + ф{0} + + + а{0} + + + з{0} + + + и{0} + + + р{0} + + + кв{0} + + + да{0} + + + г{0} + + + к{0} + + + М{0} + + + Г{0} + + + Т{0} + + + П{0} + + + Э{0} + + + З{0} + + + И{0} + + + Р{0} + + + Кв{0} + + + Ки{0} + + + Ми{0} + + + Ги{0} + + + Ти{0} + + + Пи{0} + + + Эи{0} + + + Зи{0} + + + Йи{0} + + + g-көс + + + м/с² + {0} м/с² + + + әйләнеш + {0} әйләнеш + + + радиан + {0} рад + + + градустар + + + мин + + + сек + + + км² + {0} км² + {0}/км² + + + гектарҙар + {0} гектар + + + м² + {0} м² + {0}/м² + + + см² + {0} см² + {0}/см² + + + кв. милдәр + {0} кв. миль + {0}/ми² + + + акр + {0} акр + + + ярд² + {0} ярд² + + + фут² + {0} фут² + + + дюйм² + {0} дюйм² + {0}/дюйм² + + + дунамдар + {0} дунам + + + кар + {0} кар + + + мг/дл + {0} мг/дл + + + ммоль/л + {0} ммоль/л + + + әйбер + {0} әйбер + + + өлөш + {0} өлөш + + + өлөш/миллион + {0} өлөш/млн + + + моль + {0} моль + + + глюкоза + + + л/км + {0} л/км + + + л/100 км + {0} л/100 км + + + милдәр/галлон + {0} галлонға миль + + + милдәр/имп. галлон + {0} миль/имп. гал + + + ПБ + {0} ПБ + + + ТБ + {0} ТБ + + + Тбит + {0} Тбит + + + ГБ + {0} ГБ + + + Гбит + {0} Гбит + + + МБ + {0} МБ + + + Мбит + {0} Мбит + + + кБ + {0} кБ + + + кбит + {0} кбит + + + байт + {0} Б + + + бит + {0} бит + + + б. + {0} б. + + + йый тиҫт. + {0} йыл тиҫтәһе + + + йылдар + {0} йыл + {0}/й + + + кварт. + {0} кварт. + {0}/кв + + + айҙар + {0} ай + {0}/ай + + + аҙн. + {0} аҙна + {0}/аҙна + + + көндәр + {0} көн + {0}/көн + + + сәғәт + {0} сәғәт + {0}/сәғ + + + мин + {0} мин + {0}/мин + + + сек + {0} с + {0}/с + + + мс + {0} мс + + + мкс + {0} мкс + + + нс + {0} нс + + + А + {0} А + + + мА + {0} мА + + + Ом + {0} Ом + + + В + {0} В + + + ккал + {0} ккал + + + кал + {0} кал + + + килоджоуль + {0} кДж + + + джоуль + {0} Дж + + + кВт⋅сәғ + {0} кВт⋅сәғ + + + эВ + {0} эВ + + + БТЕ + {0} БТЕ + + + АҠШ термаһы + {0} АҠШ термы + + + фунт-көс + {0} фнт-көс + + + ньютон + {0} Н + + + кВт⋅сәғ/100 км + {0} кВт⋅сәғ/100 км + + + ГГц + {0} ГГц + + + МГц + {0} МГц + + + кГц + {0} кГц + + + Гц + {0} Гц + + + эм + {0} эм + + + пкс + {0} пкс + + + Мпкс + {0} Мпкс + + + пкс/см + {0} пкс/см + + + пкс/дюйм + {0} пкс/дюйм + + + ер радиусы + + + км + {0} км + {0}/км + + + м + {0} м + {0}/м + + + дм + {0} дм + + + см + {0} см + {0}/см + + + мм + {0} мм + + + мкм + {0} мкм + + + нм + {0} нм + + + пм + {0} пм + + + милдәр + {0} миль + + + ярд + {0} ярд + + + фут + {0} фут + {0}/фут + + + дюйм + {0} дюйм + {0}/дюйм + + + парсек + {0} пк + + + яҡтылыҡ йылдары + {0} яҡт. й. + + + а. б. + {0} а. б. + + + фурлонг + {0} фурлонг + + + диңгеҙ милдәре + {0} диңгеҙ миле + + + ск. ми + {0} ск. ми + + + пкт + {0} пкт + + + ҡояш радиустары + + + лк + {0} лк + + + кд + {0} кд + + + лм + {0} лм + + + ҡояш яҡтылыҡтары + + + т + {0} т + + + кг + {0} кг + {0}/кг + + + грам + {0} г + {0}/г + + + мг + {0} мг + + + мкг + {0} мкг + + + АҠШ тоннаһы + {0} амер. т + + + стоун + {0} стоун + + + фунттар + {0} фнт + {0}/фнт + + + унц. + {0} унция + {0}/унц. + + + тр. унц. + {0} тр. унц. + + + карат + {0} кар + + + дальтон + {0} Да + + + Ер массалары + + + ҡояш массалары + + + гран + {0} гран + + + ГВт + {0} ГВт + + + МВт + {0} МВт + + + кВт + {0} кВт + + + ватттар + {0} Вт + + + мВт + {0} мВт + + + ат көсө + {0} ат көсө + + + тер. бағ. мм + {0} тер. бағ. мм + + + тер. бағ. + {0} тер. бағ. + + + ф/дюйм² + {0} ф/дюйм² + + + тер. бағ. дюймдары + {0} тер. бағ. д. + + + бар + {0} бар + + + мбар + {0} мбар + + + атм + {0} атм + + + Па + {0} Па + + + гПа + {0} гПа + + + кПа + {0} кПа + + + МПа + {0} МПа + + + км/сәғ + {0} км/сәғ + + + м/с + {0} м/с + + + миль/сәғ. + {0} миль/сәғ + + + төйөн + {0} төйөн + + + Бфт + {0} Бфт + + + градустар + + + К + {0} К + + + фунт-фут + {0} фунт-фут + + + Н⋅м + {0} Н⋅м + + + км³ + {0} км³ + + + м³ + {0} м³ + {0}/м³ + + + см³ + {0} см³ + {0}/см³ + + + миль³ + {0} миль³ + + + ярд³ + {0} ярд³ + + + фут³ + {0} фут³ + + + дюйм³ + {0} дюйм³ + + + Мл + {0} Мл + + + гл + {0} гл + + + литрҙар + {0} л + {0}/л + + + дл + {0} дл + + + сл + {0} сл + + + мл + {0} мл + + + мпт + {0} мпт + + + м. сынаяҡтар + {0} м. сынаяҡ + + + м.ш.у. + {0} м.ш.у. + + + акрофут + {0} акрофут + + + бушель + {0} буш. + + + галлон + {0} галлон + {0}/галлон + + + империя галлондары + {0} имп. галл. + {0}/имп. галл. + + + кварталар + {0} кварта + + + пинта + {0} пинта + + + сынаяҡ + {0} сынаяҡ + + + шыйыҡ унциялар + {0} шыйыҡ унция + + + империя ш. унциялары + {0} имп. шыйыҡ унция + + + аш ҡалағы + {0} аш ҡалағы + + + сәй ҡалағы + {0} сәй ҡалағы + + + баррель + {0} барр. + + + десерт ҡалағы + {0} десерт ҡалағы + + + имп. десерт ҡалағы + {0} имп. десерт ҡалағы + + + тамсы + {0} тамсы + + + драхмалар + {0} драхма + + + джиггер + {0} джиггер + + + семтем + {0} семтем + + + имп. кварта + {0} имп. кварт. + + + ср + {0} ср + + + кат + {0} кат + + + Кл + {0} Кл + + + Ф + {0} Ф + + + Гн + {0} Гн + + + См + {0} См + + + халыҡ-ара кал. + {0} х.а.кал. + + + Бк + {0} Бк + + + Зв + {0} Зв + + + Гр + {0} Гр + + + кгк + {0} кгк + + + род + {0} род + + + {0} сылбыр + + + Тл + {0} Тл + + + Вб + {0} Вб + + + фртнт. + {0} фортнайт + + + слаг + {0} слаг + + + газ эквиваленты + {0} газ эквиваленты + + + яҡтылыҡ + {0} яҡтылыҡ + + + өлөш/млрд + {0} өлөш/млрд + + + төндәр + {0} төн + {0}/төн + + + йүнәлеш + {0} көнсығыш + {0} төньяҡ + {0} көньяҡ + {0} көнбайыш + + + + + д{0} + + + с{0} + + + м{0} + + + мк{0} + + + н{0} + + + п{0} + + + ф{0} + + + а{0} + + + з{0} + + + и{0} + + + р{0} + + + кв{0} + + + да{0} + + + г{0} + + + к{0} + + + М{0} + + + Г{0} + + + Т{0} + + + П{0} + + + Э{0} + + + З{0} + + + И{0} + + + Р{0} + + + Кв{0} + + + Ки{0} + + + Ми{0} + + + Ги{0} + + + Ти{0} + + + Пи{0} + + + Эи{0} + + + Зи{0} + + + Йи{0} + + + g-көс + {0}Gs + + + м/с² + {0} м/с² + + + әйләнеш + {0} әйләнеш + + + рад + {0} рад + + + гр. + + + мин + + + сек + + + км² + {0} км² + {0}/км² + + + га + {0} гектар + + + м² + {0} м² + {0}/м² + + + см² + {0} см² + {0}/см² + + + ми² + {0} ми² + {0}/ми² + + + акр + {0} акр + + + ярд² + {0} ярд² + + + фут² + {0} фут² + + + дюйм² + {0} дюйм² + {0}/дюйм² + + + дун. + {0} дунам + + + кар + {0} карат + + + мг/дл + {0} мг/дл + + + ммоль/л + {0} ммоль/л + + + әйбер + {0} әйбер + + + өлөш + {0} өлөш + + + өлөш/млн + {0} өлөш/млн + + + моль + {0} моль + + + глюкоза + + + л/км + {0} л/км + + + л/100 км + {0} л/100 км + + + миль/гал + {0} галлонға миль + + + миль/имп. гал + {0} миль/имп. гал + + + ПБ + {0} ПБ + + + ТБ + {0} ТБ + + + Тбит + {0} Тбит + + + ГБ + {0} ГБ + + + Гбит + {0} Гбит + + + МБ + {0} МБ + + + Мбит + {0} Мбит + + + кБ + {0} кБ + + + кбит + {0} кбит + + + Б + {0} Б + + + бит + {0} бит + + + б. + {0} б. + + + й. тиҫт. + {0} йыл тиҫтәһе + + + й. + {0} й. + {0}/й + + + кварт. + {0} кварт. + {0}/кв + + + ай. + {0} ай + {0}/ай + + + аҙн. + {0} аҙна + {0}/аҙна + + + көн. + {0} көн + {0}/көн + + + сәғ. + {0} сәғ. + {0}/сәғ + + + мин + {0} мин. + {0}/мин + + + с + {0} с + {0}/с + + + мс + {0} мс + + + мкс + {0} мкс + + + нс + {0} нс + + + А + {0} А + + + мА + {0} мА + + + Ом + {0} Ом + + + В + {0} В + + + ккал + {0} ккал + + + кал + {0} кал + + + кДж + {0} кДж + + + Дж + {0} Дж + + + кВт⋅сәғ + {0} кВт⋅сәғ + + + эВ + {0} эВ + + + БТЕ + {0} БТЕ + + + АҠШ термы + {0} АҠШ термы + + + фунт-көс + {0} фунт-көс + + + Н + {0}Н + + + кВт⋅сәғ/100 км + {0} кВт⋅сәғ/100 км + + + ГГц + {0} ГГц + + + МГц + {0} МГц + + + кГц + {0} кГц + + + Гц + {0} Гц + + + эм + {0} эм + + + пкс + {0} пкс + + + Мпкс + {0} Мпкс + + + пкс/см + {0} пкс/см + + + пкс/дюйм + {0} пкс/дюйм + + + ер радиусы + + + км + {0} км + {0}/км + + + м + {0} м + {0}/м + + + дм + {0} дм + + + см + {0} см + {0}/см + + + мм + {0} мм + + + мкм + {0} мкм + + + нм + {0} нм + + + пм + {0} пм + + + миль + {0} миля + + + ярд + {0} ярд + + + фут + {0} фут + {0}/фут + + + дюйм + {0} дюйм + {0}/дюйм + + + пк + {0} пк + + + яҡт. й. + {0} яҡт. й. + + + а. е. + {0} а. б. + + + фрл + {0} фрл + + + саж. + + + диңгеҙ миле + {0} диңгеҙ миле + + + ск. ми + {0} ск. ми + + + пкт + {0} пкт + + + ҡояш радиустары + + + лк + {0}лк + + + кд + {0}кд + + + лм + {0}лм + + + ҡояш яҡтылыҡтары + + + т + {0} т + + + кг + {0} кг + {0}/кг + + + г + {0} г + {0}/г + + + мг + {0} мг + + + мкг + {0} мкг + + + т + {0} амер. тонна + + + стн + {0} стоун + + + фнт + {0} фнт + {0}/фнт + + + унц. + {0} унция + {0}/унц. + + + тр. унц. + {0} тр. унц. + + + кар + {0} карат + + + дальтон + {0} Да + + + Ер массалары + {0}M⊕ + + + ҡояш массалары + {0}M☉ + + + гран + {0} гран + + + ГВт + {0} ГВт + + + МВт + {0} МВт + + + кВт + {0} кВт + + + Вт + {0} Вт + + + мВт + {0} мВт + + + ат көсө + {0} ат көсө + + + тер. бағ. мм + {0} тер. бағ. мм + + + тер. бағ. + {0} тер. бағ. + + + ф/дюйм² + {0} ф/дюйм² + + + тер. бағ. д. + {0} тер. бағ. д. + + + бар + {0} бар + + + мбар + {0} мбар + + + атм + {0} атм + + + Па + {0} Па + + + гПа + {0} гПа + + + кПа + {0} кПа + + + МПа + {0} МПа + + + км/сәғ + {0} км/сәғ + + + м/с + {0} м/с + + + ми/сәғ. + {0} ми/сәғ + + + төйөн + {0} төйөн + + + Бфт + {0} Бфт + + + градустар + + + {0} °C + + + К + {0} К + + + фунт-фут + {0} фунт-фут + + + Н⋅м + {0}Н⋅м + + + км³ + {0} км³ + + + м³ + {0} м³ + {0}/м³ + + + см³ + {0} см³ + {0}/см³ + + + миль³ + {0} миль³ + + + ярд³ + {0} ярд³ + + + фут³ + {0} фут³ + + + дюйм³ + {0} дюйм³ + + + Мл + {0} Мл + + + гл + {0} гл + + + л + {0} л + {0}/л + + + дл + {0} дл + + + сл + {0} сл + + + мл + {0} мл + + + мпт + {0} мпт + + + м. сынаяҡ + {0} м. сынаяҡ + + + м.ш.у. + {0} м.ш.у. + + + акр-фут + {0} акрофут + + + буш. + {0} бушель + + + гал. + {0} галлон + {0}/галлон + + + имп. галл. + {0} имп. галл. + {0}/имп. галл. + + + кварт. + {0} кварта + + + пинт. + {0} пинта + + + сынаяҡ + {0} сынаяҡ + + + шыйыҡ унция + {0} шыйыҡ унция + + + имп. ш. унцияһы + {0} имп. ш. унция + + + аш ҡ. + {0} аш ҡалағы + + + сәй ҡ. + {0} сәй ҡалағы + + + барр. + {0} баррель + + + дес. ҡ. + {0} десерт ҡалағы + + + империя дес. ҡ. + {0} имп. десерт ҡалағы + + + тамсы + {0} тамсы + + + шыйыҡ драхма + {0} шыйыҡ драхма + + + джиггер + {0} джиггер + + + семтем + {0} семтем + + + имп. кварта + {0} имп. кварта + + + ср + {0}ср + + + кат + {0}кат + + + Кл + {0} Кл + + + Ф + {0} Ф + + + Гн + {0} Гн + + + См + {0} См + + + х.а.кал. + {0} х.а.кал. + + + Бк + {0} Бк + + + Зв + {0} Зв + + + Гр + {0} Гр + + + кгк + {0} кгк + + + род + + + Тл + {0} Тл + + + Вб + {0} Вб + + + фртнт. + {0} фортнайт + + + слаг + {0} слаг + + + бензин эквиваленты + {0} газ эквиваленты + + + рин [JP] + + + сун [JP] + + + шаку [JP] + + + шаку [туҡыма, JP] + + + кен [JP] + + + джо [JP] + {0} jo [JP] + + + косажи [JP] + + + осажи [JP] + + + шаку [күләм, JP] + + + сай [JP] + + + то [JP] + + + коку [JP] + + + яҡтылыҡ + {0} яҡтылыҡ + + + фун [JP] + + + өлөш/млрд + {0} өлөш/млрд + + + төндәр + {0} төн + {0}/төн + + + йүн. + {0} көнсығыш + {0} төньяҡ + {0} көньяҡ + {0} көнбайыш + + + + hh:mm + + + hh:mm:ss + + + mm:ss + + + + + {0} һәм {1} + {0} һәм {1} + + + {0} йәки {1} + {0} йәки {1} + + + {0} йәки {1} + {0} йәки {1} + + + {0} йәки {1} + {0} йәки {1} + + + {0} һәм {1} + {0} һәм {1} + + + {0} һәм {1} + {0} һәм {1} + + + {0} һәм {1} + {0} һәм {1} + + + {0} һәм {1} + {0} һәм {1} + + + {0} һәм {1} + {0} һәм {1} + + + + + эйе:э + юҡ:ю + + + + {0} — бөтәһе + {0} — ярашлылыҡ + {0} — эсендә + {0} — киңәйтелгән + {0} һулға ҡарай + {0} уңға ҡарай + {0} — тарихи + {0} — төрлө + {0} — башҡа + яҙмалар — {0} + {0} һыҙыҡтар + аҫҡы индекс {0} + өҫкө индекс {0} + эшмәкәрлек + Африка яҙмаһы + Америка яҙмаһы + хайуан + хайуан йәки тәбиғәт + уҡтар + тән + ҡумта һыҙмаһы + Брайль шрифты + бина + маркер йәки йондоҙ + тартынҡы джамо + валюта символы + һыҙыҡ йәки тоташтырғыс + һан + дингбат + күрәҙәлек символы + аҫҡа табан уҡ + аҫҡа-өҫкә табан уҡ + Көнсығыш Азия яҙмаһы + эмодзи + Европа яҙмаһы + ҡатын-ҡыҙ + флаг + флагтар + аҙыҡ-түлек һәм эсемлектәр + формат + формат һәм буш урындар + тулы киңлектәге вариант + геометрик форма + ярты киңлектәге вариант + Хан иероглифы + Хан радикалдары + ханча + Ханзи (ябайлаштырылған) + Ханзи (традицион) + йөрәк + тарихи яҙма + идеографик тасуирлау символы + япон канаһы + канбун + кандзи + клавиша + һулға табан уҡ + һулға-уңға табан уҡ + хәрефкә оҡшаш символ + сикләнгән ҡулланыу + ир-ат + математик символ + Урта Көнсығыш яҙмаһы + төрлө + заманса яҙма + модификаторҙар + музыкаль символ + тәбиғәт + арауыҡһыҙ символдар + һандар + объект + башҡа + парлы + кеше + фонетик алфавит + пиктограмма + урын + үҫемлек + тыныш билдәләре + уңға табан уҡ + билдә йәки символ + бәләкәй варианттар + смайлик + смайлик йәки кеше + Көньяҡ Азия яҙмаһы + Көньяҡ-Көнсығыш Азия яҙмаһы + арауыҡтар + спорт + символ + техник символ + тон билдәһе + сәйәхәт + сәйәхәт йәки урын + өҫкә табан уҡтар + вариант + һуҙынҡы джамо + һауа торошо + Көнбайыш Азия яҙмаһы + буш урындар + + + курсив + оптик ҙурлыҡ + ҡыялыҡ + киңлек + ауырлыҡ + ҡулъяҙма + яҙыу + текст + исем + дисплей + плакат + артҡа ҡыя + тура + ҡыя + артыҡ ҡыя + ультраҡыҫҡартылған + артыҡ ҡыҫҡартылған + ҡыҫҡартылған + ярым ҡыҫҡартылған + нормаль + ярым киңәйтелгән + киңәйтелгән + артыҡ киңәйтелгән + ультракиңәйтелгән + нәҙек + үтә нәҙек + нәҙек + ярым нәҙек + китап + ғәҙәти + уртаса + ярым ҡалын + ҡалын + үтә ҡалын + ҡара + артыҡ ҡара + вертикаль кәсерҙәр + баш хәреф аралығы + өҫтәмә лигатуралар + диагональ кәсерҙәр + һыҙыҡлы һандар + иҫке стиль һандары + рәт һандары + пропорциональ һандар + бәләкәй баш хәрефтәр + таблица һандары + һыҙылған нуль + + + und ba + {0}{1} + + {title} {given} {given2} {surname} {generation}, {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {given-informal-monogram-allCaps}{surname-monogram-allCaps} + + + {given} {given2-initial} {surname} {generation}, {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {given-initial}{given2-initial} {surname} + + + {given-informal} {surname-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname} {title} {given} {given2} {generation}, {credentials} + + + {surname} {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps}{given-informal-monogram-allCaps} + + + {surname} {given} {given2-initial} {generation}, {credentials} + + + {surname} {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname} {given-initial}{given2-initial} + + + {surname} {given-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname-core}, {given} {given2} {surname-prefix} + + + {surname}, {given-informal} + + + {surname-core}, {given} {given2-initial} {surname-prefix} + + + {surname}, {given-informal} + + + {surname-core}, {given-initial}{given2-initial} {surname-prefix} + + + {surname}, {given-informal} + + + Урал + + + Ирина + Яҡупова + + + Азамат + Салауат улы + Фаттахов + + + ∅∅∅ + Азамат + ∅∅∅ + Салауат улы + ∅∅∅ + Фаттахов + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + Синдбад + + + Кете + Мюллер + + + Цецилия + Хэмиш + Штёбер + + + проф., д-р + Ада Корнелия + Неле + Сезар Мартин + фон + Брюль + Гонсалес Доминго + кесе + м. ф. д. + + diff --git a/make/data/cldr/common/main/bal.xml b/make/data/cldr/common/main/bal.xml index c8dec39faaa..99aa704a43c 100644 --- a/make/data/cldr/common/main/bal.xml +++ b/make/data/cldr/common/main/bal.xml @@ -385,6 +385,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic گرین‌وِچ مین ٹائم + + + هئواییئے گیشّتگێن ساهت + + هئواییئے ساهت diff --git a/make/data/cldr/common/main/bal_Latn.xml b/make/data/cldr/common/main/bal_Latn.xml index 576ae907516..99b83dd9327 100644 --- a/make/data/cldr/common/main/bal_Latn.xml +++ b/make/data/cldr/common/main/bal_Latn.xml @@ -997,13 +997,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mingu-Chini sáldar Hesáb, Zarr Káleb Zarray anjárén káleb - Chini Rabyati Red o band Pésari Red o band, pa hamdapiá Labzbaladi Red o band Aslén Yunikodi Red o band Emóji Red o band Yuropi Red o bandi Rahband - Sádah kortagén Chini Red o band - GB2312 Pawnbokki Red o band Pinyi Red o band Ám Kári Shóház @@ -2955,9 +2953,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Rónendi Aprikáay wahd - Rónendi Aprikáay anjári wahd - Rónendi Aprikáay garmági wahd + Rónendi Aprikáay wahd @@ -3307,6 +3303,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyánáay wahd + + + Hawái/Alushiay anjári wahd + + Hawái/Alushiay wahd diff --git a/make/data/cldr/common/main/bas.xml b/make/data/cldr/common/main/bas.xml index ddba778be4d..533f61c67d7 100644 --- a/make/data/cldr/common/main/bas.xml +++ b/make/data/cldr/common/main/bas.xml @@ -583,6 +583,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/be.xml b/make/data/cldr/common/main/be.xml index 3e074c52d8d..88a333804ad 100644 --- a/make/data/cldr/common/main/be.xml +++ b/make/data/cldr/common/main/be.xml @@ -46,6 +46,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ аймара азербайджанская башкірская + белуджская балійская басаа беларуская @@ -239,6 +240,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ бафія кёльнская курдская + курдская + курманджы кумыцкая комі корнская @@ -646,6 +649,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Кітай Калумбія Востраў Кліпертан + Сарк Коста-Рыка Куба Каба-Вердэ @@ -879,42 +883,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ фармат валюты парадак сартавання валюта + прэзентацыя эмодзі гадзінны цыкл (12 або 24) правілы разрыву радка + стыль пераносу слоў сістэма мер лічбы + разрыў сказа пасля скарачэння будыйскі каляндар + будыйскі кітайскі каляндар + кітайскі копцкі каляндар + копцкі каляндар дангі + дангі эфіопскі каляндар + эфіопскі эфіопскі каляндар Аметэ Алем + эфіопскі (Аметэ Алем) грыгарыянскі каляндар + грыгарыянскі яўрэйскі каляндар + яўрэйскі каляндар хіджры + хіджра свецкі каляндар хіджры (таблічны) + хіджра (свецкі, таблічны) каляндар хіджры (Ум аль-Кура) + хіджра (Ум аль-Кура) каляндар ISO-8601 японскі каляндар + японскі персідскі каляндар + персідскі каляндар Міньго + Міньго бухгалтарскі фармат валюты + бухгалтарскі стандартны фармат валюты + стандартны стандартны парадак сартавання Унікод + стандартны (Унікод) універсальны пошук + пошук стандартны парадак сартавання + стандартны + стандартныя сімвалы + эмодзі + тэкставыя сімвалы 12-гадзінны фармат часу (0-11) + 12-гадзінны (0–11) 12-гадзінны фармат часу (1-12) + 12-гадзінны (1–12) 24-гадзінны фармат часу (0-23) + 24-гадзінны (0–23) 24-гадзінны фармат часу (1-24) + 24-гадзінны (1–24) нястрогія правілы разрыву радка + нястрогія звычайныя правілы разрыву радка + звычайныя строгія правілы разрыву радка + строгія + пераносіць усё + захаваць усё + звычайны + захоўваць у фразах метрычная сістэма мер + метрычная брытанская сістэма мер + брытанская амерыканская сістэма мер + амерыканская арабска-індыйскія лічбы пашыраная сістэма арабска-індыйскіх лічбаў армянскія лічбы @@ -955,6 +998,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ тайскія лічбы тыбецкія лічбы лічбы ваі + выключана + уключана метрычная @@ -1126,7 +1171,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ LLL y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a d.M @@ -1500,10 +1544,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d MMM y 'г'. G E, d MMM y 'г'. G hh a + H h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH 'г' v d.M E, d.M d MMM @@ -1578,7 +1624,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a h:mm a – h:mm a @@ -1600,7 +1645,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M–M @@ -1663,8 +1707,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ год - у мінулым годзе - у гэтым годзе + летась + сёлета у наступным годзе праз {0} год @@ -1682,7 +1726,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ г. у мін. годзе - у гэтым годзе + сёлета у наст. годзе праз {0} г. @@ -2075,9 +2119,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} сб таму - - AM/PM - гадзіна у гэту гадзіну @@ -2532,6 +2573,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Вялікадня востраў + + Кайайке + Пунта-Арэнас @@ -2797,9 +2841,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пнампень - Эндэрберы - - Кантон @@ -3469,9 +3510,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Заходнеафрыканскі час - Заходнеафрыканскі стандартны час - Заходнеафрыканскі летні час + Заходнеафрыканскі час @@ -3821,6 +3860,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Час Гаяны + + + Гавайска-Алеуцкі стандартны час + + Гавайска-Алеуцкі час @@ -4421,6 +4465,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -5590,6 +5638,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ усходнекарыбскага долара EC$ + + карыбскі гульдэн + карыбскі гульдэн + карыбскія гульдэны + карыбскіх гульдэнаў + карыбскага гульдэна + заходнеафрыканскі франк КФА заходнеафрыканскі франк КФА @@ -5632,6 +5687,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ замбійскіх квач замбійскай квачы + + зімбабвійскі залаты + зімбабвійскі залаты + зімбабвійскія залатыя + зімбабвійскіх залатых + зімбабвійскага залатога + ≈{0} @@ -5893,7 +5955,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} элементаў {0} элемента - + + часткі + {0} частка + {0} часткі + {0} частак + {0} часткі + + часткі на мільён {0} частка на мільён {0} часткі на мільён @@ -5924,6 +5993,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ молі + + глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + літры на кіламетр {0} літр на кіламетр @@ -6619,6 +6695,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} міліметраў ртутнага слупа {0} міліметра ртутнага слупа + + ртутнага слупка + {0} ртутнага слупка + {0} ртутнага слупка + {0} ртутнага слупка + {0} ртутнага слупка + фунты на квадратную цалю {0} фунт на квадратную цалю @@ -6849,6 +6932,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метрычных кубкаў {0} метрычнага кубка + + метрычныя вадкія унцыі + {0} метрычная вадкая унцыя + {0} метрычныя вадкія унцыі + {0} метрычных вадкіх унцый + {0} метрычнай вадкай унцыі + бушалі {0} бушаль @@ -6932,7 +7022,105 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ брыт. кварты - + + стэрадыяны + {0} стэрадыян + {0} стэрадыяны + {0} стэрадыянаў + {0} стэрадыяна + + + каталы + {0} катал + {0} каталы + {0} каталаў + {0} катала + + + кулоны + {0} кулон + {0} кулоны + {0} кулонаў + {0} кулона + + + фарады + {0} фарад + {0} фарады + {0} фарадаў + {0} фарада + + + генры + {0} генры + {0} генры + {0} генры + {0} генры + + + сіменсы + {0} сіменс + {0} сіменсы + {0} сіменсаў + {0} сіменса + + + міжнародныя калорыі + {0} міжнародная калорыя + {0} міжнародныя калорыі + {0} міжнародных калорый + {0} міжнароднай калорыі + + + бекерэлі + {0} бекерэль + {0} бекерэлі + {0} бекерэляў + {0} бекерэля + + + зіверты + {0} зіверт + {0} зіверты + {0} зівертаў + {0} зіверта + + + грэі + {0} грэй + {0} грэі + {0} грэяў + {0} грэя + + + кілаграм-сілы + {0} кілаграм-сіла + {0} кілаграм-сілы + {0} кілаграм-сіл + {0} кілаграм-сілы + + + тэслы + {0} тэсла + {0} тэслы + {0} тэслаў + {0} тэслы + + + веберы + {0} вебер + {0} веберы + {0} вебераў + {0} вебера + + + скорасць святла + {0} скорасць святла + {0} скорасці святла + {0} скарасцей святла + {0} скорасці святла + + частак на мільярд {0} частка на мільярд {0} часткі на мільярд @@ -6940,7 +7128,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} часткі на мільярд - ночы {0} ноч {0} ночы {0} начэй @@ -6998,6 +7185,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ г{0} + + к{0} + М{0} @@ -7189,6 +7379,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} элем. {0} элем. + + ч. + {0} ч. + {0} ч. + {0} ч. + {0} ч. + {0} % {0} % @@ -7214,6 +7411,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} моль {0} молі + + глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + л/км {0} л/км @@ -7920,6 +8124,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мм рт. сл. {0} мм рт. сл. + + рт. сл. + {0} рт. сл. + {0} рт. сл. + {0} рт. сл. + {0} рт. сл. + фунты на кв. цалю {0} фунт на кв. цалю @@ -8165,6 +8376,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мет. кубкаў {0} мет. кубка + + м. вадк. унц. + {0} м. вадк. унц. + {0} м. вадк. унц. + {0} м. вадк. унц. + {0} м. вадк. унц. + акр-футы {0} акр-фут @@ -8300,7 +8518,105 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} брыт. кварт {0} брыт. кварты - + + ср + {0} ср + {0} ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + {0} Ф + {0} Ф + + + Гн + {0} Гн + {0} Гн + {0} Гн + {0} Гн + + + См + {0} См + {0} См + {0} См + {0} См + + + калм + {0} калм + {0} калм + {0} калм + {0} калм + + + Бк + {0} Бк + {0} Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + {0} Гр + {0} Гр + + + кгс + {0} кгс + {0} кгс + {0} кгс + {0} кгс + + + Тл + {0} Тл + {0} Тл + {0} Тл + {0} Тл + + + Вб + {0} Вб + {0} Вб + {0} Вб + {0} Вб + + + ск. святла + {0} ск. святла + {0} ск. святла + {0} ск. святла + {0} ск. святла + + частак/мільярд {0} ч/млрд {0} ч/млрд @@ -8310,7 +8626,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ночы {0} ноч - {0} ноч + {0} ночы {0} начэй {0} ночы {0}/ноч @@ -8330,12 +8646,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}{1} + + ч. + {0} ч. + {0} ч. + {0} ч. + {0} ч. + {0}% {0}% {0}% {0}% + + глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + {0} амер. тэрм {0} амер. тэрмы @@ -8348,26 +8678,132 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} фунт-сіл {0} фунт-сілы + + рт. сл. + {0} рт. сл. + {0} рт. сл. + {0} рт. сл. + {0} рт. сл. + + + м. вадк. унц. + {0} м. вадк. унц. + {0} м. вадк. унц. + {0} м. вадк. унц. + {0} м. вадк. унц. + {0} дэс. лыжка {0} дэс. лыжкі {0} дэс. лыжак {0} дэс. лыжкі - + + ср + {0} ср + {0} ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + {0} Ф + {0} Ф + + + Гн + {0} Гн + {0} Гн + {0} Гн + {0} Гн + + + См + {0} См + {0} См + {0} См + {0} См + + + калм + {0} калм + {0} калм + {0} калм + {0} калм + + + Бк + {0} Бк + {0} Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + {0} Гр + {0} Гр + + + кгс + {0} кгс + {0} кгс + {0} кгс + {0} кгс + + + Тл + {0} Тл + {0} Тл + {0} Тл + {0} Тл + + + Вб + {0} Вб + {0} Вб + {0} Вб + {0} Вб + + + с + {0} с + {0} с + {0} с + {0} с + + ч/млрд - {0} ч/млрд - {0} ч/млрд - {0} ч/млрд - {0} ч/млрд - ночы {0} ноч {0} ночы {0} начэй {0} ночы - {0}/ноч {0} У diff --git a/make/data/cldr/common/main/be_TARASK.xml b/make/data/cldr/common/main/be_TARASK.xml index ff9db1f909d..fd293dec873 100644 --- a/make/data/cldr/common/main/be_TARASK.xml +++ b/make/data/cldr/common/main/be_TARASK.xml @@ -1361,13 +1361,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Аўганістанскі час - - - Заходнеафрыканскі час - Заходнеафрыканскі змоўчны час - Заходнеафрыканскі летні час - - Час Аляскі @@ -1670,6 +1663,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Час Пэрсыдзкага заліву + + + Гавайска-Алэвуцкі змоўчны час + + Гавайска-Алевуцкі час diff --git a/make/data/cldr/common/main/bew.xml b/make/data/cldr/common/main/bew.xml index 2c39d42b48b..0c6f4c0a49c 100644 --- a/make/data/cldr/common/main/bew.xml +++ b/make/data/cldr/common/main/bew.xml @@ -62,10 +62,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bambara Benggala Tibèt + Bahtiar Brèton Boro Bosni Akosé + Buriat Bugis Belin Katalan @@ -89,6 +91,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kurdi, Tenga Cilkotin Korsikan + Gibti Micip Kri Wètan Kidul Kri Dataran @@ -228,6 +231,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bapia Kèl Kurdi + Kurdi Kumuk Komi Kornis @@ -278,7 +282,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Maori Mikmak Minangkabo - Makèdoni + Makédoni Malayalam Monggol Manipur @@ -337,6 +341,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Papiamèn Palau Pijin Nigéria + Pali Pijin Pol Malisèt-Pasamakuodi @@ -850,7 +855,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sint-Martèn (Prasman) Madagaskar Pulo Marsal - Makèdoni Lor + Makédoni Lor Mali Mianmar (Birma) Monggoli @@ -1099,13 +1104,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Almenak Bingkok Pormat Mata Uang Pembukuan Pormat Mata Uang Pakem - Rèntètan Sortir Tionghoa Terdisionil - Big5 Rèntètan Sortir Sebelonnya, bakal kecocokan Rèntètan Sortir Kamus Rèntètan Sortir Bawaan Unicode Rèntètan Sortir Émoji Aturan Pengrèntètan Èropa - Rèntètan Sortir Tionghoa Ringkes - GB2312 Rèntètan Sortir Buku Telepon Rèntètan Sortir Pin-in Rèntètan Sortir Kerobah @@ -3119,9 +3122,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waktu Aprika Kulon - Waktu Pakem Aprika Kulon - Waktu Musim Pentèr Aprika Kulon + Waktu Aprika Kulon @@ -3504,6 +3505,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Waktu Guyana + + + Waktu Pakem Hawai-Aléut + + Waktu Hawai-Aléut @@ -4939,7 +4945,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimol per lèter {0} milimol per lèter - + bagèan per juta {0} bagèan per juta @@ -5567,7 +5573,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic biji {0} biji - + bagèan/juta diff --git a/make/data/cldr/common/main/bg.xml b/make/data/cldr/common/main/bg.xml index e7a63e3da12..71aee54bb15 100644 --- a/make/data/cldr/common/main/bg.xml +++ b/make/data/cldr/common/main/bg.xml @@ -276,6 +276,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ бафия кьолнски кюрдски + кюрдски + курманджи кумикски кутенай коми @@ -792,6 +794,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Китай Колумбия остров Клипертон + Сарк Коста Рика Куба Кабо Верде @@ -1065,33 +1068,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Сортиране на цифрите Сила на сортиране валута + Представяне на емотикон Часови формат (12- или 24-часов) Стил за нов ред + Нов ред в средата на думите Мерна система цифри + прекъсване на изречение след съкращение Часова зона Вариант на локала Собствена употреба будистки календар + будистки китайски календар + китайски коптски календар + коптски корейски календар + корейски етиопски календар + етиопски етиопски календар Амит Алем + етиопски Амит Алем григориански календар + григориански еврейски календар + еврейски Индийски граждански календар ислямски календар - ислямски цивилен календар - ислямски календар (Ум ал-Кура) + Хиджра + ислямски календар Хиджра + календар Хиджра + ислямски календар Хиджра (Ум ал-Кура) + Хиджра (Ум ал-Кура) календар съгласно ISO 8601 японски календар + японски персийски календар + персийски календар на Република Китай + календар Мингуо формат на валута за счетоводни цели + счетоводен стандартен формат на валута + стандартен Сортиране по символи Сортиране с пренебрегване на символи Нормално сортиране по диакритични знаци @@ -1101,21 +1123,31 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Сортиране първо по горен регистър Сортиране без различаване на регистъра на буквите Сортиране с различаване на регистъра на буквите - Традиционен китайски (Big5) предишен ред на сортиране, за съвместимост + съвместимост Речников ред на сортиране + речник ред на сортиране в Unicode по подразбиране - Опростен китайски (GB2312) + по подразбиране Unicode Азбучен ред + азбучен Фонетичен ред на сортиране + фонетичен Сортиране Пинин + Пинин търсене с общо предназначение + търсене Търсене по първоначални съгласни в хангул стандартен ред на сортиране + стандартен Сортиране по щрих + щрих Традиционно сортиране + традиционно Ред на сортиране по ключове и черти + ключове и черти ред на сортиране Бопомофо + Бопомофо Сортиране без нормализиране Нормализирано сортиране в Уникод Сортиране на цифрите индивидуално @@ -1128,18 +1160,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ С пълна ширина С половин ширина Цифрови + по подразбиране + емоджи + текст 12-часова система (0 – 11) + 12 (0 – 11) 12-часова система (1 – 12) + 12 (1 – 12) 24-часова система (0 – 23) + 24 (0 – 23) 24-часова система (1 – 24) + 24 (1 – 24) Свободен стил за нов ред + Свободен Нормален стил за нов ред + Нормален Строг стил за нов ред + Строг + Разделяне на всички + Запазване на всички + Нормално + Запазване във фразите АКГН (BGN) ГЕСГИ ООН (UNGEGN) Метрична система + Метрична Имперска мерна система + Обединено кралство Мерна система на САЩ + САЩ арабско-индийски цифри разширени арабско-индийски цифри арменски цифри @@ -1184,6 +1233,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ тибетски цифри Традиционни цифри цифри във ваи + изкл. + вкл. метрична @@ -1248,6 +1299,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} + @@ -1256,6 +1310,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} + @@ -1292,6 +1349,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm 'ч'. h:mm:ss 'ч'. a HH:mm:ss 'ч'. + HH 'ч' v M d.MM E, d.MM @@ -1652,6 +1710,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} 'ч' + @@ -1660,11 +1721,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} 'ч' + {1}, {0} + + {1}, {0} 'ч' + @@ -1675,15 +1742,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h 'ч'. B h:mm 'ч'. B h:mm:ss 'ч'. B + E, h B E, h:mm 'ч'. B E, h:mm:ss 'ч'. B E, d + E, h a E, h:mm 'ч'. a E, HH:mm 'ч'. E, h:mm:ss 'ч'. a E, HH:mm:ss 'ч'. y 'г'. G + M.y 'г'. G dd.MM.y 'г'. GGGGG + E, d.M.y 'г'. G MM.y 'г'. G d.MM.y 'г'. G E, d.MM.y 'г'. G @@ -1700,6 +1771,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm:ss 'ч'. v h:mm 'ч'. a v HH:mm 'ч'. v + h 'ч'. a v + HH 'ч' v d.MM E, d.MM MM @@ -2558,6 +2631,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Гринуич{0} Гринуич + Гринуич+? {0} – лятно часово време {0} – стандартно време @@ -2913,6 +2987,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Великденски остров + + Койайке + Пунта Аренас @@ -3178,9 +3255,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пном Пен - Ендърбъри - - Кантон @@ -3850,9 +3924,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Западноафриканско време - Западноафриканско стандартно време - Западноафриканско лятно часово време + Западноафриканско време @@ -4209,6 +4281,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Гаяна + + + Хавайско-алеутско стандартно време + + Хавайско-алеутско време @@ -4791,9 +4868,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + #,##0.00 #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -6079,6 +6159,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ източнокарибски долара XCD + + Карибски гулден + Карибски гулден + Карибски гулден + Специални права на тираж @@ -6172,6 +6257,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ зимбабвийски долар зимбабвийски долара + + Зимбабвийско злато + Зимбабвийско злато + Зимбабвийско злато + Зимбабвийски долар (2009) зимбабвийски долар (2009) @@ -6306,7 +6396,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метра за секунда на квадрат - оборот + обороти {0} оборот {0} оборота @@ -6395,7 +6485,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} единица {0} единици - + + части + {0} част + {0} части + + части на милион {0} част на милион {0} части на милион @@ -6415,9 +6510,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ молове - {0} мол + {0} mol {0} мола + + глюкоза + {0} глюкоза + {0} глюкоза + литри на километър {0} литър на километър @@ -6935,6 +7035,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} милиметър живачен стълб {0} милиметра живачен стълб + + живачен стълб + фунтове на квадратен инч {0} фунт на квадратен инч @@ -7108,6 +7211,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метрична чаша {0} метрични чаши + + метрични течни унции + {0} метрична течна унция + {0} метрични течни унции + акър-футове {0} акър-фут @@ -7190,20 +7298,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} имперска кварта {0} имперски кварти - - светлина - {0} светлина - {0} светлина + + стерадиани + {0} стерадиан + {0} стерадиана - + + катали + {0} катал + {0} катала + + + кулони + {0} кулон + {0} кулона + + + фаради + {0} фарад + {0} фарада + + + хенри + {0} хенри + {0} хенри + + + сименс + {0} сименс + {0} сименса + + + калории [IT] + {0} калория [IT] + {0} калории [IT] + + + бекерели + {0} бекерел + {0} бекерела + + + сиверти + {0} сиверт + {0} сиверта + + + грей + {0} грей + {0} грея + + + килограм-сила + {0} килограм-сила + {0} килограма-сила + + + тесла + {0} тесла + {0} тесла + + + вебери + {0} вебер + {0} вебера + + части на милиард {0} част на милиард {0} части на милиард - нощи - {0} нощ - {0} нощи {0} на нощ @@ -7250,6 +7415,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ед. {0} ед. + + част + {0} част + {0} част + процент @@ -7258,8 +7428,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ мол - {0} мол - {0} мол + {0} mol + {0} mol + + + Glc + {0} Glc + {0} Glc l/km @@ -7554,12 +7729,45 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} имп. кварта {0} имп. кварти + + {0} kat + {0} kat + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + светлина {0} светлина {0} светлина - + части/милиард @@ -7584,12 +7792,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} кв. миля {0} кв. мили + + част + {0} част + {0} част + % + + mol + {0} mol + {0} mol + + + Glc + PB @@ -7661,16 +7882,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} брит. дес. лъж. {0} брит. дес. лъж. - - светлина - {0} светлина - {0} светлина + + {0} kat + {0} kat - - нощи - {0} нощ - {0} нощи - {0}/нощ + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + + ppb diff --git a/make/data/cldr/common/main/blo.xml b/make/data/cldr/common/main/blo.xml index a19f37f2d06..d4ca17e28be 100644 --- a/make/data/cldr/common/main/blo.xml +++ b/make/data/cldr/common/main/blo.xml @@ -15,36 +15,350 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} : {1} + Afaar kagɩja + Abkhase kagɩja + Saʊtafrɩka kagɩja + Agem kagɩja + Akan kagɩja + Amhariiki kagɩja + Aragonɛs kagɩja + oboloo kagɩja + gjakalaŋ kagɩlaarɩbuja gɩlaaribuja gɩlaaribuja ŋgɩɖee kǝ ba na fʊba na + mapushi kagɩja + Assamɛs kagɩja + Asuu kagɩja + Asturiya kagɩja + Asɛrbayijanii kagɩja + Aserii kagɩja + Bashikiiri kagɩja + Balushii kagɩja + Basaa kagɩja + Belarusiya kagɩja + Bɛmba kagɩja + Betawii kagɩja + Bena kagɩja + Bulgariya kagɩja + Haryaŋfiki kagɩja + Gɩbaloshiija + Bojpuri kagɩja anii kagɩja - baŋglaa kagɩja + Taii Ɖam kagɩja + Bambaraa kagɩja + Baŋgǝla kagɩja + Tibetaŋ kagɩja (Gɩtibetaŋja) + Baktiyarii kagɩja + Bretɔn kagɩja + Boɖo kagɩja + Bosniya kagɩja + Akoose kagɩja + Buriyaat kagɩja + Bliin kagɩja + Katalan kagɩja + Canaɖo kagɩja + Atsam kagɩja + Shakma kagɩja + Sheshɛn kagɩja + Sebuwanoo kagɩja + Shiga kagɩja + Shɔktaʊ kagɩja + Sherokee kagɩja + Shikasawʊ kagɩja + Kurɖish gɩcɩɩca kagɩja + Kurɖish, gɩcɩɩca kagɩja + Kurɖish, Sorani kagɩja + Kɔrsikan kagɩja + Kɔptik kagɩja + Cɛk kagɩja + sʊwampii kree kagɩja + Shʊrshʊ kagɩja + Shufash kagɩja + Gɩwɛlshja + Ɖanǝmaakɩ kagɩja + Tayɩta kagɩja (Gɩtayɩtaja) gɩjaamaja + Gɩsarmaja + Ɖogri kagɩja + sɔrabɩyan atǝntǝn kagɩja + Ɖuwala kagɩja + Ɖifehii kagɩja + jola-fonyii kagɩja + Ɖsɔŋgkha kagɩja + ɛmbuu kagɩja + gɩyigbeja + grɛɛkɩ kagɩja gɛɛshɩ gɛɛshɩ (Ganɔ gaɖɔŋkɔnɔ kabʊtǝna Amalɩka nɩ) gɛɛshɩ (GKA) + Ɛspɛrnatoo kagɩja gɩspaŋja gɩspaŋja (latɛŋ kaAmalɩkatǝna) + Ɛstonia kagɩja + Baske kagɩja + Ɛwonɖoo kagɩja + pɛrsɩaŋ kagɩja + ɖaarii kagɩja + gɩfǝlanɖɩja + finiish kagɩja + filipinoo kagɩja + faroɛsi kagɩja gɩfɔnɔ + Kajun kagɩfɔnɔ + friisɔŋ gʊnyɩpɛnɛlaŋ kagɩja + friula kagɩja + Gɩfrisianja + irlanɖɛɛ kagɩja + gaa kagɩja + skɔtiishɩ kagɩja + gɛɛsɩ kagɩja + galisiaŋ kagɩja + gaaranii kagɩja + suisi jaama kagɩja + gujaratii kagɩja + gusii kagɩja + mansɩ kagɩja + gɩgambrɩja + hawahiyaŋ kagɩja + hebree kagɩja + hinɖii kagɩja hinɖii kagɩja (latɛŋ kʊja) hiŋgliishɩ kagɩja + Hmoŋg ŋjʊwaa kagɩja + Kʊrwasiya kagɩja + Upɛr Sɔrbɩyaŋ kagɩja + haɩtiɛŋ kreɔlɩ kagɩja + hɔŋgrii kagɩja + Armeniya kagɩja + ɛntɛrliŋgua kagɩja Ɛnɖonosii kagɩja + ɛntɛrliŋguɩ kagɩja + ibo kagɩja + sishuaŋ yii kagɩja + iɖoo kagɩja + islanɖii kagɩja gɩtaliija + inuktituu kagɩja gɩjapaŋja + lɔbaŋ kagɩja + ŋgomba kagɩja + masham kagɩja + jafanɛɛ kagɩja + jɔrjia kagɩja + Karaa Kalpaakɩ kagɩja + kabil kagɩja + juu kagɩja + kambaa kagɩja + Gɩtɩyapja + makɔnɖee kagɩja + kapfɛɛ kagɩja + Kekshii kagɩja + Keniyaa kagɩja + kaɩŋgan kagɩja + koyira-shiinii kagɩja + kikuyuu kagɩja + kasaakɩ kagɩja + kakoo kagɩja + kalaalisut kagɩja + kalaŋjɩn kagɩja + kamɛr kagɩja + kananɖa kagɩja Koree kagɩja + koŋkanii kagɩja + kpɛl kagɩja + kashimirii kagɩja + shambalaa kagɩja + Bafiya kagɩja + Kolonyiya kagɩja + kurɖikɩ kagɩja + Kʊrɖiishi kagɩja + Kʊrmanjii kagɩja + Kɔrnish kagɩja + Kʊfii kagɩja + kirgis kagɩja + latɛŋ kagɩja + Laŋgii kagɩja + Lʊsɛŋburgiishi kagɩja + ganɖaa kagɩja + Liguriaŋ kagɩja + Lakotaa kagɩja + Laɖɛŋ kagɩja + Lɔmbaarɩ kagɩja + liŋgalaa kagɩja + lawo kagɩja + luwisaana kreyɔl kagɩja + lorii gʊnyɩpɛnɛlaŋ kagɩja + lituyanii kagɩja + Latɩgalɩyaŋ Kagɩja + luba-kataŋgaa kagɩja + luwo kagɩja + luyaa kagɩja + latɩfɩyaŋ kagɩja + Laas kagɩja + mayitilii kagɩja + Masaɩ kagɩja + moshaa kagɩja + meruu kagɩja + kreyol-morisi kagɩja + malagaasɩ kagɩja + Makuwa-meeto kagɩja + metaa kagɩja + Moshenoo kagɩja + maworii kagɩja + Mikmaawʊ kagɩja + maseɖoniya kagɩja + maalayalam kagɩja + moŋgolii kagɩja + manipurii kagɩja + mowak kagɩja + maratii kagɩja + malɛɛ kagɩja + maltɛsɩ kagɩja + manɖaŋgɩ kagɩja + ɩkrǝ tuutuuma + kriki kagɩja + Burmɛs kagɩja + Ɛrsia kagɩja + masanɖarii kɩja + namaa kagɩja + nɔrfɛɛjɩ bokimalɩ kagɩja + nɖebelee gʊnyɩpɛnɛlaŋ kagɩja + jaama atǝntǝn kagɩja + jaama atǝntǝn kagɩja (Holanɖ) + nepal kagɩja Holanɖ kagɩja + kʊwasiyo kagɩja + nɔrfɛɛjɩ ninɔrisikɩ kagɩja + ŋgiyembuu kagɩja + nɔrfɛɛjɩ kagɩja + ŋkoo kagɩja + nɖebelee gʊnyɩsonolaŋ kagɩja + sotoo gʊnyɩpɛnɛlaŋ kagɩja + nuyɛr kagɩja + nafaɖo kagɩja + shewa kagɩja + niyaŋkolee kagɩja + oksitaŋ kagɩja + oromoo kagɩja + oɖia kagɩja + osɛtiiki kagɩja + Osage kagɩja + Pʊŋjabii kagɩja + papiamantoo kagɩja + piɖijin nanjiriya kagɩja + Pijiŋ kagɩja Polanɖ kagɩja + Piyeɖmɔŋtɛsɩ kagɩja + Prʊsiaŋ kagɩja + pashɩtoo kagɩja gɩpɔrtigalja + Keshʊwaa kagɩja + Kishee kagɩja + Rajastanii kagɩja + Rɔhiŋgiyaa kagɩja + Rifiyaŋ kagɩja + Romaŋshɩ kagɩja + Rʊnɖii kagɩja + Romaniaŋ kagɩja + Romaniaŋ kagɩja (Mɔlɖafiya) + Rɔŋboo kagɩja gɩrɔɔshɩyaja + kiŋyarwan kagɩja + rʊwaa kagɩja + saŋskriitɩ kagɩja + Gɩyakutuja + samburu + santalii kagɩja + saŋguu kagɩja + sarɖiniaŋ kagɩja + sisiliaŋ kagɩja + sɛnɖii kagɩja + Kʊrɖish gʊnyɩsonolaŋ kaja kagɩja + samee + senaa kagɩja + koyirabɔrɔ-senii kagɩja + saŋgoo kagɩja + samburuu kagɩja + Tashelhiiti kagɩja (Gɩtashelhiitija) + Shaŋ kagɩja + sɛnhalaa kagɩja + Siɖamoo kagɩja + slofaakɩ kagɩja + Gɩsarayikiija + slofenia kagɩja + Samii gʊnyɩsonolaŋ kaja kagɩja + Lʊl Samii kagɩja + inarii samii kagɩja + skɔltɩ samii kagɩja + shonaa kagɩja + somalii kagɩja + Albaniya kagɩja + sɛrbiaŋ kagɩja + sʊwatii kagɩja + Sawoo kagɩja + sotoo gʊnyɩsonolaŋ kaja kagɩja + sunɖanɛsɩ kagɩja + sʊwɛɛɖɩ kagɩja + sʊwahilii kagɩja + Ccŋgoo sʊwahilii kagɩja + siriyaakɩ kagɩja + Sisiliyaŋ kagɩja + Tamil kagɩja (Gɩtamilja) + Telugu kagɩja (Gɩteluguja) + Teso kagɩja (Gɩtesoja) + Tajiik kagɩja taɩ kagɩja + Tigrinyaa kagɩja + Tiigr kagɩja + Tirkmɛn kagɩja + Cʊwanaa kagɩja (Gɩcʊwanaja) + Tɔŋgaŋ kagɩja (Gɩtɔŋgaŋja) + Toki Ponaa kagɩja + TɔkPisin kagɩja gɩturkiija + Taroko kagɩja (Gɩtarokoja) + Tɔɔrwalii kagɩja + Sɔŋgaa kagɩja (Gɩsɔŋgaja) + Tatar kagɩja + Tasawak kagɩja (Gɩtasawakǝja) + Tufiniyaŋ kagɩja + Tamaasit Atlas kagɩcɩɩca kagɩja + gɩwigurja + Ukraɩnɩya kagɩja gɩkrǝ ŋgɩɖee kʊyɔʊ ʊ mana ma + Gɩurɖuja + Usbɛkɩ kagɩja + Gɩfayɩja + Fanɖa kagɩja + Fenɛsiaŋ kagɩja + Gɩfɩɛtɩnamɛɛsɩja + Makʊwa kagɩja + Folapuku kagɩja + Gɩfunjoja + Gɩwalɔnja + Gɩwalsaja + Gɩwolaɩtaja + Gɩwarpurija + Gɩwolofja + Gɩsoosaja + Kaŋgrii kagɩja + sogaa kagɩja + Gɩyaŋgbɛnja + Gɩyiɖiishija + Gɩyorubaja + ŋyeeŋgatuu kagɩja + Kantonɛs kagɩja + Kantonɛs kagɩcaɩnaja + Gɩsʊaŋja + morooko tamsiik ka (tututu) kagɩja gɩcaɩnaja manɖarɛŋ gɩcaɩnaja, manɖarɛŋ gɩcaɩnaja gɩburoka gɩcaɩnaja manɖarɛŋ gɩburoka gɩcaɩnaja tututu gɩcaɩnaja manɖarɛŋ tututu + Gɩsuluja + gɩkrǝ kakoɖǝn ɩ mana @@ -385,6 +699,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Etiyopii kɩshilé na kɩŋɔrɔ ɩtʊrka Etiyopii kɩshilé na kɩŋɔrɔ ɩtʊrka (Amete Alɛm) Gregɔɔ ‘ɩshilé n’‘ɩŋɔrɔ ɩtʊrka + Gregɔɔ kaja Yahuuɖi kǝbaja bɩshilé na bɩŋɔrɔ ɩtʊrka Inɖiya kɩshilé na kɩŋɔrɔ ɩtʊrka gɩnǝma kɩshilé na kɩŋɔrɔ ɩtʊrka @@ -392,11 +707,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic gɩnǝma kɩshilé na kɩŋɔrɔ ɩtʊrka akʊn aŋɔrɔ (Sauɖiya) gɩnǝma kɩshilé na kɩŋɔrɔ ɩtʊrka aɖʊ (ɩŋɔripi ɩceuka katam) gɩnǝma kɩshilé na kɩŋɔrɔ ɩtʊrka (Um al-Kra) - ISO-8601 kɩshilé na kɩŋɔrɔ ɩtʊrka + Gregɔɔ ‘ɩshilé n’‘ɩŋɔrɔ ɩtʊrka (asǝba na gaja) Japaŋ kɩshilé na kɩŋɔrɔ ɩtʊrka Pɛrs kǝbaja bɩshilé na kɩŋɔrɔ ɩtʊrka miŋguwo kɩshilé na kɩŋɔrɔ ɩtʊrka ɩbii kʊnyaʊ ɖeiɖei + ɖeiɖei mɛta kʊfaŋʊ kayaashɩ Gɛɛshɩ kʊfaŋʊ kayaashɩ Amalɩka kʊfaŋʊ kayaashɩ @@ -414,8 +730,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic - [aáàâ b c ɖ eéèê ǝ{ǝ́}{ǝ̀}{ǝ̂} ɛ{ɛ́}{ɛ̀}{ɛ̂} f g {gb} h iíìî ɩ{ɩ́}{ɩ̀}{ɩ̂} j k {kp} l mḿ{m̀} nńǹ {ny} ŋ{ŋ́}{ŋ̀} {ŋm} oóòô ɔ{ɔ́}{ɔ̀}{ɔ̂} p r s {sh} t uúùû ʊ{ʊ́}{ʊ̀}{ʊ̂} w y] - [ăǎåäãā{a̰} æ ɓ ćç d ɗ ĕěëẽēḛ {ǝ̃}{ǝ̄}{ǝ̰} {ə̌} {ɛ̌}{ɛ̃}{ɛ̄}{ɛ̰} ƒ ɣ {hw} ĭǐïĩīḭ ij {ɩ̃}{ɩ̄}{ɩ̰} {m̌}{m̄} ňñ{n̄} {ŋw} ŏǒöõøō{o̰} œ {ɔ̌}{ɔ̃}{ɔ̄}{ɔ̰} ř šſ ß ŭǔüūṵ {̃ũ} {ʊ̌}{ʊ̃}{ʊ̄}{ʊ̰} v ʋ x {xw} ÿ ƴ z ʒ {̃ʼ}] + [aáàâ ǝ{ǝ́}{ǝ̀}{ǝ̂} b c ɖ eéèê ɛ{ɛ́}{ɛ̀}{ɛ̂} f g {gb} h iíìî ɩ{ɩ́}{ɩ̀}{ɩ̂} j k {kp} l mḿ{m̀} nńǹ {ny} ŋ{ŋ́}{ŋ̀} {ŋm} oóòô ɔ{ɔ́}{ɔ̀}{ɔ̂} p r s {sh} t uúùû ʊ{ʊ́}{ʊ̀}{ʊ̂} w y] + [ăǎåäãā{a̰} æ {ǝ̃}{ǝ̄}{ǝ̰} ɓ ćç d ɗ ĕěëẽēḛ {ə̌} {ɛ̌}{ɛ̃}{ɛ̄}{ɛ̰} ƒ ɣ {hw} ĭǐïĩīḭ ij {ɩ̃}{ɩ̄}{ɩ̰} {m̌}{m̄} ňñ{n̄} {ŋw} ŏǒöõøō{o̰} œ {ɔ̌}{ɔ̃}{ɔ̄}{ɔ̰} q ř šſ ß ŭǔüūṵ {̃ũ} {ʊ̌}{ʊ̃}{ʊ̄}{ʊ̰} v ʋ x {xw} ÿ ƴ z ʒ {̃ʼ}] [   \- ‑ , . % ‰ ‱ + 0 1 2² 3³ 4 5 6 7 8 9 {ʲᵃ} {ᵏᵃ}] [_ \- ‐‑ – — ― , ; \: ! ? . … '‘’ ‹ › "“” « » ( ) \[ \] \{ \} § @ * / \\ \& # % ‰ ‱ † ‡ • ‣ ‧ ′ ″ ° < = > | ¦ ~] @@ -446,7 +762,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - M/d/y GGGGG + M/d/y G @@ -473,12 +789,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic E d + E, h a E, h a mm E, HH:mm E, h a mm:ss E, HH:mm:ss y G - M/d/y GGGGG + M/y G + M/d/y G + E, M/d/y G MMM y G MMM d y G E, MMM d y G @@ -489,9 +808,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, MMM d y G y G - M/y GGGGG - M/d/y GGGGG - E, M/d/y GGGGG + M/y G + M/d/y G + E, M/d/y G MMM y G MMM d y G E, MMM d y G @@ -558,7 +877,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM d – d - MMM d – MMM d E, MMM d – E, MMM d @@ -762,17 +1080,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic - EEEE, MMMM d y + EEEE, MMMM d/y - MMMM d y + y MMMM d - MMM d y + MMM d/y @@ -825,22 +1143,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic - h B mm - h B mm:ss - E h B mm - E h B mm:ss E d - E h a mm - E h a mm:ss + E h:mm a + E h:mm:ss a y G + M/y G M/d/y G + E, M/d/y G MMM y G MMM d y G E, MMM d y G - h a mm - h a mm:ss - h a mm:ss v - h a mm v + h:mm a + h:mm:ss a + h:mm:ss a v + h:mm a v M/d E, M/d E, MMM d @@ -851,8 +1167,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic M/d/y E, M/d/y MMM y - MMM d y - E, MMM d y + MMM d/y + E, MMM d/y MMMM y QQQ y QQQQ y @@ -910,25 +1226,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH – HH - h a mm – h a mm - h a mm – h a mm - h a mm – h a mm + h:mm a – h:mm a + h:mm a – h:mm a + h:mm a – h:mm a HH:mm – HH:mm HH:mm – HH:mm - h a mm a – h a mm v - h a mm – h a mm v - h a mm – h a mm v + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v HH:mm – HH:mm v HH:mm – HH:mm v - h a – h a v h a – h a v @@ -950,7 +1265,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM d – d - MMM d – MMM d E, MMM d – E, MMM d @@ -1244,7 +1558,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - mpá nɖee kʊyɔʊ ʊ mana ma + gaɖu ŋgaɖee kʊyɔʊ ʊ mana ma Anɖɔraa @@ -1252,6 +1566,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ɖubaɩ + + Kabuul + Antiguwaa @@ -1318,6 +1635,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Katamarkaa + + Saltaa + Huhuyi @@ -1477,6 +1797,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Timfu + + Gaboronee + Mɩns @@ -1525,6 +1848,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Raŋkɩn Ɩnlɛɛtɩ + + Atikokaan + Torɔntoo @@ -1576,6 +1902,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ista + + Koihaiik + + + Punta Arenaasɩ + Santiyagoo @@ -1588,6 +1920,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Shaŋgaɩ + + Bogotaa + Kɔsta Rikaa @@ -1714,12 +2049,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tuule + + Nuuku + Itokɔrtoomiiti Ɖanǝmarkɩhaʊn + + Banjuul + Konakrii @@ -1825,7 +2166,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nɔm Pɛn - + Kantɔn @@ -2323,6 +2664,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kiyɛf + + Simferopool + Kampalaa @@ -2335,9 +2679,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Aɖak + + Noome + Aŋkɔraajɩ + + Yakutaatɩ + Sitkaa @@ -2480,9 +2830,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Garɩɖontǝna gɩteŋshilelaŋ kaakɔŋkɔŋɔ̀ - Garɩɖontǝna gɩteŋshilelaŋ kaakɔŋkɔŋɔ̀ ɖeiɖei - Garɩɖontǝna gɩteŋshilelaŋ kaakɔŋkɔŋɔ̀ gafʊbaka + Garɩɖontǝna gɩteŋshilelaŋ kaakɔŋkɔŋɔ̀ @@ -2529,9 +2877,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Apiya kaakɔŋkɔŋɔ̀ - Apiya kaakɔŋkɔŋɔ̀ ɖeiɖei - Apiya kaakɔŋkɔŋɔ̀ gafʊbaka + Samowa kaakɔŋkɔŋɔ̀ + Samowa kaakɔŋkɔŋɔ̀ ɖeiɖei + Samowa kaakɔŋkɔŋɔ̀ gafʊbaka @@ -2637,7 +2985,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Brunɛɩ Ɖarusalaam kaakɔŋkɔŋɔ̀ + Brunɛɩ kaakɔŋkɔŋɔ̀ @@ -2840,6 +3188,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyanaa kaakɔŋkɔŋɔ̀ + + + Awayɩɩ n’Alewutii kaakɔŋkɔŋɔ̀ ɖeiɖei + + Awayɩɩ n’Alewutii kaakɔŋkɔŋɔ̀ @@ -2856,9 +3209,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Hɔfɖǝ kaakɔŋkɔŋɔ̀ - Hɔfɖǝ kaakɔŋkɔŋɔ̀ ɖeiɖei - Hɔfɖǝ kaakɔŋkɔŋɔ̀ gafʊbaka + Kɔfɖǝ kaakɔŋkɔŋɔ̀ + Kɔfɖǝ kaakɔŋkɔŋɔ̀ ɖeiɖei + Kɔfɖǝ kaakɔŋkɔŋɔ̀ gafʊbaka @@ -3173,12 +3526,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Ponapee kaakɔŋkɔŋɔ̀ + Poonpei kaakɔŋkɔŋɔ̀ - Pɩyɔŋyaŋ kaakɔŋkɔŋɔ̀ + Koree gʊnyɩpɛnɛlaŋ kaakɔŋkɔŋɔ̀ @@ -3200,9 +3553,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Samowa kaakɔŋkɔŋɔ̀ - Samowa kaakɔŋkɔŋɔ̀ ɖeiɖei - Samowa kaakɔŋkɔŋɔ̀ gafʊbaka + Samowa Amalɩka kaja kaakɔŋkɔŋɔ̀ + Samowa Amalɩka kaja kaakɔŋkɔŋɔ̀ ɖeiɖei + Samowa Amalɩka kaja kaakɔŋkɔŋɔ̀ gafʊbaka @@ -3242,9 +3595,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Taɩpei kaakɔŋkɔŋɔ̀ - Taɩpei kaakɔŋkɔŋɔ̀ ɖeiɖei - Taɩpei kaakɔŋkɔŋɔ̀ gafʊbaka + Taɩwan kaakɔŋkɔŋɔ̀ + Taɩwan kaakɔŋkɔŋɔ̀ ɖeiɖei + Taɩwan kaakɔŋkɔŋɔ̀ gafʊbaka @@ -3362,6 +3715,88 @@ CLDR data files are interpreted according to the LDML specification (http://unic ,   + + + + baa kotoku 0 + kotoku 0 + ɩkotoku 0 + baa kotoku 00 + kotoku 00 + ɩkotoku 00 + baa kotoku 000 + kotoku 000 + ɩkotoku 000 + baa gakuli 0 + gakuli 0 + bʊkuli 0 + baa gakuli 00 + gakuli 00 + bʊkuli 00 + baa gakuli 000 + gakuli 000 + bʊkuli 000 + baa ŋkulo 0 + ŋkulo 0 + akulo 0 + baa ŋkulo 00 + ŋkulo 00 + akulo 00 + baa ŋkulo 000 + ŋkulo 000 + akulo 000 + baa ŋkrǝ 0 + ŋkrǝ 0 + akrǝ 0 + baa ŋkrǝ 00 + ŋkrǝ 00 + akrǝ 00 + baa ŋkrǝ 000 + ŋkrǝ 000 + akrǝ 000 + + + + + kt 0 + kt 0 + ɩkt 0 + kt 00 + kt 00 + ɩkt 00 + kt 000 + kt 000 + ɩkt 000 + gkl 0 + gkl 0 + bkl 0 + gkl 00 + gkl 00 + bkl 00 + gkl 000 + gkl 000 + bkl 000 + ŋkl 0 + ŋkl 0 + akl 0 + ŋkl 00 + ŋkl 00 + akl 00 + ŋkl 000 + ŋkl 000 + akl 000 + ŋkr 0 + ŋkr 0 + akr 0 + ŋkr 00 + ŋkr 00 + akr 00 + ŋkr 000 + ŋkr 000 + akr 000 + + + @@ -3373,6 +3808,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;¤ -#,##0.00 + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + + + ¤ kt 0 + ¤ kt 0 + ¤ ɩkt 0 + ¤ kt 00 + ¤ kt 00 + ¤ ɩkt 00 + ¤ kt 000 + ¤ kt 000 + ¤ ɩkt 000 + ¤ gkl 0 + ¤ gkl 0 + ¤ bkl 0 + ¤ gkl 00 + ¤ gkl 00 + ¤ bkl 00 + ¤ gkl 000 + ¤ gkl 000 + ¤ bkl 000 + ¤ ŋkl 0 + ¤ ŋkl 0 + ¤ akl 0 + ¤ ŋkl 00 + ¤ ŋkl 00 + ¤ akl 00 + ¤ ŋkl 000 + ¤ ŋkl 000 + ¤ akl 000 + ¤ ŋkr 0 + ¤ ŋkr 0 + ¤ akr 0 + ¤ ŋkr 00 + ¤ ŋkr 00 + ¤ akr 00 + ¤ ŋkr 000 + ¤ ŋkr 000 + ¤ akr 000 {1} {0} @@ -4292,6 +4773,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Karayiib gajakalaŋ kaɖala Karayiib gajakalaŋ kɩɖala + + Karayiib kafɔlɔrɛŋ + baa Karayiib kafɔlɔrɛŋ + Karayiib kafɔlɔrɛŋ + Karayiib kɩfɔlɔrɛŋ + Garɩɖontǝna gɩteŋshilelaŋ kasɛɛfa baa Garɩɖontǝna gɩteŋshilelaŋ kasɛɛfa @@ -4328,6 +4815,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sambii kakʊwaasha Sambii kɩkʊwaasha + + Simbabʊwee kawura + baa Simbabʊwee kawura + Simbabʊwee kawura + Simbabʊwee kɩwura + baa ʊshilé {0} @@ -4560,6 +5053,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic bʊkɔ {0} ayɔkɔ {0} + + ɩpaartɩ + ɩshɩnʊn nɩ ɩshɩnʊn nɩ {0} @@ -4578,6 +5074,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic mol {0} ɩmol {0} + + gulukoos kaja + baa gulukoos {0} + gulukoos kaja {0} + gulukoos kaja {0} + ɩlitri kiloomɛta nɩ baa litri kiloomɛta nɩ {0} @@ -5020,6 +5522,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic mɛrkiir kamilimɛta {0} mɛrkiir kɩmilimɛta {0} + + mɛrkiir kaja + mɛrkiir kasǝkǝmǝ baa mɛrkiir kansǝkǝmǝ {0} @@ -5265,6 +5770,42 @@ CLDR data files are interpreted according to the LDML specification (http://unic ʊkɩtɩʊ {0} ɩkɩtɩʊ {0} + + ɩsɩteraɖiyaan + baa sɩteraɖiyaan {0} + sɩteraɖiyaan {0} + ɩsɩteraɖiyaan {0} + + + ɩkataal + + + ɩkʊlɔɔm + + + ɩfaraaɖɩ + + + ɩhɛnrii + + + ɩsimɛɛnsɩ + + + ɩbɛkɛrɛɛl + + + ɩsɩfɛɛrtɩ + + + ɩgrɛɛ + + + ɩtɛsɩlaa + + + ɩwɛbaasɩ + pɔɩɩ pɔɩɩ {0} @@ -5385,7 +5926,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic item {0} item {0} - + ppm {0} ppm {0} ppm {0} @@ -5410,6 +5951,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic mol {0} mol {0} + + Glc + L/km {0} L/km {0} @@ -6020,7 +6564,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic light {0} light {0} - + ppb {0} ppb {0} ppb {0} @@ -6140,7 +6684,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic item{0} item{0} - + ppm{0} ppm{0} ppm{0} @@ -6165,6 +6709,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic mol{0} mol{0} + + Glc + L/km{0} L/km{0} @@ -6768,7 +7315,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic light{0} light{0} - + ppb{0} ppb{0} ppb{0} @@ -6932,13 +7479,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Abɖu-Tɔyib + MUSA GOMINA ʊŋono Mustafa Tafa + Alɛ + ∅∅∅ KALAM + ∅∅∅ ajala Alaaji @@ -6951,7 +7502,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Alfɔns + Rolanɖ MANƉELA + + Prof. Ɖr. + Samʊwɛl + Sam + Fostɛɛŋ + fan + ƉAM + ƉOMIŊGO + Jr + + diff --git a/make/data/cldr/common/main/bm_Nkoo.xml b/make/data/cldr/common/main/bm_Nkoo.xml index fa4ebf3626c..9973eca7e1b 100644 --- a/make/data/cldr/common/main/bm_Nkoo.xml +++ b/make/data/cldr/common/main/bm_Nkoo.xml @@ -156,6 +156,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/bn.xml b/make/data/cldr/common/main/bn.xml index fea3fe71eb0..5609b377a70 100644 --- a/make/data/cldr/common/main/bn.xml +++ b/make/data/cldr/common/main/bn.xml @@ -54,7 +54,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ বেলুচী বালিনীয় বাসা - বেলারুশিয় + বেলারুশীয় বেজা বেম্বা বেনা @@ -94,7 +94,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ চিনুক জার্গন চকটাও চিপেওয়ান - চেরোকী + চেরোকি চেইয়েন মধ্য কুর্দিশ কুর্দিশ, মধ্য @@ -128,7 +128,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ডিংকা জার্মা ডোগরি - নিম্নতর সোর্বিয়ান + সোর্বিয়ান (নিম্নতর) দুয়ালা মধ্য ডাচ দিবেহি @@ -145,8 +145,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ এলামাইট ইংরেজি ইংরেজি (যুক্তরাজ্য) - ইংরেজি (আমেরিকা) - ইংরেজি (যুক্তরাষ্ট্র) + ইংরেজি (মার্কিন যুক্তরাষ্ট্র) মধ্য ইংরেজি এস্পেরান্তো স্প্যানিশ @@ -158,7 +157,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ দারি ফ্যাঙ্গ ফান্তি - ফুলাহ্ + ফুলা ফিনিশ ফিলিপিনো ফিজিয়ান @@ -181,7 +180,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ স্কটিশ-গ্যেলিক গীজ গিলবার্টিজ - গ্যালিশিয় + গ্যালিশীয় মধ্য-উচ্চ জার্মানি গুয়ারানি প্রাচীন উচ্চ জার্মানি @@ -207,7 +206,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ হ্‌মোঙ হিরি মোতু ক্রোয়েশীয় - উচ্চ সোর্বিয়ান + সোর্বিয়ান (উচ্চ) Xiang চীনা হাইতিয়ান ক্রেওল হাঙ্গেরীয় @@ -220,7 +219,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ইবিবিও ইন্দোনেশীয় ইন্টারলিঙ্গ - ইগ্‌বো + ইগবো সিচুয়ান য়ি ইনুপিয়াক পশ্চিম কানাডিয় ইনুক্টিটুট @@ -228,7 +227,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ইঙ্গুশ ইডো আইসল্যান্ডীয় - ইতালিয় + ইতালীয় ইনুক্টিটুট জাপানি লোজবান @@ -265,7 +264,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ কন্নড় কোরিয়ান কমি-পারমিআক - কোঙ্কানি + কোঙ্কণী কোস্রাইন ক্‌পেল্লে কানুরি @@ -277,13 +276,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ বাফিয়া কলোগনিয়ান কুর্দিশ + কুর্দিশ + কুরমাঞ্জি কুমিয়াক কুটেনাই কোমি কর্ণিশ কোয়াক’ওয়ালা কুভি - কির্গিজ + কিরগিজ লাতিন লাদিনো লাঙ্গি @@ -304,7 +305,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ লোজি উত্তরাঞ্চলীয় লুরি সামিয়া - লিথুয়েনীয় + লিথুয়ানীয় লুবা-কাটাঙ্গা লুবা-লুলুয়া লুইসেনো @@ -312,7 +313,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ লুয়ো মিজো লুইয়া - লাত্‌ভীয় + লাটভিয় মাদুরেজ মাগাহি মৈথিলি @@ -332,9 +333,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ মাওরি মিকম্যাক মিনাংকাবাউ - ম্যাসিডোনীয় - মালায়ালাম - মঙ্গোলিয় + ম্যাসেডোনিয়া + মালয়ালম + মোঙ্গোলীয় মাঞ্চু মণিপুরী ইন্নু-এমুন @@ -342,7 +343,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ মসি মারাঠি মালয় - মল্টিয় + মল্টীয় মুদাঙ্গ একাধিক ভাষা মুস্কোগী @@ -356,9 +357,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ নামা নরওয়েজিয়ান বোকমাল উত্তর এন্দেবেলে - নিম্ন জার্মানি + জার্মান (নিম্ন) লো স্যাক্সন - নেপালী + নেপালি নেওয়ারি এন্দোঙ্গা নিয়াস @@ -389,18 +390,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ওজি-ক্রী পশ্চিম ওজিবোয়া ওকানাগান - অরোমো + ওরোমো ওড়িয়া ওসেটিক ওসেজ অটোমান তুর্কি - পাঞ্জাবী + পাঞ্জাবি পাঙ্গাসিনান পাহ্লাভি পাম্পাঙ্গা পাপিয়ামেন্টো পালায়ুয়ান - নাইজেরিয় পিজিন + নাইজেরীয় পিজিন প্রাচীন ফার্সি ফোনিশীয়ান পালি @@ -411,9 +412,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ প্রুশিয়ান প্রাচীন প্রোভেনসাল পাশতু - পুশতো - পর্তুগীজ - পর্তুগীজ (ইউরোপ) + পর্তুগিজ + পর্তুগিজ (ব্রাজিল) + পর্তুগিজ (ইউরোপ) কেচুয়া কি‘চে রাজস্থানী @@ -432,7 +433,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ রাওয়া সংস্কৃত সান্দাওয়ে - শাখা + ইয়াকুট সামারিটান আরামিক সামবুরু সাসাক @@ -453,7 +454,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ সার্বো-ক্রোয়েশিয় তাচেলহিত শান - সিংহলী + সিংহলি সিডামো স্লোভাক স্লোভেনীয় @@ -511,7 +512,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ নায়াসা টোঙ্গা টোকি পোনা টোক পিসিন - তুর্কী + তুর্কি তারোকো সঙ্গা সিমশিয়ান @@ -549,7 +550,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ওলোফ উ চীনা কাল্মাইক - জোসা + খোসা কাংরি সোগা ইয়াও @@ -560,15 +561,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ইওরুবা নহিংগাটু ক্যান্টোনিজ - চীনা, ক্যানটোনীজ - ঝু্য়াঙ + চীনা, ক্যান্টোনিজ + ঝুয়াং জাপোটেক চিত্র ভাষা জেনাগা আদর্শ মরক্কোন তামাজিগাত চীনা চীনা, ম্যান্ডারিন - চীনা ম্যান্ডারিন সরলীকৃত + চীনা ম্যান্ডারিন (সরলীকৃত) ম্যান্ডারিন চীনা (ঐতিহ্যবাহী) জুলু জুনি @@ -602,14 +603,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + - + @@ -658,11 +659,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + - + @@ -686,7 +687,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + @@ -790,7 +791,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ কোকোস (কিলিং) দ্বীপপুঞ্জ কঙ্গো-কিনশাসা কঙ্গো(DRC) - মধ্য আফ্রিকার প্রজাতন্ত্র + মধ্য আফ্রিকান প্রজাতন্ত্র কঙ্গো - ব্রাজাভিল কঙ্গো (প্রজাতন্ত্র) সুইজারল্যান্ড @@ -802,6 +803,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ চীন কলম্বিয়া ক্লিপারটন দ্বীপপুঞ্জ + সার্ক দ্বীপ কোস্টারিকা কিউবা কেপ ভার্দে @@ -899,7 +901,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ লাক্সেমবার্গ লাটভিয়া লিবিয়া - মোরক্কো + মরক্কো মোনাকো মলডোভা মন্টিনিগ্রো @@ -995,7 +997,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ তিউনিসিয়া টোঙ্গা তুরস্ক - ত্রিনিনাদ ও টোব্যাগো + ত্রিনিদাদ ও টোবাগো টুভালু তাইওয়ান তাঞ্জানিয়া @@ -1037,7 +1039,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ক্যালেন্ডার - মুদ্র্যা ফরম্যাট + মুদ্রা বিন্যাস প্রতীক বাছাইকরণ উপেক্ষা করুন বিপরীত করা স্বরাঘাত বাছাইকরণ বড়হাতের/ছোটহাতের অক্ষর ক্রম @@ -1047,35 +1049,56 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ সংখ্যাসূচক বাছাইকরণ বাছাইকরণ শক্তি মুদ্রা + ইমোজি উপস্থাপনা সময়ের হিসাব (১২ বা ২৪) লাইন বিভাজক শৈলী - পরিমাপ সিস্টেম + শব্দদ্বয়ের মধ্যে লাইন বিভাজক + পরিমাপ পদ্ধতি সংখ্যা - সময় জোন + শব্দ সংক্ষেপণের পর বাক্য ভাঙা + সময় অঞ্চল স্থানীয় ভিন্নতা বক্তিগত- ব্যবহার বৌদ্ধ ক্যালেন্ডার + বৌদ্ধ চীনা ক্যালেন্ডার + চীনা কপটিক ক্যালেন্ডার - দাঙ্গী ক্যালেন্ডার + কপটিক + দাঙ্গি ক্যালেন্ডার + দাঙ্গি ইথিওপিক ক্যালেন্ডার + ইথিওপীয় ইথিওপিও আমেতে আলেম ক্যালেন্ডার + ইথিওপীয় আমেতে আলেম গ্রিগোরিয়ান ক্যালেন্ডার + গ্রেগরীয় হিব্রু ক্যালেন্ডার + হিব্রু ভারতীয় জাতীয় বর্ষপঞ্জী + ভারতীয় জাতীয় ইসলামিক ক্যালেন্ডার - ইসলামিক-সিভিল বর্ষপঞ্জী + হিজরি + ইসলামিক ক্যালেন্ডার (ছকবদ্ধ, নাগরিক বর্ষপঞ্জি) + হিজরি (ছকবদ্ধ, নাগরিক বর্ষপঞ্জি) ইসলামিক বর্ষপঞ্জী (সৌদি আরব, দৃশ্যমান) ইসলামিক বর্ষপঞ্জী (ছকবদ্ধ, জ্যোতির্বিদ্যীয় যুগ) + হিজরি (ছকবদ্ধ, জ্যোতির্বিদ্যীয় যুগ) ইসলামিক বর্ষপঞ্জী (উম্মা আল-কুরআ) - ISO-861 ক্যালেন্ডার + হিজরি (উম্মা আল-কুরআ) + গ্রেগরীয় ক্যালেন্ডার (প্রথম বর্ষ) জাপানি ক্যালেন্ডার + জাপানি ফারসি ক্যালেন্ডার + ফারসি মিঙ্গুও ক্যালেন্ডার + মিঙ্গুও হিসাবের মুদ্রা বিন্যাস + অ্যাকাউন্টিং মানক মুদ্রা বিন্যাস + মানক প্রতীক বাছাই করুন উপেক্ষা প্রতীক বাছাই করুন স্বরাঘাত সাধারণতভাবে বাছাই করুন @@ -1085,22 +1108,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ প্রথমে বড়হাতের অক্ষর বাছাই করুন কেস অসংবেদী বাছাই করুন কেস সংবেদী বাছাই করুন - প্রথাগত চীনা সজ্জাক্রম - বিগ৫ আগের বাছাইয়ের ক্রম, সামঞ্জস্যের জন্য অভিধান বাছাই বিন্যাস ডিফল্ট ইউনিকোড বাছাই বিন্যাস + ডিফল্ট ইউনিকোড ইমোজি বাছাই ক্রম ইউরোপীয় ক্রম বিন্যাসের নিয়মাবলী - সাধারণ চীনা সজ্জাক্রম - জিবি২৩১২ ফোনবুক সজ্জাক্রম ধ্বনি নির্দেশক বাছাই ক্রম পিনিন সজ্জাক্রম রিফর্মড বাছাই বিন্যাস সাধারণ-উদ্দেশ্যে অনুসন্ধান + সার্চ হাঙ্গুল প্রাথমিক ব্যঞ্জনবর্ণ দ্বারা অনুসন্ধান করুন আদর্শ বাছাই বিন্যাস + মানক আবর্তিত সজ্জাক্রম প্রথাগত বাছাই বিন্যাস + প্রথাগত রাডিকেল স্ট্রোক বাছাই বিন্যাস ঝুইন সজ্জাক্রম স্বাভাবিক ছাড়া বাছাই করুন @@ -1115,18 +1140,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ পূর্ণপ্রস্থ পর্যন্ত অর্ধপ্রস্থ পর্যন্ত সাংখিক + ডিফল্ট + ইমোজি + টেক্সট ১২ ঘণ্টার হিসাবে (০–১১) + ১২ (০–১১) ১২ ঘণ্টার হিসাবে (১–১২) + ১২ (১–১২) ২৪ ঘণ্টার হিসাবে (০–২৩) + ২৪ (০–২৩) ২৪ ঘণ্টার হিসাবে (১–২৪) + ২৪ (১–২৪) আলগা লাইন বিভাজক শৈলী + আলগা সাধারণ লাইন বিভাজক শৈলী + সাধারণ টাইট লাইন বিভাজক শৈলী + টাইট + সবেতেই বিভাজক রাখুন + সব রেখে দিন + স্বাভাবিক + ব্যাক্যাংশে বিভাজক ইউএস বিজিএন বর্ণান্তরণ ইউএন জিইজিএন বর্ণান্তরণ - মেট্রিক সিস্টেম + মেট্রিক পদ্ধতি + মেট্রিক ইম্পেরিয়াল পরিমাপ সিস্টেম + যুক্তরাজ্য মার্কিন যুক্তরাষ্ট্রের পরিমাপ সিস্টেম + মার্কিন যুক্তরাষ্ট্র অহম সংখ্যা আরবি-ভারতীয় সংখ্যা প্রসারিত আরবি -ভারতীয় সংখ্যা @@ -1182,7 +1224,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ মায়ানমার থাই লেয়িং সংখ্যা স্থানীয় সংখ্যা এন’কো সংখ্যা - ওল চিকি সংখ্যা + অলচিকি সংখ্যা ওড়িয়া সংখ্যা ওসমানিয় সংখ্যা রোমান সংখ্যা @@ -1204,6 +1246,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ঐতিহ্যগত সংখ্যাসূচক ভাই সংখ্যা ওয়ারেং সিটি সংখ্যা + বন্ধ + চালু মেট্রিক @@ -1219,18 +1263,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [় ৺ অ আ ই ঈ উ ঊ ঋ ৠ ঌ ৡ এ ঐ ও ঔ ং ঃ ঁ ক {ক্ষ} খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড{ড়} ঢ{ঢ়} ণ ত ৎ থ দ ধ ন প ফ ব ভ ম য{য়} র ল শ ষ স হ ঽ া ি ী ু ূ ৃ ৄ ৢ ৣ ে ৈ ো ৌ ্ ৗ] [\u200C\u200D ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৰ ৱ] - [অ আ ই ঈ উ ঊ ঋ এ ঐ ও ঔ ক {ক্ষ} খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড ঢ ণ ত থ দ ধ ন প ফ ব ভ ম য র ল শ ষ স হ] + [অ আ ই ঈ উ ঊ ঋ এ ঐ ও ঔ ক {ক্ষ} খ গ ঘ চ ছ জ ঝ ট ঠ ড ঢ ণ ত থ দ ধ ন প ফ ব ভ ম য র ল শ ষ স হ] [\- ‑ , . % ‰ + 0০ 1১ 2২ 3৩ 4৪ 5৫ 6৬ 7৭ 8৮ 9৯] - [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [\- ‐‑ – — , ; \: ! ? . … । ॥ '‘’ "“” ( ) \[ \] § @ * / # † ‡ ′ ″] + [। ॥] + [\- ‑ , . /] {0} … … {0} {0} … {1} [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1278,12 +1321,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - যুগ ০ - যুগ ১ - - @@ -1322,12 +1359,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - যুগ ০ - যুগ ১ - - @@ -1361,6 +1392,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} এ {0} + + {1}: {0} + @@ -1369,21 +1403,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} এ {0} + + {1}: {0} + {1} {0} + + {1}, {0} + {1} {0} + + {1}, {0} + + E B h d E y G + M/y G d/M/y GGGGG + E, d/M/y G MMM y G d MMM, y G E, d MMM, y G @@ -1525,8 +1571,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ডিসে - জানুয়ারী - ফেব্রুয়ারী + জানুয়ারি + ফেব্রুয়ারি মার্চ এপ্রিল মে @@ -1549,10 +1595,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ জুন জুলাই আগস্ট - সেপ্টেম্বর - অক্টোবর + সেপ্ট + অক্টো নভেম্বর - ডিসেম্বর + ডিসে জা @@ -1568,6 +1614,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ডি + + জানুয়ারি + ফেব্রুয়ারি + মার্চ + এপ্রিল + মে + জুন + জুলাই + আগস্ট + সেপ্টেম্বর + অক্টোবর + নভেম্বর + ডিসেম্বর + @@ -1658,7 +1718,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - খ্রীষ্টাব্দ + খ্রিস্টপূর্বাব্দ + খ্রিস্টাব্দ খ্রিস্টপূর্ব @@ -1724,6 +1785,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} এ {0} + + {1} {0}-এ + @@ -1740,6 +1804,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1748,11 +1815,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + + E B h d E y G + MM-y G dd-MM-y GGGGG + E, dd-MM-y G MMM y G d MMM, y G E, d MMM, y G @@ -1918,10 +1991,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + চৈত্র + বৈশাখ + জ্যৈষ্ঠ + আষাঢ় + শ্রাবণ + ভাদ্র + আশ্বিন + কার্তিক + অগ্রহায়ণ + পৌষ + মাঘ + ফাল্গুন + চৈত্র বৈশাখ - জৈষ্ঠ্য + জ্যৈষ্ঠ আষাঢ় শ্রাবণ ভাদ্র @@ -1934,6 +2021,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + চৈত্র + বৈশাখ + জ্যৈষ্ঠ + আষাঢ় + শ্রাবণ + ভাদ্র + আশ্বিন + কার্তিক + অগ্রহায়ণ + পৌষ + মাঘ + ফাল্গুন + @@ -1948,6 +2049,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ১১ ১২ + + চৈত্র + বৈশাখ + জ্যৈষ্ঠ + আষাঢ় + শ্রাবণ + ভাদ্র + আশ্বিন + কার্তিক + অগ্রহায়ণ + পৌষ + মাঘ + ফাল্গুন + @@ -1960,7 +2075,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - মহররম + মুহররম সফর রবিউল আউয়াল রবিউস সানি @@ -1974,7 +2089,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ জ্বিলহজ্জ - মহররম + মুহররম সফর রবিউল আউয়াল রবিউস সানি @@ -1989,6 +2104,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + মুহররম + সফর + রবিউল আউয়াল + রবিউস সানি + জমাদিউল আউয়াল + জমাদিউস সানি + রজব + শা‘বান + রমজান + শাওয়াল + জ্বিলকদ + জ্বিলহজ্জ + @@ -2003,6 +2132,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ১১ ১২ + + মুহররম + সফর + রবিউল আউয়াল + রবিউস সানি + জমাদিউল আউয়াল + জমাদিউস সানি + রজব + শা‘বান + রমজান + শাওয়াল + জ্বিলকদ + জ্বিলহজ্জ + @@ -2010,6 +2153,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ যুগ + + + M/y G + E, d/M/y G + + @@ -2260,12 +2409,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ঘণ্টা এই ঘণ্টায় - {0} ঘন্টায় - {0} ঘন্টায় + {0} ঘণ্টায় + {0} ঘণ্টায় - {0} ঘন্টা আগে - {0} ঘন্টা আগে + {0} ঘণ্টা আগে + {0} ঘণ্টা আগে + + + + + {0} ঘণ্টায় + {0} ঘণ্টায় + + + {0} ঘণ্টা আগে + {0} ঘণ্টা আগে + + + + + {0} ঘণ্টায় + {0} ঘণ্টায় + + + {0} ঘণ্টা আগে + {0} ঘণ্টা আগে @@ -2298,12 +2467,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} সেকেন্ড আগে - - - {0} সেকেন্ড আগে - {0} সেকেন্ড আগে - - সময় অঞ্চল @@ -2669,6 +2832,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ইস্টার + + কোয়আইকে + পুন্টা আরেনাস @@ -2934,9 +3100,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ নম পেন - এন্ডারবারি - - ক্যান্টন @@ -3613,9 +3776,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - পশ্চিম আফ্রিকা সময় - পশ্চিম আফ্রিকা মানক সময় - পশ্চিম আফ্রিকা গ্রীষ্মকালীন সময় + পশ্চিম আফ্রিকা সময় @@ -3846,9 +4007,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - কোলোম্বিয়া সময় + কলম্বিয়া সময় কোলোম্বিয়া মানক সময় - কোলোম্বিয়া গ্রীষ্মকালীন সময় + কলম্বিয়া গ্রীষ্মকালীন সময় @@ -3998,6 +4159,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ গুয়ানা সময় + + + হাওয়াই-আলেউত মানক সময় + + হাওয়াই-আলেউত সময় @@ -4451,6 +4617,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ চুক সময় + + + তুর্কী সময় + তুর্কী মান সময় + তুর্কী গ্রীষ্মকাল সময় + + তুর্কমেনিস্তান সময় @@ -4594,10 +4767,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 00 কো 000 কো 000 কো - 00 শত কো - 00শত কো - 000কো - 000কো + 0 শত কো + 0শত কো + 0কো + 0কো 0 লা'.'কো'.' 0 লা'.'কো'.' 00 লা'.'কো'.' @@ -4625,8 +4798,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##,##0.00¤ - #,##,##0.00 ¤ - #,##,##0.00 + #,##,##0.00 ¤ + #,##,##0.00 #,##,##0.00¤;(#,##,##0.00¤) @@ -4664,14 +4837,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 000 কো ¤ 000 কো¤ 000 কো ¤ - 0000 কো¤ - 0000 কো ¤ - 0000 কো¤ - 0000 কো ¤ - 00000 কো¤ - 00000 কো ¤ - 00000 কো¤ - 00000 কো ¤ + 0 শত কো¤ + 0 শত কো ¤ + 0শত কো¤ + 0শত কো ¤ + 0কো¤ + 0কো ¤ + 0কো¤ + 0কো ¤ 0 লা'.'কো'.'¤ 0 লা'.'কো'.' ¤ 0 লা'.'কো'.'¤ @@ -5321,13 +5494,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ সিয়েরা লিয়নের লিয়ন - সিয়েরা লিয়নের লিয়ন - সিয়েরা লিয়নের লিয়ন সিয়েরা লিয়নের লিয়ন (1964—2022) - সিয়েরা লিয়নের লিয়ন (1964—2022) - সিয়েরা লিয়নের লিয়ন (1964—2022) সোমালি শিলিং @@ -5466,6 +5635,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ পূর্ব ক্যারাবিয়ান ডলার + + ক্যারিবিয়ান গিল্ডার + ক্যারিবিয়ান গিল্ডার + ক্যারিবিয়ান গিল্ডার + ইউরোপীয় মুদ্রা একক @@ -5528,6 +5702,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ জিম্বাবুয়ে ডলার (১৯৮০–২০০৮) + + জিম্বাবায়েন গোল্ড + জিম্বাবোয়েন গোল্ড + জিম্বাবোয়েন গোল্ড + জিম্বাবুয়ে ডলার (২০০৯) @@ -5721,7 +5900,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} মিলিমোল, প্রতি লিটারে {0} মিলিমোল, প্রতি লিটারে - + + পার্ট + {0} পার্ট + {0} পার্ট + + ভাগ, প্রতি মিলিয়নে {0} ভাগ, প্রতি মিলিয়নে {0} ভাগ, প্রতি মিলিয়নে @@ -5738,10 +5922,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} পারমিরিয়াড {0} পারমিরিয়াড - - মোল্স - {0} মোল - {0} মোল্স + + গ্লুকোজ + {0} গ্লুকোজ + {0} গ্লুকোজ লিটার, প্রতি কিলোমিটারে @@ -5813,6 +5997,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} শতাব্দী {0} শতাব্দী + + ঘণ্টা + {0} ঘণ্টা + {0} ঘণ্টা + {0} প্রতি ঘণ্টা + {0} মিলিসেকেন্ড {0} মিলিসেকেন্ড @@ -5870,7 +6060,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ কিলোওয়াট ঘন্টা - {0} কিলোওয়াট ঘন্টা + {0} কিলোওয়াট ঘণ্টা {0} কিলোওয়াট ঘন্টা @@ -5883,9 +6073,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ব্রিটিশ থার্মাল ইউনিট - নিউটন্স {0} নিউটন - {0} নিউটন্স + {0} নিউটন কিলোওয়াট-ঘণ্টা প্রতি 100 কিলোমিটার @@ -5992,8 +6181,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} পিকোমিটার - {0} parsec - {0} parsecs + পারসেক + {0} পারসেক + {0} পারসেক জ্যোতির্বিজ্ঞান একক @@ -6159,17 +6349,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} মেগাপাস্কাল - ঘন্টা প্রতি কিলোমিটার - {0} ঘন্টা প্রতি কিলোমিটার - {0} ঘন্টা প্রতি কিলোমিটার + ঘণ্টা প্রতি কিলোমিটার + {0} কিলোমিটার প্রতি ঘণ্টা + {0} কিলোমিটার প্রতি ঘণ্টা {0} মিটার প্রতি সেকেন্ড {0} মিটার প্রতি সেকেন্ড - {0} ঘন্টা প্রতি মাইল - {0} ঘন্টা প্রতি মাইল + ঘণ্টা প্রতি মাইল + {0} মাইল প্রতি ঘণ্টা + {0} মাইল প্রতি ঘণ্টা নট @@ -6276,6 +6467,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} মেট্রিক কাপ {0} মেট্রিক কাপ + + মেট্রিক ফ্লুইড আউন্স + {0} মেট্রিক ফ্লুইড আউন্স + {0} মেট্রিক ফ্লুইড আউন্স + একর-ফুট {0} একর-ফুট @@ -6355,17 +6551,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Imp. quart {0} Imp. quart - + + স্টেরেডিয়ান + {0} স্টেরেডিয়ান + {0} স্টেরেডিয়ান + + + ক্যাটাল + {0} ক্যাটাল + {0} ক্যাটাল + + + কুলম্ব + {0} কুলম্ব + {0} কুলম্ব + + + ফ্যারাড + {0} ফ্যারাড + {0} ফ্যারাড + + + হেনরি + {0} হেনরি + {0} হেনরি + + + সিমেন্স + {0} সিমেন্স + {0} সিমেন্স + + + ক্যালোরি [IT] + {0} ক্যালোরি [IT] + {0} ক্যালোরি [IT] + + + বেকেরেল + {0} বেকেরেল + {0} বেকেরেল + + + সিভার্ট + {0} সিভার্ট + {0} সিভার্ট + + + গ্রে + {0} গ্রে + {0} গ্রে + + + কিলোগ্রাম-ফোর্স + {0} কিলোগ্রাম-ফোর্স + {0} কিলোগ্রাম-ফোর্স + + + টেসলা + {0} টেসলা + {0} টেসলা + + + ওয়েবার + {0} ওয়েবার + {0} ওয়েবার + + + আলোক + {0} আলোক + {0} আলোক + + পার্ট প্রতি বিলিয়ন {0} পার্ট প্রতি বিলিয়ন {0} পার্ট প্রতি বিলিয়ন - - রাত্রি - {0} রাত্রি - {0} রাত্রি - {0}/রাত্রি - প্রধান দিকনির্দেশ {0} পূর্ব @@ -6521,6 +6781,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} আইটেম {0} আইটেম + + পার্ট + {0} পার্ট + {0} পার্ট + শতাংশ @@ -6535,6 +6800,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} মোল {0} মোল + + Glc + {0} Glc + {0} Glc + লিটার/কিমি @@ -6611,9 +6881,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/দিন - ঘন্টা - {0} ঘন্টা - {0} ঘন্টা + ঘণ্টা + {0} ঘণ্টা + {0} ঘণ্টা {0} প্রতি ঘন্টা @@ -6742,7 +7012,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} প্রতি ইঞ্চি - parsecs + পারসেক আলোকবর্ষ @@ -6757,6 +7027,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ সৌর রেডি + + ক্যান্ডেলা + সৌর ঔজ্জ্বল্য @@ -6811,7 +7084,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ মিটার প্রতি সেকেন্ড - ঘন্টা প্রতি মাইল + মাইল/ঘণ্টা {0} mph {0} mph @@ -6862,7 +7135,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} চিমটে {0} চিমটে - + + cal-IT + {0} cal-IT + {0} cal-IT + + + আলোক + {0} আলোক + {0} আলোক + + পার্ট/ বিলিয়ন @@ -6971,9 +7254,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} দুনাম {0} দুনাম + + পার্ট + {0} পার্ট + {0} পার্ট + + + Glc + mpg UK {0}m/gUK @@ -6992,10 +7283,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/সপ্তাহ - - {0}/দিন - + ঘণ্টা {0} ঘঃ {0} ঘঃ {0}/ঘ: @@ -7053,6 +7342,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/ইঞ্চি + + পারসেক + pts @@ -7109,7 +7401,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}m/s - মাইল/ঘ: + মাইল/ঘণ্টা {0}mph {0}mph @@ -7165,15 +7457,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}fl.dr. {0}fl.dr. - + + cal-IT + + + আলোক + {0} আলোক + {0} আলোক + + {0}ppb {0} ppb - রাত্রি {0}রাত্রি {0}রাত্রি - {0}/রাত্রি {0}উ @@ -7428,7 +7726,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ জেনদায়া - আইরিন + শ্রেয়া চৌধুরী diff --git a/make/data/cldr/common/main/bn_IN.xml b/make/data/cldr/common/main/bn_IN.xml index 9bb515a431a..5d32b4dd124 100644 --- a/make/data/cldr/common/main/bn_IN.xml +++ b/make/data/cldr/common/main/bn_IN.xml @@ -143,6 +143,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##,##0.00 + ¤ #,##,##0.00 ¤#,##,##0.00;(¤#,##,##0.00) diff --git a/make/data/cldr/common/main/bqi.xml b/make/data/cldr/common/main/bqi.xml new file mode 100644 index 00000000000..71989380cbd --- /dev/null +++ b/make/data/cldr/common/main/bqi.xml @@ -0,0 +1,342 @@ + + + + + + + + + + + {0}، {1} + + + عروی + عروی استاندارد مودرن + بنگلا + لوری بختیاری + آلمانی + آلمانی اوتریشی + آلمانی روء سوییس + اینگیلیسی + اینگیلیسی اوستورولیایی + اینگیلیسی کانادایی + اینگیلیسی بیریتانیایی + اینگیلیسی آمریکایی + اسپانیایی + اسپانیایی آمریکای لاتین + اسپانیایی اوروپایی + اسپانیایی مکزیکی + فرانسوی + فرانسوی کانادایی + فرانسوی سوییسی + هیندی لاتین + اندونزیایی + ایتالیایی + ژاپونی + کوره ای + هولندی + فلاندری + لهستووی + پورتقالی + پورتقالی بریزیلی + پورتقالی اوروپایی + روسی + تایلندی + تورکی + زوون نشناخته + چینی + چینی، ماندارین + چینی ساده وابیده + چینی ماندارین ساده وابیده + چینی سونتی + چینی سونتی ماندارین + + + + + + + + + + + + + + + + ایران + + + متریک + بریتانیایی + امریکایی + + + زوون: {0} + تور: {0} + ناحیه: {0} + + + + + right-to-left + + + + + [ً ٌ ٍ ّ ٔ ء آ أ ؤ ئ ا ب پ ة ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ه و ی] + [ـ\u200C\u200D\u200E\u200F َ ُ ِ ْ ٖ ٰ إ ك ى ي] + [آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ه و ی] + [\u200E , ٫ ٬ . % ٪ ‰ ؉ + − 0۰ 1۱ 2۲ 3۳ 4۴ 5۵ 6۶ 7۷ 8۸ 9۹] + [\- ‐‑ ، ٫ ٬ ؛ \: ! ؟ . … ‹ › « » ( ) \[ \] * / \\] + + + « + » + + + + + + + + + + ژانویه + فوریه + مارس + آوریل + مهٔ + ژوئن + ژوئیه + اوت + سپتامبر + اکتبر + نوامبر + دسامبر + + + + + + + یه شمبه + دوشمبه + سه شمبه + چار شمبه + پنجشمبه + جومه + شمبه + + + + + + + پیش ز ظهر + بعد ز ظهر + + + + + + y/M/d + d MMM y + + + {0} تا {1} + + + + + + + دوران + + + سال + سال گوذشته + امسال + سال نیایی + + + سال + سال گوذشته + امسال + سال نیایی + + + سال + سال گوذشته + امسال + سال نیایی + + + سه ماهه + + + سه ماهه + + + سه ماهه + + + ما + ما گوذشته + ای ما + ما نیایی + + + ما + ما گوذشته + ای ما + ما نیایی + + + ما + ما گوذشته + ای ما + ما نیایی + + + هفته + هفته گوذشته + ای هفته + هفته نیایی + هفته {0} + + + هفته + هفته گوذشته + ای هفته + هفته نیایی + هفته {0} + + + هفته + هفته گوذشته + ای هفته + هفته نیایی + هفته {0} + + + روز + دوش + امروز + صوه + + + روز + دوش + امروز + صوه + + + روز + دوش + امروز + صوه + + + روز هفته + + + پ.ظ/ب.ظ + + + ساعت + + + ساعت + + + ساعت + + + دیقه + + + دیقه + + + دیقه + + + ثانیه + + + ثانیه + + + ثانیه + + + جاگه زمووی + + + + ‎+HH:mm;‎−HH:mm + {0} گرینویچ + گرینویچ + مجال {0} + مجال توستووی {0} + مجال عادی {0} + + + مجال گرینویچ + + + + + + + ٪ + + + +‎ + ‎− + + + ‎+ + ‎− + + + + + ‎¤ #,##0.00 + ‎#,##0.00 + + + ‎¤ #,##0.00;‎(¤ #,##0.00) + ‎#,##0.00;‎(#,##0.00) + + + + + + + ‎¤ #,##0.00 + ‎¤ #,##0.00 + ‎#,##0.00 + + + ‎¤ #,##0.00;‎(¤ #,##0.00) + ‎¤ #,##0.00;‎(¤ #,##0.00) + ‎#,##0.00;‎(#,##0.00) + + + + + 0 هزار ¤ + 00 هزار ¤ + + + + + diff --git a/make/data/cldr/common/main/bqi_IR.xml b/make/data/cldr/common/main/bqi_IR.xml new file mode 100644 index 00000000000..0367e273a8c --- /dev/null +++ b/make/data/cldr/common/main/bqi_IR.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/make/data/cldr/common/main/br.xml b/make/data/cldr/common/main/br.xml index b42fcdbb756..d3d70a0621b 100644 --- a/make/data/cldr/common/main/br.xml +++ b/make/data/cldr/common/main/br.xml @@ -23,11 +23,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic adygeieg avesteg arabeg Tunizia - afrikaans + afrikaaneg afrihili aghem ainoueg - akan + akaneg akadeg alabamaeg aleouteg @@ -60,7 +60,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic azerbaidjaneg azeri bachkir - baloutchi + baloutcheg balineg bavarieg basaa @@ -70,13 +70,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic bena bulgareg baloutchi ar Cʼhornôg - bhojpuri + bhojpureg bislama bikol bini siksika + aniieg bambara - bengali + bengaleg tibetaneg brezhoneg braj @@ -94,7 +95,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic atsam chakmaeg tchetcheneg - cebuano + cebuanoeg chigaeg chamorru chibcha @@ -102,7 +103,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic marieg choktaw chipewyan - cherokee + cherokieg cheyenne kurdeg sorani kurdeg kreiz @@ -122,7 +123,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kachoubeg krieg ar gwernioù slavoneg iliz - tchouvatch + tchouvatcheg kembraeg daneg dakota @@ -171,7 +172,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic dareg fang fanti - fula + fulaeg finneg filipineg finneg traoñienn an Torne @@ -190,7 +191,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic frioulaneg frizeg ar Cʼhornôg iwerzhoneg - ga + gaeg gagaouzeg sinaeg Gan gayo @@ -207,17 +208,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic grebo hencʼhresianeg alamaneg Suis - gujarati + gujarateg gusiieg manaveg gwich’in - haousa + haousaeg haideg sinaeg Hakka hawaieg haideg ar Su hebraeg - hindi + hindieg + hindieg (latin) + Hinglish hiligaynon hmong hiri motu @@ -230,12 +233,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic halkomelemeg armenianeg herero - interlingua + interlinguaeg iban ibibio indonezeg interlingue - igbo + igboeg yieg Sichuan inupiaq inuktitut Kanada ar Cʼhornôg @@ -271,11 +274,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic koyra chiini kikuyu kwanyama - kazak + kazakeg kakoeg greunlandeg kalendjineg - khmer + khmereg kimbundu kanareg koreaneg @@ -287,17 +290,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic krio karelieg kurukh - kashmiri + kashmireg shambala bafiaeg koluneg kurdeg + kurdeg + kurmandji koumikeg kutenai komieg kerneveureg kwakwaleg - kirgiz + kirgizeg latin ladino langi @@ -346,14 +351,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic mikmakeg minangkabau makedoneg - malayalam + malayalameg mongoleg manchou manipuri montagneg mohawk more - marathi + maratheg marieg ar Cʼhornôg malayseg malteg @@ -389,7 +394,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic novial nkoeg ndebele ar Su - sotho an Norzh + sothoeg an Norzh nouereg navacʼho newari klasel @@ -405,11 +410,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ojibweg ar Cʼhornôg okanaganeg oromoeg - oriya + oriyaeg oseteg osage turkeg otoman - punjabi + punjabeg pangasinan pahlavi pampanga @@ -429,14 +434,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic malisiteg-pasamawkodieg henbruseg henbrovañseg - pachto + pachtoeg portugaleg portugaleg Brazil portugaleg Europa kechuaeg kʼicheʼ kichuaeg Chimborazo - rajasthani + rajasthaneg rapanui rarotonga romagnoleg @@ -486,7 +491,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic sámi Skolt shona soninke - somali + somalieg sogdieg albaneg serbeg @@ -494,12 +499,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic serer swati sahoeg - sotho ar Su + sothoeg ar Su sundaneg sukuma sumereg svedeg - swahili + swahilieg swahili Kongo komoreg sirieg klasel @@ -513,9 +518,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic tesoeg tereno tetum - tadjik - thai - tigrigna + tadjikeg + thaieg + tigrignaeg tigreaneg tiv turkmeneg @@ -524,8 +529,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic klingon tinglit tamacheg - tswana - tonga + tswanaeg + tongaeg nyasa tonga toki pona tok pisin @@ -534,7 +539,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic taroko tsonga tsimshian - tatar + tatareg tutchoneg an Norzh tumbuka tuvalu @@ -549,7 +554,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ukraineg umbundu yezh dianav - ourdou + ourdoueg ouzbekeg vai venda @@ -566,10 +571,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic walamo waray washo - wolof + wolofeg sinaeg Wu kalmouk - xhosa + xhosaeg megreleg sogaeg yao @@ -577,7 +582,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic yangben yemba yiddish - yorouba + yoroubaeg nengatoueg kantoneg sinaeg, kantoneg @@ -660,6 +665,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -691,7 +697,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Bed + bed Afrika Norzhamerika Suamerika @@ -724,9 +730,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Amerika Latin Enez Ascension Andorra - Emirelezhioù Arab Unanet + Emirelezhioù-Arab-Unanet Afghanistan - Antigua ha Barbuda + Antigua-ha-Barbuda Anguilla Albania Armenia @@ -739,7 +745,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Aruba Inizi Åland Azerbaidjan - Bosnia ha Herzegovina + Bosnia-ha-Herzegovina Barbados Bangladesh Belgia @@ -748,8 +754,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bahrein Burundi Benin - Saint Barthélemy - Bermuda + Sant-Bertele + Bermudez Brunei Bolivia Karib Nederlandat @@ -768,7 +774,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kongo - Brazzaville Kongo (Republik) Suis - Aod an Olifant + Aod-an-Olifant Aod Olifant Inizi Cook Chile @@ -776,6 +782,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sina Kolombia Enez Clipperton + Sark Costa Rica Kuba Kab-Glas @@ -800,7 +807,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Spagn Etiopia Unaniezh Europa - takad an euro + Takad an euro Finland Fidji Inizi Falkland @@ -821,7 +828,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gambia Ginea Gwadeloup - Ginea ar Cʼheheder + Ginea-ar-Cʼheheder Gres Inizi Georgia ar Su hag Inizi Sandwich ar Su Guatemala @@ -830,7 +837,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyana Hong Kong RMD Sina Hong Kong - Inizi Heard ha McDonald + Inizi Heard-ha-McDonald Honduras Kroatia Haiti @@ -839,9 +846,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Indonezia Iwerzhon Israel - Enez Vanav + Enez-Vanav India - Tiriad breizhveurat Meurvor Indez + Tiriad breizhveurat Meurvor Indez + Enezeg Chagos Iraq Iran Island @@ -855,9 +863,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kambodja Kiribati Komorez - Saint Kitts ha Nevis - Korea an Norzh - Korea ar Su + Saint Kitts-ha-Nevis + Norzhkorea + Sukorea Koweit Inizi Cayman Kazakstan @@ -876,15 +884,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Monaco Moldova Montenegro - Saint Martin + Sant-Martin Madagaskar Inizi Marshall Makedonia an Norzh Mali Myanmar (Birmania) Mongolia - Macau RMD Sina - Macau + Makao RMD Sina + Makao Inizi Mariana an Norzh Martinik Maouritania @@ -897,7 +905,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Malaysia Mozambik Namibia - Kaledonia Nevez + Kaledonia-Nevez Niger Enez Norfolk Nigeria @@ -937,7 +945,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sechelez Soudan Sveden - Singapour + Singapoura Saint-Helena Slovenia Svalbard @@ -947,15 +955,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Senegal Somalia Surinam - Susoudan - São Tomé ha Príncipe + Soudan ar Su + São-Tomé-ha-Príncipe Salvador Sint Maarten Siria Eswatini Swaziland Tristan da Cunha - Inizi Turks ha Caicos + Inizi Turks-ha-Caicos Tchad Douaroù aostral Frañs Togo @@ -968,7 +976,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tunizia Tonga Turkia - Trinidad ha Tobago + Trinidad-ha-Tobago Tuvalu Taiwan Tanzania @@ -981,16 +989,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic Uruguay Ouzbekistan Vatikan - Sant Visant hag ar Grenadinez + Sant-Visant hag ar Grenadinez Venezuela Inizi Gwercʼh Breizh-Veur Inizi Gwercʼh ar Stadoù-Unanet Viêt Nam Vanuatu - Wallis ha Futuna + Wallis-ha-Futuna Samoa - pouez-mouezh gaou - BiDi gaou + Falstiredoù + Falsdaoudu Kosovo Yemen Mayotte @@ -1128,13 +1136,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic deiziadur boudaat + boudaat deiziadur sinaat + sinaat deiziadur kopt + kopt deiziadur dangi + dangi deiziadur etiopiat + etiopiat deiziadur etiopiat Amete Alem + etiopiat Amete Alem deiziadur gregorian + gregorian deiziadur hebraek + hebraek deiziadur indian deiziadur islamek deiziadur islamek keodedel @@ -1143,34 +1159,51 @@ CLDR data files are interpreted according to the LDML specification (http://unic deiziadur islamek (Umm al-Qura) deiziadur ISO-8601 deiziadur japanat + japanat deiziadur persek + persek deiziadur Republik Sina + Republik Sina furmad unanenn jediñ furmad moneiz standart - urzh rummañ sinaek hengounel - Big5 + standart urzh rummañ ar geriadur urzh rummañ Unicode dre ziouer + Unicode dre ziouer urzh rummañ ar fromlunioù reolennoù urzhiañ europat - urzh rummañ sinaek eeunaet - GB2312 urzh rummañ al levr-pellgomz urzh rummañ pinyin enklask hollek urzh rummañ standart + standart urzh rummañ an tresoù urzh rummañ hengounel urzh rummañ UniHan urzh rummañ Zhuyin + dre ziouer + emoji + skrid reizhiad 12 eurvezh (0–11) + 12 (0–11) reizhiad 12 eurvezh (1–12) + 12 (1–12) reizhiad 24 eurvezh (0–23) + 24 (0–23) reizhiad 24 eurvezh (1–24) + 24 (1–24) stil torr linenn lezober + lezober stil torr linenn boas + boas stil torr linenn strizh + strizh reizhiad vetrek + metrek reizhiad vuzuliañ RU + muzuliañ RU reizhiad vuzuliañ SU + muzuliañ SU sifroù ahomek sifroù arabek indian sifroù arabek indian astennet @@ -1550,6 +1583,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'da' {0} + + {1} 'da' {0} + @@ -1558,6 +1594,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'da' {0} + + {1} 'da' {0} + @@ -1574,6 +1613,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a y G + MM/y G + dd/MM/y G + E, dd/MM/y G MMM y G d MMM y G E d MMM y G @@ -1884,6 +1926,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'da' {0} + + {1} 'da' {0} + @@ -1892,6 +1937,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'da' {0} + + {1} 'da' {0} + @@ -1902,12 +1950,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} + + {1}, {0} + + + {1}, {0} + E d E h:mm a E h:mm:ss a y G + MM/y G + dd/MM/y G + E, dd/MM/y G MMM y G d MMM y G E d MMM y G @@ -1916,6 +1973,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm:ss a h:mm:ss a v h:mm a v + HH'e' v MM dd/MM E dd/MM @@ -1948,21 +2006,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic y – y G - MM/y GGGGG – MM/y GGGGG - MM/y – MM/y GGGGG - MM/y – MM/y GGGGG + MM/y G – MM/y G + MM/y – MM/y G + MM/y – MM/y G - dd/MM/y – dd/MM/y GGGGG - dd/MM/y GGGGG – dd/MM/y GGGGG - dd/MM/y – dd/MM/y GGGGG - dd/MM/y – dd/MM/y GGGGG + dd/MM/y – dd/MM/y G + dd/MM/y G – dd/MM/y G + dd/MM/y – dd/MM/y G + dd/MM/y – dd/MM/y G - E dd/MM/y – E dd/MM/y GGGGG - E dd/MM/y GGGGG – E dd/MM/y GGGGG - E dd/MM/y – E dd/MM/y GGGGG - E dd/MM/y – E dd/MM/y GGGGG + E dd/MM/y – E dd/MM/y G + E dd/MM/y G – E dd/MM/y G + E dd/MM/y – E dd/MM/y G + E dd/MM/y – E dd/MM/y G MMM y G – MMM y G @@ -2868,6 +2926,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + UTC{0} + UTC + UTC+? eur {0} eur hañv {0} eur cʼhoañv {0} @@ -2880,7 +2941,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - kêr dianav + Lecʼhiadur dianav Kaboul @@ -2901,17 +2962,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bahrein - Saint Barthélemy + Sant-Bertele Bermudez - - Belém - - - São Paulo - Mensk @@ -2924,17 +2979,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Enez Pask - - Ürümqi - - - Bogotá - La Habana - Kab Glas + Kab-Glas Levkosía @@ -2985,7 +3034,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Jibraltar - Qânâq + Qaanaaq Nuuk (Godthåb) @@ -3011,9 +3060,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Manav - - Calcutta - Reykjavík @@ -3035,9 +3081,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saint Kitts - - Pʼyongyang - Koweit @@ -3063,7 +3106,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dar el Beida (Casablanca) - Macau + Makao Martinik @@ -3077,6 +3120,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kêr Vecʼhiko + + Noumea + Masqat @@ -3084,7 +3130,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Panamá - Markiz + Inizi Markiz Varsovia @@ -3092,6 +3138,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mikelon + + Inizi Pitcairn + Azorez @@ -3129,14 +3178,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Singapour - Saint Helena + Saint-Helena Muqdisho - - São Tomé - Salvador @@ -3149,14 +3195,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kergelenn - - Lomé - Tuniz - Kiev + Kyyiv + + + Inizi Midway + + + Enez Wake Toshkent @@ -3165,11 +3214,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Vatikan - Sant Visant + Sant-Visant Kêr Hô-Chi-Minh + + Wallis-ha-Futuna + eur Afghanistan @@ -3192,9 +3244,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Afrika ar Cʼhornôg - eur cʼhoañv Afrika ar Cʼhornôg - eur hañv Afrika ar Cʼhornôg + eur Afrika ar Cʼhornôg @@ -3255,9 +3305,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Apia - eur cʼhoañv Apia - eur hañv Apia + eur Samoa + eur cʼhoañv Samoa + eur hañv Samoa @@ -3363,7 +3413,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Brunei Darussalam + eur Brunei @@ -3531,7 +3581,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Amzer keitat Greenwich (AKG) + amzer keitat Greenwich (AKG) @@ -3563,6 +3613,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic eur Guyana + + + eur cʼhoañv Hawaii hag an Aleouted + + eur Hawaii hag an Aleouted @@ -3579,9 +3634,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Hovd - eur cʼhoañv Hovd - eur hañv Hovd + eur Khovd + eur cʼhoañv Khovd + eur hañv Khovd @@ -3642,6 +3697,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic eur hañv Japan + + + eur Kazakstan + + eur Kazakstan ar Reter @@ -3777,9 +3837,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Kaledonia Nevez - eur cʼhoañv Kaledonia Nevez - eur hañv Kaledonia Nevez + eur Kaledonia-Nevez + eur cʼhoañv Kaledonia-Nevez + eur hañv Kaledonia-Nevez @@ -3848,7 +3908,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Papoua-Ginea-Nevez + eur Papoua Ginea-Nevez @@ -3896,7 +3956,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Pʼyongyang + eur Norzhkorea @@ -3918,9 +3978,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Samoa - eur cʼhoañv Samoa - eur hañv Samoa + eur Samoa Amerikan + eur cʼhoañv Samoa Amerikan + eur hañv Samoa Amerikan @@ -3960,9 +4020,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Taipei - eur cʼhoañv Taipei - eur hañv Taipei + eur Taiwan + eur cʼhoañv Taiwan + eur hañv Taiwan @@ -4046,12 +4106,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - eur Wake Island + eur Enez Wake - eur Wallis ha Futuna + eur Wallis-ha-Futuna @@ -4068,6 +4128,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic eur hañv Yekaterinbourg + + + eur Yukon + + @@ -4165,134 +4230,90 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00;(#,##0.00) + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) - 0 k¤ - 0 k ¤ - 0 k¤ - 0 k ¤ - 0 k¤ - 0 k ¤ - 0 k¤ - 0 k ¤ - 0 k¤ - 0 k ¤ - 00 k¤ - 00 k ¤ - 00 k¤ - 00 k ¤ - 00 k¤ - 00 k ¤ - 00 k¤ - 00 k ¤ - 00 k¤ - 00 k ¤ - 000 k¤ - 000 k ¤ - 000 k¤ - 000 k ¤ - 000 k¤ - 000 k ¤ - 000 k¤ - 000 k ¤ - 000 k¤ - 000 k ¤ - 0 M¤ - 0 M ¤ - 0 M¤ - 0 M ¤ - 0 M¤ - 0 M ¤ - 0 M¤ - 0 M ¤ - 0 M¤ - 0 M ¤ - 00 M¤ - 00 M ¤ - 00 M¤ - 00 M ¤ - 00 M¤ - 00 M ¤ - 00 M¤ - 00 M ¤ - 00 M¤ - 00 M ¤ - 000 M¤ - 000 M ¤ - 000 M¤ - 000 M ¤ - 000 M¤ - 000 M ¤ - 000 M¤ - 000 M ¤ - 000 M¤ - 000 M ¤ - 0 G¤ - 0 G ¤ - 0 G¤ - 0 G ¤ - 0 G¤ - 0 G ¤ - 0 G¤ - 0 G ¤ - 0 G¤ - 0 G ¤ - 00 G¤ - 00 G ¤ - 00 G¤ - 00 G ¤ - 00 G¤ - 00 G ¤ - 00 G¤ - 00 G ¤ - 00 G¤ - 00 G ¤ - 000 G¤ - 000 G ¤ - 000 G¤ - 000 G ¤ - 000 G¤ - 000 G ¤ - 000 G¤ - 000 G ¤ - 000 G¤ - 000 G ¤ - 0 T¤ - 0 T ¤ - 0 T¤ - 0 T ¤ - 0 T¤ - 0 T ¤ - 0 T¤ - 0 T ¤ - 0 T¤ - 0 T ¤ - 00 T¤ - 00 T ¤ - 00 T¤ - 00 T ¤ - 00 T¤ - 00 T ¤ - 00 T¤ - 00 T ¤ - 00 T¤ - 00 T ¤ - 000 T¤ - 000 T ¤ - 000 T¤ - 000 T ¤ - 000 T¤ - 000 T ¤ - 000 T¤ - 000 T ¤ - 000 T¤ - 000 T ¤ + 0k ¤ + 0k ¤ + 0k ¤ + 0k ¤ + 0k ¤ + 00k ¤ + 00k ¤ + 00k ¤ + 00k ¤ + 00k ¤ + 000k ¤ + 000k ¤ + 000k ¤ + 000k ¤ + 000k ¤ + 0M ¤ + 0M ¤ + 0M ¤ + 0M ¤ + 0M ¤ + 00M ¤ + 00M ¤ + 00M ¤ + 00M ¤ + 00M ¤ + 000M ¤ + 000M ¤ + 000M ¤ + 000M ¤ + 000M ¤ + 0G ¤ + 0G ¤ + 0G ¤ + 0G ¤ + 0G ¤ + 00G ¤ + 00G ¤ + 00G ¤ + 00G ¤ + 00G ¤ + 000G ¤ + 000G ¤ + 000G ¤ + 000G ¤ + 000G ¤ + 0T ¤ + 0T ¤ + 0T ¤ + 0T ¤ + 0T ¤ + 00T ¤ + 00T ¤ + 00T ¤ + 00T ¤ + 00T ¤ + 000T ¤ + 000T ¤ + 000T ¤ + 000T ¤ + 000T ¤ {0} {1} @@ -8651,7 +8672,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mmol/l {0}mmol/l - + {0}ppm {0}ppm {0}ppm @@ -9916,16 +9937,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic und br ko vi yue zh - Yann + Yann - Katell - ar Gall + Katell + ar Gall - Yann - Erwan - ar Go + Yann + Erwan + ar Go Prof. Dr. diff --git a/make/data/cldr/common/main/brx.xml b/make/data/cldr/common/main/brx.xml index 2181aaefd8d..32484232b61 100644 --- a/make/data/cldr/common/main/brx.xml +++ b/make/data/cldr/common/main/brx.xml @@ -1059,9 +1059,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic मिंगुव’ फान्जामुथि मुद्रानि नुथायखौ हिसाब लाखिनाय थाखोआरि मुद्रानि नुथाय - पारम्पारिक चीनी वर्गीकरण बीग फ़ाईव गरहाजिर इउनिकड रान्नायनि फारि - सरलीकृत चीनी वर्गीकरण जीबी2312 दूरभाष निर्देशिका वर्गीकरण पिनयीन वर्गीकरण सादारन-जाहोननि नायगिरनाय @@ -1551,13 +1549,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic GGGGG dd-MM-y G y MMM E d a नि h - a नि h:mm:ss v a h:mm v M/d E, M/d d-MMM E, MMM d - MMMM d E, MMMM d M/y dd-MM-y @@ -1648,7 +1644,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic d/M – d/M - d/M –/dM + d/M – d/M d/M, E –d/M, E @@ -2575,9 +2571,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic नॉम पेन - एन्डारबारी - - केन्ट’न @@ -3251,9 +3244,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - सोनाब आफ्रिकानि सम - सोनाब आफ्रिकानि थाखोआरि सम - सोनाब आफ्रिकानि दैज्लां सम + सोनाब आफ्रिकानि सम @@ -3636,6 +3627,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic गुयाना सम + + + हावाई-एल्युतियान थाखोआरि सम + + हावाई-एल्युतियान सम @@ -4084,6 +4080,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic चूक सम + + + तुर्की टाईम + तुर्की स्टैंडर्ड टाईम + तुर्की समर टाईम + + तुर्कमेनीस्तान सम @@ -4249,39 +4252,55 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + ¤ #,##,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + ¤ #,##,##0.00 + ¤ #,##,##0.00 #,##,##0.00 ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) - ¤000K - ¤000K - ¤0M - ¤0M - ¤00M - ¤00M - ¤000M - ¤000M - ¤0B - ¤0B - ¤00B - ¤00B - ¤000B - ¤000B - ¤0T - ¤0T - ¤00T - ¤00T - ¤000T - ¤000T + ¤ 0के + ¤ 0के + ¤ 00के + ¤ 00के + ¤ 000के + ¤ 000के + ¤ 0एम + ¤ 0एम + ¤ 00एम + ¤ 00एम + ¤ 000एम + ¤ 000एम + ¤ 0बि + ¤ 0बि + ¤ 00बि + ¤ 00बि + ¤ 000बि + ¤ 000बि + ¤ 0ति + ¤ 0ति + ¤ 00ति + ¤ 00ति + ¤ 000ति + ¤ 000ति {0} ¤¤ diff --git a/make/data/cldr/common/main/bs.xml b/make/data/cldr/common/main/bs.xml index 2ef4a63d10e..0a0b8821719 100644 --- a/make/data/cldr/common/main/bs.xml +++ b/make/data/cldr/common/main/bs.xml @@ -279,6 +279,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kelnski kurdski + kurdski + kurmanji kumik kutenai komi @@ -872,6 +874,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kina Kolumbija Ostrvo Clipperton + Sark Kostarika Kuba Zelenortska Ostrva @@ -1224,35 +1227,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Numeričko sortiranje Jačina sortiranja Valuta + Emoji prezentacija Format vremena (12 ili 24) Stil prijeloma reda + Prelom reda u riječi Mjerni sistem Brojevi + Prelom rečenice nakon skraćenice Vremenska zona Varijanta zemlje/jezika Privatna upotreba budistički kalendar + budistički kineski kalendar + kineski koptski kalendar + koptski dangi kalendar + dangi etiopski kalendar + etiopski etiopski kalendar "Amete Alem" + etiopski Amete Alem gregorijanski kalendar + gregorijanski hebrejski kalendar + hebrejski indijski nacionalni kalendar islamski kalendar + islamski islamski građanski kalendar, tabelarni + islamski (tabelarni, građanski) islamski kalendar za Saudijsku Arabiju islamski kalendar, tabelarni, astronomska epoha islamski kalendar, Umm al-Qura + islamski (Umm al-Qura) kalendar ISO-8601 japanski kalendar + japanski perzijski kalendar + perzijski kalendar Republike Kine + Republika Kina računovodstveni format valute + Računovodstvo standardni format valute + Standardno Poredaj simbole Poredaj zanemarujući simbole Poredaj naglaske normalno @@ -1262,19 +1284,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Poredaj prvo velika slova Poredaj zanemarujući veličinu Poredaj u skladu s veličinom slova - Tradicionalno kinesko sortiranje Prethodno sortiranje radi usklađenosti Rječničko sortiranje standardno Unicode sortiranje + standardni Unicode Sortiranje po emoji sličicama Evropska pravila sortiranja - Pojednostavljeno kinesko sortiranje - GB2312 Sortiranje kao telefonski imenik Fonetsko sortiranje Pinjin sortiranje općenito pretraživanje + pretraga Pretraživanje po početnom suglasniku hangula standardno sortiranje + standardno Sortiranje po broju crta Tradicionalno sortiranje sortiranje prema korijenu i potezu @@ -1291,18 +1314,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Široki Uski Numerički + Zadano + Emoji + Tekst 12-satni format (0–11) + 12 (0–11) 12-satni format (1–12) + 12 (1–12) 24-satni format (0–23) + 24 (0–23) 24-satni format (1–24) + 24 (1–24) Slobodni stil prijeloma reda + Slobodni Normalni stil prijeloma reda + Normalni Strogi stil prijeloma reda + Strogi + podijeli sve + zadrži sve + normalno + zadrži u fazama US BGN transliteracija UN GEGN transliteracija metrički sistem + Metrički britanski mjerni sistem + UK američki mjerni sistem + američki ahom cifre arapsko-indijski brojevi prošireni arapsko-indijski brojevi @@ -1388,6 +1428,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Vai cifre warang citi cifre vančo cifre + Uključeno + Isključeno metrički @@ -1578,16 +1620,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - h B – h B - - - h:mm B – h:mm B - - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1598,54 +1630,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - - - MM-dd – MM-dd - MM-dd – MM-dd - - - MM-dd, E – MM-dd, E - MM-dd, E – MM-dd, E - - - MMM d – MMM d - - - MMM d, E – MMM d, E - MMM d, E – MMM d, E - - - y-MM – y-MM - y-MM – y-MM - - - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - - - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - - - U MMM – U MMM - - - U MMM d – MMM d - U MMM d – U MMM d - - - U MMM d, E – MMM d, E - U MMM d, E – MMM d, E - U MMM d, E – U MMM d, E - - - U MMMM – U MMMM - @@ -1683,6 +1667,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + @@ -1691,6 +1678,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + @@ -1711,7 +1701,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM y. G d. MMM y. G E, d. MMM y. G - h a H hh:mm a hh:mm:ss a @@ -1733,54 +1722,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B d. – d. - - G y – G y - - - GGGGG y-MM – GGGGG y-MM - GGGGG y-MM – y-MM - GGGGG y-MM – y-MM - - - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – GGGGG y-MM-dd - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd - - - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – GGGGG y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - - - G y MMM – G y MMM - G y MMM – y MMM - - - G y MMM d – G y MMM d - G y MMM d – MMM d - G y MMM d – y MMM d - - - G y MMM d, E – MMM d, E - G y MMM d, E – G y MMM d, E - G y MMM d, E – MMM d, E - G y MMM d, E – y MMM d, E - - h a – h a h – h'h' a @@ -1797,7 +1748,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v - h a – h a v h – h 'h' a v @@ -1846,7 +1796,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d. – d. MMM y. G d. MMM – d. MMM y. G - G y MMM d – y MMM d E, dd. – E, dd. MMM y. G @@ -1877,6 +1826,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ nov dec + + jan + feb + mar + apr + may + jun + jul + aug + sep + okt + nov + dec + januar februar @@ -1987,20 +1950,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ navečer po noći - - a. m. - p. m. - prijepodne popodne - - a. m. - p. m. - prijepodne popodne @@ -2078,6 +2033,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + @@ -2086,6 +2044,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + @@ -2113,7 +2074,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM y. G d. MMM y. G E, d. MMM y. G - h a hh:mm a hh:mm:ss a h:mm:ss a (v) @@ -2147,11 +2107,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -2192,12 +2150,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d. MMM – E, d. MMM y. G - G y MMM d, E – G y MMM d, E - G y MMM d, E – MMM d, E - G y MMM d, E – y MMM d, E - - - h a – h a HH – HH'h' @@ -2221,7 +2173,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h 'h' a v @@ -2499,6 +2450,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mj. + prošli mj. + ovaj mj. + sljedeći mj. za {0} mj. za {0} mj. @@ -2528,26 +2482,45 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sedmica u kojoj je {0} - sed. + sedm. + prošle sedm. + ove sedm. + sljedeće sedm. - za {0} sed. - za {0} sed. - za {0} sed. + za {0} sedm. + za {0} sedm. + za {0} sedm. - prije {0} sed. - prije {0} sed. - prije {0} sed. + prije {0} sedm. + prije {0} sedm. + prije {0} sedm. + + + + sedm. + prošle sedm. + ove sedm. + sljedeće sedm. + + za {0} sedm. + za {0} sedm. + za {0} sedm. + + + prije {0} sedm. + prije {0} sedm. + prije {0} sedm. sedmica u mjesecu - sed. u mj. + sedm. u mj. - s. u mj. + sedm. u mj. dan @@ -2567,16 +2540,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ prije {0} dana - + - za {0} d. - za {0} d. - za {0} d. + za {0} dan + za {0} dana + za {0} dana - prije {0} d. - prije {0} d. - prije {0} d. + prije {0} dan + prije {0} dana + prije {0} dana @@ -2600,9 +2573,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dan u mj. - - d. u mj. - prošla nedjelja ova nedjelja @@ -2619,9 +2589,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - prošla ned. - ova ned. - sljedeća ned. + prošla ned + ova ned + sljedeća ned + + za {0} ned + za {0} ned + za {0} ned + + + prije {0} ned + prije {0} ned + prije {0} ned + + + + prošla ned + ova ned + sljedeća ned + + za {0} ned + za {0} ned + za {0} ned + + + prije {0} ned + prije {0} ned + prije {0} ned + prošli ponedjeljak @@ -2639,7 +2634,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - prošli pon. + prošli pon ovaj pon. sljedeći pon @@ -2653,21 +2648,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ prije {0} pon - - prošli pon. - ovaj pon. - sljedeći pon. - - za {0} pon - za {0} pon - za {0} pon - - - prije {0} pon - prije {0} pon - prije {0} pon - - prošli utorak ovaj utorak @@ -2684,14 +2664,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - prošli uto. - ovaj uto. - sljedeći uto. + prošli uto + ovaj uto + sljedeći uto + + za {0} uto + za {0} uto + za {0} uto + + + prije {0} uto + prije {0} uto + prije {0} uto + prošli uto ovaj uto sljedeći uto + + za {0} uto + za {0} uto + za {0} uto + + + prije {0} uto + prije {0} uto + prije {0} uto + prošla srijeda @@ -2709,14 +2709,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - prošla sri. - ova sri. - sljedeća sri. + prošla sri + ova sri + sljedeća sri + + za {0} sri + za {0} sri + za {0} sri + + + prije {0} sri + prije {0} sri + prije {0} sri + prošla sri ova sri sljedeća sri + + za {0} sri + za {0} sri + za {0} sri + + + prije {0} sri + prije {0} sri + prije {0} sri + prošli četvrtak @@ -2734,14 +2754,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - prošli čet. - ovaj čet. - sljedeći čet. + prošli čet + ovaj čet + sljedeći čet + + za {0} čet + za {0} čet + za {0} čet + + + prije {0} čet + prije {0} čet + prije {0} čet + prošli čet ovaj čet sljedeći čet + + za {0} čet + za {0} čet + za {0} čet + + + prije {0} čet + prije {0} čet + prije {0} čet + prošli petak @@ -2759,9 +2799,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - prošli pet. - ovaj pet. - sljedeći pet. + prošli pet + ovaj pet + sljedeći pet + + za {0} pet + za {0} pet + za {0} pet + + + prije {0} pet + prije {0} pet + prije {0} pet + + + + prošli pet + ovaj pet + sljedeći pet + + za {0} pet + za {0} pet + za {0} pet + + + prije {0} pet + prije {0} pet + prije {0} pet + prošla subota @@ -2779,9 +2844,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - prošla sub. - ova sub. - sljedeća sub. + prošla sub + ova sub + sljedeća sub + + za {0} sub + za {0} sub + za {0} sub + + + prije {0} sub + prije {0} sub + prije {0} sub + + + + prošla sub + ova sub + sljedeća sub + + za {0} sub + za {0} sub + za {0} sub + + + prije {0} sub + prije {0} sub + prije {0} sub + prijepodne/poslijepodne @@ -2821,13 +2911,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ min za {0} min - za {0} min. - za {0} min. + za {0} min + za {0} min - prije {0} min. - prije {0} min. - prije {0} min. + prije {0} min + prije {0} min + prije {0} min + + + + + za {0} min + za {0} min + za {0} min + + + prije {0} min + prije {0} min + prije {0} min @@ -2857,9 +2959,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ prije {0} sek. - - s - vremenska zona @@ -2892,9 +2991,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Angvila - - Tirana - Jerevan @@ -3050,9 +3146,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pnom Pen - - Enderbury - Pjongjang @@ -3289,9 +3382,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Zapadnoafričko vrijeme - Zapadnoafričko standardno vrijeme - Zapadnoafričko ljetno vrijeme + Zapadnoafričko vrijeme @@ -3692,6 +3783,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Gvajansko vrijeme + + + Havajsko-aleućansko standardno vrijeme + + Havajsko-aleućansko vrijeme @@ -4142,6 +4238,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Čučko vrijeme + + + Turska vreme + Turska standardno vreme + Turska letnje računanje vremena + + turkmenistansko vrijeme @@ -4614,10 +4717,224 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -4661,6 +4978,236 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + Andorska pezeta @@ -6008,13 +6555,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ slovačkih kuna - Sijeraleonski leone + sijeraleonski leone sijeraleonski leone sijeraleonska leona sijeraleonskih leona - Sijeraleonski leone (1964—2022) + sijeraleonski leone (1964—2022) sijeraleonski leone (1964—2022) sijeraleonska leona (1964—2022) sijeraleonskih leona (1964—2022) @@ -6317,6 +6864,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ istočnokaripskih dolara XCD + + karipski gulden + karipski gulden + karipska guldena + karipskih guldena + Posebna prava posebno crtaće pravo @@ -6462,6 +7015,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ zimbabvejska dolara (1980–2008) zimbabvejski dolari (1980–2008) + + zimbabveansko zlato + zimbabveansko zlato + zimbabveanska zlata + zimbabveanskih zlata + Zimbabvejski dolar (2009) zimbabvejski dolaz (2009) @@ -6488,17 +7047,41 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + femto{0} + + + ato{0} + + + zepto{0} + + + jokto{0} + ronto{0} - kuekto{0} + kvekto{0} + + + deka{0} + + + eksa{0} + + + zeta{0} + + + jota{0} - ronna{0} + rona{0} - quetta{0} + kveta{0} kibi{0} @@ -6516,13 +7099,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ pebi{0} - exbi{0} + eksbi{0} zebi{0} - yobe{0} + jobi{0} kvadratni {0} @@ -6640,7 +7223,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimola po litru {0} milimola po litru - + + dijelovi + {0} dio + {0} dijela + {0} dijelova + + dijelovi na milion {0} dio na milion {0} dijela na milion @@ -6670,6 +7259,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mola {0} mola + + glukoze + {0} glukoze + {0} glukoze + {0} glukoze + litri po kilometru {0} litar po kilometru @@ -6983,6 +7578,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} po kilometru + metri {0} metar {0} metra {0} metara @@ -7237,6 +7833,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetra živinog stuba {0} milimetara živinog stuba + + žive + {0} žive + {0} žive + {0} žive + funte po kvadratnom inču {0} funta po kvadratnom inču @@ -7317,7 +7919,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Beafort Beafort {0} - B {0} + Beafort {0} Beafort {0} @@ -7442,6 +8044,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metričke šolje {0} metričkih šolja + + tekuće unce + {0} tekuća unca + {0} tekuće unce + {0} tekućih unci + jutar-stope {0} jutar-stopa @@ -7497,7 +8105,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. tekućih unci - kašike {0} kašika {0} kašike {0} kašika @@ -7538,11 +8145,97 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imperijalna kvarca {0} imperijalnih kvarca + + steradijani + {0} steradijan + {0} steradijana + {0} steradijana + + + katali + {0} katal + {0} katala + {0} katala + + + kuloni + {0} kulon + {0} kulona + {0} kulona + + + faradi + {0} farad + {0} farada + {0} farada + + + henriji + {0} henri + {0} henrija + {0} henrija + + + simensi + {0} simens + {0} simensa + {0} simensa + + + kalorije [IT] + {0} kalorija [IT] + {0} kalorije [IT] + {0} kalorija [IT] + + + bekereli + {0} bekerel + {0} bekerela + {0} bekerela + + + siverti + {0} sivert + {0} siverta + {0} siverta + + + greji + {0} grej + {0} greja + {0} grejeva + + + kilogram-sile + {0} kilogram-sila + {0} kilogram-sile + {0} kilogram-sila + + + tesle + {0} tesla + {0} tesle + {0} tesle + + + veberi + {0} veber + {0} vebera + {0} vebera + + + svjetlo + {0} svjetlo + {0} svjetla + {0} svjetala + + + dijelovi na milijardu + {0} dio na milijardu + {0} dijela na milijardu + {0} dijelova na milijardu + - noći - {0} noć - {0} noći - {0} noći {0} po noći @@ -7580,9 +8273,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ katastarska jutra - {0} ac - {0} ac - {0} ac dunumi @@ -7602,9 +8292,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} stavke {0} stavki - + + dio + {0} dio + {0} dijela + {0} dijelova + + dijelovi/milion + + Glc + {0} Glc + {0} Glc + {0} Glc + L/100 km {0} L/100 km @@ -7722,9 +8424,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ džuli - - kW-sat - BTU {0} BTU @@ -7838,6 +8537,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + {0} Hg + {0} Hg + {0} Hg + čv {0} čv @@ -7979,6 +8683,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. kvarta {0} imp. kvarata + + {0} sr + {0} sr + {0} sr + + + {0} kat + {0} kat + {0} kat + + + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + + + {0} S + {0} S + {0} S + + + cal [IT] + {0} cal IT + {0} cal IT + {0} cal IT + + + {0} Bq + {0} Bq + {0} Bq + + + {0} kgf + {0} kgf + {0} kgf + + + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + + + svjetlo + {0} svjetlo + {0} svjetla + {0} svjetala + noći {0} noć @@ -7997,13 +8758,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ aker - {0} ac - {0} ac - {0} ac - + + dio + {0} dio + {0} dijela + {0} dijelova + + ppm + + Glc + {0} Glc + {0} Glc + {0} Glc + {0} B {0} B @@ -8068,11 +8838,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kWh/100 km {0}kWh/100 km - - {0}ppcm - {0} ppcm - {0}ppcm - {0}ppi {0} ppi @@ -8091,9 +8856,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tačka - - m - mi @@ -8129,6 +8891,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} gr {0} gr + + {0} Hg + {0} Hg + {0} Hg + {0} mb {0} mbar @@ -8139,65 +8906,69 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}° {0}° - - {0}°F - {0} °F - {0}°F - - - Ml - - - hl - litar {0}l {0}l {0}l - - dl - {0} dl - {0} dl - {0} dl - - - cl - {0} cl - {0} cl - {0} cl - - - ml - {0} ml - {0} ml - {0} ml - kšk. - {0} kšk. - {0} kšk. - {0} kšk. - - - kšč. - {0} kšč. - {0} kšč. - {0} kšč. imp. kvart - {0} imp. kvart - {0} imp. kvarta - {0} imp. kvarata - - noći - {0} noć - {0} noći - {0} noći - {0}/noć + + {0} sr + {0} sr + {0} sr + + + {0} kat + {0} kat + {0} kat + + + {0} F + {0} F + {0} F + + + {0} S + {0} S + {0} S + + + cal [IT] + {0} cal IT + {0} cal IT + {0} cal IT + + + {0} Bq + {0} Bq + {0} Bq + + + {0} kgf + {0} kgf + {0} kgf + + + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + + + svjetlo + {0} svjetlo + {0} svjetla + {0} svjetala {0}I diff --git a/make/data/cldr/common/main/bs_Cyrl.xml b/make/data/cldr/common/main/bs_Cyrl.xml index dda7b7539b8..204c0826069 100644 --- a/make/data/cldr/common/main/bs_Cyrl.xml +++ b/make/data/cldr/common/main/bs_Cyrl.xml @@ -1144,10 +1144,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Календар Републике Кине рачуноводствени формат валуте стандардни формат валуте - Традиционално кинеско сортирање Редослед сортирања у речнику задани Unicode редослијед сортирања - Поједностављено кинеско сортирање Сортирање као телефонски именик Пињин сортирање Реформисани редослед сортирања @@ -3145,9 +3143,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Пном Пен - - Ендербери - Киритимати @@ -3819,9 +3814,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Западно-афричко вријеме - Западно-афричко стандардно вријеме - Западно-афричко љетње рачунање времена + Западно-афричко вријеме @@ -4204,6 +4197,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гвајана вријеме + + + Хавајско-алеутско стандардно вријеме + + Хавајско-алеутско вријеме @@ -4654,6 +4652,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Трук вријеме + + + Турска време + Турска стандардно време + Турска летње рачунање времена + + Туркменистан вријеме @@ -4821,6 +4826,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/bua.xml b/make/data/cldr/common/main/bua.xml new file mode 100644 index 00000000000..190524d1e3e --- /dev/null +++ b/make/data/cldr/common/main/bua.xml @@ -0,0 +1,198 @@ + + + + + + + + + + + буряад + англи + + + + + + Ород Улас + + + Мэтрик + ЕБ + АНУ + + + + [а б в г д её ж з и й к л м н о ө п р с т у ү ф х һ ц ч ш щ ъ ы ь э ю я] + [{а́} {е́} {и́} {о́} {у́} {ы́} {э́} {ю́} {я́}] + [\- ‐‑ – — , ; \: ! ? . … '‘‚ "“„ « » ( ) \[ \] \{ \} § @ * / \& #] + + + « + » + + + + + + + + + + нэгэдүгээр һара + хоёрдугаар һара + гурбадугаар һара + дүрбэдүгээр һара + табадугаар һара + зургадугаар һара + долодугаар һара + наймадугаар һара + юһэдүгээр һара + арбадугаар һара + арбан нэгэдүгээр һара + арбан хоёрдугаар һара + + + + + + + Ни + Да + Ми + Һа + Пү + Ба + Би + + + нима + дабаа + мигмар + һарба + пүрбэ + баасан + бимба + + + + + + G y MM 'һарын' d + G y MM 'һарын' d, E + MM 'һарын' d + E, MM 'һарын' d + MM 'һарын' d + dd.MM.y + y 'оной' MM 'һарын' d + y 'оной' MM 'һарын' d, E + y 'оной' MMMM + + + {0} – {1} + + G y MM 'һарын' d–d + G y MM 'һарын' d – G y MM 'һарын' d + G y MM 'һарын' d – MM 'һарын' d + G y MM 'һарын' d – y MM 'һарын' d + + + G y MM 'һарын' d, E – MM 'һарын' d, E + G y MM 'һарын' d, E – G y MM 'һарын' d, E + G y MM 'һарын' d, E – MM 'һарын' d, E + G y MM 'һарын' d, E – y MM 'һарын' d, E + + + MM 'һарын' d – d + MM 'һарын' d – MM 'һарын' d + + + MM 'һарын' d, E – MM 'һарын' d, E + MM 'һарын' d, E – MM 'һарын' d, E + + + y MMM – MMM + + + y 'оной' MMM d – d + y 'оной' MM 'һарын' d – MM 'һарын' d + y 'оной' MMMM d – y 'оной' MMMM d + + + y 'оной' MM 'һарын' d, E – y 'оной' MM 'һарын' d, E + E, MM 'һарын' d – E, MM 'һарын' d, y + E, MM 'һарын' d, y – E, MM 'һарын' d, y + + + y 'оной' MMMM – MMMM + y 'оной' MMMM – y 'оной' MMMM + + + + + + + + үнгэрэгшэ жэл + энэ жэл + хойто жэл + + + үнгэрэгшэ һара + энэ һара + хойто һара + + + үнгэрэгшэ долоон хоног + энэ долоон хоног + хойто долоон хоног + + + үсэгэлдэр + мүнөө + үглөөдэр + + + үнгэрэгшэ нима + энэ нима + хойто нима + + + + + + Гринвичын саг + + + + + + + , +   + + + + + #,##0 % + + + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + diff --git a/make/data/cldr/common/main/bua_RU.xml b/make/data/cldr/common/main/bua_RU.xml new file mode 100644 index 00000000000..e17cd74dc1f --- /dev/null +++ b/make/data/cldr/common/main/bua_RU.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/make/data/cldr/common/main/ca.xml b/make/data/cldr/common/main/ca.xml index ddcab9cdd02..6ab5971a512 100644 --- a/make/data/cldr/common/main/ca.xml +++ b/make/data/cldr/common/main/ca.xml @@ -314,6 +314,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurd + kurd + kurmanji kúmik kutenai komi @@ -905,7 +907,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Xina Colòmbia Illa Clipperton - Sark + Sark Costa Rica Cuba Cap Verd @@ -1206,33 +1208,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ordre numèric força de l’ordre moneda + presentació de l’emoji sistema horari (12 h o 24 h) estil de salt de línia + salt de línia entre paraules sistema de mesures xifres + pausa després de les abreviatures zona horària variant local ús privat calendari budista + budista calendari xinès + xinès calendari copte + copte calendari dangi + dangi calendari etíop + etíop calendari etíop amete-alem + etíop amete-alem calendari gregorià + gregorià calendari hebreu + hebreu calendari hindú calendari islàmic + civil islàmic calendari civil islàmic + civil islàmic calendari islàmic (Umm al-Qura) + islàmic (Umm al-Qura) calendari ISO-8601 calendari japonès + japonès calendari persa + persa calendari de la República de Xina + de la República de Xina format de moneda comptable + comptable format de moneda estàndard + estàndard Ordena els símbols Ordena sense tenir en compte els símbols Ordena els accents de manera normal @@ -1242,22 +1263,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordena amb majúscules primer Ordena sense distingir majúscules i minúscules Ordena amb detecció de majúscules i minúscules - ordre del xinès tradicional - Big5 ordre anterior, per a compatibilitat + compatibilitat ordre de diccionari + diccionari ordre Unicode predeterminat + unicode predeterminat normes europees d’ordenació - ordre del xinès simplificat - GB2312 ordre de la guia telefònica + guia telefònica ordre fonètic + fonètic ordre pinyin + pinyin cerca de propòsit general + cerca cerca per consonant inicial del hangul ordre estàndard + estàndard ordre dels traços + traços ordre tradicional + tradicional ordre de traços radicals + traços radicals ordre zhuyin + zhuyin Ordena sense normalització Ordena per caràcters Unicode normalitzats Ordena els dígits individualment @@ -1270,18 +1301,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ amplada completa amplada mitjana Numèric + predeterminada + emoji + text sistema de 12 hores (0–11) + 12 (0–11) sistema de 12 hores (1–12) + 12 (1–12) sistema de 24 hores (0–23) + 24 (0–23) sistema de 24 hores (1–24) + 24 (1–24) salt de línia flexible + flexible salt de línia normal + normal salt de línia estricte + estricte + divideix-ho tot + conserva-ho tot + normal + conserva en sintagmes sistema de transliteració BGN sistema de transliteració UNGEGN sistema mètric + mètric sistema imperial d’unitats + imperial sistema d’unitats dels EUA + EUA xifres indoaràbigues xifres indoaràbigues ampliades nombres armenis @@ -1338,6 +1386,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dígits tibetans Numerals tradicionals dígits vai + desactivada + activada mètric @@ -1363,9 +1413,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\- ‐‑ – — , ; \: ! ¡ ? ¿ . … '‘’ "“” « » ( ) \[ \] § @ * / \\ \& # † ‡ ′ ″] {0}… {0}… {1} - - [\: ∶] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1518,6 +1565,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'a' 'les' {0} + + {1} 'a' 'les' {0} + @@ -1526,35 +1576,46 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'a' 'les' {0} + + {1} 'a' 'les' {0} + {1}, {0} + + {1} 'a' 'les' {0} + {1}, {0} + + {1} 'a' 'les' {0} + E d E h:mm a E h:mm:ss a y G + M/y G dd-MM-y GGGGG + E, d/M/y G LLL y G d MMM y G E, d MMM y G LLLL 'del' y G d MMMM 'del' y G E, d MMMM 'del' y G - h a H h:mm a H:mm h:mm:ss a H:mm:ss + H 'h' v d/M E, d/M d MMM @@ -1576,12 +1637,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ QQQQ y G - - h B – h B - - - h:mm B – h:mm B - y G – y G y – y G @@ -1928,6 +1983,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, 'a' 'les' {0} + + {1}, 'a' 'les' {0} + @@ -1936,6 +1994,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, 'a' 'les' {0} + + {1}, 'a' 'les' {0} + @@ -1954,14 +2015,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm:ss a E H:mm:ss y G + M/y G dd-MM-y GGGGG + E, d/M/y G LLL y G d MMM 'del' y G E, d MMM 'del' y G LLLL 'del' y G d MMMM 'del' y G E, d MMMM 'del' y G - h a H h:mm a H:mm @@ -1975,6 +2037,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm v h:mm a (vvvv) H:mm (vvvv) + H 'h' v d/M E d/M d MMM @@ -2036,10 +2099,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM – E, d MMM, y G E, d MMM, y – E, d MMM, y G - - h a – h a - h–h a - H–H @@ -2061,10 +2120,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm–H:mm v H:mm–H:mm v - - h a – h a v - h–h a v - H–H v @@ -2579,18 +2634,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ciutat desconeguda - - Tirana - - - Río Gallegos - - - Tucumán - - - Córdoba - Viena @@ -2606,27 +2649,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bermudes - - Eirunepé - - - Cuiabá - - - Santarém - - - Belém - - - Araguaína - - - São Paulo - - - Maceió - Blanc Sablon @@ -2663,9 +2685,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Alger - - Galápagos - Caire, el @@ -2735,12 +2754,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tòquio - - Enderbury - - - Canton - Saint Kitts @@ -2780,9 +2793,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Mònaco - - Khovd - Macau @@ -2792,18 +2802,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maurici - - Mazatlán - Ciutat de Mèxic Cancun - - Nouméa - Katmandú @@ -2906,9 +2910,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damasc - - N’Djamena - Duixanbé @@ -2973,9 +2974,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora de l’Àfrica occidental - Hora estàndard de l’Àfrica occidental - Hora d’estiu de l’Àfrica occidental + Hora de l’Àfrica occidental @@ -3274,9 +3273,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora de les illes Malvines - Hora estàndard de les illes Malvines - Hora d’estiu de les illes Malvines + Hora de les illes Falkland + Hora estàndard de les illes Falkland + Hora d’estiu de les illes Falkland @@ -3357,6 +3356,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hora de Guyana + + + Hora estàndard de Hawaii-Aleutianes + + Hora de Hawaii-Aleutianes @@ -3790,6 +3794,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hora de Chuuk + + + Hora de Turquia + Hora estàndard de Turquia + Hora d’estiu de Turquia + + Hora del Turkmenistan @@ -3948,42 +3959,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) - 0 k¤ - 0 k¤ - 00 k¤ - 00 k¤ - 000 k¤ - 000 k¤ - 0 M¤ - 0 M¤ - 00 M¤ - 00 M¤ - 000 M¤ - 000 M¤ - 0000 M¤ - 0000 M¤ - 00 kM¤ - 00 kM¤ - 000 kM¤ - 000 kM¤ - 0 B¤ - 0 B¤ - 00 B¤ - 00 B¤ - 000 B¤ - 000 B¤ + 0 k ¤ + 0 k ¤ + 00 k ¤ + 00 k ¤ + 000 k ¤ + 000 k ¤ + 0 M ¤ + 0 M ¤ + 00 M ¤ + 00 M ¤ + 000 M ¤ + 000 M ¤ + 0000 M ¤ + 0000 M ¤ + 00 kM ¤ + 00 kM ¤ + 000 kM ¤ + 000 kM ¤ + 0 B ¤ + 0 B ¤ + 00 B ¤ + 00 B ¤ + 000 B ¤ + 000 B ¤ @@ -5365,6 +5388,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dòlars del Carib Oriental XCD + + florí de les Antilles + florí de les Antilles + florins de les Antilles + XCG + drets especials de gir @@ -5476,6 +5505,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dòlar zimbabuès (1980–2008) dòlars zimbabuesos (1980–2008) + + or de Zimbàbue + or de Zimbàbue + or de Zimbàbue + dòlar zimbabuès (2009) dòlar zimbabuès (2009) @@ -5730,8 +5764,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - - masculine + + parts + {0} part + {0} parts + + + feminine parts per milió {0} part per milió {0} parts per milió @@ -5757,6 +5796,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} mols + + de glucosa + {0} de glucosa + {0} de glucosa + masculine litres per quilòmetre @@ -6007,7 +6051,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - kilowatt hora per 100 quilòmetres + kilowatts hora per 100 quilòmetres {0} kilowatt hora per 100 quilòmetres {0} kilowatts hora per 100 quilòmetres @@ -6336,6 +6380,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mil·límetre de mercuri {0} mil·límetres de mercuri + + de mercuri + {0} de mercuri + {0} de mercuri + lliures per polzada quadrada {0} lliura per polzada quadrada @@ -6536,6 +6585,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} tassa mètrica {0} tasses mètriques + + unces líquides mètriques + {0} unça líquida mètrica + {0} unces líquides mètriques + acre-peu {0} acre-peu @@ -6624,23 +6678,84 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ quarts imperials + + estereoradians + {0} estereoradian + {0} estereoradians + + + katals + {0} katal + {0} katals + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + calories [IT] + {0} caloria [IT] + {0} calories [IT] + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + quilograms força + {0} quilogram força + {0} quilograms força + + + tesles + {0} tesla + {0} tesles + + + webers + {0} weber + {0} webers + feminine - llum - {0} llum - {0} llum + {0} llums + {0} llums - - masculine - part per mil milions + + feminine + parts per mil milions {0} part per mil milions {0} parts per mil milions feminine - nits - {0} nit - {0} nits {0} per nit @@ -6700,7 +6815,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ítem {0} ítems - + parts/milió @@ -6718,6 +6833,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + l/km {0} l/km @@ -6930,8 +7048,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ gra - {0} gra - {0} grans + {0} gr + {0} gr W @@ -6946,6 +7064,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + d‘Hg + {0} d‘Hg + {0} d‘Hg + {0} bar {0} bars @@ -7066,13 +7189,40 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} quart imperial {0} quarts imperials + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + llum - {0} llum - {0} llum + {0} llums + {0} llums - - part/mil milions + + parts/mil milions nits @@ -7118,7 +7268,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mM/l - + ppm @@ -7130,6 +7280,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Glc + s. {0} s. @@ -7213,13 +7366,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ g + + gr + {0} gr + {0} gr + {0}kW {0}kW + + d‘Hg + {0} d‘Hg + {0} d‘Hg + - {0} mb - {0} mb + {0} mbar + {0} mbars {0}°F @@ -7247,16 +7410,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt imp {0} qt imp + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + - llum - {0} llum - {0} llum + {0} llums + {0} llums + + + ppb nit {0}/nit - {0}/nit - {0}/nit + {0}/nits diff --git a/make/data/cldr/common/main/ca_ES_VALENCIA.xml b/make/data/cldr/common/main/ca_ES_VALENCIA.xml index 0a0c226a32b..6ecb1bdbf1d 100644 --- a/make/data/cldr/common/main/ca_ES_VALENCIA.xml +++ b/make/data/cldr/common/main/ca_ES_VALENCIA.xml @@ -99,8 +99,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic calendari xinés calendari japonés - ordre del xinés tradicional - Big5 - ordre del xinés simplificat - GB2312 diff --git a/make/data/cldr/common/main/ccp.xml b/make/data/cldr/common/main/ccp.xml index c0f2ad0b8bd..7a1aeabd71a 100644 --- a/make/data/cldr/common/main/ccp.xml +++ b/make/data/cldr/common/main/ccp.xml @@ -1035,10 +1035,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄜𑄪𑄣𑄴𑄣𑄳𑄠𑄬 𑄝𑄧𑄢𑄧𑄦𑄘𑄧𑄢𑄴 𑄦𑄧𑄢𑄧𑄇𑄴 𑄝𑄬𑄭𑄣𑄧𑄚 𑄇𑄬𑄥𑄴 𑄃𑄧𑄥𑄧𑄁𑄝𑄬𑄘𑄩 𑄝𑄬𑄭𑄣𑄧𑄚 𑄇𑄬𑄥𑄴 𑄥𑄧𑄁𑄝𑄘𑄩 𑄝𑄬𑄭𑄣𑄧𑄚 - 𑄛𑄳𑄢𑄧𑄗𑄉𑄧𑄖𑄧 𑄌𑄩𑄚 𑄥𑄧𑄎𑄴𑄎𑄇𑄳𑄢𑄟𑄴-𑄝𑄨𑄉𑄴𑄻 𑄇𑄧𑄙𑄖𑄢 𑄝𑄬𑄭𑄣𑄧𑄚𑄢𑄴 𑄚𑄨𑄠𑄮𑄟𑄴 𑄓𑄨𑄜𑄧𑄣𑄴𑄑𑄴 𑄃𑄨𑄃𑄪𑄚𑄨𑄇𑄮𑄓𑄴 𑄝𑄬𑄭𑄣𑄧𑄚 - 𑄃𑄧𑄎𑄬𑄃𑄧𑄌𑄴 𑄌𑄩𑄚 𑄥𑄎𑄚-𑄎𑄨𑄝𑄨𑄸𑄹𑄷𑄸 𑄜𑄮𑄚𑄴𑄝𑄪𑄇𑄴 𑄥𑄎𑄚 𑄢𑄳𑄦𑄧 𑄝𑄬𑄭𑄣𑄧𑄚 𑄛𑄨𑄚𑄨𑄚𑄴 𑄥𑄎𑄚 @@ -3207,9 +3205,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄃𑄧𑄇𑄴𑄖𑄧 - 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 - 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 + 𑄛𑄧𑄏𑄨𑄟𑄬𑄘𑄨 𑄃𑄜𑄳𑄢𑄨𑄇 𑄃𑄧𑄇𑄴𑄖𑄧 @@ -3585,6 +3581,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𑄉𑄪𑄠𑄚 𑄃𑄧𑄇𑄴𑄖𑄧 + + + 𑄦𑄧𑄃𑄮𑄠𑄭-𑄃𑄣𑄬𑄃𑄪𑄖𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 + + 𑄦𑄃𑄮𑄠𑄭 𑄃𑄳𑄠𑄣𑄨𑄃𑄪𑄑𑄨𑄠𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧 @@ -4155,6 +4156,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##,##0.00;(#,##,##0.00) + + + 0G¤ + 0G ¤ + 00G¤ + 00G ¤ + 000G¤ + 000G ¤ + 0T¤ + 0T ¤ + 00T¤ + 00T ¤ + 000T¤ + 000T ¤ + + {0} {1} {0} {1} @@ -5070,7 +5087,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 𑄟𑄨𑄣𑄨𑄟𑄮𑄣𑄴, 𑄛𑄳𑄢𑄧𑄖𑄨 𑄣𑄨𑄑𑄢𑄬 {0} 𑄟𑄨𑄣𑄨𑄟𑄮𑄣𑄴, 𑄛𑄳𑄢𑄧𑄖𑄨 𑄣𑄨𑄑𑄢𑄬 - + 𑄞𑄇𑄴, 𑄛𑄳𑄢𑄧𑄖𑄨 𑄘𑄧𑄌𑄴 𑄣𑄬𑄉 {0} 𑄞𑄧𑄇𑄴, 𑄛𑄳𑄢𑄧𑄖𑄨 𑄘𑄧𑄌𑄴 𑄣𑄉𑄬 {0} 𑄞𑄧𑄇𑄴, 𑄛𑄳𑄢𑄧𑄖𑄨 𑄘𑄧𑄌𑄴 𑄣𑄉𑄬 diff --git a/make/data/cldr/common/main/ce.xml b/make/data/cldr/common/main/ce.xml index 90a35254b99..ac301facbbd 100644 --- a/make/data/cldr/common/main/ce.xml +++ b/make/data/cldr/common/main/ce.xml @@ -1862,9 +1862,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Пномпень - - Эндерберин, гӀ-е - Киритимати @@ -2526,9 +2523,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Малхбузен Африка - Малхбузен Африка, стандартан хан - Малхбузен Африка, аьхкенан хан + Малхбузен Африка @@ -2878,6 +2873,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гайана + + + Гавайн-алеутийн стандартан хан + + Гавайн-алеутийн хан @@ -3441,6 +3441,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/ceb.xml b/make/data/cldr/common/main/ceb.xml index 89746056e89..7c184eb46cf 100644 --- a/make/data/cldr/common/main/ceb.xml +++ b/make/data/cldr/common/main/ceb.xml @@ -22,18 +22,22 @@ the LDML specification (http://unicode.org/reports/tr35/) German Swiss High German English - Britanikong English + English (British) English (UK) English (America) English (US) Espanyol - Espanyol (Europa) - Pranses + Spanish (Latin America) + Spanish (Europe) + Spanish (Mexico) + French + French (Canada) + French (Switzerland) Hindi Hinglish Indonesian - Italyano - Hinapon + Italian + Japanese Korean Dutch Flemish @@ -42,8 +46,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Russian Thai Turkish - Wala Mailhing Pinulongan - Inintsik + Wala mailhi nga pinulongan + Chinese Chinese, Mandarin Pinasimple nga Chinese Pinasimple nga Mandarin Chinese @@ -51,7 +55,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Tradisyonal nga Mandarin Chinese - + @@ -64,7 +68,7 @@ the LDML specification (http://unicode.org/reports/tr35/) - kalibutan + kalibotan Africa North America South America @@ -149,6 +153,7 @@ the LDML specification (http://unicode.org/reports/tr35/) China Colombia Clipperton Island + Sark Costa Rica Cuba Cape Verde @@ -288,7 +293,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Peru French Polynesia Papua New Guinea - Pilipinas + Philippines Pakistan Poland St. Pierre & Miquelon @@ -342,6 +347,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Tunisia Tonga Turkiye + Turkey Trinidad & Tobago Tuvalu Taiwan @@ -349,8 +355,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Ukraine Uganda U.S. Outlying Islands - Hiniusang Kanasoran - Estados Unidos + United Nations + United States US Uruguay Uzbekistan @@ -380,8 +386,10 @@ the LDML specification (http://unicode.org/reports/tr35/) Gregorian nga Kalendaryo - Kalendaryo sa ISO-8601 + Gregorian + Gregorian nga Kalendaryo (Tuig Una) Standard nga Paagi sa Paghan-ay + Standard Mga Western Digit @@ -507,6 +515,7 @@ the LDML specification (http://unicode.org/reports/tr35/) MMM d – d, y G MMM d, y G – MMM d, y G MMM d – MMM d, y G + MMM d, y – MMM d, y G E, MMM d – E, MMM d, y G @@ -599,7 +608,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Hunyo Hulyo Agosto - Septyembre + Septiyembre Oktubre Nobyembre Disyembre @@ -629,7 +638,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Hunyo Hulyo Agosto - Septyembre + Septiyembre Oktubre Nobyembre Disyembre @@ -678,7 +687,15 @@ the LDML specification (http://unicode.org/reports/tr35/) Q4 - unang quarter + ika-1 nga quarter + ika-2 nga quarter + ika-3 nga quarter + ika-4 nga quarter + + + + + ika-1 nga quarter ika-2 nga quarter ika-3 nga quarter ika-4 nga quarter @@ -696,9 +713,9 @@ the LDML specification (http://unicode.org/reports/tr35/) Sa Wala Pa Si Kristo - Wala Pa ang Common Era + Wala Pa ang Komon nga Panahon Anno Domini - Komong Panahon + Komon nga Panahon BC @@ -788,11 +805,10 @@ the LDML specification (http://unicode.org/reports/tr35/) E h:mm a E h:mm:ss a y G - M/d/y GGGGG + M/d/y G MMM y G MMM d, y G E, MMM d, y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -823,21 +839,21 @@ the LDML specification (http://unicode.org/reports/tr35/) y – y G - M/y GGGGG – M/y GGGGG - M/y – M/y GGGGG - M/y – M/y GGGGG + M/y G – M/y G + M/y – M/y G + M/y – M/y G - M/d/y – M/d/y GGGGG - M/d/y GGGGG – M/d/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG + M/d/y – M/d/y G + M/d/y G – M/d/y G + M/d/y – M/d/y G + M/d/y – M/d/y G - E, M/d/y – E, M/d/y GGGGG - E, M/d/y GGGGG – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG + E, M/d/y – E, M/d/y G + E, M/d/y G – E, M/d/y G + E, M/d/y – E, M/d/y G + E, M/d/y – E, M/d/y G MMM y G – MMM y G @@ -971,7 +987,13 @@ the LDML specification (http://unicode.org/reports/tr35/) miaging semana karong semanaha sunod nga semana - ang semana sa {0} + sa semana sa {0} + + + sa semana sa {0} + + + sa seman sa {0} adlaw @@ -1015,14 +1037,13 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa {0} Daylight nga Oras sa {0} Standard nga Oras sa {0} - {1} {0} Coordinated Universal Time - Wala Mailhing Lungsod + Wala Mailhing Lokasyon @@ -1034,11 +1055,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Irish Standard Time - - Enderbury - - Siyudad sa Ho Chi Minh + Ho Chi Minh City @@ -1057,14 +1075,12 @@ the LDML specification (http://unicode.org/reports/tr35/) - Standard nga Oras sa South Africa + South Africa Standard Time - Oras sa West Africa - Standard nga Oras sa West Africa - Oras sa Ting-init sa West Africa + Oras sa West Africa @@ -1077,8 +1093,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Amazon - Standard nga Oras sa Amazon - Oras sa Ting-init sa Amazon + Amazon Standard Time + Amazon Summer Time @@ -1112,36 +1128,36 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Apia - Standard nga Oras sa Apia - Daylight nga Oras sa Apia + Samoa Standard Time + Samoa Daylight Time Oras sa Arabia - Standard nga Oras sa Arabia - Daylight nga Oras sa Arabia + Arabian Standard Time + Arabian Daylight Time Oras sa Argentina - Standard nga Oras sa Argentina - Oras sa Ting-init sa Argentina + Argentina Standard Time + Argentina Summer Time Oras sa Western Argentina - Standard nga Oras sa Western Argentina - Oras sa Ting-init sa Western Argentina + Western Argentina Standard Time + Western Argentina Summer Time Oras sa Armenia - Standard nga Oras sa Armenia - Oras sa Ting-init sa Armenia + Armenia Standard Time + Armenia Summer Time @@ -1154,50 +1170,50 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Central Australia - Standard nga Oras sa Central Australia - Daylight nga Oras sa Central Australia + Australian Central Standard Time + Australian Central Daylight Time Oras sa Central Western Australia - Standard nga Oras sa Central Western Australia - Daylight nga Oras sa Central Western Australia + Australian Central Western Standard Time + Australian Central Western Daylight Time Oras sa Eastern Australia - Standard nga Oras sa Eastern Australia - Daylight nga Oras sa Eastern Australia + Australian Eastern Standard Time + Australian Eastern Daylight Time Oras sa Western Australia - Standard nga Oras sa Western Australia - Daylight nga Oras sa Western Australia + Australian Western Standard Time + Australian Western Daylight Time Oras sa Azerbaijan - Standard nga Oras sa Azerbaijan - Oras sa Ting-init sa Azerbaijan + Azerbaijan Standard Time + Azerbaijan Summer Time Oras sa Azores - Standard nga Oras sa Azores - Oras sa Ting-init sa Azores + Azores Standard Time + Azores Summer Time Oras sa Bangladesh - Standard nga Oras sa Bangladesh - Oras sa Ting-init sa Bangladesh + Bangladesh Standard Time + Bangladesh Summer Time @@ -1213,8 +1229,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Brasilia - Standard nga Oras sa Brasilia - Oras sa Ting-init sa Brasilia + Brasilia Standard Time + Brasilia Summer Time @@ -1225,34 +1241,34 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Cape Verde - Standard nga Oras sa Cape Verde - Oras sa Ting-init sa Cape Verde + Cape Verde Standard Time + Cape Verde Summer Time - Standard nga Oras sa Chamorro + Chamorro Standard Time Oras sa Chatham - Standard nga Oras sa Chatham - Daylight nga Oras sa Chatham + Chatham Standard Time + Chatham Daylight Time Oras sa Chile - Standard nga Oras sa Chile - Oras sa Ting-init sa Chile + Chile Standard Time + Chile Summer Time Oras sa China - Standard nga Oras sa China - Daylight nga Oras sa China + China Standard Time + China Daylight Time @@ -1268,22 +1284,22 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Colombia - Standard nga Oras sa Colombia - Oras sa Ting-init sa Colombia + Colombia Standard Time + Colombia Summer Time Oras sa Cook Islands - Standard nga Oras sa Cook Islands - Katungang Oras sa Ting-init sa Cook Islands + Cook Islands Standard Time + Cook Islands Summer Time Oras sa Cuba - Standard nga Oras sa Cuba - Daylight nga Oras sa Cuba + Cuba Standard Time + Cuba Daylight Time @@ -1304,8 +1320,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Easter Island - Standard nga Oras sa Easter Island - Oras sa Ting-init sa Easter Island + Easter Island Standard Time + Easter Island Summer Time @@ -1316,15 +1332,15 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Central Europe - Standard nga Oras sa Central Europe - Oras sa Ting-init sa Central Europe + Central European Standard Time + Central European Summer Time Oras sa Eastern Europe - Standard nga Oras sa Eastern Europe - Oras sa Ting-init sa Eastern Europe + Eastern European Standard Time + Eastern European Summer Time @@ -1335,22 +1351,22 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Western Europe - Standard nga Oras sa Western Europe - Oras sa Ting-init sa Western Europe + Western European Standard Time + Western European Summer Time Oras sa Falkland Islands - Standard nga Oras sa Falkland Islands - Oras sa Ting-init sa Falkland Islands + Falkland Islands Standard Time + Falkland Islands Summer Time Oras sa Fiji - Standard nga Oras sa Fiji - Oras sa Ting-init sa Fiji + Fiji Standard Time + Fiji Summer Time @@ -1376,8 +1392,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Georgia - Standard nga Oras sa Georgia - Oras sa Ting-init sa Georgia + Georgia Standard Time + Georgia Summer Time @@ -1393,20 +1409,20 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa East Greenland - Standard nga Oras sa East Greenland - Oras sa Ting-init sa East Greenland + East Greenland Standard Time + East Greenland Summer Time Oras sa West Greenland - Standard nga Oras sa West Greenland - Oras sa Ting-init sa West Greenland + West Greenland Standard Time + West Greenland Summer Time - Standard nga Oras sa Gulf + Gulf Standard Time @@ -1414,30 +1430,35 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Guyana + + + Hawaii-Aleutian Standard Time + + Oras sa Hawaii-Aleutian - Standard nga Oras sa Hawaii-Aleutian - Daylight nga Oras sa Hawaii-Aleutian + Hawaii-Aleutian Standard Time + Hawaii-Aleutian Daylight Time Oras sa Hong Kong - Standard nga Oras sa Hong Kong - Oras sa Ting-init sa Hong Kong + Hong Kong Standard Time + Hong Kong Summer Time Oras sa Hovd - Standard nga Oras sa Hovd - Oras sa Ting-init sa Hovd + Khovd Standard Time + Khovd Summer Time - Standard nga Oras sa India + India Standard Time @@ -1468,29 +1489,29 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Iran - Standard nga Oras sa Iran - Daylight nga Oras sa Iran + Iran Standard Time + Iran Daylight Time Oras sa Irkutsk - Standard nga Oras sa Irkutsk - Oras sa Ting-init sa Irkutsk + Irkutsk Standard Time + Irkutsk Summer Time Oras sa Israel - Standard nga Oras sa Israel - Daylight nga Oras sa Israel + Israel Standard Time + Israel Daylight Time Oras sa Japan - Standard nga Oras sa Japan - Daylight nga Oras sa Japan + Japan Standard Time + Japan Daylight Time @@ -1511,8 +1532,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Korea - Standard nga Oras sa Korea - Daylight nga Oras sa Korea + Korean Standard Time + Korean Daylight Time @@ -1523,8 +1544,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Krasnoyarsk - Standard nga Oras sa Krasnoyarsk - Oras sa Ting-init sa Krasnoyarsk + Krasnoyarsk Standard Time + Krasnoyarsk Summer Time @@ -1540,15 +1561,15 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Lord Howe - Standard nga Oras sa Lord Howe - Daylight nga Oras sa Lord Howe + Lord Howe Standard Time + Lord Howe Daylight Time Oras sa Magadan - Standard nga Oras sa Magadan - Oras sa Ting-init sa Magadan + Magadan Standard Time + Magadan Summer Time @@ -1574,8 +1595,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Mauritius - Standard nga Oras sa Mauritius - Oras sa Ting-init sa Mauritius + Mauritius Standard Time + Mauritius Summer Time @@ -1586,22 +1607,22 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Mexican Pacific - Standard nga Oras sa Mexican Pacific - Daylight nga Oras sa Mexican Pacific + Mexican Pacific Standard Time + Mexican Pacific Daylight Time Oras sa Ulaanbaatar - Standard nga Oras sa Ulaanbaatar - Oras sa Ting-init sa Ulaanbaatar + Ulaanbaatar Standard Time + Ulaanbaatar Summer Time Oras sa Moscow - Standard nga Oras sa Moscow - Oras sa Ting-init sa Moscow + Moscow Standard Time + Moscow Summer Time @@ -1622,22 +1643,22 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa New Caledonia - Standard nga Oras sa New Caledonia - Oras sa Ting-init sa New Caledonia + New Caledonia Standard Time + New Caledonia Summer Time Oras sa New Zealand - Standard nga Oras sa New Zealand - Daylight nga Oras sa New Zealand + New Zealand Standard Time + New Zealand Daylight Time Oras sa Newfoundland - Standard nga Oras sa Newfoundland - Daylight nga Oras sa Newfoundland + Newfoundland Standard Time + Newfoundland Daylight Time @@ -1648,36 +1669,36 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Norfolk Island - Standard nga Oras sa Norfolk Island - Daylight nga Oras sa Norfolk Island + Norfolk Island Standard Time + Norfolk Island Daylight Time Oras sa Fernando de Noronha - Standard nga Oras sa Fernando de Noronha - Oras sa Ting-init sa Fernando de Noronha + Fernando de Noronha Standard Time + Fernando de Noronha Summer Time Oras sa Novosibirsk - Standard nga Oras sa Novosibirsk - Oras sa Ting-init sa Novosibirsk + Novosibirsk Standard Time + Novosibirsk Summer Time Oras sa Omsk - Standard nga Oras sa Omsk - Oras sa Ting-init sa Omsk + Omsk Standard Time + Omsk Summer Time Oras sa Pakistan - Standard nga Oras sa Pakistan - Oras sa Ting-init sa Pakistan + Pakistan Standard Time + Pakistan Summer Time @@ -1693,22 +1714,22 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Paraguay - Standard nga Oras sa Paraguay - Oras sa Ting-init sa Paraguay + Paraguay Standard Time + Paraguay Summer Time Oras sa Peru - Standard nga Oras sa Peru - Oras sa Ting-init sa Peru + Peru Standard Time + Peru Summer Time Oras sa Pilipinas - Standard nga Oras sa Pilipinas - Oras sa Ting-init sa Pilipinas + Philippine Standard Time + Philippine Summer Time @@ -1719,8 +1740,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa St. Pierre & Miquelon - Standard nga Oras sa St. Pierre & Miquelon - Daylight nga Oras sa St. Pierre & Miquelon + St. Pierre & Miquelon Standard Time + St. Pierre & Miquelon Daylight Time @@ -1751,15 +1772,15 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Sakhalin - Standard nga Oras sa Sakhalin - Oras sa Ting-init sa Sakhalin + Sakhalin Standard Time + Sakhalin Summer Time Oras sa Samoa - Standard nga Oras sa Samoa - Daylight nga Oras sa Samoa + American Samoa Standard Time + American Samoa Daylight Time @@ -1769,7 +1790,7 @@ the LDML specification (http://unicode.org/reports/tr35/) - Standard nga Oras sa Singapore + Singapore Standard Time @@ -1799,9 +1820,9 @@ the LDML specification (http://unicode.org/reports/tr35/) - Oras sa Taipei - Standard nga Oras sa Taipei - Daylight nga Oras sa Taipei + Oras sa Taiwan + Taiwan Standard Time + Taiwan Daylight Time @@ -1817,8 +1838,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Tonga - Standard nga Oras sa Tonga - Oras sa Ting-init sa Tonga + Tonga Standard Time + Tonga Summer Time @@ -1829,8 +1850,8 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Turkmenistan - Standard nga Oras sa Turkmenistan - Oras sa Ting-init sa Turkmenistan + Turkmenistan Standard Time + Turkmenistan Summer Time @@ -1841,22 +1862,22 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Uruguay - Standard nga Oras sa Uruguay - Oras sa Ting-init sa Uruguay + Uruguay Standard Time + Uruguay Summer Time Oras sa Uzbekistan - Standard nga Oras sa Uzbekistan - Oras sa Ting-init sa Uzbekistan + Uzbekistan Standard Time + Uzbekistan Summer Time Oras sa Vanuatu - Standard nga Oras sa Vanuatu - Oras sa Ting-init sa Vanuatu + Vanuatu Standard Time + Vanuatu Summer Time @@ -1867,15 +1888,15 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Vladivostok - Standard nga Oras sa Vladivostok - Oras sa Ting-init sa Vladivostok + Vladivostok Standard Time + Vladivostok Summer Time Oras sa Volgograd - Standard nga Oras sa Volgograd - Oras sa Ting-init sa Volgograd + Volgograd Standard Time + Volgograd Summer Time @@ -1896,15 +1917,15 @@ the LDML specification (http://unicode.org/reports/tr35/) Oras sa Yakutsk - Standard nga Oras sa Yakutsk - Oras sa Ting-init sa Yakutsk + Yakutsk Standard Time + Yakutsk Summer Time Oras sa Yekaterinburg - Standard nga Oras sa Yekaterinburg - Oras sa Ting-init sa Yekaterinburg + Yekaterinburg Standard Time + Yekaterinburg Summer Time @@ -1915,11 +1936,50 @@ the LDML specification (http://unicode.org/reports/tr35/) + + + + 0 ka libo + 0 ka libo + 00 ka libo + 00 ka libo + 000 ka libo + 000 ka libo + 0 ka milyon + 0 ka milyon + 00 ka milyon + 00 ka milyon + 000 ka milyon + 000 ka milyon + 0 ka bilyon + 0 ka bilyon + 00 ka bilyon + 00 ka bilyon + 000 ka bilyon + 000 ka bilyon + 0 ka trilyon + 0 ka trilyon + 00 ka trilyon + 00 ka trilyon + 000 ka trilyon + 000 ka trilyon + + + + + 0B + 0B + 00B + 00B + 000B + 000B + + + ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -1927,6 +1987,58 @@ the LDML specification (http://unicode.org/reports/tr35/) #,##0.00;(#,##0.00) + + + ¤0K + ¤ 0K + ¤0K + ¤ 0K + ¤00K + ¤ 00K + ¤00K + ¤ 00K + ¤000K + ¤ 000K + ¤000K + ¤ 000K + ¤0M + ¤ 0M + ¤0M + ¤ 0M + ¤00M + ¤ 00M + ¤00M + ¤ 00M + ¤000M + ¤ 000M + ¤000M + ¤ 000M + ¤0B + ¤ 0B + ¤0B + ¤ 0B + ¤00B + ¤ 00B + ¤00B + ¤ 00B + ¤000B + ¤ 000B + ¤000B + ¤ 000B + ¤0T + ¤ 0T + ¤0T + ¤ 0T + ¤00T + ¤ 00T + ¤00T + ¤ 00T + ¤000T + ¤ 000T + ¤000T + ¤ 000T + + {0} {1} {1} {0} @@ -2094,7 +2206,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Costa Rican Colon Costa Rican colon - Costa Rican colóns + Costa Rican colons Cuban Convertible Peso @@ -2434,7 +2546,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Nicaraguan Cordoba Nicaraguan cordoba - Nicaraguan córdobas + Nicaraguan cordobas Norwegian Krone @@ -2579,7 +2691,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Sao Tome & Principe Dobra Sao Tome & Principe dobra - São Tomé & Príncipe dobras + Sao Tome & Principe dobras Syrian Pound @@ -2665,7 +2777,7 @@ the LDML specification (http://unicode.org/reports/tr35/) Venezuelan Bolivar Venezuelan bolivar - Venezuelan bolívars + Venezuelan bolivars Vietnamese Dong @@ -2692,6 +2804,11 @@ the LDML specification (http://unicode.org/reports/tr35/) East Caribbean dollar East Caribbean dollars + + Carribean guilder + Carribean guilder + Carribean guilder + West African CFA Franc West African CFA franc @@ -2722,6 +2839,11 @@ the LDML specification (http://unicode.org/reports/tr35/) Zambian kwacha Zambian kwachas + + Zimbabwean Gold + Zimbabwean Gold + Zimbabwean Gold + {0}+ @@ -2928,7 +3050,7 @@ the LDML specification (http://unicode.org/reports/tr35/) {0} ka millimole kada litro {0} ka mga millimole kada litro - + mga part per million {0} ka part per million {0} ka mga part per million @@ -3736,7 +3858,7 @@ the LDML specification (http://unicode.org/reports/tr35/) millimol/litro - + mga part/million diff --git a/make/data/cldr/common/main/chr.xml b/make/data/cldr/common/main/chr.xml index 64fdcf84734..492f616e627 100644 --- a/make/data/cldr/common/main/chr.xml +++ b/make/data/cldr/common/main/chr.xml @@ -42,6 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎠᏎᏆᏣᏂ ᎠᏎᎵ ᏆᏍᎯᎩᎠ + ᏆᎷᏥ ᏆᎵᏁᏏ ᏆᏌᎠ ᏇᎳᎷᏏ @@ -224,6 +225,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᏆᏫᎠ ᎪᎶᏂᎠᏂ ᎫᏗᏏ + ᎫᏗᏍᎯ + ᎫᎹᏥ ᎫᎻᎧ ᎪᎻ ᏎᎷᎭ @@ -619,6 +622,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᏓᎶᏂᎨᏍᏛ ᎪᎸᎻᏈᎢᎠ ᎦᏂᏴᏔᏅᎣᏓᎸ ᎤᎦᏚᏛᎢ + ᏌᎬ ᎪᏍᏓ ᎵᎧ ᎫᏆ ᎢᎬᎾᏕᎾ ᎢᏤᏳᏍᏗ @@ -847,42 +851,81 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎠᏕᎳ ᏱᎬᏁᎸᎯ ᏗᎦᏅᏃᏙᏗ ᏕᎦᏅᏃᏛᎢ ᎠᏕᎳ + ᎢᎼᏥ ᏓᎾᏓᏁᎲᎢ ᏑᏟᎶᏓ ᎠᏓᏁᏟᏴᏎᎬ (12 vs 24) ᎠᏍᏓᏅᏅ ᎠᏲᏍᏔᏅᎩ ᏂᏚᏍᏛ + ᎠᏍᏓᏅᏅ ᎠᏍᏆᎵᏍᏗ ᎪᏪᎵ ᎠᏟᎶᏛ ᏄᏍᏗᏓᏅᎢ ᏗᏎᏍᏗ + ᏗᏒᏍᏙᏗ ᎠᏍᏆᎵᏍᏗ ᎠᏂᏬ ᏊᏗᏍᏘ ᏅᏙ ᏗᏎᏍᏗ + ᏊᏗᏍᏘ ᏓᎶᏂᎨᏍᏛ ᏅᏙ ᏗᏎᏍᏗ + ᏓᎶᏂᎨᏍᏛ ᎧᏘ ᏅᏙ ᏗᏎᏍᏗ + ᎧᏘ ᏓᏂᎩ ᏅᏙ ᏗᏎᏍᏗ + ᏓᏂᎩ ᎢᏗᏯᏈᎩ ᏅᏙ ᏗᏎᏍᏗ + ᎡᏘᎣᏈᎠ ᎡᏘᎣᏈᎠ ᎠᎺᏖ ᎠᎴᎻ ᏅᏙ ᏗᏎᏍᏗ + ᎡᏘᎣᏈᎠ ᎠᎺᏖ ᎠᎴᎻ ᎩᎴᎪᎵᎠᏂ ᏅᏙ ᏗᏎᏍᏗ + ᎩᎴᎪᎵᎠᏂ ᎠᏂᏈᎷ ᏅᏙ ᏗᏎᏍᏗ + ᎠᏂᏈᎷ ᎢᏍᎳᎻᎩ ᏅᏙ ᏗᏎᏍᏗ + ᎢᏌᎳᎻᎩ ᎢᏌᎳᎻᎩ ᏅᏙ ᏗᏎᏍᏗ (ᏴᏫ ᎡᏆᎩ) + ᎢᏌᎳᎻᎩ (ᏴᏫ ᎡᏆᎩ) ᎢᏌᎳᎻᎩ ᏅᏙ ᏗᏎᏍᏗ (ᎥᎻ ᎠᎵ-ᏊᎳ) + ᎢᏌᎳᎻᎩ (ᎥᎻ ᎠᎵ-ᏊᎳ) ISO-8601 ᏅᏙ ᏗᏎᏍᏗ ᏣᏆᏂᏏ ᏅᏙ ᏗᏎᏍᏗ + ᏣᏆᏂᏏ ᏇᏏᎠᏂ ᏅᏙ ᏗᏎᏍᏗ + ᏇᏏᎠᏂ ᏍᎦᏚᎩ ᎾᎿ ᏓᎶᏂᎨᏍᏛ ᏅᏙ ᏗᏎᏍᏗ + ᏍᎦᏚᎩ ᎾᎿ ᏓᎶᏂᎨᏍᏛ ᎠᏕᎳ ᏗᏎᎯᎯ ᎠᏕᎳ ᏱᎬᏁᎸᎯ + ᎠᏕᎳ ᏗᏎᎯᎯ ᎠᏟᎶᏍᏗ ᎠᏕᎳ ᏱᎬᏁᎸᎯ + ᎠᏟᎶᏍᏗ ᎠᏓᏁᏟᏴᏗᏍᎩ Unicode ᏗᎦᏅᏃᏙᏗ ᏕᎦᏅᏃᏛᎢ + ᎠᏓᏁᏟᏴᏗᏍᎩ Unicode ᏂᎦᎥ-ᎢᏳᏱᎸᏗ ᎠᏱᏍᏗ + ᎠᏱᏍᏗ ᎠᏟᎶᏍᏗ ᏗᎦᏅᏃᏙᏗ ᏕᎦᏅᏃᏛᎢ + ᎠᏟᎶᏍᏗ + ᎠᏓᏁᏟᏴᏗᏍᎩ + ᎢᎼᏥ + ᏕᎪᏪᎸ 12 ᎢᏳᏟᎶᏓ ᏄᏍᏗᏓᏅᎢ (0–11) + 12 (0–11) 12 ᎢᏳᏟᎶᏓ ᏄᏍᏗᏓᏅᎢ (1–12) + 12 (1–12) 24 ᎢᏳᏟᎶᏓ ᏄᏍᏗᏓᏅᎢ (0–23) + 24 (0–23) 24 ᎢᏳᏟᎶᏓ ᏄᏍᏗᏓᏅᎢ (1–24) + 24 (1–24) ᏩᎾᎢ ᎠᏍᏓᏅᏅ ᎠᏲᏍᏔᏅᎩ ᏂᏚᏍᏛ + ᏩᎾᎢ ᎠᏍᏓᏅᏅ ᏱᎬᏍᏗᎭᏊ ᎠᏍᏓᏅᏅ ᎠᏲᏍᏔᏅᎩ ᏂᏚᏍᏛ + ᏱᎬᏍᏗᎭᏊ ᎤᎶᏒᏍᏔᏅᎯ ᎠᏍᏓᏅᏅ ᎠᏲᏍᏔᏅᎩ ᏂᏚᏍᏛ + ᎤᎶᏒᏍᏔᏅᎯ + ᎠᏍᏆᎵᏍᏗ ᏂᎦᏓ + ᎠᏍᏆᏂᎪᏙᏗ ᏂᎦᏓ + ᏱᎬᏍᏗᎭᏊ + ᎠᏍᏆᏂᎪᏙᏗ ᎾᎿ ᎪᏪᎵ ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ ᏄᏍᏗᏓᏅᎢ + ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ ᏂᎬᎾᏛᎢ ᎤᏓᏤᎵᎦᏯ ᎠᏟᎶᏛ ᏄᏍᏗᏓᏅᎢ + UK US ᎠᏟᎶᏛ ᏄᏍᏗᏓᏅᎢ + US ᎠᎳᏈ-ᎡᏂᏗᎩ ᏗᏎᏍᏗ ᎦᏅᎯᏛ ᎠᎳᏈ-ᎡᏂᏗᎩ ᏗᏎᏍᏗ ᎠᎳᎻᎠᏂ ᏗᏎᏍᏗ @@ -923,6 +966,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᏔᏱ ᏗᏎᏍᏗ ᏘᏇᏔᏂ ᏗᏎᏍᏗ ᏩᏱ ᏗᏎᏍᏗ + ᎤᏣᏘᎾ + ᎾᎿ ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ @@ -940,9 +985,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1007,7 +1049,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic d E y G + M/y G M/d/y GGGGG + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -1343,6 +1387,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} ᎤᎾᎢ {0} + + {1} ᎤᎾᎢ {0} + @@ -1351,6 +1398,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} ᎤᎾᎢ {0} + + {1} ᎤᎾᎢ {0} + @@ -1365,7 +1415,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic d E y G + M/y G M/d/y GGGGG + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -2038,11 +2090,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒ {0} ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ - - HST - HST - HDT - ᎭᏃᎷᎷ @@ -2395,6 +2442,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᏥᏌᏕᎴᎯᏌᏅ + + ᎪᎭᎢᏇ + ᏊᏔ ᎡᏫᎾᏍ @@ -2660,9 +2710,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎿᎻ ᏇᏂ - ᎡᏂᏇᎵ - - ᎧᏛᏂ @@ -3332,9 +3379,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ ᎠᏟᎢᎵᏒ - ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ - ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ ᎪᎩ ᎠᏟᎢᎵᏒ + ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ ᎠᏟᎢᎵᏒ @@ -3714,6 +3759,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᎦᏯᎾ ᎠᏟᎢᎵᏒ + + + ᎭᏩᏱ-ᎠᎵᏳᏏᎠᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ + + + HAST + + ᎭᏩᏱ-ᎠᎵᏳᏏᎠᏂ ᎠᏟᎢᎵᏒ @@ -4264,7 +4317,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4803,6 +4855,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᏗᎧᎸᎬ ᎨᏆᏙᏯ ᎠᏕᎳ + + ᎧᏈᏇᎠᎾ + ᎧᏈᏇᎠᎾ ᎠᏕᎳ + ᎧᏈᏇᎠᎾ ᎠᏕᎳ + ᏭᏕᎵᎬ ᎬᎿᎨᏍᏛ CFA ᎠᏕᎳ @@ -4823,6 +4880,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᏏᎻᏆᏇ ᎠᏕᎳ + + ᏏᎻᏆᏇᎠᏂ + ᏏᎻᏆᏇᎠᏂ ᎠᏕᎳ + ᏏᎻᏆᏇᎠᏂ ᎠᏕᎳ + {0}+ @@ -5042,7 +5104,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᏌᏉ ᎢᏯᎦᎨᎵᏁᎢ ᎼᎵ ᎵᏔᎢ ᎢᏳᏓᎵ {0} ᏌᏉ ᎢᏯᎦᎨᎵᏁᎢ ᎠᏂᎼᎵ ᎵᏔᎢ ᎢᏳᏓᎵ - + + ᎢᎦᏛ + {0} ᎢᎦᏛ + {0} ᎢᎦᏛᎭ + + ᏚᏙᏢᏒ ᎢᏳᏆᏗᏅᏛ ᎢᏳᏓᎵ {0} ᎤᏙᏢᏒ ᎢᏳᏆᏗᏅᏛ ᎢᏳᏓᎵ {0} ᏚᏙᏢᏒ ᎢᏳᏆᏗᏅᏛ ᎢᏳᏓᎵ @@ -5064,6 +5131,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᎼᎴ {0} ᎼᎴᏍ + + ᎾᎿ ᎦᎷᎪᏏ + {0} ᎾᎿ ᎦᎷᎪᏏ + {0} ᎾᎿ ᎦᎷᎪᏏ + ᏗᎵᏔᎢ ᎠᎦᏴᎵ ᎠᏟᎶᏍᏗ ᎢᏳᏓᎵ {0} ᎵᏔᎢ ᎠᎦᏴᎵ ᎠᏟᎶᏍᏗ ᎢᏳᏓᎵ @@ -5547,6 +5619,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᏌᏉ ᎢᏯᎦᎨᎵᏁᎢ ᎠᏟᎶᏗ ᎾᎿ ᎹᎫᎢ {0} ᏌᏉ ᎢᏯᎦᎨᎵᏁᎢ ᏗᏟᎶᏗ ᎾᎿ ᎹᎫᎢ + + ᎾᎿ ᎹᎫᎢ + {0} ᎾᎿ ᎹᎫᎢ + {0} ᎾᎿ ᎹᎫᎢ + ᎢᏧᏓᎨᏓ ᏅᎩ ᏧᏅᏏᎩ ᎢᏏᏔᏗᏍᏗ ᎢᏳᏓᎵ {0} ᏑᏓᎨᏓ ᏅᎩ ᏧᏅᏏᎩ ᎢᏏᏔᏗᏍᏗ ᎢᏳᏓᎵ @@ -5719,6 +5796,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ ᎤᎵᏍᏈᏗ {0} ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ ᏧᎵᏍᏈᏗ + + ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ ᎤᏓᏁᎯ ᎢᏯᎣᏂᏏ + ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ ᎤᏓᏁᎯ ᎣᏂᏏ + {0} ᎠᏂᎩᎸᏥ ᏂᏓᏳᏓᎴᏅᎯ ᏗᏎᏍᏗ ᎤᏓᏁᎯ ᎢᏯᎣᏂᏏ + {0} ᏑᏟᎶᏛ-ᎢᎳᏏᏗ {0} ᏑᏟᎶᏛ-ᎢᏗᎳᏏᏗ @@ -5796,22 +5878,76 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᏂᎬᎾᏛᎢ ᎤᏓᏤᎵᎦᏯ ᏅᎩ ᎢᏗᎧᎵᎢ {0} ᏂᎬᎾᏛᎢ ᎤᏓᏤᎵᎦᏯ ᏅᎩ ᎢᏗᎧᎵᎢ - - ᎠᏨᏍᏗ - {0} ᎠᏨᏍᏗ - {0} ᎠᏨᏍᏗ + + ᏍᏘᏇᏗᎠᏂᏍ + {0} ᏍᏘᏇᏗᎠᏂ + {0} ᏍᏘᏇᏗᎠᏂᏍ - + + ᎧᏔᎵᏍ + {0} ᎧᏔᎵ + {0} ᎧᏔᎵᏍ + + + ᎠᏂᎪᎶᎻᏍ + {0} ᎪᎶᎻᏍ + {0} ᎠᏂᎪᎶᎻᏍ + + + ᏆᏇᏗᏍ + {0} ᏆᏇᏗ + {0} ᏆᏇᏗᏍ + + + ᎯᏂᏫᏍ + {0} ᎯᏂᏫ + {0} ᎯᏂᏫᏍ + + + ᏏᎺᏂᏍ + {0} ᏏᎺᏂᏍ + {0} ᏏᎺᏂᏍ + + + ᏗᏓᎵᏥᏍᏗᏍᎩ [IT] + {0} ᎠᏓᎵᏥᏍᏗᏍᎩ [IT] + {0} ᏗᏓᎵᏥᏍᏗᏍᎩ [IT] + + + ᏘᎯ ᎠᎩᎪᏍᎦ + {0} ᏘᎯ ᎠᎩᎪᏍᎦ + {0} ᏘᎯ ᏗᎩᎪᏍᎦ + + + ᏗᏏᏇᏘ + {0} ᏏᏇᏘ + {0} ᏗᏏᏇᏘ + + + ᎤᏍᎪᎸ ᎠᏂᏌᎪᏂᎨ + {0} ᎤᏍᎪᎸ ᏌᎪᏂᎨ + {0} ᎤᏍᎪᎸ ᎠᏂᏌᎪᏂᎨ + + + ᎠᎦᏴᎵ ᎤᏍᏗ ᏂᏚᏓᎨᏒ-ᎦᏌᏙᏯᏍᏗ + {0} ᎠᏍᏴᎵ ᎤᏍᏗ ᏗᏚᏓᎨᏒ-ᎦᏌᏙᏯᏍᏗ + {0} ᎠᏍᏴᎵ ᎤᏍᏗ ᏂᏚᏓᎨᏒ-ᎦᏌᏙᏯᏍᏗ + + + ᏖᏍᎳᏍ + {0} ᏖᏍᎳ + {0} ᏖᏍᎳᏍ + + + ᏪᏆᏍ + {0} ᏪᏆ + {0} ᏪᏆᏍ + + ᏚᏙᏢᏒ ᎢᏳᏓᎵ ᎢᏳᏔᎵᎳᏗᏅᏛ {0} ᎤᏙᏢᏒ ᎢᏳᏓᎵ ᎢᏳᏔᎵᎳᏗᏅᏛ {0} ᏚᏙᏢᏒ ᎢᏳᏓᎵ ᎢᏳᏔᎵᎳᏗᏅᏛ - - ᏚᎵᏏᏂᏒ - {0} ᎤᏒ - {0} ᏚᎵᏏᏂᏒ - {0}/ᎤᏒ - ᏅᎩ ᏫᏂᏚᏳᎪᏛᎢ {0} ᏗᎧᎸᎬ @@ -5893,7 +6029,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᏑᏓᎴᎩ {0} ᎢᏳᏓᎴᎩ - + + ᎢᎦᏛ + {0} ᎢᎦᏛ + {0} ᎢᎦᏛ + + ᏚᏙᏢᏒ/ᎢᏳᏆᏗᏅᏛ @@ -6278,12 +6419,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ᏗᏓᏇᏄᎩᏍᏗ {0} ᏗᏓᏇᏄᎩᏍᏗ + + {0} kat + {0} kat + + + cal-IT + {0} cal-IT + {0} cal-IT + ᎠᏨᏍᏗ {0} ᎠᏨᏍᏗ {0} ᎠᏨᏍᏗ - + ᏚᏙᏢᏒ/ᎢᏳᏔᎵᎳᏗᏅᏛ @@ -6394,7 +6544,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mmol/L {0}mmol/L - + + ᎢᎦᏛ + {0} ᎢᎦᏛ + {0} ᎢᎦᏛ + + ppm {0}ppm {0}ppm @@ -7108,20 +7263,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}qt-Imp. {0}qt-Imp. + + {0} kat + {0} kat + + + cal-IT + {0} cal-IT + {0} cal-IT + - ᎠᏨᏍᏗ {0}ᎠᏨᏍᏗ {0}ᎠᏨᏍᏗ - + + ppb {0}ppb {0}ppb - ᏚᎵᏏᏂᏒ {0}ᎤᏒ {0}ᏚᎵᏏᏂᏒ - {0}/ᎤᏒ {0}Ꮧ diff --git a/make/data/cldr/common/main/ckb.xml b/make/data/cldr/common/main/ckb.xml index a52891df344..a39ca3d5054 100644 --- a/make/data/cldr/common/main/ckb.xml +++ b/make/data/cldr/common/main/ckb.xml @@ -71,6 +71,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic چێرۆکی شایان کوردیی ناوەندی + کوردیی، سۆرانی کۆرسیکی فەرەنسیی سیشێلی چێکی @@ -193,9 +194,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic بافیا کۆلۆنی کوردی + کوردی + کرمانجی کوومیک کۆمی کۆڕنی + کوڤی كرگیزی لاتینی لادینۆ @@ -387,6 +391,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic وۆلۆف کالمیک سسوسا + کانگری سۆگا یانگبێن یێمبا @@ -395,6 +400,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic کانتۆنی ئەمازیغیی مەغریب چینی + جینی، مەنداری چینی (چینیی ئاسانکراو) چینی (چینیی دێرین) زوولوو @@ -535,6 +541,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic چین کۆلۆمبیا دوورگەی کلیپێرتۆن + سارک کۆستاریکا کووبا کەیپڤەرد @@ -597,6 +604,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic دوورگەی مان ھیندستان ھەرێمی بەریتانی لە ئۆقیانووسی ھیند + ھەرێمی بەریتانی لە ئۆقیانووسی ھیندی عێراق ئێران ئایسلەند @@ -662,6 +670,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic نائوروو نیووئی نیوزیلاند + نیوزلەندا عومان پاناما پێروو @@ -715,6 +724,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic تاجیکستان تۆکێلاو تیمۆری ڕۆژھەڵات + تەیموری ڕۆژهەڵات تورکمانستان توونس تۆنگا @@ -761,12 +771,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic ڕۆژژمێری چینی ڕۆژژمێری زاینیی + زاینی ڕۆژژمێری عیبری ڕۆژژمێری نەتەوەیی ھیندی - ڕۆژژمێری کۆچیی مانگی + ڕۆژژمێری کۆچیی + هیجری ISO-8601 ڕۆژژمێری ڕۆژژمێری کۆچیی ھەتاوی + فارسی ڕیزکردنی داواکری ستاندارد + ستاندارد ژمارە عەربی-ھیندییەکان ژمارە گوجەراتییەکان ژمارە خمێرییەکان @@ -818,7 +832,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd @@ -1124,6 +1138,47 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + موحەرەم + سەفەر + رەبیعی یەکەم + ڕەبیعی دووەم + جەمادی یەکەم + جەمادی دووەم + ڕەجەب + شەعبان + ڕەمەزان + شەوال + زولقەعدە + زولحجە + + + + + موحەرەم + سەفەر + رەبیعی یەکەم + ڕەبیعی دووەم + جەمادی یەکەم + جەمادی دووەم + ڕەجەب + شەعبان + ڕەمەزان + شەوال + زولقەعدە + زولحجە + + + + + + کۆچیی + + + @@ -1172,7 +1227,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic هەفتەی {0} - ڕۆژ دوێنێ ئەمڕۆ سبەی @@ -1202,6 +1256,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic بەکاتی {0} کاتی {0} هاوینە کاتی {0} فەرمی + + شوێنی نەناسراو + @@ -1229,24 +1286,75 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} {1} + + درهەمی ئیماڕاتی + ئەفغانیی ئەفغانستان + + درامی ئەرمینیایی + + + پێسۆی ئەرجەنتینی + + + دۆلاری ئوسترالی + + + مەنەتی ئازەربایجانی + + + تەکەی بەنگالی + دیناری بەحرەینی + + دۆلاری بروونایی + دۆلاری بەلیزی دۆلاری کەنەدی + + فرانکی سویسری + + + یەننی چینی + + + کرۆنی دانیمارکی + دیناری جەزائیری + + جونەی میسڕی + یورۆ + + دۆلاری فیجیی + + + پاوەنی بەریتانی + + + لاری جۆرجیی + + + ڕوپیەی ئیندۆنیزی + + + شەخەلی ئیسرائیلی + + + ڕوپیەی هیندی + دیناری عێراقی د.ع.‏ @@ -1257,18 +1365,90 @@ CLDR data files are interpreted according to the LDML specification (http://unic دیناری ئوردنی + + یەنی یابانی + + + سۆمی قیڕغستانی + + + ڕیالی کەمبۆدی + دیناری کووەیتی + + تەنگەی کازاخستانی + + + لیرەی کوبنانی + + + ڕوپیەی سریلانکی + + + دیناری لیبی + + + درهەمی مەغریبی + + + توگریکی مەنگۆلی + + + ڕوفیەی ماڵدیڤی + + + ڕینگەی مالیزی + + + کرۆنی نەرویجی + + + ڕوپیەی نیپاڵی + + + دۆلاری نیوزیکلەندی + ڕیاڵی عومانی + + کینای پاپوا گینیایی نوێ + + + پێسۆی فلیپینی + + + ڕوپیەی پاکستانی + ڕیاڵی قەتەری + + ڕوبڵی ڕووسی + ڕیاڵی سەعوودی + + دۆلاری دورگەی سۆلۆمۆن + + + جونەی سودانی + + + کرۆنی سویدی + + + دۆلاری سینگاپووری + + + سۆمۆنی تاجیکستانی + + + مەنەتی تورکمانستانی + دیناری توونس @@ -1278,9 +1458,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic دۆلاری ترینیداد و تۆباگۆ + + دۆلاری تایوانی نوێ + + + سۆمی ئۆزبەکستانی + + + دۆنگی ڤێتنامی + + + تەلەی ساموایی + زێڕ + + پارەی نەناسراو + + + ڕیالی یەمەنی + diff --git a/make/data/cldr/common/main/co.xml b/make/data/cldr/common/main/co.xml index b102b74c2bd..2110dece8a3 100644 --- a/make/data/cldr/common/main/co.xml +++ b/make/data/cldr/common/main/co.xml @@ -27,13 +27,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic inglese inglese australianu inglese canadianu - inglese americanu inglese (S.U.) spagnolu + estone finlandese francese francese canadianu francese sguizzeru + hindì (latinu) ungarese indunesianu talianu @@ -63,6 +64,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + @@ -73,67 +76,178 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mondu Africa Oceania + America Centrale Americhe + Australasia + Melanesia + Regione Micronesiana + Pulinesia Asia Europa America latina + Isula Ascension + Andorra + Emirati Arabi Uniti + Antigua è Barbuda + Anguilla + Albania + Armenia + Angola Antarticu + Argentina + Samoa Americana Austria Australia + Aruba + Bosnia è Herzegovina + Barbados Belgica + Bulgaria + Burundi + San Bartulumeu + Bermuda + Bolivia + Brasile + Belize Canada + Isule Cocos (Keeling) + Congo - Kinshasa + Congo (DRC) + Republica d’Africa Centrale + Congo - Brazzaville + Republica di u Congo Svizzera + Isule Cook + Cile China + Isula Clipperton Costa Rica Cuba - Republica cecca + Isula Christmas + Cecchia Alemagna + Diego Garcia Danimarca + Dominica Republica Duminicana + Algeria + Estonia + Egittu Spagna Unione europea + Eurozona Finlandia + Isule Falkland + Micronesia + Isule Faroe Francia Reame Unitu R.U. + Grenada + Georgia + Guiana francese + Gambia + Guadalupe Grecia Guatemala + Guiana + Isule Heard è McDonald + Croazia Ungheria Irlanda Israele + Isula di Man India Iran Islanda Italia + Jamaica Giappone + Comore + St. Kitts è Nevis Libanu Santa Lucia + Liberia + Lituania + Lettonia + LIbia + Monaco + Montenegro San Martinu + Isule Marshall + Mali Mungulia + Macao SAR China + Macao Martinica + Mauritania + Malta Messicu Malesia + Namibia + Nova Caledunia + Isula Norfolk + Nigeria Nicaragua Nederlanda Nurvegia + Nauru + Niue Nova Zelanda + Nova Zelanda Aotearoa Panama Perù + Pulinesia Francese + Papuasia Nova Guinea Filippine + St. Pierre è Miquelon + Isule Pitcairn + Puerto Rico Palestina Portugallu + Palau + Rumania Serbia Russia + Isule Solomon + Svezia + Slovenia Sluvacchia + Sierra Leone + San Marino + Somalia + Suriname + El Salvadore Siria + Tristan da Cunha + Isule Turks è Caicos + Togo + Tunisia + Tonga Turchia + Trinidad è Tobago + Tuvalu + Tanzania + Ucrania + Uganda + Isule U.S. Outlying Nazioni Unite Stati Uniti S.U. + Cità di u Vaticanu + Venezuela + Isule Vergine Britaniche + Isule Vergine Americane + Vanuatu + Wallis è Futuna + Samoa + Kosovo + Zambia regione scunnisciuta calendariu gregurianu + gregorianu calendariu ISO 8601 ordine di classificazione standardizatu cifri occidentale @@ -153,8 +267,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic [aà b c {chj} d eè f g {ghj} h iìï j l m n oò p q r s {sc} {sg} t uùü v z] [â æ ç éêë î k ñ ô œ úû w x yÿ] [A B C {CHJ} D E F G {GHJ} H I J L M N O P Q R S {SC} {SG} T U V Z] - [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] - {0}… + [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” « » ( ) \[ \] § @ * / \& # † ‡ ′ ″] + ? « @@ -168,12 +282,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - EEEE d MMMM 'di' 'u' y G + EEEE d LLLL 'di' 'u' y G - d MMMM 'di' 'u' y G + d LLLL 'di' 'u' y G @@ -200,7 +314,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {1} {0} + {1} 'à' {0} @@ -208,6 +322,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} + + E d + E h 'ore' + y G + MM-y G + dd-MM-y G + E dd-MM-y G + d MMM y G + E d MMM y G + dd-MM + E dd/MM + d MMM + E d MMM + d MMMM + MM/y G + dd/MM/y G + E dd/MM/y G + MMM y G + MMM d, y G + E d MMM y G + MMMM y G + QQQ y G + QQQQ y G + @@ -392,12 +530,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {1}, {0} + {1} 'à' {0} + + + {1} 'à' {0} + + + {1} 'à' {0} - {1}, {0} + {1} 'à' {0} + + + {1} 'à' {0} + + + {1} 'à' {0} @@ -407,7 +557,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {1} {0} + {1} 'à' {0} + + + {1} 'à' {0} + + + {1} 'à' {0} @@ -416,39 +572,80 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a y G + MM/y G dd/MM/y G - MMM y G - d MMM y G - E d MMM y G - h a + E dd/MM/y G + MMM 'di' 'u' y G + d MMM 'di' 'u' y G + E d MMM 'di' 'u' y G + HH'o' h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH'o' v dd/MM E dd/MM - d MMM + d 'di' MMM E d MMM d MMMM 'settimana' W MMMM MM/y dd/MM/y E dd/MM/y - MMM y - d MMM y - E d MMM y + MMM 'di' 'u' y + d 'di' MMM 'di' 'u' y + E d 'di' MMM 'di' 'u' y LLLL 'di' 'u' y QQQ y QQQQ 'di' 'u' y 'settimana' w 'di' 'u' Y + + y G – y G + y – y G + + + M/y G – M/y G + M/y – M/y G + M/y – M/y G + + + dd/MM/y – dd/MM/y G + dd/MM/y G – dd/MM/y G + dd/MM/y – dd/MM/y G + dd/MM/y – dd/MM/y G + + + E dd/MM/y – E dd/MM/y G + E dd/MM/y G – E dd/MM/y G + E dd/MM/y – E dd/MM/y G + E dd/MM/y – E dd/MM/y G + + + MMM 'di' 'u' y G – MMM 'di' 'u' y G + MMM – MMM 'di' 'u' y G + MMM 'di' 'u' y – MMM 'di' 'u' y G + + + d – d MMM 'di' 'u' y G + d MMM 'di' 'u' y G – d MMM 'di' 'u' y G + d MMM – d MMM 'di' 'u' y G + d MMM 'di' 'u' y – d MMM 'di' 'u' y G + + + E d MMM – E d MMM 'di' 'u' y G + E d MMM 'di' 'u' y G – E d MMM 'di' 'u' y G + E d MMM – E d MMM 'di' 'u' y G + E d MMM 'di' 'u' y – E d MMM 'di' 'u' y G + h a – h a h – h a - HH – HH + HH – HH 'o' h:mm a – h:mm a @@ -480,22 +677,51 @@ CLDR data files are interpreted according to the LDML specification (http://unic dd/MM – dd/MM - E dd/MM – dd/MM - E dd/MM – dd/MM + E dd/MM – E dd/MM + E dd/MM – E dd/MM - MMM – MMM + LLL – LLL + + + d–d 'di' LLL + d 'di' LLL – d 'di' LLL + + + E d 'di' MMM – E d 'di' MMM + E d 'di' MMM – E d 'di' MMM + + + MM/y – MM/y + MM/y – MM/y + + + dd/MM/y – dd/MM/y + dd/MM/y – dd/MM/y + dd/MM/y – dd/MM/y + + + E dd/MM/y – E dd/MM/y + E dd/MM/y – E dd/MM/y + E dd/MM/y – E dd/MM/y - MMM–MMM y + MMM – MMM 'di' 'u' y + MMM 'di' 'u' y – MMM 'di' 'u' y - d – d MMM y - d MMM y – d MMM y + d – d MMM 'di' 'u' y + d MMM – d MMM 'di' 'u' y + d MMM – d MMM 'di' 'u' y + + + E d 'di' LLL – E d 'di' LLL 'di' 'u' y + E d 'di' LLL – E d 'di' LLL 'di' 'u' y + E d 'di' LLL 'di' 'u' y – E d 'di' LLL 'di' 'u' y - LLLL–LLLL y - LLLL y – LLLL y + LLLL–LLLL 'di' 'u' y + LLLL 'di' 'u' y – LLLL 'di' 'u' y @@ -544,9 +770,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic sett. + settim. scorsa + sta settim. + settim. chì vene st. + settim. scorsa + sta settim. + settim. chì vene ghjornu @@ -613,7 +845,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ,   - @@ -622,13 +853,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00) ¤ + + + #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00) ¤ + #,##0.00 ¤;(#,##0.00) ¤ #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/cop.xml b/make/data/cldr/common/main/cop.xml index fe7f39e1517..1cfec40e8cc 100644 --- a/make/data/cldr/common/main/cop.xml +++ b/make/data/cldr/common/main/cop.xml @@ -10,9 +10,4199 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + ϯⲙⲉⲧⲁϥⲣⲓⲕⲁⲛⲍ + ϯⲙⲉⲧⲁⲕⲁⲛ + ϯⲙⲉⲧⲁⲙϩⲁⲣⲓ + ϯⲙⲉⲧⲁⲣⲁⲃⲟⲥ + ϯⲙⲉⲧⲁⲣⲁⲃⲟⲥ + ϯⲙⲉⲧⲁⲥⲥⲁⲙⲉⲥ + ϯⲙⲉⲧⲁⲥⲧⲟⲩⲣⲓ + ϯⲙⲉⲧⲁⲍⲉⲣⲃⲁϫⲁⲛⲓ + ϯⲙⲉⲧⲁⲍⲉⲣⲓ + ϯⲙⲉⲧⲃⲁⲗⲟⲩϣⲓ + ϯⲙⲉⲧⲃⲉⲗⲁⲣⲟⲩⲥⲓ + ϯⲙⲉⲧⲃⲟⲩⲗⲅⲁⲣⲓ + ϯⲙⲉⲧϩⲁⲣⲓⲁⲛⲃⲓ + ϯⲙⲉⲧⲃⲟϫⲡⲟⲩⲣⲓ + ϯⲙⲉⲧⲁⲛⲓⲓ + ϯⲙⲉⲧⲃⲁⲛⲅⲗⲓ + ϯⲙⲉⲧⲃⲣⲉⲧⲟⲛ + ϯⲙⲉⲧⲃⲟⲇⲟ + ϯⲙⲉⲧⲃⲟⲥⲛⲓ + ϯⲙⲉⲧⲕⲁⲧⲁⲗⲁⲛ + ϯⲙⲉⲧⲥⲉⲃⲟⲩⲁⲛ + ϯⲙⲉⲧϭⲉⲣⲟⲩⲕⲓ + ϯⲙⲉⲧⲣⲉⲙⲛ̀ⲭⲏⲙⲓ + ϯⲙⲉⲧϭⲉⲕⲓ + ϯⲙⲉⲧⲥⲟⲩⲁⲙⲡⲓ ⲕⲣⲓ + ϯⲙⲉⲧϭⲟⲩⲃⲁϣ + ϯⲙⲉⲧⲟⲩⲉⲗϣⲓ + ϯⲙⲉⲧⲇⲁⲛⲙⲁⲣⲕ + ϯⲙⲉⲧϫⲉⲣⲙⲁⲛⲓⲟⲥ + ϯⲙⲉⲧⲁⲗⲙⲁⲛⲓ ⲛ̀ⲁⲩⲥⲑⲣⲓⲁ + ϯⲙⲉⲧⲁⲗⲙⲁⲛⲓ ⲛ̀ⲥⲟⲩⲓⲥⲣⲁ ⲉⲧϭⲟⲥⲓ + ϯⲙⲉⲧⲇⲟⲣⲓ + ϯⲙⲉⲧⲥⲏⲧⲥⲟⲣⲃⲓ + ϯⲙⲉⲧⲉⲩⲉ + ⲙⲉⲧⲟⲩⲉⲓⲛⲓⲛ + ϯⲙⲉⲧⲁⲅⲅⲗⲉⲕⲟⲥ + ϯⲙⲉⲧⲁⲅⲅⲗⲉⲕⲟⲥ ⲛ̀ⲁⲩⲥⲑⲧⲣⲁⲗⲓⲁ + ϯⲙⲉⲧⲁⲅⲅⲗⲉⲕⲟⲥ ⲛ̀ⲕⲁⲛⲁⲇⲁ + ϯⲙⲉⲧⲁⲅⲅⲗⲉⲕⲟⲥ ⲙ̀ⲃⲣⲓⲑⲁⲛⲓⲁ + ϯⲙⲉⲧⲁⲅⲅⲗⲉⲕⲟⲥ ⲛ̀ϯⲙⲉⲧⲟⲩⲣⲟ ⲉⲧϩⲱⲧⲡ + ϯⲙⲉⲧⲁⲅⲅⲗⲉⲕⲟⲥ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁ + ϯⲙⲉⲧⲉⲥⲡⲉⲣⲁⲛⲑⲟ + ϯⲙⲉⲧⲉⲥⲡⲁⲛⲓ + ϯⲙⲉⲧⲉⲥⲡⲁⲛⲓ ⲁⲙⲣⲓⲕⲁ ⲗⲁⲑⲓⲛⲓ + ϯⲙⲉⲧⲉⲥⲡⲁⲛⲓ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ϯⲙⲉⲧⲉⲥⲡⲁⲛⲓ ⲙ̀ⲙⲉⲝⲓⲕⲟ + ϯⲙⲉⲧⲉⲥⲑⲟⲛⲓⲁ + ϯⲙⲉⲧⲃⲁⲥⲕ + ϯⲙⲉⲧⲡⲉⲣⲥⲓⲥ + ϯⲙⲉⲧϥⲟⲩⲗⲁ + ϯⲙⲉⲧϥⲓⲛⲗⲁⲛⲇ + ϯⲙⲉⲧⲫⲓⲗⲓⲡⲓⲛ + ϯⲙⲉⲧϥⲁⲣⲟⲥⲉ + ϯⲙⲉⲧϥⲉⲣⲉⲛⲥⲉⲟⲥ + ϯⲙⲉⲧϥⲉⲣⲉⲛⲥⲉⲟⲥ ⲛ̀ⲕⲁⲛⲁⲇⲁ + ϯⲙⲉⲧϥⲉⲣⲉⲛⲥⲉⲟⲥ ⲛ̀ⲥⲟⲩⲓⲥⲣⲁ + ϯⲙⲉⲧϥⲣⲓⲍⲓ ⲛ̀ⲉⲙⲉⲛⲧ + ϯⲙⲉⲧⲁⲓⲉⲣⲗⲁⲛⲇⲓ + ϯⲙⲉⲧϫⲁ + ϯⲙⲉⲧⲥⲕⲟⲧⲗⲁⲛⲇ ⲅⲁⲗⲓⲕⲓ + ϯⲙⲉⲧⲅⲁⲗⲉⲕⲟⲥ + ϯⲙⲉⲧⲅⲟⲩϫⲁⲣⲁⲑⲓ + ϯⲙⲉⲧϩⲁⲩⲍⲁ + ϯⲙⲉⲧϩⲉⲃⲣⲉⲟⲥ + ϯⲙⲉⲧϩⲉⲛⲧⲟⲩ + ϯⲙⲉⲧϩⲉⲛⲧⲟⲩ ⲛ̀ⲗⲁⲧⲓⲛⲓ + ϯⲙⲉⲧϩⲓⲛⲅⲗⲓϣ + ϯⲙⲉⲧⲕⲣⲟⲩⲁⲑⲓ + ϯⲙⲉⲧⲥⲟⲣⲃⲓ ⲛ̀ϣⲱⲓ + ϯⲙⲉⲧϩⲁⲛⲅⲁⲣⲓ + ϯⲙⲉⲧⲁⲣⲙⲉⲛⲓⲟⲥ + ϯⲙⲉⲧⲓⲛⲑⲉⲣⲗⲓⲛⲅⲟⲩⲓ + ϯⲙⲉⲧⲓⲛⲇⲟⲛⲓⲥⲓ + ϯⲙⲉⲧⲓⲛⲑⲉⲣⲗⲓⲛⲅⲟⲩⲓ + ϯⲙⲉⲧⲓⲅⲃⲟ + ϯⲙⲉⲧⲥⲓϣⲟⲩⲁⲛ + ϯⲙⲉⲧⲁⲓⲥⲗⲁⲛⲇ + ϯⲙⲉⲧϩⲓⲧⲁⲗⲓⲕⲟⲥ + ϯⲙⲉⲧⲓⲁⲡⲁⲛⲓ + ϯⲙⲉⲧϫⲁⲃⲁⲛⲓ + ϯⲙⲉⲧⲅⲉⲟⲣⲅⲓⲟⲥ + ϯⲙⲉⲧⲕⲁⲃⲟⲩⲃⲉⲣⲇⲓⲁⲛⲟⲩ + ϯⲙⲉⲧⲕⲁⲓⲛⲅⲁⲛⲅⲓ + ϯⲙⲉⲧⲕⲁⲍⲁϧⲓ + ϯⲙⲉⲧϧⲙⲉⲣⲓ + ϯⲙⲉⲧⲕⲁⲛⲛⲁⲇⲓ + ϯⲙⲉⲧⲕⲟⲣⲓ + ϯⲙⲉⲧⲕⲟⲛⲕⲁⲛⲓ + ϯⲙⲉⲧⲕⲁϣⲙⲓⲣⲓ + ϯⲙⲉⲧⲕⲟⲩⲣⲇⲓ + ϯⲙⲉⲧⲕⲟⲩⲣⲇⲓ + ϯⲙⲉⲧⲕⲩⲣⲙⲁⲛϫⲓ + ϯⲙⲉⲧⲕⲟⲩⲓ + ϯⲙⲉⲧⲕⲩⲣⲅⲩⲍⲓ + ϯⲙⲉⲧⲗⲟⲩⲝⲟⲙⲃⲟⲩⲣⲓ + ϯⲙⲉⲧⲗⲓⲅⲟⲩⲣⲓ + ϯⲙⲉⲧⲗⲟⲙⲃⲁⲣⲇⲓ + ϯⲙⲉⲧⲗⲁⲟ + ϯⲙⲉⲧⲗⲓⲑⲟⲩⲁⲛⲓ + ϯⲙⲉⲧⲗⲁⲧⲃⲓ + ϯⲙⲉⲧⲙⲁⲓⲑⲓⲗⲓ + ϯⲙⲉⲧⲙⲁⲟⲣⲓ + ϯⲙⲉⲧⲙⲁⲕⲉⲇⲟⲛⲓ + ϯⲙⲉⲧⲙⲁⲗⲁⲓⲁⲗⲁⲙ + ϯⲙⲉⲧⲙⲟⲛⲅⲟⲗⲓ + ϯⲙⲉⲧⲙⲁⲛⲓⲡⲟⲩⲣⲓ + ϯⲙⲉⲧⲙⲁⲣⲁⲑⲓ + ϯⲙⲉⲧⲙⲁⲗⲁⲓ + ϯⲙⲉⲧⲙⲁⲗⲑⲓ + ϩⲁⲛⲙⲏϣ ⲛ̀ⲁⲥⲡⲓ + ϯⲙⲉⲧⲃⲟⲩⲣⲙⲓ + ϯⲙⲉⲧⲥⲏⲧϫⲉⲣⲙⲁⲛⲓ + ϯⲙⲉⲧⲛⲉⲡⲁⲗⲓ + ϯⲙⲉⲧϩⲟⲗⲁⲛⲇ + ϯⲙⲉϥⲗⲁⲙⲁⲛⲕ + ϯⲙⲉⲧⲛⲟⲣⲟⲩⲓⲅⲓ ⲛⲩⲛⲟⲣⲥⲕ + ϯⲙⲉⲧⲛⲟⲣⲟⲩⲓⲅⲓ + ϯⲙⲉⲧⲛ̀ⲕⲟ + ϯⲙⲉⲧⲥⲟⲑⲟⲛ̀ϩⲏⲧ + ϯⲙⲉⲧⲟⲕⲥⲓⲧⲁⲛ + ϯⲙⲉⲧⲟⲣⲟⲙⲟ + ϯⲙⲉⲧⲟⲇⲓ + ϯⲙⲉⲧⲡⲟⲩⲛϫⲁⲃⲓ + ϯⲙⲉⲧⲛⲁⲓϫⲓⲣⲓ + ϯⲙⲉⲧⲡⲟⲗⲁⲛⲇⲓ + ϯⲙⲉⲧⲡⲣⲟⲩⲥⲓ + ϯⲙⲉⲧⲡⲁϣⲑⲟ + ϯⲙⲉⲧⲡⲟⲣⲧⲟⲩⲅⲁⲗⲓ + ϯⲙⲉⲧⲡⲟⲣⲧⲟⲩⲅⲁⲗⲓ ⲙ̀ⲃⲣⲁⲍⲓⲗ + ϯⲙⲉⲧⲡⲟⲣⲧⲟⲩⲅⲁⲗⲓ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ϯⲙⲉⲧⲕⲟⲩⲉϣⲟⲩⲁ + ϯⲙⲉⲧⲣⲁϫⲁⲥⲑⲁⲛⲓ + ϯⲙⲉⲧⲣⲟⲙⲁⲛϣⲓ + ϯⲙⲉⲧⲣⲟⲙⲁⲛⲓ + ϯⲙⲉⲧⲣⲟⲩⲥⲓ + ϯⲙⲉⲧⲕⲓⲛⲓⲁⲣⲟⲩⲁⲛⲇⲓ + ϯⲙⲉⲧⲥⲁⲛⲥⲕⲣⲓⲑ + ϯⲙⲉⲧⲓⲁⲕⲟⲩⲧ + ϯⲙⲉⲧⲥⲁⲛⲑⲁⲗⲓ + ϯⲙⲉⲧⲥⲁⲣⲇⲓⲛⲓ + ϯⲙⲉⲧⲥⲓⲛⲇⲓ + ϯⲙⲉⲧⲥⲓⲛϩⲁⲗⲁ + ϯⲙⲉⲧⲥⲗⲟⲃⲁⲕ + ϯⲙⲉⲧⲥⲗⲟⲃⲉⲛⲓ + ϯⲙⲉⲧⲥⲟⲙⲁⲗⲓ + ϯⲙⲉⲧⲁⲗⲃⲁⲛⲓⲁ + ϯⲙⲉⲧⲥⲉⲣⲃⲓ + ϯⲙⲉⲧⲥⲟⲑⲟ ⲛ̀ⲣⲏⲥ + ϯⲙⲉⲧⲥⲟⲩⲇⲁⲛⲓ + ϯⲙⲉⲧⲥⲟⲩⲓⲇⲓ + ϯⲙⲉⲧⲥⲟⲩⲁϩⲓⲗⲓ + ϯⲙⲉⲧⲁⲥⲥⲩⲣⲟⲥ + ϯⲙⲉⲧⲥⲓⲗⲉⲥⲓⲁⲛ + ϯⲙⲉⲧⲑⲁⲙⲓⲗⲓ + ϯⲙⲉⲧⲑⲉⲗⲟⲩⲅⲟⲩ + ϯⲙⲉⲧⲑⲁϫⲓⲕⲓ + ϯⲙⲉⲧⲑⲁⲓⲗⲁⲛⲇⲓ + ϯⲙⲉⲧⲑⲓⲅⲣⲓⲛⲓ + ϯⲙⲉⲧⲑⲟⲩⲣⲕⲙⲁⲛⲓ + ϯⲙⲉⲧⲑ̀ⲥⲟⲩⲁⲛⲓ + ϯⲙⲉⲧⲑⲟⲛⲅⲁⲛⲓ + ϯⲙⲉⲧⲭⲟⲝⲓⲥ + ϯⲙⲉⲧⲑⲁⲣⲑⲁⲣ + ϯⲙⲉⲧⲟⲩⲏⲅⲟⲩⲣ + ϯⲙⲉⲧⲟⲩⲕⲣⲁⲛⲓ + ⲟⲩⲁⲥⲡⲓ ⲛ̀ⲁⲧⲥⲟⲩⲏⲛ + ϯⲙⲉⲧⲟⲩⲣⲇⲟⲩ + ϯⲙⲉⲧⲟⲩⲍⲃⲉⲕⲓ + ϯⲙⲉⲧⲃⲉⲛⲉⲑⲓ + ϯⲙⲉⲧⲃⲓⲉⲑⲛⲁⲙⲓ + ϯⲙⲉⲧⲙⲁϧⲟⲩⲁ + ϯⲙⲉⲧⲟⲩⲟⲗⲟϥ + ϯⲙⲉⲧⲝⲟⲍⲁ + ϯⲙⲉⲧⲕⲁⲛⲅⲣⲓ + ϯⲙⲉⲧⲓⲟⲣⲟⲩⲃⲁ + ϯⲙⲉⲧⲛⲓⲛⲅⲁⲧⲟⲩ + ϯⲙⲉⲧⲕⲁⲛⲑⲟⲛⲓ + ϯⲙⲉⲧϭⲓⲛⲁ, ϯⲙⲉⲧⲕⲁⲛⲑⲟⲛⲓ + ϯⲙⲉⲧⲍⲟⲩⲁⲛⲅ + ϯⲙⲉⲧϭⲓⲛⲁ + ϯⲙⲉⲧϭⲓⲛⲁ, ⲙⲁⲛⲇⲁⲣⲓⲛ + ϯⲙⲉⲧϭⲓⲛⲁ ⲛ̀ϩⲁⲡⲗⲟⲩⲥ + ϯⲙⲉⲧⲙⲁⲛⲇⲁⲣⲓⲛ ⲛ̀ϭⲓⲛⲁ ⲛ̀ⲁⲡⲗⲟⲩⲥ + ϯⲙⲉⲧϭⲛⲓⲁ ⲛ̀ⲣⲉⲙⲕⲁϩⲥ + ϯⲙⲉⲧⲙⲁⲛⲇⲁⲣⲓⲛ ⲛ̀ϭⲓⲛⲁ ⲛ̀ⲣⲉⲙⲕⲁϩⲥ + ϯⲙⲉⲧⲍⲟⲩⲗⲟⲩ + ⲙ̀ⲙⲟⲛ ⲁⲥⲡⲓ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ⲡⲓⲑⲟ + ϯⲫⲣⲓⲕⲓⲁ + ϯⲁⲙⲉⲣⲓⲕⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + ϯⲁⲙⲉⲣⲓⲕⲁ ⲙ̀ⲡⲓⲣⲏⲥ + ϯⲟⲥⲉⲁⲛⲓⲁ + ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲉⲙⲉⲛⲧ + ϯⲁⲙⲉⲣⲓⲕⲁ ⲛ̀ⲑⲙⲏϯ + ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲉⲓⲉⲃⲧ + ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + ϯⲫⲣⲓⲕⲓⲁ ⲛ̀ⲑⲙⲏϯ + ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲓⲣⲏⲥ + ⲛⲓⲁⲙⲉⲣⲓⲕⲁ + ϯⲁⲙⲉⲣⲓⲕⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + ϯⲕⲁⲣⲓⲃⲓ + ϯⲁⲥⲓⲁ ⲙ̀ⲡⲉⲓⲉⲃⲧ + ϯⲁⲥⲓⲁ ⲙ̀ⲡⲓⲣⲏⲥ + ϯⲁⲥⲓⲁ ⲙ̀ⲡⲓⲣⲏⲥ ⲓⲉⲃⲧ + ϯⲉⲩⲣⲟⲡⲁ ⲙ̀ⲡⲓⲣⲏⲥ + ϯⲁⲩⲥⲧⲣⲁⲗⲁⲍⲓⲁ + ϯⲙⲁⲉⲗⲁⲛⲉⲍⲓⲁ + ϯⲙⲓⲕⲣⲟⲛⲉⲍⲓⲁ + ϯⲡⲟⲗⲩⲛⲉⲍⲓⲁ + ϯⲁⲥⲓⲁ + ϯⲁⲥⲓⲁ ⲛ̀ⲑⲙⲏϯ + ϯⲁⲥⲓⲁ ⲙ̀ⲡⲉⲙⲉⲛⲧ + ϯⲉⲩⲣⲟⲡⲁ + ϯⲉⲩⲣⲟⲡⲁ ⲙ̀ⲡⲉⲓⲉⲃⲧ + ϯⲉⲩⲣⲟⲡⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + ϯⲉⲩⲣⲟⲡⲁ ⲙ̀ⲡⲉⲙⲉⲛⲧ + ϯⲫⲣⲓⲕⲓⲁ ⲉⲧⲥⲏⲧ ⲙ̀ⲡϣⲁϥⲉ + ϯⲁⲙⲉⲣⲓⲕⲁ ⲛ̀ⲗⲁⲑⲓⲛⲓ + ϯⲙⲟⲩⲓ ⲛ̀ⲁⲥⲉⲛϣⲓⲟⲛ + ϯⲁⲛⲇⲟⲣⲁ + ⲛⲓⲉⲙⲁⲣⲁⲧ ⲛ̀ⲁⲣⲁⲃⲟⲥ ⲉⲧϩⲱⲧⲡ + ϯⲁϥⲅⲁⲛⲓⲥⲑⲁⲛ + ⲁⲛⲧⲓⲅⲟⲩⲁ & ⲃⲁⲣⲃⲟⲩⲇⲁ + ϯⲁⲛⲅⲟⲩⲓⲗⲗⲁ + ϯⲁⲗⲃⲁⲛⲓⲁ + ϯⲁⲣⲙⲉⲛⲓⲁ + ϯⲁⲛⲅⲟⲗⲁ + ⲁⲛⲑⲁⲣⲕⲧⲓⲕⲁ + ϯⲁⲣϫⲉⲛⲧⲓⲛ + ⲥⲁⲙⲟⲩⲁ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁⲛⲟⲥ + ϯⲁⲩⲥⲑⲣⲓⲁ + ϯⲁⲩⲥⲑⲧⲣⲁⲗⲓⲁ + ϯⲁⲣⲟⲩⲃⲁ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲁⲗⲁⲛⲇ + ⲁⲇⲟⲩⲣⲃⲁⲇⲁⲅⲁⲛ + ϯⲃⲟⲥⲛⲓⲁ & ϩⲉⲣⲍⲉⲅⲟⲃⲓⲛⲁ + ϯⲃⲁⲣⲃⲁⲇⲟⲥ + ϯⲃⲁⲛⲅⲗⲁⲇⲉϣ + ϯⲃⲉⲗϫⲓⲕⲁ + ⲃⲟⲩⲣⲕⲓⲛⲁ ϥⲁⲥⲟ + ϯⲃⲟⲩⲗⲅⲁⲣⲓⲁ + ϯⲃⲁϩⲣⲉⲛ + ϯⲃⲟⲩⲣⲟⲩⲛⲇⲓ + ϯⲃⲉⲛⲓⲛ + ⲥⲁⲛⲧ ⲃⲁⲣⲑⲉⲗⲉⲙⲓ + ϯⲃⲉⲣⲙⲟⲩⲇⲁ + ϯⲃⲣⲟⲩⲛⲉⲓ + ϯⲃⲟⲗⲓⲃⲓⲁ + ϯⲕⲁⲣⲓⲃⲓ ⲛ̀ϩⲟⲗⲗⲁⲛⲇⲁ + ϯⲃⲣⲁⲍⲓⲗ + ϯⲃⲁϩⲁⲙⲁ + ϯⲃϩⲟⲩⲑⲁⲛ + ϯⲙⲟⲩⲓ ⲛ̀ⲃⲟⲩⲃⲉⲧ + ϯⲃⲟⲑⲥⲟⲩⲁⲛⲁ + ϯⲃⲉⲗⲁⲣⲟⲩⲥ + ϯⲃⲉⲗⲓⲍⲉ + ϯⲕⲁⲛⲁⲇⲁ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲟⲕⲟⲥ + ⲕⲟⲛⲅⲟ ⲕⲓⲛϣⲁⲥⲁ + ⲕⲟⲛⲅⲟ ⲇⲣⲥ + ϯⲙⲉⲧϣ̀ⲗⲟⲗ ⲙ̀ⲫⲣⲓⲕⲓⲁ ⲛ̀ⲑⲙⲏϯ + ⲕⲟⲛⲅⲟ - ⲃⲣⲁⲍⲁⲃⲓⲗ + ϯⲕⲟⲛⲅⲟ + ϯⲥⲟⲩⲓⲥⲣⲁ + ϯⲕⲟⲧ ⲇⲓⲃⲟⲩⲁⲣ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲟⲩⲕ + ϯϭⲓⲗⲉ + ϯⲕⲁⲙⲉⲣⲟⲩⲛ + ϯϭⲓⲛⲁ + ϯⲕⲟⲗⲟⲙⲃⲓⲁ + ϯⲙⲟⲩⲓ ⲛ̀ⲕⲗⲓⲡⲉⲣⲑⲟⲛ + ⲥⲁⲣⲕ + ⲕⲟⲥⲑⲁ ⲣⲓⲕⲁ + ϯⲕⲟⲩⲃⲁ + ϯⲕⲁⲡ ⲃⲉⲣⲇⲉ + ϯⲕⲟⲩⲣⲁⲥⲁⲟ + ϯⲙⲟⲩⲓ ⲛ̀ⲭⲣⲓⲥⲧⲙⲁⲥ + ⲕⲩⲡⲣⲟⲥ + ϯϭⲉⲕⲓⲁ + ϯⲙⲉⲧϣ̀ⲗⲟⲗ ⲛ̀ϭⲉⲕ + ϯⲁⲗⲙⲁⲛⲓⲁ + ⲇⲓⲉⲅⲟ ⲅⲁⲣⲥⲓⲁ + ϯⲇϫⲓⲃⲟⲩⲑⲓ + ϯⲇⲉⲛⲙⲁⲣⲕ + ϯⲇⲟⲙⲓⲛⲓⲕⲁ + ϯⲇⲟⲙⲓⲛⲓⲕⲁⲛ + ϯⲁⲗϫⲉⲣⲓⲁ + ⲥⲉⲩⲑⲁ & ⲙⲉⲗⲓⲗⲗⲁ + ϯⲉⲕⲟⲩⲁⲇⲟⲣ + ϯⲉⲥⲑⲟⲛⲓⲁ + ⲭⲏⲙⲓ + ⲡⲓϣⲁϥⲉ ⲙ̀ⲡⲉⲙⲉⲛⲧ + ϯⲉⲣⲓⲑⲣⲓⲁ + ⲉⲥⲡⲁⲛⲓⲁ + ⲉⲑⲁⲩϣ + ϯⲙⲉⲧⲣⲉⲙⲉⲩⲣⲟⲡⲁ ⲉⲧϩⲱⲧⲡ + ϯⲉⲩⲣⲟⲍⲟⲛ + ϯϥⲓⲛⲗⲁⲛⲇ + ϥⲓⲇϫⲓ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ϥⲟⲕⲗⲁⲛⲇ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ϥⲟⲕⲗⲁⲛⲇ (ⲓⲥⲗⲁⲥ ⲙⲁⲗⲃⲓⲛⲁⲥ) + ⲙⲓⲕⲣⲟⲛⲉⲍⲓⲁ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ϥⲁⲣⲟⲉ + ϯϥⲉⲣⲉⲛⲥⲁ + ϯⲅⲁⲃⲟⲛ + ϯⲙⲉⲧⲟⲩⲣⲟ ⲉⲧϩⲱⲧⲡ + ϯⲅⲣⲉⲛⲁⲇⲁ + ϯⲅⲉⲟⲣⲅⲓⲁ + ϯⲅⲟⲩⲓⲁⲛⲁ ⲛ̀ϥⲉⲣⲉⲛⲥⲉⲟⲥ + ϯⲅⲟⲩⲉⲣⲛⲉⲥⲓ + ϯⲅⲁⲛⲁ + ϯϫⲓⲃⲣⲁⲗⲑⲁⲣ + ϯⲅⲣⲓⲛⲗⲁⲛⲇ + ϯⲅⲁⲙⲃⲓⲁ + ϯⲅⲓⲛⲉⲁ + ϯⲅⲟⲩⲁⲇⲉⲗⲟⲩⲡ + ⲅⲓⲛⲉⲁ ⲛ̀ⲉⲕⲟⲩⲁⲑⲱⲣ + ϯⲉⲗⲗⲁⲥ + ϫⲉⲟⲣϫⲓⲁ ⲛ̀ⲣⲏⲥ & ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲥⲁⲛⲇⲟⲩⲓϭ + ϯⲅⲟⲩⲁⲑⲉⲙⲁⲗⲁ + ⲅⲟⲩⲁⲙ + ϯⲅⲓⲛⲉⲁ ⲃⲓⲥⲁⲩ + ϯⲅⲩⲁⲛⲁ + ϩⲟⲛⲅ ⲕⲟⲛⲅ ⲥⲁⲣ ϭⲓⲛⲁ + ϯϩⲟⲛⲅ ⲕⲟⲛⲅ + ϩⲉⲣⲇ & ⲛⲓⲙⲟⲩⲓ ⲙ̀ⲙⲁⲕⲇⲟⲛⲁⲗⲇ + ϯϩⲟⲛⲇⲟⲩⲣⲁⲥ + ϯⲕⲣⲟⲁⲑⲓⲁ + ϯϩⲁⲓⲑⲓ + ϯϩⲁⲛⲅⲁⲣⲓⲁ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲁⲛⲁⲣⲓ + ϯⲓⲛⲇⲟⲛⲉⲥⲓⲁ + ϯⲁⲓⲉⲣⲗⲁⲛⲇⲁ + ⲡⲓⲥⲣⲁⲏⲗ + ⲅⲟⲩⲉⲣⲛⲥⲓ + ϯϩⲉⲛⲧⲟⲩ + ⲛⲓⲑⲱϣ ⲙⲃⲣⲓⲑⲁⲛⲓⲁ ⲛ̀ⲱⲕⲉⲁⲛⲟⲥ ⲛ̀ϩⲉⲛⲧⲟⲩ + ⲡⲓⲁⲣⲭⲏⲡⲉⲗⲁⲅⲟ ⲛ̀ϭⲁⲅⲟⲥ + ⲓⲣⲁⲕ + ϯⲡⲉⲣⲥⲓⲁ + ϯⲁⲓⲥⲗⲁⲛⲇⲁ + ϯϩⲩⲧⲁⲗⲓⲁ + ϯϫⲉⲣⲥⲓ + ϯϫⲁⲙⲁⲓⲕⲁ + ⲡⲓⲓⲟⲣⲇⲁⲛⲏⲥ + ϯⲓⲁⲡⲁⲛ + ϯⲕⲉⲛⲓⲁ + ϯⲕⲩⲣⲅⲩⲥⲑⲁⲛ + ϯⲕⲁⲙⲃⲟⲇⲓⲁ + ⲕⲓⲣⲓⲃⲁⲑⲓ + ϯⲕⲟⲙⲟⲣⲟⲥ + ⲥⲁⲛⲧ ⲕⲓⲧⲥ & ⲛⲉⲃⲓⲥ + ϯⲕⲟⲣⲉⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + ϯⲕⲟⲣⲉⲁ ⲙ̀ⲡⲓⲣⲏⲥ + ⲕⲟⲩⲉⲧ + ϯⲕⲁⲓⲙⲁⲛ ⲙⲟⲩⲓ + ϯⲕⲁⲍⲁϧⲉⲥⲑⲁⲛ + ϯⲗⲁⲟⲥ + ⲡⲓⲖⲓⲃⲁⲛⲟⲥ + ⲥⲁⲛⲧ ⲗⲟⲩϭⲓⲁ + ϯⲗⲓϣⲑⲉⲛϣⲑⲁⲓⲛ + ϯⲥⲣⲓⲗⲁⲛⲕⲁ + ϯⲗⲓⲃⲉⲣⲓⲁ + ϯⲗⲉⲥⲟⲑⲟ + ϯⲗⲓⲑⲟⲩⲁⲛⲓⲁ + ϯⲗⲟⲩⲝⲟⲙⲃⲟⲩⲣⲅ + ϯⲗⲁⲑⲃⲓⲁ + ⲗⲩⲃⲓⲏ + ϯⲙⲁⲣⲁⲕⲉϣ + ϯⲙⲟⲛⲁⲕⲟ + ϯⲙⲟⲗⲇⲟⲃⲁ + ϯⲙⲟⲛⲑⲉⲛⲉⲅⲣⲟ + ⲥⲁⲛⲧ ⲙⲁⲣⲑⲓⲛ + ϯⲙⲁⲇⲁⲅⲁⲥⲕⲁⲣ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲙⲁⲣϣⲁⲗ + ϯⲙⲁⲕⲉⲇⲟⲛⲓⲁ ⲛ̀ⲉⲙϩⲓⲧ + ϯⲙⲁⲗⲓ + ϯⲙⲩⲁⲛⲙⲁⲣ + ϯⲙⲁⲛⲅⲟⲗⲓⲁ + ⲙⲁⲕⲁⲟ ⲥⲁⲣ ϭⲓⲛⲁ + ϯⲙⲁⲕⲁⲟ + ⲛⲓⲙⲟⲓ ⲙ̀ⲡⲉⲙϩⲓⲧ ⲙ̀ⲙⲁⲣⲓⲁⲛⲁ + ϯⲙⲁⲣⲑⲓⲛⲓⲕ + ϯⲙⲁⲩⲣⲓⲑⲁⲛⲓⲁ + ϯⲙⲟⲛⲥⲉⲣⲁⲧ + ϯⲙⲁⲗⲑⲁ + ϯⲙⲁⲩⲣⲓⲑⲓⲟⲩⲥ + ⲙⲁⲗⲇⲓⲃ + ϯⲙⲁⲗⲁⲩⲓ + ϯⲙⲉⲝⲓⲕⲟ + ϯⲙⲁⲗⲉⲍⲓⲁ + ϯⲙⲟⲍⲁⲙⲃⲓⲕ + ϯⲛⲁⲙⲓⲃⲓⲁ + ⲛⲓⲟⲩ ⲕⲁⲗⲉⲇⲟⲛⲓⲁ + ϯⲛⲓϫⲉⲣ + ϯⲙⲟⲩⲓ ⲛⲛ̀ⲟⲣϥⲟⲕ + ϯⲛⲓϫⲉⲣⲓⲁ + ϯⲛⲓⲕⲁⲣⲁⲅⲩⲟⲁ + ϯϩⲟⲗⲁⲛⲇⲁ + ϯⲛⲟⲣⲟⲩⲓϫⲓⲁ + ϯⲛⲉⲡⲁⲗ + ⲛⲁⲩⲣⲟⲩ + ⲛⲓⲟⲩⲉ + ⲛⲓⲟⲩⲍⲓⲗⲁⲛⲇⲁ + ⲁⲟⲑⲉⲁⲣⲟⲁ ⲛⲓⲟⲩ ⲍⲓⲗⲁⲛⲇⲁ + ⲟⲙⲁⲛ + ϯⲡⲁⲛⲁⲙⲁ + ϯⲡⲉⲣⲟⲩ + ⲡⲟⲗⲓⲛⲉⲍⲓⲁ ⲛ̀ϥⲉⲣⲉⲛⲥⲟⲥ + ⲡⲁⲡⲟⲩⲁ ⲛⲓⲟⲩ ⲅⲓⲛⲉⲁ + ϯⲫⲓⲗⲓⲡⲡⲓⲛ + ϯⲡⲁⲕⲓⲥⲑⲁⲛ + ϯⲡⲟⲗⲁⲛⲇⲁ + ⲥⲁⲛⲧ ⲡⲓⲉⲣ & ⲙⲓⲕⲉⲗⲟⲛ + ⲛⲓⲙⲟⲩⲓ ⲙ̀ⲡⲓⲑⲕⲉⲣⲛ + ⲡⲟⲩⲉⲣⲑⲟ ⲣⲓⲕⲟ + ⲫⲩⲗⲓⲥⲧⲓⲓⲙ + ϯⲡⲟⲣⲑⲟⲩⲅⲁⲗ + ⲡⲁⲗⲁⲩ + ϯⲡⲁⲣⲁⲅⲟⲩⲁⲓ + ⲕⲁⲑⲁⲣ + ϯⲟⲥⲉⲁⲛⲓⲁ + ϯⲣⲉⲓⲟⲩⲛⲓⲟⲛ + ϯⲣⲟⲙⲁⲛⲓⲁ + ϯⲥⲉⲣⲃⲓⲁ + ϯⲣⲟⲩⲥⲓⲁ + ϯⲣⲟⲩⲁⲛⲇⲁ + ϯⲥⲁⲟⲩⲇⲓ ⲛ̀ⲁⲣⲁⲃⲟⲥ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲥⲟⲗⲟⲙⲟⲛ + ϯⲥⲓϭⲉⲗ + ϯⲥⲟⲩⲇⲁⲛ + ϯⲥⲟⲩⲉⲇ + ϯⲥⲓⲛⲅⲁⲡⲟⲣ + ⲥⲁⲛⲧ ϩⲉⲗⲁⲛⲁ + ϯⲥⲗⲟⲃⲉⲛⲓⲁ + ⲥⲃⲁⲗⲃⲁⲣⲇ & ⲓⲁⲛ ⲙⲁⲩⲉⲛ + ϯⲥⲗⲟⲃⲁⲕⲓⲁ + ϯⲥⲓⲉⲣⲁ ⲗⲉⲟⲛ + ⲥⲁⲛ ⲙⲁⲣⲓⲛⲟ + ϯⲥⲉⲛⲉⲅⲁⲗ + ϯⲥⲟⲙⲁⲗⲓⲁ + ϯⲥⲟⲩⲣⲓⲛⲁⲙ + ϯⲥⲟⲩⲇⲁⲛ ⲛ̀ⲣⲏⲥ + ⲥⲁⲟ ⲑⲟⲙⲉ & ⲡⲣⲓⲛⲥⲓⲡ + ⲉⲗ ⲥⲁⲗⲃⲁⲇⲟⲣ + ⲥⲓⲛⲧ ⲙⲁⲁⲣⲑⲉⲛ + ϯⲥⲩⲣⲓⲁ + ϯⲉⲥⲟⲩⲁⲑⲓⲛⲓ + ϯⲥⲟⲩⲁⲍⲓⲗⲁⲛⲇ + ⲑⲣⲓⲥⲑⲁⲛ ⲇⲁ ⲕⲟⲩⲛϩⲁ + ⲑⲟⲩⲣⲕϣ & ⲕⲁⲓⲕⲟⲥ + ϯϭⲁⲇ + ⲛⲓⲑⲱϣ ⲛ̀ϥⲉⲣⲉⲛⲥⲟⲥ ⲙ̀ⲙⲁⲣⲏⲥ + ϯⲑⲟⲅⲟ + ϯⲑⲁⲓⲗⲁⲛⲇ + ϯⲑⲁϫⲓⲕⲓⲥⲑⲁⲛ + ⲑⲟⲕⲉⲗⲁⲩ + ϯⲑⲙⲟⲣ - ⲗⲉⲥⲑⲉ + ϯⲑⲓⲙⲟⲣ ⲙ̀ⲡⲉⲓⲉⲃⲧ + ϯⲑⲟⲩⲣⲕⲙⲁⲛⲓⲥⲑⲁⲛ + ϯⲑⲟⲩⲛⲓⲥ + ⲑⲟⲛⲅⲁ + ϯⲑⲟⲩⲣⲕⲓⲁ + ⲧⲣⲓⲛⲓⲇⲁⲇ & ⲧⲟⲃⲁⲅⲟ + ⲑⲟⲩⲃⲁⲗⲟⲩ + ϯⲑⲁⲓⲟⲩⲁⲛ + ϯⲑⲁⲛⲍⲁⲛⲓⲁ + ϯⲟⲩⲕⲣⲁⲛⲓⲁ + ϯⲟⲩⲅⲁⲛⲇⲁ + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲁⲩⲑⲗⲁⲓⲛⲅ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁ + ⲛⲓϣ̀ⲗⲟⲗ ⲉⲧϩⲱⲧⲡ + ⲛⲓⲑⲱϣ ⲉⲧϩⲱⲧⲡ + ϯⲟⲩⲣⲟⲅⲟⲩⲁⲓ + ϯⲟⲩⲍⲃⲉⲕⲓⲥⲑⲁⲛ + ϯⲃⲁⲧⲓⲕⲁⲛ + ⲥⲁⲛ ⲃⲓⲛⲥⲉⲛⲧ & ⲅⲣⲉⲛⲁⲇⲓⲛⲍ + ϯⲃⲉⲛⲉⲍⲟⲩⲉⲗⲁ + ⲃⲓⲣϫⲓⲛ ⲙⲟⲩⲓ ⲃⲣⲓⲑⲁⲛⲓⲁ + ⲃⲓⲣϫⲓⲛ ⲙⲟⲩⲓ ⲁⲙⲉⲣⲓⲕⲁ + ϯⲃⲓⲉⲑⲛⲁⲙ + ⲃⲁⲛⲁⲑⲟⲩ + ⲟⲩⲁⲗⲗⲓⲥ & ϥⲟⲩⲧⲟⲩⲛⲁ + ⲥⲁⲙⲟⲁ + ⲯⲉⲩⲇⲟ ϫⲓⲛⲧⲁⲟⲩⲟ + ⲯⲉⲩⲇⲟ ⲃⲓⲇⲓ + ϯⲕⲟⲥⲟⲃⲟ + ⲓⲉⲙⲉⲛ + ϯⲙⲁⲓⲟⲧ + ϯⲫⲣⲓⲕⲓⲁ ⲛ̀ⲣⲏⲥ + ϯⲍⲁⲙⲃⲓⲁ + ϯⲍⲓⲙⲃⲁⲃⲟⲩⲉ + ⲟⲩⲙⲁ ⲛ̀ⲁⲧⲥⲟⲩⲏⲛ + + + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ + + + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲙ̀ⲣⲉⲙⲛ̀ⲃⲟⲩⲇⲁ + ⲣⲉⲙⲛ̀ⲃⲟⲩⲇⲁ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ϭⲓⲛⲁ + ⲣⲉⲙⲛ̀ϭⲓⲛⲁ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲭⲏⲙⲓ + ⲣⲉⲙⲛ̀ⲭⲏⲙⲓ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲇⲁⲛⲅⲓ + ⲣⲉⲙⲛ̀ⲇⲁⲛⲅⲓ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲉⲑⲁⲩϣ + ⲣⲉⲙⲛ̀ⲉⲑⲁⲩϣ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲉⲑⲁⲩϣ ⲛ̀ⲁⲙⲉⲑⲉ ⲁⲗⲉⲙ + ⲣⲉⲙⲛ̀ⲉⲑⲁⲩϣ ⲛ̀ⲁⲙⲉⲑⲉ ⲁⲗⲉⲙ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲙ̀ⲙⲉⲧⲅⲣⲩⲅⲟⲣⲓⲟⲥ + ⲙⲉⲧⲅⲣⲩⲅⲟⲣⲓⲟⲥ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ϩⲉⲃⲣⲉⲟⲥ + ⲙⲉⲧϩⲉⲃⲣⲉⲟⲥ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ϩⲓϫⲣⲓ + ϯⲙⲉⲧϩⲓϫⲣⲓ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ϩⲓϫⲣⲁ (ⲑⲁⲃⲩⲗⲁⲣ, ⲉⲡⲟϧ) + ⲣⲉⲙⲛⲛ̀ϩⲓϫⲣⲓ (ⲑⲁⲃⲩⲗⲁⲣ, ⲉⲡⲟϧ) + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ϩⲓϫⲣⲓ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ϩⲓϫⲣⲓ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ϩⲓϫⲣⲓ + ϯⲙⲉⲧϩⲓϫⲣⲓ (ⲟⲩⲙ ⲁⲗ ⲕⲟⲩⲣⲁ) + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲙ̀ⲙⲉⲧⲅⲣⲩⲅⲟⲣⲓⲟⲥ (ⲣⲟⲙⲡⲓ ⲛ̀ϣⲱⲣⲡ) + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲁⲡⲁⲛⲓ + ⲣⲉⲙⲛ̀ⲓⲁⲡⲁⲛⲓ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲉⲣⲥⲟⲥ + ⲣⲉⲙⲛ̀ⲡⲉⲣⲥⲟⲥ + ϯⲙⲉⲧⲥⲱⲟⲩⲧⲉⲛ ⲙ̀ⲙⲓⲛⲅⲟⲩⲟ + ⲙⲓⲛⲅⲟⲩⲟ + + + ϯⲁⲥⲡⲓ: {0} + ⲡ̀ϫⲓⲛⲥ̀ϧⲁⲓ: {0} + ϯⲭⲱⲣⲁ: {0} + + [ⲁ ⲃ ⲅ ⲇ ⲉ ⲋ ⲍ ⲏ ⲑ ⲓ ⲕ ⲗ ⲙ ⲛ ⲝ ⲟ ⲡ ⲣ ⲥ ⲧ ⲩ ⲫ ⲭ ⲯ ⲱ ϣ ϥ ϧ ϩ ϫ ϭ ϯ] [⳥ ⳦ ⳧ ⳨ ⳩ ⳪ ⳤ] [– ⸗ , ; \: . ⳹ ⳾ ⳼ ⳿ ( )] + + + + + + + Ⲑⲱⲟⲩⲧ + Ⲡⲁⲟⲡⲓ + Ⲁⲑⲱⲣ + Ⲭⲟⲓⲁⲕ + Ⲧⲱⲃⲓ + Ⲙⲉϣⲓⲣ + Ⲡⲁⲣⲉⲙϩⲁⲧ + Ⲫⲁⲣⲙⲟⲩⲑⲓ + Ⲡⲁϣⲟⲛⲥ + Ⲡⲁⲱⲛⲓ + Ⲉⲡⲓⲡ + Ⲙⲉⲥⲱⲣⲓ + Ⲡⲓⲕⲟⲩϫⲓ ⲛ̀ⲁ̀ⲃⲟⲧ + + + ⲁ̅ + ⲃ̅ + ⲅ̅ + ⲇ̅ + ⲉ̅ + ⲋ̅ + ⲍ̅ + ⲏ̅ + ⲑ̅ + ⲓ̅ + ⲓ̅ⲁ̅ + ⲓ̅ⲃ̅ + ⲓ̅ⲅ̅ + + + Ⲑⲱⲟⲩⲧ + Ⲡⲁⲟⲡⲓ + Ⲁⲑⲱⲣ + Ⲭⲟⲓⲁⲕ + Ⲧⲱⲃⲓ + Ⲙⲉϣⲓⲣ + Ⲡⲁⲣⲉⲙϩⲁⲧ + Ⲫⲁⲣⲙⲟⲩⲑⲓ + Ⲡⲁϣⲟⲛⲥ + Ⲡⲁⲱⲛⲓ + Ⲉⲡⲓⲡ + Ⲙⲉⲥⲱⲣⲓ + Ⲡⲓⲕⲟⲩϫⲓ ⲛ̀ⲁ̀ⲃⲟⲧ + + + + + Ⲑⲱⲟⲩⲧ + Ⲡⲁⲟⲡⲓ + Ⲁⲑⲱⲣ + Ⲭⲟⲓⲁⲕ + Ⲧⲱⲃⲓ + Ⲙⲉϣⲓⲣ + Ⲡⲁⲣⲉⲙϩⲁⲧ + Ⲫⲁⲣⲙⲟⲩⲑⲓ + Ⲡⲁϣⲟⲛⲥ + Ⲡⲁⲱⲛⲓ + Ⲉⲡⲓⲡ + Ⲙⲉⲥⲱⲣⲓ + Ⲡⲓⲕⲟⲩϫⲓ ⲛ̀ⲁ̀ⲃⲟⲧ + + + ⲁ̅ + ⲃ̅ + ⲅ̅ + ⲇ̅ + ⲉ̅ + ⲋ̅ + ⲍ̅ + ⲏ̅ + ⲑ̅ + ⲓ̅ + ⲓ̅ⲁ̅ + ⲓ̅ⲃ̅ + ⲓ̅ⲅ̅ + + + Ⲑⲱⲟⲩⲧ + Ⲡⲁⲟⲡⲓ + Ⲁⲑⲱⲣ + Ⲭⲟⲓⲁⲕ + Ⲧⲱⲃⲓ + Ⲙⲉϣⲓⲣ + Ⲡⲁⲣⲉⲙϩⲁⲧ + Ⲫⲁⲣⲙⲟⲩⲑⲓ + Ⲡⲁϣⲟⲛⲥ + Ⲡⲁⲱⲛⲓ + Ⲉⲡⲓⲡ + Ⲙⲉⲥⲱⲣⲓ + Ⲡⲓⲕⲟⲩϫⲓ ⲛ̀ⲁ̀ⲃⲟⲧ + + + + + + + + + ⲓⲁⲛⲟⲩⲁⲣⲓ + ⲫⲉⲃⲣⲟⲩⲁⲣⲓ + ⲙⲁⲣⲧⲓ + ⲁⲡⲣⲓⲗⲓ + ⲙⲁⲓⲟ + ⲓⲟⲩⲛⲓⲟⲩ + ⲓⲟⲩⲗⲓⲟⲩ + ⲁⲩⲅⲟⲩⲥⲑⲟⲩ + ⲥⲉⲡⲧⲉⲙⲃⲣⲓ + ⲟⲕⲧⲱⲃⲣⲓ + ⲛⲟⲉⲙⲃⲣⲓ + ⲇⲉⲕⲉⲙⲃⲣⲓ + + + + + + + + + + + + + + + + + ⲓⲁⲛⲟⲩⲁⲣⲓ + ⲫⲉⲃⲣⲟⲩⲁⲣⲓ + ⲙⲁⲣⲧⲓ + ⲁⲡⲣⲓⲗⲓ + ⲙⲁⲓⲟ + ⲓⲟⲩⲛⲓⲟⲩ + ⲓⲟⲩⲗⲓⲟⲩ + ⲁⲩⲅⲟⲩⲥⲑⲟⲩ + ⲥⲉⲡⲧⲉⲙⲃⲣⲓ + ⲟⲕⲧⲱⲃⲣⲓ + ⲛⲟⲉⲙⲃⲣⲓ + ⲇⲉⲕⲉⲙⲃⲣⲓ + + + + + ⲓⲁⲛⲟⲩⲁⲣⲓ + ⲫⲉⲃⲣⲟⲩⲁⲣⲓ + ⲙⲁⲣⲧⲓ + ⲁⲡⲣⲓⲗⲓ + ⲙⲁⲓⲟ + ⲓⲟⲩⲛⲓⲟⲩ + ⲓⲟⲩⲗⲓⲟⲩ + ⲁⲩⲅⲟⲩⲥⲑⲟⲩ + ⲥⲉⲡⲧⲉⲙⲃⲣⲓ + ⲟⲕⲧⲱⲃⲣⲓ + ⲛⲟⲉⲙⲃⲣⲓ + ⲇⲉⲕⲉⲙⲃⲣⲓ + + + + + + + + + + + + + + + + + ⲓⲁⲛⲟⲩⲁⲣⲓ + ⲫⲉⲃⲣⲟⲩⲁⲣⲓ + ⲙⲁⲣⲧⲓ + ⲁⲡⲣⲓⲗⲓ + ⲙⲁⲓⲟ + ⲓⲟⲩⲛⲓⲟⲩ + ⲓⲟⲩⲗⲓⲟⲩ + ⲁⲩⲅⲟⲩⲥⲑⲟⲩ + ⲥⲉⲡⲧⲉⲙⲃⲣⲓ + ⲟⲕⲧⲱⲃⲣⲓ + ⲛⲟⲉⲙⲃⲣⲓ + ⲇⲉⲕⲉⲙⲃⲣⲓ + + + + + + + ⲡⲓⲁ̅ + ⲡⲓⲃ̅ + ⲡⲓⲅ̅ + ⲡⲓⲇ̅ + ⲡⲓⲉ̅ + ⲡⲓⲋ̅ + ⲡⲓⲍ̅ + + + ⲡⲓⲁ̅ + ⲡⲓⲃ̅ + ⲡⲓⲅ̅ + ⲡⲓⲇ̅ + ⲡⲓⲉ̅ + ⲡⲓⲋ̅ + ⲡⲓⲍ̅ + + + ⲡⲓⲁ̅ + ⲡⲓⲃ̅ + ⲡⲓⲅ̅ + ⲡⲓⲇ̅ + ⲡⲓⲉ̅ + ⲡⲓⲋ̅ + ⲡⲓⲍ̅ + + + ⲡⲓⲟⲩⲁⲓ + ⲡⲓⲥ̀ⲛⲁⲩ + ⲡⲓϣⲟⲙⲧ + ⲡⲓϥ̀ⲧⲟⲩ + ⲡⲓⲧ̀ⲓⲟⲩ + ⲡⲓⲥⲟⲟⲩ + ⲡⲓϣⲁϣϥ + + + + + ⲡⲓⲁ̅ + ⲡⲓⲃ̅ + ⲡⲓⲅ̅ + ⲡⲓⲇ̅ + ⲡⲓⲉ̅ + ⲡⲓⲋ̅ + ⲡⲓⲍ̅ + + + ⲡⲓⲁ̅ + ⲡⲓⲃ̅ + ⲡⲓⲅ̅ + ⲡⲓⲇ̅ + ⲡⲓⲉ̅ + ⲡⲓⲋ̅ + ⲡⲓⲍ̅ + + + ⲡⲓⲁ̅ + ⲡⲓⲃ̅ + ⲡⲓⲅ̅ + ⲡⲓⲇ̅ + ⲡⲓⲉ̅ + ⲡⲓⲋ̅ + ⲡⲓⲍ̅ + + + ⲡⲓⲟⲩⲁⲓ + ⲡⲓⲥ̀ⲛⲁⲩ + ⲡⲓϣⲟⲙⲧ + ⲡⲓϥ̀ⲧⲟⲩ + ⲡⲓⲧ̀ⲓⲟⲩ + ⲡⲓⲥⲟⲟⲩ + ⲡⲓϣⲁϣϥ + + + + + + + ⲡⲓⲁ̅ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲃ︦ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲅ︦ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲇ︦ ⲛ̀ⲣⲉϥⲧⲟⲩ + + + ⲁ̅ + ⲃ̅ + ⲅ̅ + ⲇ̅ + + + ⲡⲓϩⲟⲩⲓⲧ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲥ̀ⲛⲁⲩ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩϣⲟⲙⲧ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩϥ̀ⲧⲟⲩ ⲛ̀ⲣⲉϥⲧⲟⲩ + + + + + ⲡⲓⲁ̅ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲃ︦ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲅ︦ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲇ︦ ⲛ̀ⲣⲉϥⲧⲟⲩ + + + ⲁ̅ + ⲃ̅ + ⲅ̅ + ⲇ̅ + + + ⲡⲓϩⲟⲩⲓⲧ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩⲥ̀ⲛⲁⲩ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩϣⲟⲙⲧ ⲛ̀ⲣⲉϥⲧⲟⲩ + ⲡⲓⲙⲁϩϥ̀ⲧⲟⲩ ⲛ̀ⲣⲉϥⲧⲟⲩ + + + + + + + Ϧ︦Ⲙ︦ + Ⲙ︦Ⲙ︦ + + + Ϧ︦Ⲙ︦ + Ⲙ︦Ⲙ︦ + + + ϧⲁϫⲉⲛ ⲙⲉⲣⲓ + ⲙⲉⲛⲉⲛⲥⲁ ⲙⲉⲣⲓ + + + + + Ϧ︦Ⲙ︦ + Ⲙ︦Ⲙ︦ + + + Ϧ︦Ⲙ︦ + Ⲙ︦Ⲙ︦ + + + ϧⲁϫⲉⲛ ⲙⲉⲣⲓ + ⲙⲉⲛⲉⲛⲥⲁ ⲙⲉⲣⲓ + + + + + + ϧⲁϫⲉⲛ ⲡⲓⲭⲣⲓⲥⲧⲟⲥ + ϧⲁϫⲉⲛ ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲓⲛⲟⲛ + ⲙⲉⲛⲉⲛⲥⲁ ⲡⲓⲭⲣⲓⲥⲧⲟⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲓⲛⲟⲛ + + + ϧⲁϫⲉⲛ ⲡⲭ︦ⲥ︦ + Ϧ︦Ⲥ︦Ⲕ︦ + ⲙⲉⲛⲉⲛⲥⲁ ⲡⲭ︦ⲥ︦ + Ⲥ︦Ⲕ︦ + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + E h:mm a + E h:mm:ss a + h:mm a + h:mm:ss a + h:mm:ss a v + h:mm a v + + + + + + + + ⲙⲟⲩϩ. + ⲥⲁϥ. + ⲣⲁⲃ. I + ⲣⲁⲃ. II + ϫⲟⲩⲙ. I + ϫⲟⲩⲙ. II + ⲣⲁϫ. + ϣⲁ. + ⲣⲁⲙ. + ϣⲁⲩ. + ⲇⲟⲩⲗ-ⲕ. + ⲇⲟⲩⲗ-ϩ. + + + ⲁ̅ + ⲃ̅ + ⲅ̅ + ⲇ̅ + ⲉ̅ + ⲋ̅ + ⲍ̅ + ⲏ̅ + ⲑ̅ + ⲓ̅ + ⲓ̅ⲁ̅ + ⲓ̅ⲃ̅ + + + ⲙⲟⲩϩⲁⲣⲣⲁⲙ + ⲥⲁϥⲁⲣ + ⲣⲁⲃⲓʻ I + ⲣⲁⲃⲓʻ II + ϫⲟⲩⲙⲁⲇⲁ I + ϫⲟⲩⲙⲁⲇⲁ II + ⲣⲁϫⲁⲃ + ϣⲁʻⲃⲁⲛ + ⲣⲁⲙⲁⲇⲁⲛ + ϣⲁⲟⲩⲁⲗ + ⲇⲟⲩⲗ-ⲕⲓʻⲇⲁϩ + ⲇⲟⲩⲗ-ϩⲓϫϫⲁ + + + + + ⲙⲟⲩϩ. + ⲥⲁϥ. + ⲣⲁⲃ. I + ⲣⲁⲃ. II + ϫⲟⲩⲙ. I + ϫⲟⲩⲙ. II + ⲣⲁϫ. + ϣⲁ. + ⲣⲁⲙ. + ϣⲁⲩ. + ⲇⲟⲩⲗ-ⲕ. + ⲇⲟⲩⲗ-ϩ. + + + ⲁ̅ + ⲃ̅ + ⲅ̅ + ⲇ̅ + ⲉ̅ + ⲋ̅ + ⲍ̅ + ⲏ̅ + ⲑ̅ + ⲓ̅ + ⲓ̅ⲁ̅ + ⲓ̅ⲃ̅ + + + ⲙⲟⲩϩⲁⲣⲣⲁⲙ + ⲥⲁϥⲁⲣ + ⲣⲁⲃⲓʻ I + ⲣⲁⲃⲓʻ II + ϫⲟⲩⲙⲁⲇⲁ I + ϫⲟⲩⲙⲁⲇⲁ II + ⲣⲁϫⲁⲃ + ϣⲁʻⲃⲁⲛ + ⲣⲁⲙⲁⲇⲁⲛ + ϣⲁⲟⲩⲁⲗ + ⲇⲟⲩⲗ-ⲕⲓʻⲇⲁϩ + ⲇⲟⲩⲗ-ϩⲓϫϫⲁ + + + + + + ⲁϩ + + + + + + + ⲡ̀ⲥⲏⲟⲩ + + + ⲡ̀ⲥⲏⲟⲩ + + + ⲡ̀ⲥⲏⲟⲩ + + + ⲣⲟⲙⲡⲓ + ϯⲣⲟⲙⲡⲓ ⲉⲧⲁⲥⲥⲓⲛⲓ + ⲧⲁⲓⲣⲟⲙⲡⲓ ⲑⲁⲓ + ϯⲣⲟⲙⲡⲓ ⲉⲑⲛⲏⲟⲩ + + + ⲣⲟⲙⲡⲓ + ϯⲣⲟⲙⲡⲓ ⲉⲧⲁⲥⲥⲓⲛⲓ + ⲧⲁⲓⲣⲟⲙⲡⲓ ⲑⲁⲓ + ϯⲣⲟⲙⲡⲓ ⲉⲑⲛⲏⲟⲩ + + + ⲣⲟⲙⲡⲓ + ϯⲣⲟⲙⲡⲓ ⲉⲧⲁⲥⲥⲓⲛⲓ + ⲧⲁⲓⲣⲟⲙⲡⲓ ⲑⲁⲓ + ϯⲣⲟⲙⲡⲓ ⲉⲑⲛⲏⲟⲩ + + + ⲣⲉϥⲧⲟⲩ + ⲡⲓⲣⲉϥⲧⲟⲩ ⲛ̀ϧⲁⲉ + ⲡⲁⲓⲣⲉϥⲧⲟⲩ + ⲡⲓⲣⲉϥⲧⲟⲩ ⲉⲑⲛⲏⲟⲩ + + + ⲣⲉϥⲧⲟⲩ + + + ⲣⲉϥⲧⲟⲩ + + + ⲁⲃⲟⲧ + ⲡⲓⲁⲃⲟⲧ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁⲃⲟⲧ ⲫⲁⲓ + ⲡⲓⲁⲃⲟⲧ ⲉⲑⲛⲏⲟⲩ + + + ⲁⲃⲟⲧ + ⲡⲓⲁⲃⲟⲧ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁⲃⲟⲧ ⲫⲁⲓ + ⲡⲓⲁⲃⲟⲧ ⲉⲑⲛⲏⲟⲩ + + + ⲁⲃⲟⲧ + ⲡⲓⲁⲃⲟⲧ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁⲃⲟⲧ ⲫⲁⲓ + ⲡⲓⲁⲃⲟⲧ ⲉⲑⲛⲏⲟⲩ + + + ⲁⲛϣⲁϣϥ + ⲡⲓⲁⲛϣⲁϣϥ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁⲛϣⲁϣϥ ⲫⲁⲓ + ⲡⲓⲁⲛϣⲁϣϥ ⲉⲑⲛⲏⲟⲩ + + + ⲁⲛϣⲁϣϥ + ⲡⲓⲁⲛϣⲁϣϥ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁⲛϣⲁϣϥ ⲫⲁⲓ + ⲡⲓⲁⲛϣⲁϣϥ ⲉⲑⲛⲏⲟⲩ + + + ⲁⲛϣⲁϣϥ + ⲡⲓⲁⲛϣⲁϣϥ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁⲛϣⲁϣϥ ⲫⲁⲓ + ⲡⲓⲁⲛϣⲁϣϥ ⲉⲑⲛⲏⲟⲩ + + + ⲁⲛϣⲁϣϥ ⲙ̀ⲡⲓⲁⲃⲟⲧ + + + ⲁⲛϣⲁϣϥ ⲙ̀ⲡⲓⲁⲃⲟⲧ + + + ⲁⲛϣⲁϣϥ ⲙ̀ⲡⲓⲁⲃⲟⲧ + + + ⲉϩⲟⲟⲩ + ⲛ̀ⲥⲁϥ + ⲙ̀ⲫⲟⲟⲩ + ⲛ̀ⲣⲁⲥϯ + + + ⲉϩⲟⲟⲩ + ⲛ̀ⲥⲁϥ + ⲙ̀ⲫⲟⲟⲩ + ⲛ̀ⲣⲁⲥϯ + + + ⲉϩⲟⲟⲩ + ⲛ̀ⲥⲁϥ + ⲙ̀ⲫⲟⲟⲩ + ⲛ̀ⲣⲁⲥϯ + + + ⲉϩⲟⲟⲩ ⲛ̀ϯⲣⲟⲙⲡⲓ + + + ⲉϩⲟⲟⲩ ⲛ̀ϯⲣⲟⲙⲡⲓ + + + ⲉϩⲟⲟⲩ ⲛ̀ϯⲣⲟⲙⲡⲓ + + + ⲉϩⲟⲟⲩ ⲙ̀ⲡⲓⲁⲛϣⲁϣϥ + + + ⲉϩⲟⲟⲩ ⲙ̀ⲡⲓⲁⲛϣⲁϣϥ + + + ⲉϩⲟⲟⲩ ⲙ̀ⲡⲓⲁⲛϣⲁϣϥ + + + ⲛⲓⲉϩⲟⲟⲩ ⲙ̀ⲡⲓⲁⲛϣⲁϥ ⲙ̀ⲡⲓⲁⲃⲟⲧ + + + ⲛⲓⲉϩⲟⲟⲩ ⲙ̀ⲡⲓⲁⲛϣⲁϥ ⲙ̀ⲡⲓⲁⲃⲟⲧ + + + ⲛⲓⲉϩⲟⲟⲩ ⲙ̀ⲡⲓⲁⲛϣⲁϥ ⲙ̀ⲡⲓⲁⲃⲟⲧ + + + ⲡⲓⲟⲩⲁⲓ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲟⲩⲁⲓ ⲫⲁⲓ + ⲡⲓⲟⲩⲁⲓ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲁ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁ̅ ⲫⲁⲓ + ⲡⲓⲁ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲁ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲁ̅ ⲫⲁⲓ + ⲡⲓⲁ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲥ̀ⲛⲁⲩ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲥⲛⲁⲩ ⲫⲁⲓ + ⲡⲓⲥ̀ⲛⲁⲩ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲃ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲃ̅ ⲫⲁⲓ + ⲡⲓⲃ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲃ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲃ̅ ⲫⲁⲓ + ⲡⲓⲃ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓϣⲟⲙⲧ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓϣⲟⲙⲧ ⲫⲁⲓ + ⲡⲓϣⲟⲙⲧ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲅ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲅ̅ ⲫⲁⲓ + ⲡⲓⲅ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲅ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲅ̅ ⲫⲁⲓ + ⲡⲓⲅ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓϥ̀ⲧⲟⲩ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓϥ̀ⲧⲟⲩ ⲫⲁⲓ + ⲡⲓϥ̀ⲧⲟⲩ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲇ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲇ̅ ⲫⲁⲓ + ⲡⲓⲇ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲇ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲇ̅ ⲫⲁⲓ + ⲡⲓⲇ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲧ̀ⲓⲟⲩ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲧ̀ⲓⲟⲩ ⲫⲁⲓ + ⲡⲓⲧ̀ⲓⲟⲩ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲉ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲉ̅ ⲫⲁⲓ + ⲡⲓⲉ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲉ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲉ̅ ⲫⲁⲓ + ⲡⲓⲉ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲥⲟⲟⲩ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲥⲟⲟⲩ ⲫⲁⲓ + ⲡⲓⲥⲟⲟⲩ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲋ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲋ̅ ⲫⲁⲓ + ⲡⲓⲋ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲋ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲋ̅ ⲫⲁⲓ + ⲡⲓⲋ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓϣⲁϣϥ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓϣⲁϣϥ ⲫⲁⲓ + ⲡⲓϣⲁϣϥ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲍ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲍ̅ ⲫⲁⲓ + ⲡⲓⲍ̅ ⲉⲑⲛⲏⲟⲩ + + + ⲡⲓⲍ̅ ⲉⲧⲁϥⲥⲓⲛⲓ + ⲡⲁⲓⲍ̅ ⲫⲁⲓ + ⲡⲓⲍ̅ ⲉⲑⲛⲏⲟⲩ + + + ϧⲁϫⲉⲛ ⲙⲉⲣⲓ/ⲙⲉⲛⲉⲛⲥⲁ ⲙⲉⲣⲓ + + + ϧⲁϫⲉⲛ ⲙⲉⲣⲓ/ⲙⲉⲛⲉⲛⲥⲁ ⲙⲉⲣⲓ + + + ϧⲁϫⲉⲛ ⲙⲉⲣⲓ/ⲙⲉⲛⲉⲛⲥⲁ ⲙⲉⲣⲓ + + + ⲟⲩⲛⲟⲩ + ⲧⲁⲓⲟⲩⲛⲟⲩ ⲑⲁⲓ + + + ⲟⲩⲛⲟⲩ + + + ⲟⲩⲛⲟⲩ + + + ⲥⲟⲩⲥⲟⲩ + ⲡⲁⲓⲥⲟⲩⲥⲟⲩ ⲫⲁⲓ + + + ⲥⲟⲩⲥⲟⲩ + + + ⲥⲟⲩⲥⲟⲩ + + + ⲙⲁϩⲥ̀ⲛⲁⲩ + ϯⲛⲟⲩ + + + ⲙⲁϩⲥ̀ⲛⲁⲩ + + + ⲙⲁϩⲥ̀ⲛⲁⲩ + + + ϯⲍⲱⲛⲏ ⲙ̀ⲡⲓⲥⲏⲟⲩ + + + ϯⲍⲱⲛⲏ + + + ϯⲍⲱⲛⲏ + + + + ⲡ̀ⲥⲏⲟⲩ {0} + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ {0} + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ {0} + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲁⲑⲟⲗⲓⲕⲟⲛ + + + + ⲁⲧⲥⲱⲟⲩⲛ + + + ⲁⲛⲇⲟⲣⲣⲁ + + + ⲇⲟⲩⲃⲁⲓ + + + ⲕⲁⲃⲟⲩⲗ + + + ⲁⲛⲑⲓⲅⲁ + + + ⲁⲛⲅⲓⲗⲁ + + + ⲑⲓⲣⲁⲛⲁ + + + ⲓⲉⲣⲉⲃⲁⲛ + + + ⲗⲟⲩⲁⲛⲇⲁ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ⲣⲟⲑⲉⲣⲁ + + + ⲡⲁⲗⲙⲉⲣ ⲗⲁⲛⲇ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ⲑⲣⲟⲗⲗ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ϣⲟⲩⲁ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ⲙⲁⲩⲥⲟⲛ + + + ⲇⲁⲃⲓⲥ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ⲃⲟⲥⲑⲟⲕ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ⲕⲁⲍⲉⲓ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ⲇⲟⲩⲙⲟⲛⲧ ⲇⲟⲩⲣⲃⲓⲗ + + + ⲡⲓⲙⲁⲛ̀ⲟϩⲓ ⲛ̀ⲙⲕⲙⲟⲩⲣⲇⲟ + + + ⲣⲓⲟ ⲅⲁⲗⲗⲉⲅⲟⲥ + + + ⲙⲉⲛⲇⲟⲍⲁ + + + ⲥⲁⲛ ⲓⲟⲩⲁⲛ + + + ⲟⲩϣⲟⲩⲟⲩⲁⲓⲁ + + + ⲗⲁ ⲣⲓⲟϫⲁ + + + ⲥⲁⲛ ⲗⲟⲩⲓⲥ + + + ⲕⲁⲑⲁⲙⲁⲣⲕⲁ + + + ⲥⲁⲗⲑⲁ + + + ϫⲟⲩϫⲟⲩⲓ + + + ⲑⲟⲩⲕⲟⲩⲙⲁⲛ + + + ⲕⲟⲣⲇⲟⲃⲁ + + + ⲃⲟⲩⲉⲛⲟⲥ ⲁⲓⲣⲉⲥ + + + ⲡⲁⲅⲟ ⲡⲁⲅⲟ + + + ⲃⲓⲉⲛⲛⲁ + + + ⲡⲉⲣⲑ + + + ⲉⲩⲕⲗⲁ + + + ⲇⲁⲣⲟⲩⲓⲛ + + + ⲁⲇⲉⲗⲁⲓⲇ + + + ⲃⲣⲟⲕⲉⲛ ϩⲓⲗ + + + ⲙⲉⲗⲃⲟⲩⲣⲛ + + + ϩⲟⲃⲁⲣⲧ + + + ⲗⲓⲛⲇⲉⲙⲁⲛ + + + ⲥⲓⲇⲛⲉⲓ + + + ⲃⲣⲓⲥⲃⲁⲛ + + + ϯⲙⲟⲩⲓ ⲙ̀ⲙⲁⲕⲟⲩⲁⲣⲓ + + + ϯⲙⲟⲩⲓ ⲛ̀ⲗⲟⲣⲇ ϩⲟⲩⲉ + + + ⲁⲣⲟⲩⲃⲁ + + + ⲙⲁⲣⲓⲉϩⲁⲙⲛ + + + ⲃⲁⲕⲟⲩ + + + ⲥⲁⲣⲁⲓⲉⲃⲟ + + + ⲃⲁⲣⲃⲁⲇⲟⲥ + + + ⲇⲁⲕⲁ + + + ⲃⲣⲟⲩⲝⲉⲗ + + + ⲟⲩⲁⲅⲁⲇⲟⲩⲅⲟⲩ + + + ⲥⲟϥⲓⲁ + + + ⲃⲁϩⲣⲁⲓⲛ + + + ⲃⲟⲩϫⲟⲩⲙⲃⲟⲩⲣⲁ + + + ⲡⲟⲣⲑⲟ-ⲛⲟⲃⲟ + + + ⲥⲁⲛⲧ ⲃⲁⲣⲑⲉⲗⲉⲙⲓ + + + ⲃⲉⲣⲙⲟⲩⲇⲁ + + + ⲃⲣⲟⲩⲛⲉⲓ + + + ⲗⲁ ⲡⲁⲍ + + + ⲕⲣⲁⲗⲉⲛⲇⲓⲕ + + + ⲉⲓⲣⲟⲩⲛⲉⲡⲉ + + + ⲣⲓⲟ ⲃⲣⲁⲛⲕⲟ + + + ⲡⲟⲣⲑⲟ ⲃⲉⲗϩⲟ + + + ⲃⲟⲁ ⲃⲓⲥⲑⲁ + + + ⲙⲁⲛⲁⲩⲥ + + + ⲕⲟⲩⲓⲁⲃⲁ + + + ⲥⲁⲛⲑⲁⲣⲉⲙ + + + ⲕⲁⲙⲡⲟ ⲅⲣⲁⲛⲇⲉ + + + ⲃⲉⲗⲉⲙ + + + ⲁⲣⲁⲅⲟⲩⲁⲓⲛⲁ + + + ⲥⲁⲟ ⲡⲁⲩⲗⲟ + + + ⲃⲁϩⲓⲁ + + + ϥⲟⲣⲑⲁⲗⲉⲍⲁ + + + ⲙⲁⲥⲉⲓⲟ + + + ⲣⲉⲥⲓϥⲉ + + + ϥⲉⲣⲛⲁⲛⲇⲟ ⲇⲉ ⲛⲟⲣⲟⲛϩⲁ + + + ⲛⲁⲥⲥⲁⲩ + + + ⲑⲓⲙⲫⲟⲩ + + + ⲅⲁⲃⲟⲣⲟⲛ + + + ⲙⲓⲛⲥⲕ + + + ⲃⲉⲗⲓⲍⲉ + + + ⲇⲁⲩⲥⲟⲛ + + + ⲟⲩⲁⲓⲑϩⲱⲣⲥ + + + ⲓⲛⲟⲩⲃⲓⲕ + + + ⲃⲁⲛⲕⲟⲩⲃⲉⲣ + + + ϥⲟⲣⲧ ⲛⲉⲗⲥⲟⲛ + + + ⲇⲁⲩⲥⲟⲛ ⲕⲣⲓⲕ + + + ⲕⲣⲉⲥⲑⲟⲛ + + + ⲉⲇⲙⲟⲛⲑⲟⲛ + + + ⲥⲟⲩⲓϥⲧ ⲕⲁⲣⲉⲛⲧ + + + ⲧ̀ⲕⲟⲧⲥⲓ ⲛ̀ⲕⲁⲙⲃⲣⲓⲇϫ + + + ⲣⲉϫⲓⲛⲁ + + + ⲟⲩⲓⲛⲛⲓⲡⲉⲅ + + + ⲣⲉⲍⲟⲗⲟⲩⲑⲉ + + + ⲣⲁⲛⲕⲓⲛ ⲓⲛⲗⲉⲧ + + + ⲁⲑⲓⲕⲟⲕⲁⲛ + + + ⲑⲟⲣⲟⲛⲑⲟ + + + ⲓⲕⲁⲗⲟⲩⲓⲧ + + + ⲙⲟⲛⲕⲑⲟⲛ + + + ϩⲁⲗⲓϥⲁⲝ + + + ⲅⲟⲩⲥ ⲃⲁⲓ + + + ⲅⲗⲁⲥ ⲃⲁⲓ + + + ⲃⲗⲁⲛⲕ-ⲥⲁⲃⲗⲟⲛ + + + ⲥⲁⲛⲧ ϫⲟⲛⲍ + + + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲟⲕⲟⲥ + + + ⲕⲓⲛϣⲁⲥⲁ + + + ⲗⲟⲩⲃⲟⲩⲙⲃⲁϣⲓ + + + ⲃⲁⲛⲅⲟⲩⲓ + + + ⲃⲣⲁⲍⲁⲃⲓⲗ + + + ⲍⲟⲩⲣⲓϧ + + + ⲁⲃⲓϫⲓⲁⲛ + + + ⲣⲁⲣⲟⲑⲟⲛⲅⲁ + + + ⲙⲟⲩⲓ ⲛ̀ⲓⲥⲑⲉⲣ + + + ⲕⲟⲩϩⲁⲓⲕ + + + ⲡⲟⲩⲛⲑⲁ ⲁⲣⲉⲛⲁⲥ + + + ⲥⲁⲛⲑⲓⲁⲅⲟ + + + ⲇⲟⲩⲁⲗⲁ + + + ⲟⲩⲣⲟⲩⲙⲕⲓ + + + ϣⲁⲛⲅⲁⲓ + + + ⲃⲟⲅⲟⲑⲁ + + + ⲕⲟⲥⲑⲁ ⲣⲓⲕⲁ + + + ϩⲁⲃⲁⲛⲁ + + + ⲕⲁⲡ ⲃⲉⲣⲇ + + + ⲕⲟⲩⲣⲁⲕⲁⲟ + + + ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲣⲓⲥⲧⲙⲁⲥ + + + ⲛⲓⲕⲟⲥⲓⲁ + + + ϥⲁⲙⲁⲅⲟⲩⲥⲑⲁ + + + ⲡⲣⲁⲅ + + + ⲃⲟⲩⲍⲓⲛⲅⲉⲛ + + + ⲃⲉⲣⲗⲓⲛ + + + ϫⲓⲃⲟⲩⲑⲓ + + + ⲕⲟⲡⲉⲛϩⲁⲅⲉⲛ + + + ⲇⲟⲙⲓⲛⲓⲕⲁ + + + ⲥⲁⲛⲑⲟ ⲇⲟⲙⲓⲛⲅⲟ + + + ⲁⲗϫⲓⲉⲣ + + + ⲙⲟⲩⲓ ⲛ̀ⲅⲁⲗⲁⲡⲁⲅⲟⲥ + + + ⲅⲟⲩⲁⲓⲁⲕⲓⲗ + + + ⲑⲁⲗⲗⲓⲛ + + + ⲕⲁϩⲓⲣⲁ + + + ⲉⲗ ⲁⲓⲟⲩⲛ + + + ⲁⲥⲙⲁⲣⲁ + + + ⲕⲁⲛⲁⲣⲓⲥ + + + ⲥⲉⲩⲑⲁ + + + ⲙⲁⲇⲣⲓⲇ + + + ⲁⲇⲓⲥ ⲁⲃⲁⲃⲁ + + + ϩⲉⲗⲥⲉⲛⲕⲓ + + + ϥⲓϫⲓ + + + ⲥⲑⲁⲛⲗⲓ + + + ϭⲟⲩⲕ + + + ⲡⲟⲛϩⲡⲉⲓ + + + ⲕⲟⲥⲣⲁⲉ + + + ϥⲁⲣⲟⲉⲥ + + + ⲡⲁⲣⲓⲥ + + + ⲗⲓⲃⲣⲉⲃⲓⲗ + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲙⲃⲣⲓⲑⲁⲛⲓⲁ + + ⲗⲟⲛⲇⲟⲛ + + + ⲅⲣⲉⲛⲁⲇⲁ + + + ⲑⲉⲃⲗⲓⲥⲓ + + + ⲕⲁⲓⲉⲛⲛⲉ + + + ⲅⲟⲩⲉⲣⲛⲥⲓ + + + ⲁⲕⲣⲁ + + + ϫⲓⲃⲣⲁⲗⲑⲁⲣ + + + ⲑⲟⲩⲗⲉ + + + ⲛⲟⲩⲟⲩⲕ + + + ⲓⲑⲟⲕⲟⲣⲧⲟⲣⲙⲓⲧ + + + ⲇⲁⲛⲙⲁⲣⲕϣⲁⲃⲛ + + + ⲃⲁⲛϫⲟⲩⲗ + + + ⲕⲟⲛⲁⲕⲣⲓ + + + ⲅⲟⲩⲁⲇⲉⲗⲟⲩⲡ + + + ⲙⲁⲗⲁⲃⲟ + + + ⲁⲑⲏⲛⲁⲥ + + + ⲅⲉⲟⲣⲅⲓⲁ ⲙ̀ⲙⲁⲣⲏⲥ + + + ⲅⲟⲩⲁⲑⲉⲙⲁⲗⲁ + + + ⲅⲟⲩⲁⲙ + + + ⲃⲓⲥⲥⲁⲩ + + + ⲅⲓⲁⲛⲁ + + + ϩⲟⲛⲅ ⲕⲟⲛⲅ + + + ⲑⲉⲅⲟⲩⲥⲓⲅⲁⲗⲡⲁ + + + ⲍⲁⲅⲣⲉⲃ + + + ⲡⲟⲣⲧ-ⲁⲩ-ⲡⲣⲓⲛⲥ + + + ⲃⲟⲩⲇⲁⲡⲉⲥⲧ + + + ϫⲁⲕⲁⲣⲑⲁ + + + ⲡⲟⲛⲑⲓⲁⲛⲁⲕ + + + ⲙⲁⲕⲁⲥⲥⲁⲣ + + + ϫⲁⲓⲁⲡⲟⲩⲣⲁ + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲓⲉⲣⲗⲁⲛⲇⲁ + + ⲇⲟⲩⲃⲗⲓⲛ + + + ⲓⲉⲣⲟⲩⲥⲁⲗⲏⲙ + + + ⲁⲓⲥⲉⲗ ⲛ̀ⲙⲁⲛ + + + ⲕⲁⲗⲕⲟⲑⲁ + + + ϣⲁⲅⲟⲥ + + + ⲃⲁⲅⲇⲁⲇ + + + ⲑⲉϩⲣⲁⲛ + + + ⲣⲉⲕⲓⲁⲃⲓⲕ + + + ⲣⲱⲙⲏ + + + ϫⲉⲣⲥⲓ + + + ϫⲁⲙⲁⲓⲕⲁ + + + ⲁⲙⲙⲁⲛ + + + ⲑⲟⲕⲓⲟ + + + ⲛⲁⲓⲣⲟⲃⲓ + + + ⲃⲓϣⲕⲉⲕ + + + ⲫⲛⲟⲙ ⲡⲉⲛϩ + + + ⲕⲁⲛⲑⲟⲛ + + + ⲕⲓⲣⲓⲑⲙⲁⲑⲓ + + + ⲑⲁⲣⲁⲟⲩⲁ + + + ⲕⲟⲙⲟⲣⲉⲥ + + + ⲥⲁⲛⲧ ⲕⲓⲑⲥ + + + ⲡⲓⲟⲛⲅⲓⲁⲛⲅ + + + ⲥⲉⲟⲩⲗ + + + ⲕⲟⲩⲁⲓⲧ + + + ⲕⲁⲓⲙⲁⲛ + + + ⲁⲕⲑⲁⲩ + + + ⲟⲣⲁⲗ + + + ⲁⲑⲓⲣⲁⲩ + + + ⲁⲕⲑⲟⲃ + + + ⲕⲟⲥⲑⲁⲛⲁⲩ + + + ⲕⲓⲍⲓⲗⲟⲣⲇⲁ + + + ⲁⲗⲙⲁⲑⲓ + + + ⲃⲓⲉⲛⲑⲓⲁⲛ + + + ⲃⲉⲓⲣⲟⲩⲧ + + + ⲥⲁⲛⲧ ⲗⲟⲩϭⲓⲁ + + + ⲃⲁⲇⲟⲩⲍ + + + ⲕⲟⲗⲟⲙⲃⲟ + + + ⲙⲟⲛⲣⲟⲃⲓⲁ + + + ⲙⲁⲥⲉⲣⲟⲩ + + + ⲃⲓⲗⲛⲓⲟⲩⲥ + + + ⲗⲟⲩⲝⲟⲙⲃⲟⲩⲣⲅ + + + ⲣⲓⲅⲁ + + + ⲑⲣⲓⲡⲟⲗⲓⲥ + + + ⲕⲁⲍⲁⲃⲗⲁⲛⲕⲁ + + + ⲙⲟⲛⲁⲕⲟ + + + ϭⲓⲍⲓⲛⲁⲩ + + + ⲡⲟⲇⲅⲟⲣⲓⲕⲁ + + + ⲙⲁⲣⲓⲅⲟⲧ + + + ⲁⲛⲑⲁⲛⲁⲛⲁⲣⲓⲃⲟ + + + ⲕⲟⲩⲁϫⲁⲗⲉⲓⲛ ⲁⲑⲟⲗⲗ + + + ⲙⲁϫⲟⲩⲣⲟ + + + ⲥⲕⲟⲡⲓⲉ + + + ⲃⲁⲙⲁⲕⲟ + + + ⲓⲁⲛⲅⲟⲛ + + + ϧⲟⲃⲇ + + + ⲟⲩⲗⲁⲛⲃⲁⲑⲁⲣ + + + ⲙⲁⲕⲁⲩ + + + ⲥⲁⲓⲡⲁⲛ + + + ⲙⲁⲣⲑⲓⲛⲓⲕ + + + ⲛⲟⲩⲁⲕϣⲟⲧ + + + ⲙⲟⲛⲑⲥⲉⲣⲁⲧ + + + ⲙⲁⲗⲑⲁ + + + ⲙⲁⲩⲣⲓⲑⲓⲟⲩⲥ + + + ⲙⲁⲗⲇⲓⲃ + + + ⲃⲗⲁⲛⲑⲓⲣ + + + ⲑⲓϫⲟⲩⲁⲛⲁ + + + ϩⲉⲣⲙⲟⲍⲓⲗⲗⲟ + + + ⲥⲓⲟⲩⲇⲁⲇ ⲓⲟⲩⲁⲣⲉⲍ + + + ⲙⲁⲍⲁⲑⲗⲁⲛ + + + ϣⲓϩⲟⲩⲁϩⲟⲩⲁ + + + ⲃⲁⲓⲁ ⲇⲉ ⲃⲁⲛⲇⲉⲣⲁⲥ + + + ⲟϫⲓⲛⲁⲅⲁ + + + ⲙⲟⲛⲑⲉⲣⲉⲓ + + + ⲙⲉⲝⲓⲕⲟ ⲡⲟⲗⲓⲥ + + + ⲙⲁⲑⲁⲙⲟⲣⲟⲥ + + + ⲙⲉⲣⲓⲇⲁ + + + ⲕⲁⲛⲕⲟⲩⲛ + + + ⲕⲟⲩⲁⲗⲁ ⲗⲟⲩⲙⲡⲟⲩⲣ + + + ⲕⲟⲩϭⲓⲛⲅ + + + ⲙⲁⲡⲟⲩⲑⲟ + + + ⲟⲩⲓⲛⲇϩⲟⲕ + + + ⲛⲟⲩⲙⲉⲁ + + + ⲛⲓⲁⲙⲉⲓ + + + ϯⲙⲟⲩⲓ ⲛⲛ̀ⲟⲣϥⲟⲗⲕ + + + ⲗⲁⲅⲟⲥ + + + ⲙⲁⲛⲁⲅⲟⲩⲁ + + + ⲁⲙⲥⲑⲉⲣⲇⲁⲙ + + + ⲟⲥⲗⲟ + + + ⲕⲁⲑⲙⲁⲛⲇⲟⲩ + + + ⲛⲁⲩⲣⲟⲩ + + + ⲛⲓⲟⲩⲉ + + + ⲛⲓⲙⲟⲩⲓ ⲛ̀ϭⲁⲑⲁⲙ + + + ⲁⲩⲕⲗⲁⲛⲇ + + + ⲙⲁⲥⲕⲁⲧ + + + ⲡⲁⲛⲁⲙⲁ + + + ⲗⲓⲙⲁ + + + ⲑⲁϩⲓⲑⲓ + + + ⲛⲓⲙⲟⲩⲓ ⲙ̀ⲙⲁⲣⲕⲉⲥⲁⲥ + + + ⲅⲁⲙⲃⲓⲉⲣ + + + ⲡⲟⲣⲑ ⲙⲟⲣⲉⲥⲃⲓ + + + ⲃⲟⲩⲅⲁⲓⲛⲃⲓⲗ + + + ⲙⲁⲛⲓⲗⲁ + + + ⲕⲁⲣⲁϭⲓ + + + ⲟⲩⲁⲣⲥⲟ + + + ⲥⲁⲛ-ⲡⲓⲉⲣ + + + ⲛⲓⲙⲟⲩⲓ ⲙ̀ⲡⲓⲑⲕⲉⲣⲛ + + + ⲡⲟⲩⲉⲣⲑⲟ ⲣⲓⲕⲟ + + + ⲅⲁⲍⲁ + + + ϩⲉⲃⲣⲟⲛ + + + ⲁⲍⲟⲣⲉⲥ + + + ⲙⲁⲇⲉⲓⲣⲁ + + + ⲗⲓϣⲃⲟⲛⲁ + + + ⲡⲁⲗⲁⲩ + + + ⲁⲥⲟⲩⲛⲥⲓⲟⲛ + + + ⲕⲁⲑⲁⲣ + + + ⲣⲉⲓⲟⲩⲛⲓⲟⲛ + + + ⲃⲟⲩϧⲁⲣⲉⲥⲧ + + + ⲃⲉⲗⲅⲣⲁⲇ + + + ⲕⲁⲗⲓⲛⲓⲛⲅⲣⲁⲇ + + + ⲙⲟⲥⲕⲟ + + + ⲃⲟⲗⲅⲟⲅⲣⲁⲇ + + + ⲥⲁⲣⲁⲑⲟⲃ + + + ⲁⲥⲑⲣⲁϧⲁⲛ + + + ⲟⲩⲗⲓⲁⲛⲟⲃⲥⲕ + + + ⲕⲓⲣⲟⲃ + + + ⲥⲁⲙⲁⲣⲁ + + + ⲓⲉⲕⲁⲑⲣⲓⲛⲃⲟⲩⲣⲅ + + + ⲟⲙⲥⲕ + + + ⲛⲟⲃⲟⲥⲓⲃⲓⲣⲥⲕ + + + ⲃⲁⲣⲛⲁⲩⲗ + + + ⲑⲟⲙⲥⲕ + + + ⲛⲟⲃⲟⲕⲟⲩⲍⲛⲉⲑⲥⲕ + + + ⲕⲣⲁⲥⲛⲟⲓⲁⲣⲥⲕ + + + ⲓⲣⲕⲟⲩⲑⲥⲕ + + + ϭⲓⲑⲁ + + + ⲓⲁⲕⲟⲩⲑⲥⲕ + + + ⲃⲗⲁⲇⲓⲃⲟⲥⲑⲟⲕ + + + ϧⲁⲛⲇⲓⲅⲁ + + + ⲥⲁϧⲁⲗⲓⲛ + + + ⲟⲩⲥⲧ-ⲛⲉⲣⲁ + + + ⲙⲁⲅⲁⲇⲁⲛ + + + ⲥⲣⲉⲇⲛⲉⲕⲟⲗⲓⲙⲥⲕ + + + ⲕⲁⲙϭⲁⲑⲕⲁ + + + ⲁⲛⲁⲇⲓⲣ + + + ⲕⲓⲅⲁⲗⲓ + + + ⲣⲓⲁⲇ + + + ⲅⲟⲩⲁⲇⲁⲗⲕⲁⲛⲁⲗ + + + ⲙⲁϩⲉ + + + ϧⲁⲣⲑⲟⲩⲙ + + + ⲥⲑⲟⲕϩⲟⲗⲙ + + + ⲥⲓⲛⲅⲁⲡⲟⲣ + + + ⲥⲁⲛⲧ ϩⲉⲗⲁⲛⲁ + + + ⲗϫⲟⲩⲃⲗϫⲁⲛⲁ + + + ⲗⲟⲛⲅⲓⲏⲣⲃⲁⲓⲉⲛ + + + ⲃⲣⲁⲑⲓⲥⲗⲁⲃⲁ + + + ϥⲣⲓⲑⲁⲩⲛ + + + ⲥⲁⲛ ⲙⲁⲣⲓⲛⲟ + + + ⲇⲁⲕⲁⲣ + + + ⲙⲟⲅⲁⲇⲓϣⲟ + + + ⲡⲁⲣⲁⲙⲁⲣⲓⲃⲟ + + + ϫⲟⲩⲃⲁ + + + ⲥⲁⲟ ⲑⲟⲙⲉ + + + ⲉⲗ ⲥⲁⲗⲃⲁⲇⲟⲣ + + + ⲗⲟⲩⲉⲣ ⲡⲣⲓⲛⲥ + + + ⲇⲁⲙⲁⲥⲕⲟⲥ + + + ⲙⲃⲁⲃⲁⲛ + + + ⲅⲣⲁⲛⲇ ⲑⲟⲩⲣⲕ + + + ⲛϫⲁⲙⲉⲛⲁ + + + ⲙⲟⲩⲓ ⲛ̀ⲕⲉⲣⲅⲉⲗⲉⲛ + + + ⲗⲟⲙⲉ + + + ⲃⲁⲛⲕⲟⲕ + + + ⲇⲟⲩϣⲁⲛⲃ + + + ϥⲁⲕⲁⲟϥⲟ + + + ⲇⲓⲗⲓ + + + ⲁϣⲅⲁⲃⲁⲧ + + + ⲑⲟⲩⲛⲓⲥ + + + ⲑⲟⲛⲅⲁⲑⲁⲡⲟⲩ + + + ⲓⲥⲑⲁⲙⲃⲟⲩⲗ + + + ⲡⲟⲣⲧ ⲛ̀ⲉⲥⲡⲁⲛⲓⲁ + + + ϥⲟⲩⲛⲁϥⲟⲩⲑⲓ + + + ⲑⲁⲓⲡⲉⲓ + + + ⲇⲁⲣ ⲉⲥ ⲥⲁⲗⲁⲙ + + + ⲕⲓⲉⲃ + + + ⲥⲓⲙϥⲉⲣⲟⲡⲟⲗ + + + ⲕⲁⲙⲡⲁⲗⲁ + + + ⲙⲓⲇⲟⲩⲁⲓ ⲁⲑⲟⲗⲗ + + + ϯⲙⲟⲩⲓ ⲛ̀ⲟⲩⲁⲕ + + + ⲁⲇⲁⲕ + + + ⲛⲟⲙⲉ + + + ⲁⲛⲕⲟⲣⲁϫ + + + ⲓⲁⲕⲟⲩⲑⲁⲧ + + + ⲥⲓⲑⲕⲁ + + + ϫⲟⲩⲛⲉⲁⲩ + + + ⲙⲉⲧⲗⲁⲕⲁⲗⲑⲁ + + + ⲗⲟⲥ ⲁⲅⲅⲉⲗⲉⲥ + + + ⲃⲟⲓⲍⲉ + + + ⲫⲓⲛⲓⲝ + + + ⲇⲉⲛⲃⲉⲣ + + + ⲃⲉⲩⲗⲁ, ⲇⲁⲕⲟⲑⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + + + ⲛⲓⲟⲩ ⲥⲁⲗⲉⲙ, ⲇⲁⲕⲟⲑⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + + + ⲥⲉⲛⲑⲉⲣ, ⲇⲁⲕⲟⲑⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + + + ϣⲓⲕⲁⲅⲟ + + + ⲙⲉⲛⲟⲙⲓⲛⲓ + + + ⲃⲓⲛⲥⲉⲛⲛⲉⲥ, ⲓⲛⲇⲓⲁⲛⲁ + + + ⲡⲉⲑⲉⲣⲥⲃⲟⲩⲣⲅ, ⲓⲛⲇⲓⲁⲛⲁ + + + ⲑⲉⲗ ⲥⲓⲑⲓ, ⲓⲛⲇⲓⲁⲛⲁ + + + ⲛⲟⲝ, ⲓⲛⲇⲓⲁⲛⲁ + + + ⲟⲩⲓⲛⲁⲙⲁⲕ, ⲓⲛⲇⲓⲁⲛⲁ + + + ⲙⲁⲣⲉⲛⲅⲟ, ⲓⲛⲇⲓⲁⲛⲁ + + + ⲓⲛⲇⲓⲁⲛⲁⲡⲟⲗⲓⲥ + + + ⲗⲟⲓⲥⲃⲓⲗ + + + ⲃⲉⲃⲉⲁⲓ, ⲓⲛⲇⲓⲁⲛⲁ + + + ⲙⲟⲛⲑⲓⲥⲉⲗⲗⲟ, ⲕⲉⲛⲧⲁⲕⲓ + + + ⲇⲉⲑⲣⲟⲓⲧ + + + ⲛⲓⲟⲩ ⲓⲟⲣⲕ + + + ⲙⲟⲛⲑⲉⲃⲓⲇⲉⲟ + + + ⲥⲁⲙⲁⲣⲕⲁⲛⲇ + + + ⲑⲁϣⲕⲉⲛⲧ + + + ⲃⲁⲑⲓⲕⲁⲛ + + + ⲥⲁⲛⲧ ⲃⲓⲛⲥⲉⲛⲧ + + + ⲕⲁⲣⲁⲕⲁⲥ + + + ⲑⲟⲣⲟⲗⲁ + + + ⲥⲁⲛⲧ ⲑⲟⲙⲁⲥ + + + ϩⲟ ϭⲓ ⲙⲓⲛϩ + + + ⲉϥⲁⲧ + + + ⲟⲩⲁⲗⲗⲓⲥ & ϥⲟⲩⲑⲟⲩⲛⲁ + + + ⲁⲡⲓⲁ + + + ⲁⲇⲁⲛ + + + ⲙⲁⲓⲟⲧ + + + ⲓⲟϩⲁⲛⲥⲃⲟⲩⲣⲅ + + + ⲗⲟⲩⲍⲁⲕⲁ + + + ϩⲁⲣⲁⲣⲉ + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁϥⲅⲁⲛⲓⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ ⲛ̀̀ⲑⲙⲏϯ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲉⲓⲉⲃⲧ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲟϩⲣⲟⲥ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲓⲣⲏⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲗⲁⲥⲕⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲗⲁⲥⲕⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲁⲗⲁⲥⲕⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲙⲁⲍⲟⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲙⲁⲍⲟⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲁⲙⲁⲍⲟⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲙⲏϯ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲑⲙⲏϯ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲑⲙⲏϯ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲓⲉⲃⲧ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲓⲉⲃⲧ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲡⲉⲓⲉⲃⲧ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲧⲱⲟⲩ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲓⲧⲱⲟⲩ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲡⲓⲧⲱⲟⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲁⲥⲓϥⲓⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲁⲥⲓϥⲓⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲡⲁⲥⲓϥⲓⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲥⲁⲙⲟⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲥⲁⲙⲟⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲥⲁⲙⲟⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲣⲁⲃⲟⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲣⲁⲃⲟⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲁⲣⲁⲃⲟⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲣⲙⲉⲛⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲣⲙⲉⲛⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲁⲣⲙⲉⲛⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲑⲗⲁⲛⲑⲓⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲑⲗⲁⲛⲑⲓⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲁⲑⲗⲁⲛⲑⲓⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲁⲩⲥⲧⲣⲁⲗⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲍⲉⲣⲃⲁⲓϫⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲍⲉⲣⲃⲁⲓϫⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲁⲍⲉⲣⲃⲁⲓϫⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲍⲟⲣⲉⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲁⲍⲟⲣⲉⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲁⲍⲟⲣⲉⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲁⲛⲅⲗⲁⲇⲉϣ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲃⲁⲛⲅⲗⲁⲇⲉϣ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲃⲁⲛⲅⲗⲁⲇⲉϣ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲟⲩⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲟⲗⲓⲃⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲣⲁⲍⲓⲗ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲃⲣⲁⲍⲓⲗ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲃⲣⲁⲍⲓⲗ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲣⲟⲩⲛⲉⲓ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲁⲡ ⲃⲉⲣⲇⲉ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲕⲁⲡ ⲃⲉⲣⲇⲉ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲕⲁⲡ ⲃⲉⲣⲇⲉ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϭⲁⲙⲟⲣⲟ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲁⲑⲁⲙ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϣⲁⲑⲁⲙ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ϣⲁⲑⲁⲙ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϭⲓⲗⲉ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϭⲓⲗⲉ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ϭⲓⲗⲉ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϭⲓⲛⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϭⲓⲛⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛⲧⲟⲟⲩⲓ ⲛ̀ϭⲓⲛⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲙⲟⲩⲓ ⲛ̀ⲭⲣⲓⲥⲧⲙⲁⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲟⲕⲟⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲟⲗⲟⲙⲃⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲕⲟⲗⲟⲙⲃⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲕⲟⲗⲟⲙⲃⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲟⲩⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲟⲩⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲟⲩⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲉ ⲕⲟⲩⲃⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲧⲉ ⲕⲟⲩⲃⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲧⲉ ⲕⲟⲩⲃⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲇⲁⲩⲓⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲇⲟⲩⲣⲙⲟⲛⲧ ⲇⲟⲩⲣⲃⲓⲗ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲓⲙⲟⲣ-ⲗⲉⲥⲧ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲥⲑⲉⲣ ⲁⲓⲥⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲓⲥⲑⲉⲣ ⲁⲓⲥⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲓⲥⲑⲉⲣ ⲁⲓⲥⲗⲁⲛⲇ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲉⲕⲟⲩⲁⲇⲟⲣ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲉⲩⲣⲟⲡⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲉⲩⲣⲟⲡⲁ + + + + + ⲟⲩⲕⲉ ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲉⲩⲣⲟⲡⲁ + + + + + ⲡⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ⲡⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲉⲩⲣⲟⲡⲁ + ⲡⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲉⲩⲣⲟⲡⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ϥⲟⲕⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ϥⲟⲕⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ϥⲟⲕⲗⲁⲛⲇ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϥⲓⲇϫⲓ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϥⲓⲇϫⲓ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ϥⲓⲇϫⲓ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲅⲩⲁⲛⲁ ⲛ̀ϥⲉⲣⲉⲛⲥⲟⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϥⲉⲣⲉⲛⲥⲟⲥ ⲙ̀ⲡⲓⲣⲏⲥ & ⲁⲛⲧⲁⲣⲕⲑⲓⲕⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲅⲁⲗⲁⲡⲁⲅⲟⲥ + + + + + ̀ⲡⲥⲟⲏⲩ ⲛ̀ⲅⲁⲙⲃⲓⲉⲣ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲅⲉⲟⲣⲅⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲅⲉⲟⲣⲅⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲅⲉⲟⲣⲅⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ϫⲓⲗⲃⲉⲣⲧ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲙⲏϯ ⲛ̀ⲅⲣⲓⲛⲓϭ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲧⲉ ⲅⲣⲓⲛⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲧⲉ ⲅⲣⲓⲛⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡϣⲱⲙ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲧⲉ ⲅⲣⲓⲛⲗⲁⲛⲇ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲧⲉ ⲅⲣⲓⲛⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲧⲉ ⲅⲣⲓⲛⲗⲁⲛⲇ + ̀ⲡⲥⲏⲟⲩ ⲙ̀̀ⲡϣⲱⲙ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲧⲉ ⲅⲣⲓⲛⲗⲁⲛⲇ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲅⲟⲗϥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲅⲩⲁⲛⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϩⲁⲟⲩⲁⲓ-ⲁⲗⲉⲩⲑⲓⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲁⲟⲩⲁⲓ-ⲁⲗⲉⲩⲑⲓⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϩⲁⲟⲩⲁⲓ-ⲁⲗⲉⲩⲑⲓⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ϩⲁⲟⲩⲁⲓ-ⲁⲗⲉⲩⲑⲓⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲛⲅ ⲕⲟⲛⲅ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϩⲟⲛⲅ ⲕⲟⲛⲅ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ϩⲟⲛⲅ ⲕⲟⲛⲅ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϧⲟⲃⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϧⲟⲃⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ϧⲟⲃⲇ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϩⲉⲛⲧⲟⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲱⲕⲉⲁⲛⲟⲥ ⲛ̀ϩⲉⲛⲧⲟⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲛⲇⲟϭⲓⲛⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀̀ⲑⲙⲏϯ ⲛ̀ⲓⲛⲇⲟⲛⲉⲥⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲓⲛⲇⲟⲛⲉⲥⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲓⲛⲇⲟⲛⲉⲥⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲣⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲓⲣⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲓⲣⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲣⲕⲟⲩⲧⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲓⲣⲕⲟⲩⲧⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲓⲣⲕⲟⲩⲧⲥⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲥⲣⲁⲏⲗ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲓⲥⲣⲁⲏⲗ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲡⲓⲥⲣⲁⲏⲗ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲁⲡⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲓⲁⲡⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲓⲁⲡⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲁⲍⲁϧⲉⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲕⲁⲍⲁϧⲉⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ⲕⲁⲍⲁϧⲉⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲟⲣⲉⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲕⲟⲣⲉⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲕⲟⲣⲉⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲟⲥⲣⲁⲉ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲣⲁⲥⲛⲟⲓⲁⲣⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲕⲣⲁⲥⲛⲟⲓⲁⲣⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲕⲣⲁⲥⲛⲟⲓⲁⲣⲥⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲩⲣⲅⲩⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲗⲓⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲗⲟⲣⲇ ϩⲟⲩⲉ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲗⲟⲣⲇ ϩⲟⲩⲉ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲗⲟⲣⲇ ϩⲟⲩⲉ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲁⲅⲁⲇⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲙⲁⲅⲁⲇⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲙⲁⲅⲁⲇⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲁⲗⲉⲍⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲁⲗⲇⲓⲃ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲁⲣⲕⲉⲥⲁⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲙ̀ⲙⲁⲣϣⲁⲗ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲁⲩⲣⲓⲑⲓⲟⲩⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲙⲁⲩⲣⲓⲑⲓⲟⲩⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲙⲁⲩⲣⲓⲑⲓⲟⲩⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲁⲩⲥⲟⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲉⲝⲓⲕⲟ ⲙ̀ⲡⲁⲥⲓϥⲓⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲙⲉⲝⲓⲕⲟ ⲙ̀ⲡⲁⲥⲓϥⲓⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲙ̀ⲙⲉⲝⲓⲕⲟ ⲙ̀ⲡⲁⲥⲓϥⲓⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲟⲩⲗⲁⲛⲃⲁⲧⲁⲣ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲟⲩⲗⲁⲛⲃⲁⲧⲁⲣ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲟⲩⲗⲁⲛⲃⲁⲧⲁⲣ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲟⲥⲕⲟ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲙⲟⲥⲕⲟ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲙⲟⲥⲕⲟ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲓⲁⲛⲙⲁⲣ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲁⲩⲣⲟⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲉⲡⲁⲗ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲟⲩⲕⲁⲗⲉⲇⲟⲛⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲛⲓⲟⲩⲕⲁⲗⲉⲇⲟⲛⲓⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲛⲓⲟⲩⲕⲁⲗⲉⲇⲟⲛⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲟⲩⲍⲓⲗⲁⲛⲇⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲛⲓⲟⲩⲍⲓⲗⲁⲛⲇⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲛⲓⲟⲩⲍⲓⲗⲁⲛⲇⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛⲛ̀ⲓⲟⲩϥⲁⲩⲛⲇⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛⲛ̀ⲓⲟⲩϥⲁⲩⲛⲇⲗⲁⲛⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛⲛ̀ⲓⲟⲩϥⲁⲩⲛⲇⲗⲁⲛⲇ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲟⲩⲉ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲛⲟⲣϥⲟⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲛⲟⲣϥⲟⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲛⲟⲣϥⲟⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϥⲉⲣⲛⲁⲛⲇⲟ ⲇⲉ ⲛⲟⲣⲟⲛϩⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ϥⲉⲣⲛⲁⲛⲇⲟ ⲇⲉ ⲛⲟⲣⲟⲛϩⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ϥⲉⲣⲛⲁⲛⲇⲟ ⲇⲉ ⲛⲟⲣⲟⲛϩⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲟⲃⲟⲥⲓⲃⲓⲣⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲛⲟⲃⲟⲥⲓⲃⲓⲣⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲛⲟⲃⲟⲥⲓⲃⲓⲣⲥⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲟⲙⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲟⲙⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲟⲙⲥⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲁⲕⲓⲥⲑⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲁⲕⲓⲥⲑⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲡⲁⲕⲓⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲙⲡⲁⲗⲁⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲁⲡⲟⲩⲁ ⲛⲓⲟⲩⲅⲓⲛⲉⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲁⲣⲁⲅⲟⲩⲁⲓ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲁⲣⲁⲅⲟⲩⲁⲓ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲡⲁⲣⲁⲅⲟⲩⲁⲓ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲉⲣⲟⲩ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲡⲉⲣⲟⲩ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲡⲉⲣⲟⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲫⲓⲗⲓⲡⲡⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲫⲓⲗⲓⲡⲡⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲫⲓⲗⲓⲡⲡⲓⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲙ̀ⲫⲓⲛⲓⲝ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲥⲁⲛⲧ ⲡⲓⲉⲣ & ⲙⲓⲕⲉⲗⲟⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲥⲁⲛⲧ ⲡⲓⲉⲣ & ⲙⲓⲕⲉⲗⲟⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲥⲁⲛⲧ ⲡⲓⲉⲣ & ⲙⲓⲕⲉⲗⲟⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲑⲕⲁⲓⲣⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲟϩⲛⲡⲉⲓ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲕⲟⲣⲉⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲣⲉⲓⲟⲩⲛⲓⲟⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲣⲟⲑⲉⲣⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲥⲁϧⲁⲗⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲥⲁϧⲁⲗⲓⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲥⲁϧⲁⲗⲓⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲥⲁⲙⲟⲣⲁ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁⲛⲟⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲥⲁⲙⲟⲣⲁ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁⲛⲟⲥ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲥⲁⲙⲟⲣⲁ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁⲛⲟⲥ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲥⲩϣⲉⲗ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲥⲓⲛⲅⲁⲡⲟⲣ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲥⲟⲗⲟⲙⲟⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲣⲏⲥ ⲛ̀ⲅⲉⲟⲣⲅⲓⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲥⲟⲩⲣⲓⲛⲁⲙ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲥⲩⲟⲩⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲁϩⲓⲑⲓ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲁⲓⲟⲩⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲑⲁⲓⲟⲩⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲧⲟⲟⲩⲓ ⲛ̀ⲑⲁⲓⲟⲩⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲁϫⲓⲕⲓⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲟⲕⲉⲗⲁⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲟⲛⲅⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲑⲟⲛⲅⲁ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲑⲟⲛⲅⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϭⲟⲩⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲟⲩⲣⲕⲙⲉⲛⲓⲥⲑⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲑⲟⲩⲣⲕⲙⲉⲛⲓⲥⲑⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲑⲟⲩⲣⲕⲙⲉⲛⲓⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲑⲟⲩⲃⲁⲗⲟⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲟⲩⲣⲟⲩⲅⲩⲟⲁⲓ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲟⲩⲣⲟⲩⲅⲟⲩⲁⲓ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲟⲩⲣⲟⲩⲅⲟⲩⲁⲓ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲟⲩⲍⲃⲉⲕⲓⲥⲑⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲟⲩⲍⲃⲉⲕⲓⲥⲑⲁⲛ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲟⲩⲍⲃⲉⲕⲓⲥⲑⲁⲛ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲁⲛⲁⲑⲟⲩ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲃⲁⲛⲁⲑⲟⲩ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲃⲁⲛⲁⲑⲟⲩ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲉⲛⲉⲍⲟⲩⲉⲗⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲗⲁⲇⲓⲃⲟⲥⲑⲟⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲃⲗⲁⲇⲓⲃⲟⲥⲑⲟⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲃⲗⲁⲇⲓⲃⲟⲥⲑⲟⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲃⲟⲗⲅⲟⲅⲣⲁⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲙ̀ⲃⲟⲗⲅⲟⲅⲣⲁⲇ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲙ̀ⲃⲟⲗⲅⲟⲅⲣⲁⲇ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲃⲟⲥⲑⲟⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲙ̀ⲡⲓⲙⲟⲩⲓ ⲛ̀ⲟⲩⲁⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲟⲩⲁⲗⲓⲥ & ϥⲟⲩⲑⲟⲩⲛⲁ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲁⲕⲟⲩⲧⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲓⲁⲕⲟⲩⲧⲥⲕ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲓⲁⲕⲟⲩⲧⲥⲕ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲉⲕⲁⲑⲉⲣⲓⲛⲃⲟⲩⲣⲅ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϩⲟⲣⲟⲥ ⲛ̀ⲓⲉⲕⲁⲑⲉⲣⲓⲛⲃⲟⲩⲣⲅ + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ϣⲱⲙ ⲛ̀ⲓⲉⲕⲁⲑⲉⲣⲓⲛⲃⲟⲩⲣⲅ + + + + + ⲡ̀ⲥⲏⲟⲩ ⲛ̀ⲓⲟⲩⲕⲟⲛ + + + + + + + + ⲡⲓⲇⲉⲣϩⲁⲙ ⲛ̀ⲧⲉ ⲛⲓⲉⲙⲁⲣⲁⲧ ⲛ̀ⲁⲣⲁⲃⲟⲥ ⲉⲧϩⲱⲧⲡ + nⲓⲇⲉⲣϩⲁⲙ ⲛ̀ⲧⲉ ⲛⲓⲉⲙⲁⲣⲁⲧ ⲛ̀ⲁⲣⲁⲃⲟⲥ ⲉⲧϩⲱⲧⲡ + + + ⲡⲓⲁϥⲅⲁⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲁϥⲅⲁⲛⲓⲥⲑⲁⲛ + ⲛⲓⲁϥⲅⲁⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲁϥⲅⲁⲛⲓⲥⲑⲁⲛ + + + ⲡⲓⲗⲉⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲗⲃⲁⲛⲓⲁ + ⲡⲓⲗⲉⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲗⲃⲁⲛⲓⲁ + + + ⲡⲓⲇⲣⲁⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲣⲙⲉⲛⲓⲁ + ⲛⲓⲇⲣⲁⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲣⲙⲉⲛⲓⲁ + + + ⲡⲓⲅⲓⲗⲇⲉⲣ ⲛ̀ⲣⲉⲙⲛ̀ϩⲟⲗⲁⲛⲇⲁ ⲁⲛⲑⲓⲗⲉⲁ + ⲛⲓⲅⲓⲗⲇⲉⲣ ⲛ̀ⲣⲉⲙⲛ̀ϩⲟⲗⲁⲛⲇⲁ ⲁⲛⲑⲓⲗⲉⲁ + + + ⲡⲓⲕⲟⲩⲁⲛⲍⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲛⲅⲟⲗⲁ + ⲛⲓⲕⲟⲩⲁⲛⲍⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲛⲅⲟⲗⲁ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲣϫⲉⲛⲑⲓⲛ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲩⲥⲑⲧⲣⲁⲗⲓⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲩⲥⲑⲧⲣⲁⲗⲓⲁ + + + ⲡⲓϥⲗⲟⲣⲓⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲣⲟⲩⲃⲁ + ⲛⲓϥⲗⲟⲣⲓⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲣⲟⲩⲃⲁ + + + ⲡⲓⲙⲁⲛⲁⲧ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲍⲉⲣⲃⲁⲓϫⲁⲛ + ⲛⲓⲙⲁⲛⲁⲧ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲍⲉⲣⲃⲁⲓϫⲁⲛ + + + ⲡⲓⲙⲁⲣⲕ ⲛ̀ⲧⲉ ⲃⲟⲥⲛⲓⲁ-ϩⲉⲣⲍⲉⲅⲟⲃⲓⲛⲁ + ⲛⲓⲙⲁⲣⲕ ⲛ̀ⲧⲉ ⲃⲟⲥⲛⲓⲁ-ϩⲉⲣⲍⲉⲅⲟⲃⲓⲛⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁⲣⲃⲁⲇⲓⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁⲣⲃⲁⲇⲓⲁ + + + ⲡⲓⲑⲁⲕⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁⲛⲅⲗⲁⲇⲉϣ + ⲛⲓⲑⲁⲕⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁⲛⲅⲗⲁⲇⲉϣ + + + ⲡⲓⲗⲉⲃ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲩⲗⲅⲁⲣⲓⲁ + ⲡⲓⲗⲉⲃ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲩⲗⲅⲁⲣⲓⲁ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁϩⲣⲁⲓⲛ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁϩⲣⲁⲓⲛ + + + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲩⲣⲟⲩⲛⲇⲓ + ⲛⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲩⲣⲟⲩⲛⲇⲓ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲉⲣⲙⲟⲩⲇⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲉⲣⲙⲟⲩⲇⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ⲃⲣⲟⲩⲛⲉⲓ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ⲃⲣⲟⲩⲛⲉⲓ + + + ⲡⲓⲃⲟⲗⲓⲃⲓⲁⲛⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲗⲓⲃⲓⲁ + ⲛⲓⲃⲟⲗⲓⲃⲓⲁⲛⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲗⲓⲃⲓⲁ + + + ⲡⲓⲣⲉⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲣⲁⲍⲓⲗ + ⲛⲓⲣⲉⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲣⲁⲍⲓⲗ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁϩⲁⲙⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲁϩⲁⲙⲁ + + + ⲡⲓⲛⲅⲟⲩⲗⲑⲣⲟⲩⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲩⲑⲁⲛⲁ + ⲛⲓⲛⲅⲟⲩⲗⲑⲣⲟⲩⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲩⲑⲁⲛⲁ + + + ⲡⲓⲡⲟⲩⲗⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲑⲥⲟⲩⲁⲛⲁ + ⲛⲓⲡⲟⲩⲗⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲟⲑⲥⲟⲩⲁⲛⲁ + + + ⲡⲓⲣⲟⲩⲃⲉⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲉⲗⲁⲣⲟⲩⲥ + ⲛⲓⲣⲟⲩⲃⲉⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲉⲗⲁⲣⲟⲩⲥ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲙ̀ⲃⲉⲗⲓⲍⲉ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲙ̀ⲃⲉⲗⲓⲍⲉ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲛⲁⲇⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲛⲁⲇⲁ + + + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲛⲅⲟ + ⲛⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲛⲅⲟ + + + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲓⲥⲣⲁ + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲓⲥⲣⲁ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ϭⲓⲗⲉ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ϭⲓⲗⲉ + + + ⲡⲓⲓⲟⲩⲁⲛ ⲛ̀ⲣⲉⲙⲛ̀ϭⲓⲛⲁ + ⲡⲓⲓⲟⲩⲁⲛ ⲛ̀ⲣⲉⲙⲛ̀ϭⲓⲛⲁ + + + ⲡⲓⲓⲟⲩⲁⲛ ⲛ̀ⲣⲉⲙⲛ̀ϭⲓⲛⲁ + ⲡⲓⲓⲟⲩⲁⲛ ⲛ̀ⲣⲉⲙⲛ̀ϭⲓⲛⲁ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲗⲟⲙⲃⲓⲁ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲗⲟⲙⲃⲓⲁ + + + ⲡⲓⲕⲟⲗⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲥⲑⲁⲣⲓⲕⲁ + ⲛⲓⲕⲟⲗⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲥⲑⲁⲣⲓⲕⲁ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲩⲃⲁ ̀ⲛⲣⲉϥϣⲓⲃϯ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲩⲃⲁ ̀ⲛⲣⲉϥϣⲓⲃϯ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲩⲃⲁ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲩⲃⲁ + + + ⲡⲓⲉⲥⲕⲟⲩⲇⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲡⲃⲉⲣⲇⲉ + ⲛⲓⲉⲥⲕⲟⲩⲇⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲡⲃⲉⲣⲇⲉ + + + ⲡⲓⲕⲟⲣⲟⲩⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ϭⲉⲕ + ⲛⲓⲕⲟⲣⲟⲩⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ϭⲉⲕ + + + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ⲉⲣⲉⲙⲛ̀ⲇϫⲓⲃⲟⲩⲑⲓ + ⲛⲓϥⲣⲁⲛⲕ ⲛ̀ⲉⲣⲉⲙⲛ̀ⲇϫⲓⲃⲟⲩⲑⲓ + + + ⲡⲓⲕⲣⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲇⲁⲛⲙⲁⲣⲕ + ⲡⲓⲕⲣⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲇⲁⲛⲙⲁⲣⲕ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲇⲟⲙⲓⲛⲓⲕⲁⲛ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲇⲟⲙⲓⲛⲓⲕⲁⲛ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲗϫⲉⲣⲓⲁ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲗϫⲉⲣⲓⲁ + + + ⲡⲓⲅⲉⲛⲉϩ ⲛ̀ⲣⲉⲙⲛ̀ⲭⲏⲙⲓ + ⲛⲓⲅⲉⲛⲉϩ ⲛ̀ⲣⲉⲙⲛ̀ⲭⲏⲙⲓ + + + ⲡⲓⲛⲁⲕϥⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲉⲣⲓⲑⲣⲓⲁ + ⲛⲓⲛⲁⲕϥⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲉⲣⲓⲑⲣⲓⲁ + + + ⲡⲓⲃⲓⲣⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲉⲑⲁⲩϣ + ⲛⲓⲃⲓⲣⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲉⲑⲁⲩϣ + + + ⲉⲩⲣⲟ + ⲉⲩⲣⲟ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ϥⲓⲇϫⲓ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ϥⲓⲇϫⲓ + + + ⲡⲓⲡⲁⲩⲛⲇ ⲛ̀ⲛⲙⲟⲩⲓ ⲛ̀ϥⲟⲕⲗⲁⲛⲇ + ⲛⲓⲡⲁⲩⲛⲇ ⲛ̀ⲛⲙⲟⲩⲓ ⲛ̀ϥⲟⲕⲗⲁⲛⲇ + + + ⲡⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲣⲓⲑⲁⲛⲓⲁ + ⲛⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲣⲓⲑⲁⲛⲓⲁ + + + ⲡⲓⲗⲁⲣⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲉⲟⲣⲅⲓⲁ + ⲛⲓⲗⲁⲣⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲉⲟⲣⲅⲓⲁ + + + ⲡⲓⲥⲉⲇⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲁⲛⲁ + ⲛⲓⲥⲉⲇⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲁⲛⲁ + + + ⲡⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙ̀ⲛ̀ⲅⲓⲃⲣⲁⲗⲑⲁⲣ + ⲛⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙ̀ⲛ̀ⲅⲓⲃⲣⲁⲗⲑⲁⲣ + + + ⲡⲓⲇⲁⲗⲁⲥⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲁⲙⲃⲓⲁ + ⲛⲓⲇⲁⲗⲁⲥⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲁⲙⲃⲓⲁ + + + ⲡⲓⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲓⲛⲉⲁ + ⲛⲓⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲓⲛⲉⲁ + + + ⲡⲓⲕⲉⲑⲍⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲟⲩⲁⲑⲉⲙⲁⲗⲁ + ⲛⲓⲕⲉⲑⲍⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲟⲩⲁⲑⲉⲙⲁⲗⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲩⲁⲛⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲅⲩⲁⲛⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ϩⲟⲛⲅ ⲕⲟⲛⲅ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ϩⲟⲛⲅ ⲕⲟⲛⲅ + + + ⲡⲓⲗⲉⲙⲡⲓⲣⲁ ⲛ̀ⲣⲉⲙⲛ̀ϩⲟⲛⲇⲟⲩⲣⲁ + ⲛⲓⲗⲉⲙⲡⲓⲣⲁ ⲛ̀ⲣⲉⲙⲛ̀ϩⲟⲛⲇⲟⲩⲣⲁ + + + ⲡⲓⲕⲟⲩⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲣⲟⲩⲁⲑⲓⲁ + ⲛⲓⲕⲟⲩⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲣⲟⲩⲁⲑⲓⲁ + + + ⲡⲓⲅⲟⲩⲣⲇ ⲛ̀ⲣⲉⲙⲛ̀ϩⲁⲓⲑⲓ + ⲛⲓⲅⲟⲩⲣⲇ ⲛ̀ⲣⲉⲙⲛ̀ϩⲁⲓⲑⲓ + + + ⲡⲓϥⲟⲣⲓⲛⲧ ⲛ̀ⲣⲉⲙⲛ̀ϩⲁⲛⲅⲁⲣⲓⲁ + ⲛⲓϥⲟⲣⲓⲛⲧ ⲛ̀ⲣⲉⲙⲛ̀ϩⲁⲛⲅⲁⲣⲓⲁ + + + ⲡⲓⲣⲟⲩⲡⲓⲁϩ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲛⲇⲟⲛⲉⲥⲓⲁ + ⲛⲓⲣⲟⲩⲡⲓⲁϩ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲛⲇⲟⲛⲉⲥⲓⲁ + + + ⲡⲓϣⲉⲕⲉⲗ ⲙ̀ⲃⲉⲣⲓ ⲙ̀ⲡⲓⲥⲣⲁⲏⲗ + ⲛⲓϣⲉⲕⲉⲗ ⲙ̀ⲃⲉⲣⲓ ⲙ̀ⲡⲓⲥⲣⲁⲏⲗ + + + ⲡⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙ̀ⲛ̀ϩⲉⲛⲧⲟⲩ + ⲛⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙ̀ⲛ̀ϩⲉⲛⲧⲟⲩ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲣⲁⲕ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲣⲁⲕ + + + ⲡⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲣⲁⲛ + ⲛⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲣⲁⲛ + + + ⲡⲓⲕⲣⲟⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲓⲥⲗⲁⲛⲇⲁ + ⲡⲓⲕⲣⲟⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲁⲓⲥⲗⲁⲛⲇⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ϫⲁⲙⲁⲓⲕⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ϫⲁⲙⲁⲓⲕⲁ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲟⲣⲇⲁⲛⲏⲥ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲟⲣⲇⲁⲛⲏⲥ + + + ⲡⲓⲓⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲁⲡⲁⲛ + ⲡⲓⲓⲉⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲁⲡⲁⲛ + + + ⲡⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲉⲛⲓⲁ + ⲛⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲉⲛⲓⲁ + + + ⲡⲓⲥⲟⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲩⲣⲅⲩⲥⲑⲁⲛ + ⲛⲓⲥⲟⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲩⲣⲅⲩⲥⲑⲁⲛ + + + ⲡⲓⲣⲓⲉⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲙⲃⲟⲩⲇⲓⲁ + ⲛⲓⲣⲓⲉⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲙⲃⲟⲩⲇⲓⲁ + + + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲙⲟⲣⲓ + ⲛⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲙⲟⲣⲓ + + + ⲡⲓⲟⲩⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲣⲉⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + ⲡⲓⲟⲩⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲣⲉⲁ ⲙ̀ⲡⲉⲙϩⲓⲧ + + + ⲡⲓⲟⲩⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲣⲉⲁ ⲙ̀ⲡⲓⲣⲏⲥ + ⲡⲓⲟⲩⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲣⲉⲁ ⲙ̀ⲡⲓⲣⲏⲥ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲩⲁⲓⲧ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲟⲩⲁⲓⲧ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲁⲓⲙⲁⲛ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲕⲁⲓⲙⲁⲛ + + + ⲡⲓⲑⲉⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲍⲁϧⲉⲥⲑⲁⲛ + ⲛⲓⲑⲉⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲍⲁϧⲉⲥⲑⲁⲛ + + + ⲡⲓⲕⲓⲡ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲁⲟ + ⲛⲓⲕⲓⲡ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲁⲟ + + + ⲡⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲓⲃⲁⲛⲟⲛ + ⲛⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲓⲃⲁⲛⲟⲛ + + + ⲡⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲣⲓⲗⲁⲛⲕⲁ + ⲛⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲣⲓⲗⲁⲛⲕⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲁⲓⲃⲉⲣⲓⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲁⲓⲃⲉⲣⲓⲁ + + + ⲡⲓⲗⲓⲗⲁⲛⲅⲉⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲁⲍⲓ + ⲛⲓⲗⲓⲗⲁⲛⲅⲉⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲁⲍⲓ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲓⲃⲓⲁ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲗⲓⲃⲓⲁ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲣⲁⲕⲉϣ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲣⲁⲕⲉϣ + + + ⲡⲓⲗⲉⲩ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲟⲗⲇⲟⲃⲁ + ⲡⲓⲗⲉⲩ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲟⲗⲇⲟⲃⲁ + + + ⲡⲓⲁⲣⲓⲁⲣⲓ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲗⲁⲅⲁⲥ + ⲛⲓⲁⲣⲓⲁⲣⲓ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲗⲁⲅⲁⲥ + + + ⲡⲓⲇⲉⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲕⲉⲇⲟⲛⲓⲁ + ⲡⲓⲇⲉⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲕⲉⲇⲟⲛⲓⲁ + + + ⲡⲓⲕⲩⲁⲧ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲩⲁⲛⲙⲁⲣ + ⲛⲓⲕⲩⲁⲧ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲩⲁⲛⲙⲁⲣ + + + ⲡⲓⲑⲟⲩⲅⲣⲓⲕ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲟⲛⲅⲟⲗⲓⲁ + ⲛⲓⲑⲟⲩⲅⲣⲓⲕ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲟⲛⲅⲟⲗⲓⲁ + + + ⲡⲓⲡⲁⲑⲁⲕⲁ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲕⲁⲛⲓ + ⲛⲓⲡⲁⲑⲁⲕⲁ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲕⲁⲛⲓ + + + ⲡⲓⲟⲩⲅⲟⲩⲓⲁ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲩⲣⲓⲑⲁⲛⲓⲁ + ⲛⲓⲟⲩⲅⲟⲩⲓⲁ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲩⲣⲓⲑⲁⲛⲓⲁ + + + ⲡⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲩⲣⲓⲑⲓⲟⲩⲥ + ⲛⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲩⲣⲓⲑⲓⲟⲩⲥ + + + ⲡⲓⲣⲟⲩϥⲓⲁ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲗⲇⲓⲃ + ⲛⲓⲣⲟⲩϥⲓⲁ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲗⲇⲓⲃ + + + ⲡⲓⲕⲟⲩⲁϭⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲙⲁⲗⲁⲩⲓ + ⲛⲓⲕⲟⲩⲁϭⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲙⲁⲗⲁⲩⲓ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲙⲉⲝⲓⲕⲟ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲙⲉⲝⲓⲕⲟ + + + ⲡⲓⲣⲓⲛⲅⲓⲧ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲗⲉⲍⲓⲁ + ⲛⲓⲣⲓⲛⲅⲓⲧ ⲛ̀ⲣⲉⲙⲛⲙ̀ⲁⲗⲉⲍⲓⲁ + + + ⲡⲓⲙⲉⲑⲓⲕⲁⲗ ⲛ̀ⲣⲉⲛⲙ̀ⲟⲍⲁⲙⲃⲓⲕ + ⲛⲓⲙⲉⲑⲓⲕⲁⲗ ⲛ̀ⲣⲉⲛⲙ̀ⲟⲍⲁⲙⲃⲓⲕ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲁⲙⲓⲃⲓⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲁⲙⲓⲃⲓⲁ + + + ⲡⲓⲛⲁⲓⲣⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲁⲓⲅⲉⲣⲓⲁ + ⲛⲓⲛⲁⲓⲣⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲁⲓⲅⲉⲣⲓⲁ + + + ⲡⲓⲕⲟⲣⲇⲟⲃⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲓⲕⲁⲣⲁⲅⲟⲩⲁ + ⲛⲓⲕⲟⲣⲇⲟⲃⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲓⲕⲁⲣⲁⲅⲟⲩⲁ + + + ⲡⲓⲕⲣⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲟⲣⲟⲩⲓⲅ + ⲡⲓⲕⲣⲟⲛ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲟⲣⲟⲩⲓⲅ + + + ⲡⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲉⲡⲁⲗ + ⲛⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲉⲡⲁⲗ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲓⲟⲩⲍⲓⲗⲁⲛⲇⲁ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲛⲓⲟⲩⲍⲓⲗⲁⲛⲇⲁ + + + ⲡⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲙⲁⲛ + ⲛⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲙⲁⲛ + + + ⲡⲓⲃⲁⲗⲃⲟⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲁⲛⲁⲙⲁ + ⲛⲓⲃⲁⲗⲃⲟⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲁⲛⲁⲙⲁ + + + ⲡⲓⲅⲟⲩⲁⲣⲁⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲁⲣⲁⲅⲟⲩⲁⲓ + ⲛⲓⲅⲟⲩⲁⲣⲁⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲁⲣⲁⲅⲟⲩⲁⲓ + + + ⲡⲓⲕⲓⲛⲁ ⲛ̀ⲧⲉ ⲡⲁⲡⲟⲩⲁ ⲛⲓⲟⲩ ⲅⲓⲛⲉⲁ + ⲛⲓⲕⲓⲛⲁ ⲛ̀ⲧⲉ ⲡⲁⲡⲟⲩⲁ ⲛⲓⲟⲩ ⲅⲓⲛⲉⲁ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲫⲓⲗⲓⲡⲡⲓⲛ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲫⲓⲗⲓⲡⲡⲓⲛ + + + ⲡⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲁⲕⲓⲥⲑⲁⲛ + ⲛⲓⲣⲟⲩⲡⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲁⲕⲓⲥⲑⲁⲛ + + + ⲡⲓⲍⲗⲟⲑⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲟⲗⲁⲛⲇⲁ + ⲛⲓⲍⲗⲟⲑⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲟⲗⲁⲛⲇⲁ + + + ⲡⲓⲥⲟⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲉⲣⲟⲩ + ⲛⲓⲥⲟⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲡⲉⲣⲟⲩ + + + ⲡⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲑⲁⲣ + ⲛⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲑⲁⲣ + + + ⲡⲓⲗⲉⲩ ⲛ̀ⲣⲉⲙⲛ̀ⲣⲟⲙⲁⲛⲓⲁ + ⲡⲓⲗⲉⲩ ⲛ̀ⲣⲉⲙⲛ̀ⲣⲟⲙⲁⲛⲓⲁ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲉⲣⲃⲓⲁ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲉⲣⲃⲓⲁ + + + ⲡⲓⲣⲟⲩⲃⲉⲗ ⲛ̀ⲣⲉⲙ̀ⲛ̀ⲣⲟⲩⲥⲓⲁ + ⲛⲓⲣⲟⲩⲃⲉⲗ ⲛ̀ⲣⲉⲙ̀ⲛ̀ⲣⲟⲩⲥⲓⲁ + + + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲣⲟⲩⲁⲛⲇⲁ + ⲛⲓϥⲣⲁⲛⲕ ⲛ̀ⲣⲉⲙⲛ̀ⲣⲟⲩⲁⲛⲇⲁ + + + ⲡⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲁⲟⲩⲇⲓ + ⲛⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲁⲟⲩⲇⲓ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲥⲟⲗⲟⲙⲟⲛ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ⲛⲓⲙⲟⲩⲓ ⲛ̀ⲥⲟⲗⲟⲙⲟⲛ + + + ⲡⲓⲣⲟⲩⲡⲓ ⲣ̀ⲉⲙⲛ̀ⲥⲓϣⲉⲗ + ⲛⲓⲣⲟⲩⲡⲓ ⲣ̀ⲉⲙⲛ̀ⲥⲓϣⲉⲗ + + + ⲡⲓⲅⲉⲛⲉϩ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲇⲁⲛ + ⲛⲓⲅⲉⲛⲉϩ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲇⲁⲛ + + + ⲡⲓⲕⲣⲟⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲓⲇ + ⲡⲓⲕⲣⲟⲛⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲓⲇ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲓⲛⲅⲁⲡⲟⲣ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲓⲛⲅⲁⲡⲟⲣ + + + ⲡⲓⲡⲁⲩⲛⲇ ⲛ̀ⲧⲉ ⲥⲁⲛⲧ ϩⲉⲗⲉⲛⲁ + ⲛⲓⲡⲁⲩⲛⲇ ⲛ̀ⲧⲉ ⲥⲁⲛⲧ ϩⲉⲗⲉⲛⲁ + + + ⲡⲓⲗⲉⲟⲛ ⲛ̀ⲧⲉ ⲥⲓⲉⲣⲁⲗⲉⲟⲛ + ⲛⲓⲗⲉⲟⲛ ⲛ̀ⲧⲉ ⲥⲓⲉⲣⲁⲗⲉⲟⲛ + + + ⲡⲓⲗⲉⲟⲛ ⲛ̀ⲧⲉ ⲥⲓⲉⲣⲁⲗⲉⲟⲛ (1964—2022) + ⲛⲓⲗⲉⲟⲛ ⲛ̀ⲧⲉ ⲥⲓⲉⲣⲁⲗⲉⲟⲛ (1964—2022) + + + ⲡⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲙⲁⲗⲓⲁ + ⲛⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲙⲁⲗⲓⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲣⲓⲛⲁⲙ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲣⲓⲛⲁⲙ + + + ⲡⲓⲅⲉⲛⲉϩ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲇⲁⲛ ⲙ̀ⲡⲓⲣⲏⲥ + ⲛⲓⲅⲉⲛⲉϩ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲇⲁⲛ ⲙ̀ⲡⲓⲣⲏⲥ + + + ⲡⲓⲇⲟⲃⲣⲁ ⲛ̀ⲧⲉ ⲥⲁⲟ ⲑⲟⲙⲉ & ⲡⲣⲓⲛⲥⲓⲡ ⲇⲟⲃⲣⲁ + ⲛⲓⲇⲟⲃⲣⲁ ⲛ̀ⲧⲉ ⲥⲁⲟ ⲑⲟⲙⲉ & ⲡⲣⲓⲛⲥⲓⲡ ⲇⲟⲃⲣⲁ + + + ⲡⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙ̀ⲛ̀ⲁⲥⲥⲩⲣⲟⲥ + ⲛⲓⲡⲁⲩⲛⲇ ⲛ̀ⲣⲉⲙ̀ⲛ̀ⲁⲥⲥⲩⲣⲟⲥ + + + ⲡⲓⲗⲓⲗⲁⲛⲅⲉⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲁⲍⲓ + ⲡⲓⲉ̀ⲙⲁⲗⲁⲛⲅⲉⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲟⲩⲁⲍⲓ + + + ⲡⲓⲃⲁϩⲧ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲁⲓⲗⲁⲛⲇ + ⲡⲓⲃⲁϩⲧ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲁⲓⲗⲁⲛⲇ + + + ⲡⲓⲥⲟⲙⲟⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲁϫⲓⲕⲓⲥⲑⲁⲛ + ⲛⲓⲥⲟⲙⲟⲛⲓ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲁϫⲓⲕⲓⲥⲑⲁⲛ + + + ⲡⲓⲙⲁⲛⲁⲧ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲩⲣⲕⲙⲉⲛⲓⲥⲑⲁⲛ + ⲡⲓⲙⲁⲛⲁⲧ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲩⲣⲕⲙⲉⲛⲓⲥⲑⲁⲛ + + + ⲡⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲩⲛⲓⲥ + ⲛⲓⲇⲓⲛⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲩⲛⲓⲥ + + + ⲡⲓⲡⲁʻⲁⲛⲅⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲛⲅⲁ + ⲡⲓⲡⲁʻⲁⲛⲅⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲛⲅⲁ + + + ⲡⲓⲗⲓⲣⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲩⲣⲕⲓⲁ + ⲡⲓⲗⲓⲣⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲟⲩⲣⲕⲓⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲑⲣⲓⲛⲓⲇⲁⲇ & ⲑⲟⲃⲁⲅⲟ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲑⲣⲓⲛⲓⲇⲁⲇ & ⲑⲟⲃⲁⲅⲟ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ⲛⲓⲟⲩ ⲑⲁⲓⲟⲩⲁⲛ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲧⲉ ⲛⲓⲟⲩ ⲑⲁⲓⲟⲩⲁⲛ + + + ⲡⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲁⲛⲍⲁⲛⲓⲁ + ⲛⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲑⲁⲛⲍⲁⲛⲓⲁ + + + ⲡⲓϩⲣⲩⲃⲛⲓⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲕⲣⲁⲛⲓⲁ + ⲛⲓϩⲣⲩⲃⲛⲓⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲕⲣⲁⲛⲓⲁ + + + ⲡⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲅⲁⲛⲇⲁ + ⲛⲓϣⲓⲗⲓⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲅⲁⲛⲇⲁ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁⲛⲟⲥ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲛ̀ⲁⲙⲉⲣⲓⲕⲁⲛⲟⲥ + + + ⲡⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲣⲟⲩⲅⲟⲩⲁⲓ + ⲛⲓⲡⲉⲥⲟ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲣⲟⲩⲅⲟⲩⲁⲓ + + + ⲡⲓⲥⲟⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲍⲃⲉⲕⲓⲥⲑⲁⲛ + ⲡⲓⲥⲟⲙ ⲛ̀ⲣⲉⲙⲛ̀ⲟⲩⲍⲃⲉⲕⲓⲥⲑⲁⲛ + + + ⲡⲓⲃⲟⲗⲓⲃⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲉⲛⲉⲍⲟⲩⲉⲗⲁ + ⲛⲓⲃⲟⲗⲓⲃⲁⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲉⲛⲉⲍⲟⲩⲉⲗⲁ + + + ⲡⲓⲇⲟⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲓⲉⲑⲛⲁⲙ + ⲡⲓⲇⲟⲛⲅ ⲛ̀ⲣⲉⲙⲛ̀ⲃⲓⲉⲑⲛⲁⲙ + + + ⲡⲓⲃⲁⲑⲟⲩ ⲛ̀ⲧⲉ ⲃⲁⲛⲁⲑⲟⲩ + ⲛⲓⲃⲁⲑⲟⲩ ⲛ̀ⲧⲉ ⲃⲁⲛⲁⲑⲟⲩ + + + ⲡⲓⲑⲁⲗⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲁⲙⲟⲁ + ⲛⲓⲑⲁⲗⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲥⲁⲙⲟⲁ + + + ⲡⲓϥⲣⲁⲛⲕ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ ⲛ̀̀ⲑⲙⲏϯ + ⲛⲓϥⲣⲁⲛⲕ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ ⲛ̀̀ⲑⲙⲏϯ + + + ⲡⲓⲇⲟⲗⲗⲁⲣ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲕⲁⲣⲓⲃⲓ + ⲛⲓⲇⲟⲗⲗⲁⲣ ⲙ̀ⲡⲉⲓⲉⲃⲧ ⲛ̀ⲕⲁⲣⲓⲃⲓ + + + ⲡⲓⲅⲓⲗⲇⲉⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲣⲓⲃⲓ + ⲛⲓⲅⲓⲗⲇⲉⲣ ⲛ̀ⲣⲉⲙⲛ̀ⲕⲁⲣⲓⲃⲓ + + + ⲡⲓϥⲣⲁⲛⲕ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ + ⲛⲓϥⲣⲁⲛⲕ ⲙ̀ⲡⲉⲙⲉⲛⲧ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ + + + ⲡⲓϥⲣⲁⲛⲕ ⲥϥⲡ + ⲛⲓϥⲣⲁⲛⲕ ⲥϥⲡ + + + ⲟⲩϩⲁⲧ ⲛ̀ⲁⲧⲥⲟⲩⲏⲛ + (ⲟⲩϩⲁⲧ ⲛ̀ⲁⲧⲥⲟⲩⲏⲛ) + + + ⲡⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲉⲙⲉⲛ + ⲛⲓⲣⲓⲁⲗ ⲛ̀ⲣⲉⲙⲛ̀ⲓⲉⲙⲉⲛ + + + ⲡⲓⲣⲁⲛⲇ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲓⲣⲏⲥ + ⲡⲓⲣⲁⲛⲇ ⲛ̀ϯⲫⲣⲓⲕⲓⲁ ⲙ̀ⲡⲓⲣⲏⲥ + + + ⲡⲓⲕⲟⲩⲁϭⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲍⲁⲙⲃⲓⲁ + ⲛⲓⲕⲟⲩⲁϭⲁ ⲛ̀ⲣⲉⲙⲛ̀ⲍⲁⲙⲃⲓⲁ + + + ⲡⲓⲛⲟⲩⲃ ⲛ̀ⲣⲉⲙⲛ̀ⲍⲓⲙⲃⲁⲃⲟⲩⲉⲓ + ⲡⲓⲛⲟⲩⲃ ⲛ̀ⲣⲉⲙⲛ̀ⲍⲓⲙⲃⲁⲃⲟⲩⲉⲓ + + + + {0} ⲛⲓⲉϩⲟⲟⲩ + + + + + {0}, ⲛⲉⲙ {1} + {0} ⲛⲉⲙ {1} + + + {0}, ⲓⲉ {1} + {0} ⲓⲉ {1} + + + {0}, ⲓⲉ {1} + {0} ⲓⲉ {1} + + + {0}, ⲓⲉ {1} + {0} ⲓⲉ {1} + + + {0}, & {1} + {0} & {1} + + + {0} {1} + {0} {1} + {0} {1} + {0} {1} + + diff --git a/make/data/cldr/common/main/cs.xml b/make/data/cldr/common/main/cs.xml index 47b0c97a132..a4685374342 100644 --- a/make/data/cldr/common/main/cs.xml +++ b/make/data/cldr/common/main/cs.xml @@ -120,6 +120,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ čipevajština čerokézština čejenština + čikasavština kurdština (sorání) kurdština (centrální) čilkotinština @@ -323,6 +324,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kolínština kurdština + kurdština + kurmándží kumyčtina kutenajština komijština @@ -344,6 +347,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ lillooetština livonština lakotština + ladinština lombardština lingalština laoština @@ -930,6 +934,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Čína Kolumbie Clippertonův ostrov + Sark Kostarika Kuba Kapverdy @@ -1177,33 +1182,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Číselné řazení Míra řazení Měna + Zobrazení emodži Hodinový cyklus (12 vs. 24) Styl zalamování řádků + Zalamování řádků uprostřed slova Měrná soustava Čísla + Zlom věty za zkratkou Časové pásmo Varianta národního prostředí Soukromé použití Buddhistický kalendář + Buddhistický Čínský kalendář + Čínský Koptský kalendář + Koptský Korejský kalendář Dangi + Korejský Dangi Etiopský kalendář + Etiopský Etiopský kalendář (amete alem) + Etiopský (amete alem) Gregoriánský kalendář + Gregoriánský Hebrejský kalendář + Hebrejský Indický národní kalendář Kalendář podle hidžry + Podle hidžry Kalendář podle hidžry (občanský) + Podle hidždy (občanský) Kalendář podle hidžry (Umm al-Qura) + Podle hidžry (Umm al-Qura) Kalendář ISO-8601 Japonský kalendář + Japonský Perský kalendář + Perský Kalendář Čínské republiky + Čínské republiky Účetní měnový formát + Účetní Standardní měnový formát + Standardní Řadit symboly Při řazení ignorovat symboly Normální řazení akcentů @@ -1213,22 +1237,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Nejdříve řadit velká písmena Nerozlišovat při řazení velká a malá písmena Rozlišovat při řazení velká a malá písmena - Řazení pro tradiční čínštinu – Big5 Předchozí řazení, kompatibilita + Kompatibilita Slovníkové řazení + Slovník Výchozí řazení Unicode + Výchozí Unicode Evropské řazení - Řazení pro zjednodušenou čínštinu – GB2312 Řazení telefonního seznamu + Telefonní seznam Fonetické řazení + Fonetické Řazení podle pchin-jinu + Podle pchin-jinu Obecné hledání + Hledání Vyhledávat podle počáteční souhlásky písma hangul Standardní řazení + Standardní Řazení podle tahů + Podle tahů Tradiční řazení + Tradiční Řazení podle radikálů + Podle radikálů Řazení podle ču-jinu + Podle ču-jinu Řadit bez normalizace Řadit podle normalizovaného kódování Unicode Řadit číslice jednotlivě @@ -1241,18 +1275,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Plná šířka Poloviční šířka Numerický + Výchozí + Emodži + Text 12hodinový systém (0–11) + 12 (0–11) 12hodinový systém (1–12) + 12 (1–12) 24hodinový systém (0–23) + 24 (0–23) 24hodinový systém (1–24) + 24 (1–24) Volný styl zalamování řádků + Volný Běžný styl zalamování řádků + Běžný Striktní styl zalamování řádků + Striktní + Zalamovat vše + Ponechat vše + Normální + Ponechat ve frázích Transliterace podle BGN Transliterace podle UNGEGN Metrická soustava + Metrická Britská měrná soustava + Britská Americká měrná soustava + Americká Arabsko-indické číslice Rozšířené arabsko-indické číslice Arménské číslice @@ -1301,6 +1352,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tibetské číslice Tradiční číslovky Vaiské číslice + Ne + Ano metrický @@ -1565,6 +1618,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'v' {0} + + {1} 'v' {0} + @@ -1573,6 +1629,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'v' {0} + + {1} 'v' {0} + @@ -1592,18 +1651,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm:ss a E H:mm:ss y G + M/y G d. M. y GGGGG + E d. M. y G LLLL y G d. M. y G E d. M. y G d. MMMM y G E d. MMMM y G - h a H h:mm a H:mm h:mm:ss a H:mm:ss + H 'h' v d. M. E d. M. d. M. @@ -1625,12 +1686,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ QQQQ y G - - h B – h B - - - h:mm B – h:mm B - d.–d. @@ -1672,10 +1727,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d. M. – E d. M. y G E d. M. y – E d. M. y G - - h a – h a - h–h a - H–H @@ -1706,10 +1757,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm–H:mm, vvvv H:mm–H:mm, vvvv - - h a – h a v - h–h a v - H–H v @@ -2032,13 +2079,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm:ss a E H:mm:ss y G + M/y G d. M. y GGGGG + E, d. M. y G LLLL y G d. M. y G E d. M. y G d. MMMM y G E d. MMMM y G - h a H h:mm a H:mm @@ -2052,6 +2100,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm v h:mm a, vvvv H:mm, vvvv + H 'h' v d. M. E d. M. d. M. @@ -2079,12 +2128,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ w. 'týden' 'roku' Y - - h B – h B - - - h:mm B – h:mm B - d.–d. @@ -2126,10 +2169,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d. M. – E d. M. y G E d. M. y – E d. M. y G - - h a – h a - h–h a - H–H @@ -2160,10 +2199,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm–H:mm, vvvv H:mm–H:mm, vvvv - - h a – h a v - h–h a v - H–H v @@ -2841,11 +2876,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ +H:mm;-H:mm časové pásmo {0} - - HST - HST - HDT - Honolulu @@ -2862,15 +2892,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kábul - - Tirana - Jerevan - - Córdoba - Vídeň @@ -2895,15 +2919,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Brunej - - Santarém - - - Belém - - - São Paulo - Bahía @@ -2928,9 +2943,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Šanghaj - - Bogotá - Kostarika @@ -3051,7 +3063,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Phnompenh - Enderbury + Kanton (ostrov) Komory @@ -3125,24 +3137,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maledivy - - Mazatlán - Bahia Banderas - - Ciudad de México - Merida Kučing - - Nouméa - Káthmándú @@ -3224,9 +3227,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Rijád - - Mahé - Chartúm @@ -3257,9 +3257,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kerguelenovy ostrovy - - Lomé - Dušanbe @@ -3328,9 +3325,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - západoafrický čas - západoafrický standardní čas - západoafrický letní čas + západoafrický čas @@ -3753,6 +3748,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ guyanský čas + + + havajsko-aleutský standardní čas + + havajsko-aleutský čas @@ -4203,6 +4203,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ chuukský čas + + + Turecký čas + Turecký standardní čas + Turecký letní čas + + turkmenský čas @@ -4389,7 +4396,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -6383,6 +6393,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ východokaribského dolaru východokaribských dolarů + + karibský gulden + karibský gulden + karibské guldeny + karibského guldenu + karibských guldenů + SDR @@ -6544,6 +6561,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ zimbabwského dolaru (1980–2008) zimbabwských dolarů (1980–2008) + + zimbabwský zlatý + zimbabwský zlatý + zimbabwské zlaté + zimbabwského zlatého + zimbabwských zlatých + zimbabwský dolar (2009) zimbabwský dolar (2009) @@ -7288,7 +7312,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} položkami {0} položkách - + + díly + {0} díl + {0} díly + {0} dílu + {0} dílů + + inanimate díly z milionu {0} díl z milionu @@ -7428,6 +7459,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} moly {0} molech + + glukózy + {0} glukózy + {0} glukózy + {0} glukózy + {0} glukózy + inanimate litry na kilometr @@ -9126,7 +9164,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ inanimate - body {0} bod {0} bod {0} bodu @@ -9648,11 +9685,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetry rtuťového sloupce {0} milimetrech rtuťového sloupce {0} milimetru rtuťového sloupce - {0} milimetrů rtuťového sloupce - {0} milimetrům rtuťového sloupce - {0} milimetrů rtuťového sloupce - {0} milimetry rtuťového sloupce - {0} milimetrech rtuťového sloupce + {0} milimetru rtuťového sloupce + {0} milimetru rtuťového sloupce + {0} milimetru rtuťového sloupce + {0} milimetru rtuťového sloupce + {0} milimetru rtuťového sloupce {0} milimetrů rtuťového sloupce {0} milimetrů rtuťového sloupce {0} milimetrům rtuťového sloupce @@ -9660,6 +9697,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetry rtuťového sloupce {0} milimetrech rtuťového sloupce + + rtuťový sloupec + {0} rtuťového sloupce + {0} rtuťového sloupce + {0} rtuťového sloupce + {0} rtuťového sloupce + libry na čtvereční palec {0} libra na čtvereční palec @@ -10412,6 +10456,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metrickými šálky {0} metrických šálcích + + metrické duté unce + {0} metrická dutá unce + {0} metrické duté unce + {0} metrické duté unce + {0} metrických dutých uncí + akro-stopy {0} akro-stopa @@ -10533,9 +10584,99 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} britského kvartu {0} britských kvartů + + steradiány + {0} steradián + {0} steradiány + {0} steradiánu + {0} steradiánů + + + kataly + {0} katal + {0} kataly + {0} katalu + {0} katalů + + + coulomby + {0} coulomb + {0} coulomby + {0} coulombu + {0} coulombů + + + farady + {0} farad + {0} farady + {0} faradu + {0} faradů + + + henry + {0} henry + {0} henry + {0} henry + {0} henry + + + siemensy + {0} siemens + {0} siemensy + {0} siemensu + {0} siemensů + + + kalorie-IT + {0} kalorie-IT + {0} kalorie-IT + {0} kalorie-IT + {0} kalorií-IT + + + becquerely + {0} becquerel + {0} becquerely + {0} becquerelu + {0} becquerelů + + + sieverty + {0} sievert + {0} sievert + {0} sieverty + {0} sievertu + + + graye + {0} gray + {0} graye + {0} graye + {0} grayů + + + kilogramy síly + {0} kilogram síly + {0} kilogramy síly + {0} kilogramu síly + {0} kilogramů síly + + + tesly + {0} tesla + {0} tesly + {0} tesly + {0} tesel + + + webery + {0} weber + {0} webery + {0} weberu + {0} weberů + neuter - světlo {0} světlo {0} světlo {0} světlu @@ -10561,7 +10702,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} světly {0} světlech - + feminine částice na miliardu {0} částice na miliardu @@ -10591,7 +10732,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - noci {0} noc {0} noc {0} noci @@ -10680,6 +10820,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} položky {0} položek + + díl + {0} díl + {0} díly + {0} dílu + {0} dílů + {0} % {0} % @@ -10698,6 +10845,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + l/km {0} l/km @@ -11015,6 +11165,31 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ qt Imp. + + {0} kat + {0} kat + {0} kat + {0} kat + + + cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} sievertů + {0} Sv + {0} Sv + {0} Sv + světlo {0} světlo @@ -11022,11 +11197,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} světla {0} světel - + částic/mld. {0} částice na mld {0} částice na mld - {0} částic na mld + {0} částice na mld {0} částic na mld @@ -11053,6 +11228,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} pol. {0} pol. + + díl + {0} díl + {0} díly + {0} dílu + {0} dílů + + + Glc + l/100km {0} l/100km @@ -11190,20 +11375,42 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} šp. {0} šp. + + {0} kat + {0} kat + {0} kat + {0} kat + + + cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + {0} Sv + - světlo {0} sv. {0} sv. {0} sv. {0} sv. - - noci - {0} noc - {0} noci - {0} noci - {0} nocí - {0}/noc + + {0} částice na mld + {0} částice na mld + {0} částice na mld + {0} částic na mld {0}E diff --git a/make/data/cldr/common/main/csw.xml b/make/data/cldr/common/main/csw.xml index 2ee952b51c6..df2831a0543 100644 --- a/make/data/cldr/common/main/csw.xml +++ b/make/data/cldr/common/main/csw.xml @@ -256,28 +256,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm:ss a zzzz - h:mm:ss a zzzz ahmmsszzzz h:mm:ss a z - h:mm:ss a z ahmmssz h:mm:ss a - h:mm:ss a ahmmss h:mm a - h:mm a ahmm diff --git a/make/data/cldr/common/main/cu.xml b/make/data/cldr/common/main/cu.xml index 45f45dd1f36..fb7ba399694 100644 --- a/make/data/cldr/common/main/cu.xml +++ b/make/data/cldr/common/main/cu.xml @@ -677,6 +677,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ {0} {1} diff --git a/make/data/cldr/common/main/cv.xml b/make/data/cldr/common/main/cv.xml index 69207a5c275..d4d1aeb7925 100644 --- a/make/data/cldr/common/main/cv.xml +++ b/make/data/cldr/common/main/cv.xml @@ -12,591 +12,608 @@ CLDR data files are interpreted according to the LDML specification (http://unic - афар - абхаз - африканс - агем - акан - амхар - арагон - оболо - левант араб - арап - арап литератури - мапуче - ассам - асу - астури - азербайджан - пушкӑрт - белудж - бас - белорусси - бемба - батав - бен - пӑлхар - харианви - хӗвеланӑҫ балочи - бохжпури - ания - хура таи - бамбар - бенгал - тибет - бретань - бодо - босни - акоос - билин - каталан - каддо - атсам - чакма - чеченец - себуано - кига - чоктав - чероки - чикасав - вăтаçĕр курд - тӗп курд - курд (соран) - корсикан - чех - шурлӑх кри - чиркӳ-славян - чӑваш - валлий - датчан - тайта - нимӗҫ - австрин нимӗҫ - швейцарин нимӗҫ - зарма - догри - аялти серб - дуал - мальдив - диола-фоньи - дзонг-кэ - эмбу - эве - грек - акӑлчан - австралин акӑлчан - канадӑн акӑлчан - британин акӑлчан - америкӑн акӑлчан - эсперанто - испани - латинла америкӑн испани - европӑн испани - мексикӑн испани - эстон - баск - эвондо - фарси - фарси (Афганистан) - фул - фин - филиппин - фарер - франци - канадӑн франци - швейцарӗн франци - каджун француз - ҫурҫӗр фризӗ - фриул - хӗвеланӑҫ фриз - ирланд - га - гэль - геэз - галис - гуаран - швейцари нимӗҫ - гуджарат - гусии - мэн - хауса - гавай - иврит - хинди - хинди чӗлхи (латин) - хинди (латин) - монг - хорват - тури сорбиан - венгер - армян - интерлинг - индонези - интерлингве - игбо - носу (сичуан) - идо - исланди - итали - инуктитут - япони - ложбан - нгомба - мачам - яван - грузин - каракалпак - кабиль - каджи - камба - туар - маконде - кабувердьян - камерун - каинганг - койра чиини - куикуй - казах - како - гренланди - календжин - кхмер - каннада - корей - конкани - кпелле - кашмир - шамбала - бафи - кельн - курд - корн - куви - киргиз - латин - ланго - люксембург - ганда - лигур - лакота - тироль - ломбард - лингал - лаос - луизиан креоль - ҫурҫӗр лури - литва - латгал латыш - луба-катанга - луо - лухья - латыш - майтхили - масайсем - мокшан - меру - маврика креолӗ - малагас - макуа-мето - мета - мотено - маори - микмак - македон - малаялам - монгол - манипур - мохук - маратхи - малай - мальтисем - мундир - тӗрлӗ ҫемье чӗлхисем - крик - бирман - эрзян - мазандеран - нама - норвег букмол - ҫурҫӗр ндебеле - аялти нимĕç - аялти нимĕç (Нидерланд) - непал - голланди - фламанди - квасио - норвег нюнорск - нгиембунд - норвег - нко (манинка) - кӑнтӑр ндебеле - ҫурҫӗр сото - нуэр - навахо - ньяндж - ньянколе - окситан - оромо - оди (ори) - осетин - оседжи - панджаби - папьяменто - нигер креоль - пиджин - поляк - прусси - пушту - португали - бразилин португали - европӑн португали - кечуа - киче - раджастан - рохиндж - риффиан (бербер) - романш - рунди - румын - молдаван - ромбо - вырӑс - киньяруанд - руанда - санскрит - якут - самбуру - сантали - сангу - сардин - сицил - синдхи - кӑнтӑр алтай - ҫурҫӗр саам - сена - койраборо сенни - санго - тахелхит (бербер) - шан - сингал - сидама - словак - сирайки - словен - кӑнтӑр саам - луле-саам - инар-саам - колтта-саам - шона - сомали - албан - серб - свази - сахо - кӑнтӑр сото - сундан - швед - суахили - суахили (Конго - Киншаса) - сири - силез - тамил - телугу - тесо - таджик - тай - тигринья - тигре - туркмен - тсвана - тонган - токи пона - ток писин - турккӑ - тароко - торвали - тсонга - тутар - тасавак - тува - Вӑтам Атлас тамазигт - уйгур - украина + афар чӗлхи + абхаз чӗлхи + африкаанс чӗлхи + агем чӗлхи + акан чӗлхи + амхар чӗлхи + арагон чӗлхи + оболо чӗлхи + левант арап чӗлхи + араб чӗлхи + хальхи стандартлӑ араб чӗлхи + мапуче чӗлхи + ассам чӗлхи + асу чӗлхи + астури чӗлхи + азербайджан чӗлхи + пушкӑрт чӗлхи + белудж чӗлхи + баса чӗлхи + беларус чӗлхи + бемба чӗлхи + батав чӗлхи + бена чӗлхи + болгар чӗлхи + харианви чӗлхи + анӑҫ белудж чӗлхи + бходжпури чӗлхи + ании чӗлхи + тай-дам чӗлхи + бамбара чӗлхи + бенгал чӗлхи + тибет чӗлхи + бахтияр чӗлхи + бретон чӗлхи + бодо чӗлхи + босни чӗлхи + акоосе чӗлхи + бурят чӗлхи + билин чӗлхи + каталан чӗлхи + каддо чӗлхи + атсам чӗлхи + чакма чӗлхи + чечен чӗлхи + себуано чӗлхи + кига чӗлхи + чоктав чӗлхи + чероки чӗлхи + чикасав чӗлхи + вӑта курд чӗлхи + курд (сорани) чӗлхи + корсикан чӗлхи + копт чӗлхи + чех чӗлхи + шурти кри чӗлхи + чиркӳ славян чӗлхи + чӑваш чӗлхи + валли чӗлхи + датчан чӗлхи + таита чӗлхи + нимӗҫ чӗлхи + австри нимӗҫ чӗлхи + швейцари тури нимӗҫ чӗлхи + джерма чӗлхи + догри чӗлхи + анатри лужица чӗлхи + дуала чӗлхи + мальдив чӗлхи + диола-фоньи чӗлхи + дзонг-кэ чӗлхи + эмбу чӗлхи + эве чӗлхи + грек чӗлхи + акӑлчан чӗлхи + австрали акӑлчан чӗлхи + канада акӑлчан чӗлхи + британи акӑлчан чӗлхи + америка акӑлчан чӗлхи + эсперанто чӗлхи + испан чӗлхи + латинла америка испан чӗлхи + европа испан чӗлхи + мексика испан чӗлхи + эстон чӗлхи + баск чӗлхи + эвондо чӗлхи + перс чӗлхи + дари чӗлхи + фула чӗлхи + финн чӗлхи + филиппин чӗлхи + фарер чӗлхи + француз чӗлхи + канада француз чӗлхи + швейцари француз чӗлхи + каджун француз чӗлхи + ҫур ҫӗр фриз чӗлхи + фриу чӗлхи + анӑҫ фриз чӗлхи + ирланд чӗлхи + га чӗлхи + гэл чӗлхи + геэз чӗлхи + галиси чӗлхи + гуарани чӗлхи + швейцари нимӗҫ чӗлхи + гуджарати чӗлхи + гуси чӗлхи + мэн чӗлхи + хауса чӗлхи + гавай чӗлхи + иврит чӗлхи + хинди чӗлхи + хинди чӗлхи (латин ҫырулӑхӗ) + хинглиш чӗлхи + хмонг-ну чӗлхи + хорват чӗлхи + тури лужица чӗлхи + гаитян чӗлхи + венгер чӗлхи + эрмен чӗлхи + интерлингва чӗлхи + индонези чӗлхи + интерлингве чӗлхи + игбо чӗлхи + носу чӗлхи + идо чӗлхи + исланд чӗлхи + итальян чӗлхи + инуктитут чӗлхи + япон чӗлхи + ложбан чӗлхи + нгомба чӗлхи + мачаме чӗлхи + яван чӗлхи + грузин чӗлхи + каракалпак чӗлхи + кабил чӗлхи + каджи чӗлхи + камба чӗлхи + тьяп чӗлхи + маконде чӗлхи + кабувердьяну чӗлхи + кекчи чӗлхи + ньянг чӗлхи + каинганг чӗлхи + койра-чиини чӗлхи + кикуйю чӗлхи + казах чӗлхи + како чӗлхи + гренланд чӗлхи + календжин чӗлхи + кхмер чӗлхи + каннада чӗлхи + корей чӗлхи + конкани чӗлхи + кпелле чӗлхи + кашмири чӗлхи + шамбала чӗлхи + бафи чӗлхи + кёльн чӗлхи + курд чӗлхи + курд чӗлхи + курманджи чӗлхи + корн чӗлхи + куви чӗлхи + кӑркӑс чӗлхи + латин чӗлхи + ланго чӗлхи + люксембург чӗлхи + ганда чӗлхи + лигур чӗлхи + лакота чӗлхи + ладин чӗлхи + ломбард чӗлхи + лингала чӗлхи + лаос чӗлхи + луизиан креол чӗлхи + ҫур ҫӗр лур чӗлхи + литва чӗлхи + латгал чӗлхи + луба-катанга чӗлхи + луо чӗлхи + лухья чӗлхи + латыш чӗлхи + лаз чӗлхи + майтхили чӗлхи + масаи чӗлхи + мӑкшӑ чӗлхи + меру чӗлхи + маврики креол чӗлхи + малагас чӗлхи + макуа-меетто чӗлхи + мета чӗлхи + мокен чӗлхи + маори чӗлхи + микмак чӗлхи + македон чӗлхи + малаялам чӗлхи + монгол чӗлхи + манипур чӗлхи + мохаук чӗлхи + маратхи чӗлхи + малай чӗлхи + мальта чӗлхи + мунданг чӗлхи + тӗрлӗ ҫемьеллӗ чӗлхе + крик чӗлхи + хмонг-доу чӗлхи + бирман чӗлхи + ирҫе чӗлхи + мазандеран чӗлхи + миньнань чӗлхи + нама чӗлхи + букмол норвег чӗлхи + ҫур ҫӗр ндебеле чӗлхи + анатри нимӗҫ чӗлхи + анатри саксон чӗлхи + непал чӗлхи + нидерланд чӗлхи + фламанд чӗлхи + квасио чӗлхи + нюнорск норвег чӗлхи + нгиембунд чӗлхи + норвег чӗлхи + нко чӗлхи + кӑнтӑр ндебеле чӗлхи + ҫур ҫӗр сото чӗлхи + нуэр чӗлхи + навахо чӗлхи + ньянджа чӗлхи + ньянколе чӗлхи + окситан чӗлхи + оканаган чӗлхи + оромо чӗлхи + ори чӗлхи + осетин чӗлхи + оседжи чӗлхи + панджаби чӗлхи + папьяменто чӗлхи + нигери креол чӗлхи + пали чӗлхи + соломон пиджин чӗлхи + поляк чӗлхи + пьемонт чӗлхи + прусс чӗлхи + пушту чӗлхи + португал чӗлхи + бразили португал чӗлхи + португали португал чӗлхи + кечуа чӗлхи + киче чӗлхи + раджастхани чӗлхи + рохинджа чӗлхи + риф чӗлхи + романш чӗлхи + рунди чӗлхи + румын чӗлхи + молдаван чӗлхи + ромбо чӗлхи + вырӑс чӗлхи + киньяруанда чӗлхи + руанда чӗлхи + санскрит чӗлхи + саха чӗлхи + самбуру чӗлхи + сантали чӗлхи + сангу чӗлхи + сардин чӗлхи + сицил чӗлхи + синдхи чӗлхи + кӑнтӑр алтай чӗлхи + ҫур ҫӗр саам чӗлхи + сена чӗлхи + койраборо-сенни чӗлхи + санго чӗлхи + жемайт чӗлхи + ташельхит чӗлхи + шан чӗлхи + сингал чӗлхи + сидама чӗлхи + словак чӗлхи + сирайки чӗлхи + словен чӗлхи + кӑнтӑр саам чӗлхи + луле-саам чӗлхи + инари саам чӗлхи + колтта-саам чӗлхи + шона чӗлхи + сомали чӗлхи + албан чӗлхи + серб чӗлхи + свази чӗлхи + сахо чӗлхи + кӑнтӑр сото чӗлхи + сундан чӗлхи + сунвар чӗлхи + швед чӗлхи + суахили чӗлхи + конго суахили чӗлхи + сири чӗлхи + силез чӗлхи + тамил чӗлхи + телугу чӗлхи + тесо чӗлхи + таджик чӗлхи + тай чӗлхи + тигринья чӗлхи + тигре чӗлхи + туркмен чӗлхи + тсвана чӗлхи + тонган чӗлхи + токипона чӗлхи + ток-писин чӗлхи + турккӑ чӗлхи + седек чӗлхи + торвали чӗлхи + тсонга чӗлхи + тутар чӗлхи + тасавак чӗлхи + тува чӗлхи + вӑта атлас тамазигхт чӗлхи + уйгур чӗлхи + украин чӗлхи паллӑ мар чӗлхе - урду - узбек - ваи - венда - венециан - вьетнам - макуа - воляпюк - вунджо - валлон (бельги) - вальзер (нимӗҫ) - воламо - вальбири - волоф - кхоса - кангри - сога - янгбен - идиш - йоруба - ньенгату - кантон - чжуан - тамазигт - китай - ҫурҫӗр китай - китай, ҫӑмӑллатнӑ ҫыру - ҫурҫӗр китай, ҫӑмӑллатнӑ ҫыру - китай, традициллӗ ҫыру - ҫурҫӗр китай, традициллӗ ҫыру - зулу - чӗлхе материал ҫук + урду чӗлхи + узбек чӗлхи + ваи чӗлхи + венда чӗлхи + венет чӗлхи + вьетнам чӗлхи + макуа чӗлхи + волапюк чӗлхи + вунджо чӗлхи + валлон чӗлхи + валлис чӗлхи + воламо чӗлхи + вальбири чӗлхи + волоф чӗлхи + коса чӗлхи + кангри чӗлхи + сога чӗлхи + янгбен чӗлхи + идиш чӗлхи + йоруба чӗлхи + ньенгату чӗлхи + кантон чӗлхи + чжуань чӗлхи + тамазигхт чӗлхи + китай чӗлхи + ҫур ҫӗр китай чӗлхи + ҫӑмӑллатнӑ китай чӗлхи + ҫӑмӑллатнӑ ҫур ҫӗр китай чӗлхи + йӑлана кӗнӗ китай чӗлхи + йӑлана кӗнӗ ҫур ҫӗр китай чӗлхи + зулу чӗлхи + чӗлхе материалӗ ҫук - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + тӗнче Африка - Ҫурҫӗр Америка + Ҫур ҫӗр Америка Кӑнтӑр Америка Океани Анӑҫ Африка - Тӗп Америка - Хӗвелтухӑҫ Африка - Ҫурҫӗр Африка - Тӗп Африка + Вӑта Америка + Тухӑҫ Африка + Ҫур ҫӗр Африка + Вӑта Африка Кӑнтӑр Африка Америка - Ҫурҫӗр Америка регион - Карибсем - Хӗвелтухӑҫ Ази + Ҫур ҫӗр Америка регионӗ + Кариб + Тухӑҫ Ази Кӑнтӑр Ази - Кӑнтӑр хӗвелтухӑҫ Ази + Кӑнтӑр тухӑҫ Ази Кӑнтӑр Европа Австралази Меланези - Микронези регион + Микронези Полинези Ази - Тӗп Ази + Вӑта Ази Анӑҫ Ази Европа - Хӗвелтухӑҫ Европа - Ҫурҫӗр Европа + Тухӑҫ Европа + Ҫур ҫӗр Европа Анӑҫ Европа - Тропик Африка + Сахара ҫум Африка Латинла Америка Вознесени утравӗ Андорра - Арапсен Пӗрлешӳллӗ Эмирачӗ + Пӗрлешнӗ Араб Эмирачӗсем Афганистан - Антигуа тата Барбуда + Антигуапа Барбуда Ангилья Албани Армени Ангола Антарктида Аргентина - Америка Самоа + Америка Самойи Австри Австрали Аруба - Аланди утравӗсем + Аланд утравӗсем Азербайджан Боснипе Герцеговина Барбадос @@ -609,22 +626,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Бенин Сен-Бартелеми Бермуд утравӗсем - Бруней-Даруссалам + Бруней Боливи - Бонэйр, Синт-Эстатиус тата Саба + Бонэйр, Синт-Эстатиуспа Саба Бразили - Пахам утравӗсем + Багама утравӗсем Бутан Буве утравӗ Ботсвана - Беларуҫ + Беларусь Белиз Канада Кокос утравӗсем - Конго - Киншаса - Конго (КДР) - Тӗп Африка Республики - Конго - Браззавиль + Конго + Конго Демократиллӗ Республики + Вӑта Африка Республики + Конго-Браззавиль Конго Республики Швейцари Кот-д’Ивуар @@ -634,7 +651,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Китай Колумби Клиппертон утравӗ - Сарк + Сарк Коста-Рика Куба Кабо-Верде @@ -644,13 +661,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Чехи Чех Республики Германи - Диего-Гарсия + Диего-Гарси Джибути Дани Доминика - Доминикан Республики + Доминика Республики Алжир - Сеута тата Мелилья + Сеутӑпа Мелили Эквадор Эстони Египет @@ -658,12 +675,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Эритрей Испани Эфиопи - Европа пӗрлешӗвӗ - Еврозон + Европа Пӗрлешӗвӗ + Еврозона Финлянди Фиджи Фолкленд утравӗсем - Фолкленд (Мальвински) утравӗсем + Фолкленд утравӗсем (Мальвина утравӗсем) Микронези Фарер утравӗсем Франци @@ -672,7 +689,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Британи Гренада Грузи - Франци Гвиана + Франци Гвиани Гернси Гана Гибралтар @@ -680,16 +697,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гамби Гвиней Гваделупа - Экваториаллӑ Гвиней + Экваторти Гвинея Греци - Кӑнтӑр Георги тата Сандвичев утравӗсем + Кӑнтӑр Георгипе Кӑнтӑр Сандвич утравӗсем Гватемала Гуам Гвиней-Бисау Гайана - Гонконг (САР) + Гонконг (ЯАР) Гонконг - Херд тата Макдональд утравӗ + Хердпа Макдональд утравӗсем Гондурас Хорвати Гаити @@ -700,9 +717,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Израиль Мэн утравӗ Инди - Британин территори Инди океанӗре - Британи территори Инди океанӗре - Чагос архипелаге + Инди океанӗнчи Британи территорийӗ + Чагос архипелагӗ Ирак Иран Исланди @@ -712,19 +728,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Иордани Япони Кени - Киргизи + Кӑркӑсстан Камбоджа Кирибати Комор утравӗсем - Сент-Китс тата Невис - КХДР - Корей Республики + Сент-Китспа Невис + Ҫур ҫӗр Корея + Кӑнтӑр Корея Кувейт Кайман утравӗсем Казахстан Лаос Ливан - Сент-Люсия + Сент-Люси Лихтенштейн Шри-Ланка Либери @@ -739,20 +755,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic Черногори Сен-Мартен Мадагаскар - Маршаллов утравӗсем - Ҫурҫӗр Македони + Маршалл утравӗсем + Ҫур ҫӗр Македони Мали Мьянма (Бирма) Монголи - Макао (САР) + Макао (ЯАР) Макао - Ҫурҫӗр Мариан утравӗсем + Ҫур ҫӗр Мариан утравӗсем Мартиника Мавритани Монтсеррат Мальта Маврики - Мальдивсем + Мальдив Малави Мексика Малайзи @@ -773,15 +789,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Оман Панама Перу - Франци Полинези - Папуа — Ҫӗнӗ Гвиней - Филиппинсем + Франци Полинезийӗ + Папуа — Ҫӗнӗ Гвинея + Филиппин Пакистан Польша - Сен-Пьер & Микелон + Сен-Пьерпа Микелон Питкэрн утравӗсем Пуэрто-Рико - Палестинӑн территорийӗсем + Палестина территорийӗсем Палестина Португали Палау @@ -801,7 +817,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сингапур Сӑваплӑ Елена утравӗ Словени - Шпицберген тата Ян-Майен + Шпицбергенпа Ян-Майен Словаки Сьерра-Леоне Сан-Марино @@ -809,49 +825,49 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сомали Суринам Кӑнтӑр Судан - Сан-Томе тата Принсипи + Сан-Томепе Принсипи Сальвадор Синт-Мартен Сири Эсватини Свазиленд - Тристан-да-Кунья - Тёркс тата Кайкос утравӗсем + Тристан-да-Куни + Тёркспа Кайкос утравӗсем Чад - Франци Кӑнтӑр территорийӗсем + Францин Кӑнтӑр территорийӗсем Того Таиланд Таджикистан Токелау - Хӗвелтухӑҫ Тимор + Тухӑҫ Тимор Тимор-Лесте Туркменистан Тунис Тонга Турци - Тринидад тата Тобаго + Тринидадпа Тобаго Тувалу Тайвань Танзани Украина Уганда - Тулашӗнчи утравӗсем (АПШ) - Пӗрлешӳллӗ Нацисен Организацийӗ - Пӗрлешӗннӗ Штатсем + АПШ-н тулаш пӗчӗк утравӗсем + Пӗрлешнӗ Нацисен Организацийӗ + Пӗрлешнӗ Штатсем АПШ Уругвай Узбекистан Ватикан - Сент-Винсент тата Гренадины + Сент-Винсентпа Гренада Венесуэла - Британин Виргини утравӗсем - Виргини утравӗсем (АПШ) + Виргин утравӗсем (Британи) + Виргин утравӗсем (АПШ) Вьетнам Вануату - Уоллис тата Футуна + Уоллиспа Футуна Самоа - псевдакцентсем - псевд-Bidi + суя акцент + суя биди Косово Йемен Майотта @@ -861,279 +877,337 @@ CLDR data files are interpreted according to the LDML specification (http://unic паллӑ мар регион - Нимӗҫ йӑлана кӗнӗ орфографийӗ - Стандартизациленӗ резьян орфографийӗ - 1996 ҫултан пуҫласа нимӗҫ орфографийӗн правилисем - Француз каярахпа вӑтам ӗмӗрӗ 1606 ҫулччен - Француз ирхи çĕнĕ вăхăт - Академи - 1943 ҫулхи орфографийӗ - AKUAPEM локализаци - ALALC97 локализаци - Алукулу диалекчӗ - ANPEZO локализаци - AO1990 орфографийӗ - ARANES локализаци - ARKAIKA локализаци - ASANTE локализаци - AUVERN локализаци - Унификациленӗ тӗрӗк-латин алфавичӗ - BALANKA локализаци - BARLA локализаци - BASICENG локализаци - BAUDDHA локализаци - BCIAV локализаци - BCIZBL локализаци - BISCAYAN локализаци - Сан-Гиоргио диалекчӗ - BLASL локализаци - Бохорич алфавичӗ - Бунтлинг - BORNHOLM локализаци - CISAUP локализаци - COLB1945 локализаци - CORNU локализаци - CREISS локализаци - DAJNKO локализаци - EKAVSK локализаци - EMODENG локализаци - FASCIA локализаци - FODOM локализаци - Тӗнчери фонетика алфавичӗ - FONKIRSH локализаци - FONNAPA локализаци - Урал чӗлхисен фонетика алфавичӗ - FONXSAMP локализаци - GALLO локализаци - GASCON локализаци - GHERD локализаци - GRCLASS локализаци - GRITAL локализаци - GRMISTR локализаци - HEPBURN локализаци - HOGNORSK локализаци - HSISTEMO локализаци - IJEKAVSK локализаци - ITIHASA локализаци - IVANCHOV локализаци - JAUER локализаци - JYUTPING локализаци - Пӗтӗмӗшле орфографийӗ - KOCIEWIE локализаци - KSCOR локализаци - LAUKIKA локализаци - LEMOSIN локализаци - LENGADOC локализаци - Резьян чӗлхин липовецла диалекчӗ - LTG1929 локализаци - LTG2007 локализаци - LUNA1918 локализаци - METELKO локализаци - Пӗр кĕвĕллĕ - NDYUKA локализаци - Надиж диалекчӗ - NEWFOUND локализаци - NICARD локализаци - Гнива-нжив диалекчӗ - NULIK локализаци - Осеакла-осоянла диалект - OXENDICT локализаци - PAHAWH2 локализаци - PAHAWH3 локализаци - PAHAWH4 локализаци - PAMAKA локализаци - PEANO локализаци - PEHOEJI локализаци - PETR1708 локализаци - Пиньинь локализаци - Нумай тонлӑ - Компьютер - PROVENC локализаци - PUTER локализаци - Ҫӗнӗрен пӑхса тухнӑ орфографийӗ - RIGIK локализаци - Резьян - RUMGR локализаци - Сахо - Англо-шотланди - Ливерпуль - Ансат - Столици-солбицки диалект - SOTAV локализаци - SPANGLIS локализаци - SURMIRAN локализаци - SURSILV локализаци - SUTSILV локализаци - SYNNEJYL локализаци - TAILO локализаци - Тарашкевиц - TONGYONG локализаци - TUNUMIIT локализаци - Пӗрлешӳллӗ орфографийӗ - Пӗрлешӳллӗ ҫӗнӗрен пӑхса тухнӑ орфографийӗ - ULSTER локализаци - UNIFON локализаци - VAIDIKA локализаци - VALBADIA локализаци - Валенси - VALLADER локализаци - VECDRUKA локализаци - VIVARAUP локализаци - Уэйд – Джайлз системи - XSISTEMO локализаци + Нимӗҫ йӑлана кӗнӗ орфографийӗ + Стандартизациленӗ резьян орфографийӗ + 1996 ҫултан пуҫласа нимӗҫ орфографийӗн правилисем + Француз каярахпа вӑтам ӗмӗрӗ 1606 ҫулччен + Француз ирхи çĕнĕ вăхăт + Академи + 1943 ҫулхи орфографийӗ + AKUAPEM локализаци + ALALC97 локализаци + Алукулу диалекчӗ + ANPEZO локализаци + AO1990 орфографийӗ + ARANES локализаци + ARKAIKA локализаци + ASANTE локализаци + AUVERN локализаци + Унификациленӗ тӗрӗк-латин алфавичӗ + BALANKA локализаци + BARLA локализаци + BASICENG локализаци + BAUDDHA локализаци + BCIAV локализаци + BCIZBL локализаци + BISCAYAN локализаци + Сан-Гиоргио диалекчӗ + BLASL локализаци + Бохорич алфавичӗ + Бунтлинг + BORNHOLM локализаци + CISAUP локализаци + COLB1945 локализаци + CORNU локализаци + CREISS локализаци + DAJNKO локализаци + EKAVSK локализаци + EMODENG локализаци + FASCIA локализаци + FODOM локализаци + Тӗнчери фонетика алфавичӗ + FONKIRSH локализаци + FONNAPA локализаци + Урал чӗлхисен фонетика алфавичӗ + FONXSAMP локализаци + GALLO локализаци + GASCON локализаци + GHERD локализаци + GRCLASS локализаци + GRITAL локализаци + GRMISTR локализаци + HANOI локализаци + HEPBURN локализаци + HOGNORSK локализаци + HSISTEMO локализаци + HUETT локализаци + IJEKAVSK локализаци + ITIHASA локализаци + IVANCHOV локализаци + JAUER локализаци + JYUTPING локализаци + Пӗтӗмӗшле орфографийӗ + KLEINSCH локализаци + KOCIEWIE локализаци + KSCOR локализаци + LAUKIKA локализаци + LEIDENTR локализаци + LEMOSIN локализаци + LENGADOC локализаци + Резьян чӗлхин липовецла диалекчӗ + LTG1929 локализаци + LTG2007 локализаци + LUNA1918 локализаци + MDCEGYP локализаци + MDCTRANS локализаци + METELKO локализаци + Пӗр кĕвĕллĕ + NDYUKA локализаци + Надиж диалекчӗ + NEWFOUND локализаци + NICARD локализаци + Гнива-нжив диалекчӗ + NULIK локализаци + Осеакла-осоянла диалект + OXENDICT локализаци + PAHAWH2 локализаци + PAHAWH3 локализаци + PAHAWH4 локализаци + PAMAKA локализаци + PEANO локализаци + PEHOEJI локализаци + PETR1708 локализаци + Пиньинь локализаци + Нумай тонлӑ + Компьютер + PROVENC локализаци + PUTER локализаци + Ҫӗнӗрен пӑхса тухнӑ орфографийӗ + Классикӑлла Волапюк + Резьян + RUMGR локализаци + Сахо + SAIGON локализаци + Англо-шотланди + Ливерпуль + Ансат + Столици-солбицки диалект + Кабуредиан Сотавенто-диалектлӑ ушкӑнӗ + SPANGLIS локализаци + SURMIRAN локализаци + SURSILV локализаци + SUTSILV локализаци + SYNNEJYL локализаци + TAILO локализаци + Тарашкевиц + TONGYONG локализаци + TUNUMIIT локализаци + Пӗрлешӳллӗ орфографийӗ + Пӗрлешӳллӗ ҫӗнӗрен пӑхса тухнӑ орфографийӗ + ULSTER локализаци + UNIFON локализаци + VAIDIKA локализаци + VALBADIA локализаци + Валенси + VALLADER локализаци + VECDRUKA локализаци + VIVARAUP локализаци + Уэйд – Джайлз системи + XSISTEMO локализаци - çулталăк кĕнеки - валюта формачӗ - сортировка йӗрки - валюта - вӑхӑт формачӗ (12- е 24-сехет) - çĕнĕ йĕркерен пуçла стилӗ - виҫев системи - цифрисем + календарь + валюта формачӗ + сортлав йӗрки + валюта + эмодзи кӑтартӑвӗ + вӑхӑт формачӗ (12 е 24 сехетлӗ) + йӗрке куҫарӑвӗн стилӗ + сӑмах куҫарӑвӗн стилӗ + виҫе системи + хисеп паллисем + кӗсекетӳ хыҫҫӑнхи предложени татӑлӑвӗ - будда çулталăк кĕнеки - китай çулталăк кĕнеки - копт çулталăк кĕнеки - данги çулталăк кĕнеки - эфиопи çулталăк кĕнеки - амете-алем эфиопи çулталăк кĕнеки + буддистсен календарӗ + буддистсен + китай календарӗ + китай + копт календарӗ + копт + данги календарӗ + данги + эфиоп календарӗ + эфиоп + эфиоп амете-алем календарӗ + эфиоп амете-алем грегориан календарӗ - еврей çулталăк кĕнеки - инди наци çулталăк кĕнеки - хиджра çулталăк кĕнеки - хиджра граждан çулталăк кĕнеки (таблици) - хиджра çулталăк кĕнеки (Сауд Аравийӗ) - хиджра çулталăк кĕнеки (таблица, астрономи тапхӑрӗ) - хиджра çулталăк кĕнеки (Умм аль-Кура) - календарӗ ISO-8601 - япони çулталăк кĕнеки - перси çулталăк кĕнеки - Миньго çулталăк кĕнеки - финанс формачӗ - валюта стандартлӑ формачӗ - йӑлана кӗнӗ китай - big5 - иртнĕ сортировка йӗрки - сортировка йӗрки словарĕ - Юникодри яланхи сортировка йӗрки - эмодзи сортировка йӗрки - Европа сортировка правилисем - китай сортировкӑн ансат йӗрки - GB2312 - телефон кӗнекине сортировка йӗрке - пиньинь сортировка йӗрки - шырани - хангыльти пуҫламӑш килӗшӳпе шырав - стандартлӑ сортировка - йĕр сортировка йӗрке - йӑлана кӗнӗ сортировка йӗрки - уҫҫисем тӑрӑх, унтан йӗрсем тӑрӑх сортировка - чжуинь сортировка йӗрки - 12-сехет (0-11) вӑхӑт формачӗ - 12-сехет (1-12) вӑхӑт формачӗ - 24-сехет (0-23) вӑхӑт формачӗ - 24-сехет (1-24) вӑхӑт формачӗ - çĕнĕ йĕркерен пуçла ирӗклӗ стилӗ - çĕнĕ йĕркерен пуçла яланхи стилӗ - çĕнĕ йĕркерен пуçла хаяр стилӗ - метрикăлла виçев пĕрчисем - британи виҫев системи - америка виҫев системи - ахом цифрисем - араб-инди цифрисем - араб-инди цифрисем анлӑ системи - армян цифрисем - аялти регистрти армян цифрисем - бали цифрисем - бенгали цифрисем - брахмӑллӑ цифрӑсем - чакма цифрисем - чам цифрисем - çырулăхе славян цифрисем - деванагари цифрисем - дайвз акуру цифрисем - эфиопи цифрисем - тулли сарлакăш цифрисем - гарай цифрисем - грузин цифрисем - гунджала гонди цифрисем - масарам гонди цифрисем - грек цифрисем - аялти регистрти грек цифрисем - гуджарати цифрисем - гурунги кхема цифрисем - гурмукхи цифрисем - китай вуншарлă цифрисем - китай ансат цифрисем - китай ансат финанс цифрисем - китай йăлана кĕнĕ цифрисем - китай йăлана кĕнĕ финанс цифрисем - иврит цифрисем - пахау цифрисем - наякинг пуачу хмонг цифрисем - яван цифрисем - япони цифрисем - япони финанс цифрисем - кайя ли цифрисем - кави цифрисем - кхмер цифрисем - каннад цифрисем - кират рай цифрисем - ланна цифрисем - тай тхам цифрисем - лаос цифрисем - хальхи араб цифрисем - лепча цифрисем - лимб цифрисем - математика самăр цифрисем - математика хăвăл цифрисене - математика цифрисем - математика самăр сан-сериф цифрисем - математика сан-сериф цифрисем - малаялам цифрисем - моди цифрисем - монгол цифрисем - мро цифрисем - манипури цифрисем - бирман цифрисем - бирман тухӑҫӗнчи пво карен цифрисем - бирман пао цифрисем - бирман шан цифрисем - бирман таи лаи цифрисем - наг мундари цифрисем - нко цифрисем - ол-чики цифрисем - ол онал цифрисем - ория цифрисем - исмания цифрисем - самăр цифрисем - ханифи цифрисем - рим цифрисем - аялти регистрти рим цифрисем - саураштра цифрисем - шарада цифрисем - худавади цифрисем - синхала цифрисем - сора-сомпенг цифрисем - судан цифрисем - сунвари цифрисем - такри цифрисем - ҫӗнӗ тай-лю цифрисем - тамильти йӑлана кӗнӗ цифрисем - тамиль цифрисем - телугу цифрисем - тай цифрисем - тибет цифрисем - тирхута цифрисем - тангса цифрисем - вай цифрисем - варанг-кшити цифрисем - ванчо цифрисем + грегориан + еврей календарӗ + еврей + Инди наци календарӗ + Инди наци + хиджра календарӗ + хиджра + хиджра календарӗ (таблицӑллӑ, граждан) + хиджра (таблицӑллӑ, граждан) + хиджра календарӗ (Сауд Аравийӗ) + хиджра календарӗ (таблицӑллӑ, астрономи тапхӑрӗ) + хиджра (таблицӑллӑ, астрономи тапхӑрӗ) + хиджра календарӗ (Умм аль-Кура) + хиджра (Умм аль-Кура) + ISO-8601 календарӗ + япон календарӗ + япон + перс календарӗ + перс + Миньго календарӗ + Миньго + финанс формачӗ + финанс + стандартлӑ валюта формачӗ + стандартлӑ + килӗшӳллӗ сортлав йӗрки + килӗшӳллӗ + словарь сортлав йӗрки + словарь + стандартлӑ Юникод сортлав йӗрки + стандартлӑ Юникод + эмодзи сортлав йӗрки + европа сортлав правилисем + телефон кӗнеки сортлав йӗрки + телефон кӗнеки + фонетика + пиньинь сортлав йӗрки + пиньинь + шырав + шырав + хангылӗн пӗрремӗш хупӑ сас палли тӑрӑх шырав + стандартлӑ сортлав йӗрки + стандартлӑ + йӗрсемпе сортлав йӗрки + йӗрсемпе + йӑлана кӗнӗ сортлав йӗрки + йӑлана кӗнӗ + уҫӑ-йӗрпе сортлав йӗрки + уҫӑ-йӗрпе + чжуинь сортлав йӗрки + чжуинь + яланхилле + эмодзи + текст + 12 сехетлӗ вӑхӑт формачӗ (0–11) + 12 (0–11) + 12 сехетлӗ вӑхӑт формачӗ (1–12) + 12 (1–12) + 24 сехетлӗ вӑхӑт формачӗ (0–23) + 24 (0–23) + 24 сехетлӗ вӑхӑт формачӗ (1–24) + 24 (1–24) + йӗрке куҫарӑвӗн ирӗклӗ стилӗ + ирӗклӗ + йӗрке куҫарӑвӗн йӗркеллӗ стилӗ + йӗркеллӗ + йӗрке куҫарӑвӗн ҫирӗп стилӗ + ҫирӗп + пурне те куҫармалла + пурне те упрамалла + йӗркеллӗ + сӑмах ҫаврӑнӑшӗсенче упрамалла + метрла виҫе системи + метрла + акӑлчанла виҫе системи + акӑлчанла + америкӑлла виҫе системи + америкӑлла + ахом хисеп паллисем + араб-инди хисеп паллисем + анлӑ араб-инди хисеп паллисем + эрмен хисеп паллисем + эрмен пӗчӗк хисеп паллисем + бали хисеп паллисем + бенгал хисеп паллисем + брахма хисеп паллисем + чакма хисеп паллисем + чам хисеп паллисем + кирилл хисеп паллисем + деванагари хисеп паллисем + дивехи-акуру хисеп паллисем + эфиоп хисеп паллисем + тулли сарлакӑш хисеп паллисем + гарай хисеп паллисем + грузин хисеп паллисем + гунджала-гонди хисеп паллисем + масарам-гонди хисеп паллисем + грек хисеп паллисем + грек пӗчӗк хисеп паллисем + гуджарати хисеп паллисем + кхема хисеп паллисем + гурмукхи хисеп паллисем + китай вуншарлӑ хисеп паллисем + ҫӑмӑлатнӑ китай хисеп паллисем + ҫӑмӑлатнӑ китай финанс хисеп паллисем + йӑлана кӗнӗ китай хисеп паллисем + йӑлана кӗнӗ китай финанс хисеп паллисем + иврит хисеп паллисем + пахау хисеп паллисем + ньякенг-пуачуэ хисеп паллисем + яван хисеп паллисем + япон хисеп паллисем + япон финанс хисеп паллисем + кая-ли хисеп паллисем + кави хисеп паллисем + кхмер хисеп паллисем + каннада хисеп паллисем + кират-рай хисеп паллисем + ланна хисеп паллисем + тхам хисеп паллисем + лаос хисеп паллисем + хальхи араб хисеп паллисем + лепча хисеп паллисем + лимбу хисеп паллисем + хулӑн математика хисеп паллисем + чӗнтӗрлӗ математика хисеп паллисем + пӗр сарлакӑшлӑ математика хисеп паллисем + гротеск математика хисеп паллисем + хулӑн гротеск математика хисеп паллисем + малаялам хисеп паллисем + моди хисеп паллисем + монгол хисеп паллисем + мро хисеп паллисем + манипури хисеп паллисем + мьянма хисеп паллисем + тухӑҫ пво-карен мьянма хисеп паллисем + пао мьянма хисеп паллисем + шан мьянма хисеп паллисем + тай-лаи мьянма хисеп паллисем + наг-мундари хисеп паллисем + нко хисеп паллисем + ол-чики хисеп паллисем + ол-онал хисеп паллисем + ори хисеп паллисем + осман хисеп паллисем + ӗлкеллӗ хисеп паллисем + ханифи хисеп паллисем + рим хисеп паллисем + рим пӗчӗк хисеп паллисем + саураштра хисеп паллисем + шарада хисеп паллисем + худавади хисеп паллисем + сингал хисеп паллисем + сора-сонпенг хисеп паллисем + судан хисеп паллисем + сунвар хисеп паллисем + такри хисеп паллисем + ҫӗнӗ тай-ныа хисеп паллисем + йӑлана кӗнӗ тамил хисеп паллисем + тамил хисеп паллисем + телугу хисеп паллисем + тай хисеп паллисем + тибет хисеп паллисем + тирхута хисеп паллисем + тангса хисеп паллисем + толонг-сики хисеп паллисем + ваи хисеп паллисем + варанг-кшити хисеп паллисем + ванчо хисеп паллисем + сӳнтернӗ + ҫутнӑ - Метрикӑлла - Акӑлчан - Америка + Метрла + Акӑлчанла + Америкӑлла Чӗлхе: {0} @@ -1146,13 +1220,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic [{а́} {е́} {и́} {о́} {у́} {ы́} {э́} {ю́} {я́}] [АӐ Б В Г Д ЕӖЁ Ж З И Й К Л М Н О П Р С Ҫ Т УӲ Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я] [\- ‑ , % ‰ + 0 1 2 3 4 5 6 7 8 9] - [\- ‐‑ – — , ; \: ! ? . … '‘‚ "“„ « » ( ) \[ \] \{ \} § @ * / \& #] + [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” « » ( ) \[ \] \{ \} § @ * / \& #] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1161,508 +1232,42 @@ CLDR data files are interpreted according to the LDML specification (http://unic « » - - + + - будда эра + буддизм саманири - бэ + б. с. - бэ + б. с. - - - - h a – h a - h–h a - - - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a - - - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v - - - h a – h a v - h–h a v - - - - - - - - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - - - кăрлач - на­рăс - пуш - ака - çу - çĕртме - утă - çурла - авăн - юпа - чÿк - раштав - - - - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - - - - - - - - - тот - бабэ - хатур - кихак - тубэ - амшир - барамхат - бармуда - башнас - бауна - абиб - мисра - наси - - - тот - бабэ - хатур - кихак - тубэ - амшир - барамхат - бармуда - башнас - бауна - абиб - мисра - наси - - - - - тот - бабэ - хатур - кихак - тубэ - амшир - барамхат - бармуда - башнас - бауна - абиб - мисра - наси - - - тот - бабэ - хатур - кихак - тубэ - амшир - барамхат - бармуда - башнас - бауна - абиб - мисра - наси - - - - - - Диоклетиан ҫитиччен - Диоклетиан хыҫҫӑн - - - Диокл.ҫтчн - Диокл.хҫн - - - Дкл.ҫтчн - Дкл.хҫн - - - - - - h a – h a - h–h a - - - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a - - - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v - - - h a – h a v - h–h a v - - - - - - - - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - - - кăрлач - на­рăс - пуш - ака - çу - çĕртме - утă - çурла - авăн - юпа - чÿк - раштав - - - - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - - - - - - - - ҫуркунне пуҫланать - ҫумӑр шывӗ - хурт-кӑпшанкӑ вӑранать - çурхи кунпа çĕр танлашăвĕ - йăлтăр та янкӑр уяр - тӗштырӑ ҫумӑр - ҫу пуҫланать - тулли тырӑ - пучахри тырӑ - кун таврӑнни - лĕп ăшă - шăрăх - кӗркунне пуҫланать - шӑрӑх вӗҫленни - шурӑ сывлӑм - кӗркунне кунпа ҫӗр танлашни - сивӗ сывлӑм - сивӗтет - хӗл пуҫланать - юр ҫуни - вӑйлӑ юр ҫӑвать - кун хутшӑнни - вӑйсӑр сивӗ - хаяр сивĕ - - - ҫуркунне пуҫланать - ҫумӑр шывӗ - хурт-кӑпшанкӑ вӑранать - çурхи кунпа çĕр танлашăвĕ - йăлтăр та янкӑр уяр - тӗштырӑ ҫумӑр - ҫу пуҫланать - тулли тырӑ - пучахри тырӑ - кун таврӑнни - лĕп ăшă - шăрăх - кӗркунне пуҫланать - шӑрӑх вӗҫленни - шурӑ сывлӑм - кӗркунне кунпа ҫӗр танлашни - сивӗ сывлӑм - сивӗтет - хӗл пуҫланать - юр ҫуни - вӑйлӑ юр ҫӑвать - кун хутшӑнни - вӑйсӑр сивӗ - хаяр сивĕ - - - ҫуркунне пуҫланать - ҫумӑр шывӗ - хурт-кӑпшанкӑ вӑранать - çурхи кунпа çĕр танлашăвĕ - йăлтăр та янкӑр уяр - тӗштырӑ ҫумӑр - ҫу пуҫланать - тулли тырӑ - пучахри тырӑ - кун таврӑнни - лĕп ăшă - шăрăх - кӗркунне пуҫланать - шӑрӑх вӗҫленни - шурӑ сывлӑм - кӗркунне кунпа ҫӗр танлашни - сивӗ сывлӑм - сивӗтет - хӗл пуҫланать - юр ҫуни - вӑйлӑ юр ҫӑвать - кун хутшӑнни - вӑйсӑр сивӗ - хаяр сивĕ - - - - - - - - h a – h a - h–h a - - - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a - - - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v - - - h a – h a v - h–h a v - - - - - - - - - мескерем - текемт - хедар - тахсас - тер - якатит - магабит - миазия - генбот - сэнэ - хамлэ - нахасэ - эпагомен - - - мескерем - текемт - хедар - тахсас - тер - якатит - магабит - миазия - генбот - сэнэ - хамлэ - нахасэ - эпагомен - - - - - мескерем - текемт - хедар - тахсас - тер - якатит - магабит - миазия - генбот - сэнэ - хамлэ - нахасэ - эпагомен - - - мескерем - текемт - хедар - тахсас - тер - якатит - магабит - миазия - генбот - сэнэ - хамлэ - нахасэ - эпагомен - - - - - - пирĕн эрăчченхи (Христус пурнăçланничен) - пирĕн самана - - - прн.эрчнх. - прн.смн. - - - прн.эрчнх. - прн.смн. - - - - - - h a – h a - h–h a - - - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a - - - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v - - - h a – h a v - h–h a v - - - - - - EEEE, d MMMM y 'ҫ'. G + G y, MMMM, d, EEEE - d MMMM y 'ҫ'. G + G y, MMMM, d - d MMM y 'ҫ'. G + G y, MMM, d - dd.MM.y G + G y.MM.dd @@ -1688,125 +1293,2931 @@ CLDR data files are interpreted according to the LDML specification (http://unic - E, d - ccc, h:mm a - ccc HH:mm - ccc, h:mm:ss a - ccc HH:mm:ss - y 'ҫ'. G - dd.MM.y G - LLL y 'ҫ'. G - d MMM y 'ҫ'. G - E, d MMM y 'ҫ'. G - dd.MM - E, dd.MM - d MMM - ccc, d MMM - d MMMM - y 'ҫ'. G - y 'ҫ'. G - MM.y G - dd.MM.y G - E, dd.MM.y G - LLL y 'ҫ'. G - d MMM y 'ҫ'. G - E, d MMM y 'ҫ'. G - LLLL y 'ҫ'. G - QQQ y 'ҫ'. G - QQQQ y 'ҫ'. G + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + - y 'ҫ'. G – y 'ҫ'. G - y–y 'ҫҫ'. G + G y – G y + G y–y - MM.y G – MM.y G - MM.y – MM.y G - MM.y – MM.y G + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM - dd.MM.y – dd.MM.y G - dd.MM.y G – dd.MM.y G - dd.MM.y – dd.MM.y G - dd.MM.y – dd.MM.y G + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y G – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) - LLL y 'ҫ'. G – LLL y 'ҫ'. G - LLL – LLL y 'ҫ'. G - LLL y – LLL y 'ҫҫ'. G + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM - d–d MMM y 'ҫ'. G - d MMM y 'ҫ'. G – d MMM y 'ҫ'. G - d MMM – d MMM y 'ҫ'. G - d MMM y – d MMM y 'ҫҫ'. G + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d - ccc, d MMM – ccc, d MMM y 'ҫ'. G - ccc, d MMM y 'ҫ'. G – ccc, d MMM y 'ҫ'. G - ccc, d MMM – ccc, d MMM y 'ҫ'. G - ccc, d MMM y – ccc, d MMM y 'ҫҫ'. G + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + a h – a h + a h–h + + + HH–HH 'сех' + + + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm + + + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) + + + a h – a h (v) + a h–h (v) + + + HH–HH (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM + + + + + + + + + 1-мӗш уйӑх + 2-мӗш уйӑх + 3-мӗш уйӑх + 4-мӗш уйӑх + 5-мӗш уйӑх + 6-мӗш уйӑх + 7-мӗш уйӑх + 8-мӗш уйӑх + 9-мӗш уйӑх + 10-мӗш уйӑх + 11-мӗш уйӑх + 12-мӗш уйӑх + + + пӗрремӗш уйӑх + иккӗмӗш уйӑх + виҫҫӗмӗш уйӑх + тӑваттӑмӗш уйӑх + пиллӗкмӗш уйӑх + улттӑмӗш уйӑх + ҫиччӗмӗш уйӑх + саккӑрмӗш уйӑх + тӑххӑрмӗш уйӑх + вуннӑмӗш уйӑх + вун пӗрмӗш уйӑх + вун иккӗмӗш уйӑх + + + + + 1-мӗш уйӑх + 2-мӗш уйӑх + 3-мӗш уйӑх + 4-мӗш уйӑх + 5-мӗш уйӑх + 6-мӗш уйӑх + 7-мӗш уйӑх + 8-мӗш уйӑх + 9-мӗш уйӑх + 10-мӗш уйӑх + 11-мӗш уйӑх + 12-мӗш уйӑх + + + пӗрремӗш уйӑх + иккӗмӗш уйӑх + виҫҫӗмӗш уйӑх + тӑваттӑмӗш уйӑх + пиллӗкмӗш уйӑх + улттӑмӗш уйӑх + ҫиччӗмӗш уйӑх + саккӑрмӗш уйӑх + тӑххӑрмӗш уйӑх + вуннӑмӗш уйӑх + вун пӗрмӗш уйӑх + вун иккӗмӗш уйӑх + + + + + + + йӗкӗр {0} + + + йӗкӗр {0} + + + йӗкӗр {0} + + + + + йӗкӗр {0} + + + + + йӗкӗр {0} + + + йӗкӗр {0} + + + йӗкӗр {0} + + + + + + + + цзы + чоу + инь + мао + чэнь + сы + у + вэй + шэнь + ю + сюй + хай + + + цзы + чоу + инь + мао + чэнь + сы + у + вэй + шэнь + ю + сюй + хай + + + цзы + чоу + инь + мао + чэнь + сы + у + вэй + шэнь + ю + сюй + хай + + + + + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + + + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + + + + + личунь + юйшуй + цзинчжэ + чуньфэнь + цинмин + гуюй + лися + сяомань + манчжун + сячжи + сяошу + дашу + лицю + чушу + байлу + цюфэнь + ханьлу + шуанцзян + лидун + сяосюэ + дасюэ + дунчжи + сяохань + дахань + + + личунь + юйшуй + цзинчжэ + чуньфэнь + цинмин + гуюй + лися + сяомань + манчжун + сячжи + сяошу + дашу + лицю + чушу + байлу + цюфэнь + ханьлу + шуанцзян + лидун + сяосюэ + дасюэ + дунчжи + сяохань + дахань + + + личунь + юйшуй + цзинчжэ + чуньфэнь + цинмин + гуюй + лися + сяомань + манчжун + сячжи + сяошу + дашу + лицю + чушу + байлу + цюфэнь + ханьлу + шуанцзян + лидун + сяосюэ + дасюэ + дунчжи + сяохань + дахань + + + + + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + цзя-цзы + и-чоу + бин-инь + дин-мао + у-чэнь + цзи-сы + гэн-у + синь-вэй + жэнь-шэнь + гуй-ю + цзя-сюй + и-хай + бин-цзы + дин-чоу + у-инь + цзи-мао + гэн-чэнь + синь-сы + жэнь-у + гуй-вэй + цзя-шэнь + и-ю + бин-сюй + дин-хай + у-цзы + цзи-чоу + гэн-инь + синь-мао + жэнь-чэнь + гуй-сы + цзя-у + и-вэй + бин-шэнь + дин-ю + у-сюй + цзи-хай + гэн-цзы + синь-чоу + жэнь-инь + гуй-мао + цзя-чэнь + и-сы + бин-у + дин-вэй + у-шэнь + цзи-ю + гэн-сюй + синь-хай + жэнь-цзы + гуй-чоу + цзя-инь + и-мао + бин-чэнь + дин-сы + у-у + цзи-вэй + гэн-шэнь + синь-ю + жэнь-сюй + гуй-хай + + + + + + + цзы + чоу + инь + мао + чэнь + сы + у + вэй + шэнь + ю + сюй + хай + + + цзы + чоу + инь + мао + чэнь + сы + у + вэй + шэнь + ю + сюй + хай + + + цзы + чоу + инь + мао + чэнь + сы + у + вэй + шэнь + ю + сюй + хай + + + + + + + + r (U), MMMM, d, EEEE + + + + + r (U), MMMM, d + + + + + r, MMM, d + + + + + r.MM.dd + + + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + B h + B h:mm + B h:mm:ss + E, B h + E, B h:mm + E, B h:mm:ss + r (U) + r, MMM + r, MMM, d + r, MMM, d, E + r (U), MMMM + r (U), MMMM, d + r (U), MMMM, d, E + a h + HH 'сех' + a h:mm + a h:mm:ss + a h (v) + HH 'сех' (v) + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + U, MM + U, MM.dd + U, MMM + U, MMM, d + r (U) + r (U) + r.MM + r.MM.dd + r.MM.dd (E) + r, MMM + r, MMM, d + r, MMM, d, E + r (U), MMMM + r (U), MMMM, d + r (U), MMMM, d, E + r (U), QQQ + r (U), QQQQ + + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + a h – a h + a h–h + + + HH–HH 'сех' + + + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm + + + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) + + + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' v M–M - dd.MM – dd.MM - dd.MM – dd.MM + MM.dd – MM.dd + MM.dd – MM.dd - E, dd.MM – E, dd.MM - E, dd.MM – E, dd.MM + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM - d–d MMM - d MMM – d MMM + MMM, d–d + MMM, d – MMM, d - ccc, d MMM – ccc, d MMM - ccc, d MMM – ccc, d MMM + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E - y–y 'ҫҫ'. G + U – U - MM.y – MM.y G - MM.y – MM.y G + y.MM – y.MM + y.MM – y.MM - dd.MM.y – dd.MM.y G - dd.MM.y – dd.MM.y G - dd.MM.y – dd.MM.y G + y.MM.dd – y.MM.dd + y.MM.dd – y.MM.dd + y.MM.dd – y.MM.dd - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G + y.MM.dd (E) – y.MM.dd (E) + y.MM.dd (E) – y.MM.dd (E) + y.MM.dd (E) – y.MM.dd (E) - LLL – LLL y 'ҫ'. G - LLL y 'ҫ'. – LLL y 'ҫ'. G + U, MMM – MMM + U, MMM – U, MMM - d–d MMM y 'ҫ'. G - d MMM – d MMM y 'ҫ'. G - d MMM y 'ҫ'. – d MMM y 'ҫ'. G + U, MMM, d–d + U, MMM, d – MMM, d + U, MMM, d – U, MMM, d - ccc, d MMM – ccc, d MMM y 'ҫ'. G - ccc, d MMM – ccc, d MMM y 'ҫ'. G - ccc, d MMM y 'ҫ'. – ccc, d MMM y 'ҫ'. G + U, MMM, d, E – MMM, d, E + U, MMM, d, E – MMM, d, E + U, MMM, d, E – U, MMM, d, E - LLLL – LLLL y 'ҫ'. G - LLLL y 'ҫ'. – LLLL y 'ҫ'. G + U, MMMM – MMMM + U, MMMM – U, MMMM + + + + + + + + + тот + бабэ + хатур + кихак + тубэ + амшир + барамхат + бармуда + башнас + бауна + абиб + мисра + наси + + + + + + Диоклетиантан + + + Диокл-т. + + + Д-т. + + + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y – G y + G y–y + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + a h – a h + a h–h + + + HH–HH 'сех' + + + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm + + + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) + + + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM + + + + + + + + + 1-мӗш уйӑх + 2-мӗш уйӑх + 3-мӗш уйӑх + 4-мӗш уйӑх + 5-мӗш уйӑх + 6-мӗш уйӑх + 7-мӗш уйӑх + 8-мӗш уйӑх + 9-мӗш уйӑх + 10-мӗш уйӑх + 11-мӗш уйӑх + 12-мӗш уйӑх + + + пӗрремӗш уйӑх + иккӗмӗш уйӑх + виҫҫӗмӗш уйӑх + тӑваттӑмӗш уйӑх + пиллӗкмӗш уйӑх + улттӑмӗш уйӑх + ҫиччӗмӗш уйӑх + саккӑрмӗш уйӑх + тӑххӑрмӗш уйӑх + вуннӑмӗш уйӑх + вун пӗрмӗш уйӑх + вун иккӗмӗш уйӑх + + + + + 1-мӗш уйӑх + 2-мӗш уйӑх + 3-мӗш уйӑх + 4-мӗш уйӑх + 5-мӗш уйӑх + 6-мӗш уйӑх + 7-мӗш уйӑх + 8-мӗш уйӑх + 9-мӗш уйӑх + 10-мӗш уйӑх + 11-мӗш уйӑх + 12-мӗш уйӑх + + + пӗрремӗш уйӑх + иккӗмӗш уйӑх + виҫҫӗмӗш уйӑх + тӑваттӑмӗш уйӑх + пиллӗкмӗш уйӑх + улттӑмӗш уйӑх + ҫиччӗмӗш уйӑх + саккӑрмӗш уйӑх + тӑххӑрмӗш уйӑх + вуннӑмӗш уйӑх + вун пӗрмӗш уйӑх + вун иккӗмӗш уйӑх + + + + + + + йӗкӗр {0} + + + йӗкӗр {0} + + + йӗкӗр {0} + + + + + йӗкӗр {0} + + + + + йӗкӗр {0} + + + йӗкӗр {0} + + + йӗкӗр {0} + + + + + + + + ча + чхук + ин + мё + чин + са + о + ми + син + ю + суль + хэ + + + ча + чхук + ин + мё + чин + са + о + ми + син + ю + суль + хэ + + + ча + чхук + ин + мё + чин + са + о + ми + син + ю + суль + хэ + + + + + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + + + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + + + + + ипчхун + усу + кёнъчхип + чхунбун + чхёнъмён + когу + ипха + соман + манъджон + хачи + сосо + дэсо + ипхчху + чхосо + пэкхро + чхупун + халло + санъган + ипдон + сосоль + дэсоль + тонъджи + сохан + дэхан + + + ипчхун + усу + кёнъчхип + чхунбун + чхёнъмён + когу + ипха + соман + манъджон + хачи + сосо + дэсо + ипхчху + чхосо + пэкхро + чхупун + халло + санъган + ипдон + сосоль + дэсоль + тонъджи + сохан + дэхан + + + ипчхун + усу + кёнъчхип + чхунбун + чхёнъмён + когу + ипха + соман + манъджон + хачи + сосо + дэсо + ипхчху + чхосо + пэкхро + чхупун + халло + санъган + ипдон + сосоль + дэсоль + тонъджи + сохан + дэхан + + + + + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + кап-ча + ыль-чхук + пёнъ-ин + чонъ-мё + му-чин + ки-са + кёнъ-о + син-ми + им-син + ке-ю + кап-суль + ыль-хэ + пёнъ-ча + чонъ-чхук + му-ин + ки-мё + кёнъ-чин + син-са + им-о + ке-ми + кап-син + ыль-ю + пёнъ-суль + чонъ-хэ + му-ча + ки-чхук + кёнъ-ин + син-мё + им-чин + ке-са + кап-о + ыль-ми + пёнъ-син + чонъ-ю + му-суль + ки-хэ + кёнъ-ча + син-чхук + им-ин + ке-мё + кап-чин + ыль-са + пёнъ-о + чонъ-ми + му-син + ки-ю + кёнъ-суль + син-хэ + им-ча + ке-чхук + кап-ин + ыль-мё + пёнъ-чин + чонъ-са + му-о + ки-ми + кёнъ-син + син-ю + им-суль + ке-хэ + + + + + + + ча + чхук + ин + мё + чин + са + о + ми + син + ю + суль + хэ + + + ча + чхук + ин + мё + чин + са + о + ми + син + ю + суль + хэ + + + ча + чхук + ин + мё + чин + са + о + ми + син + ю + суль + хэ + + + + + + + + r (U), MMMM, d, EEEE + + + + + r (U), MMMM, d + + + + + r, MMM, d + + + + + r.MM.dd + + + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + r (U) + r, MMM + r, MMM, d + r, MMM, d, E + r (U), MMMM + r (U), MMMM, d + r (U), MMMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + U, MM + U, MM.dd + U, MMM + U, MMM, d + r (U) + r (U) + r.MM + r.MM.dd + r.MM.dd (E) + r, MMM + r, MMM, d + r, MMM, d, E + r (U), MMMM + r (U), MMMM, d + r (U), MMMM, d, E + r (U), QQQ + r (U), QQQQ + + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + a h – a h + a h–h + + + HH–HH 'сех' + + + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm + + + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) + + + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' v + + + M–M + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + U – U + + + y.MM – y.MM + y.MM – y.MM + + + y.MM.dd – y.MM.dd + y.MM.dd – y.MM.dd + y.MM.dd – y.MM.dd + + + y.MM.dd (E) – y.MM.dd (E) + y.MM.dd (E) – y.MM.dd (E) + y.MM.dd (E) – y.MM.dd (E) + + + U, MMM – MMM + U, MMM – U, MMM + + + U, MMM, d–d + U, MMM, d – MMM, d + U, MMM, d – U, MMM, d + + + U, MMM, d, E – MMM, d, E + U, MMM, d, E – MMM, d, E + U, MMM, d, E – U, MMM, d, E + + + U, MMMM – MMMM + U, MMMM – U, MMMM + + + + + + + + + мескерем + текемт + хедар + тахсас + тер + якатит + магабит + миазия + генбот + сэнэ + хамлэ + нахасэ + эпагомен + + + + + + тӗнче пуҫланнӑран + + + т. п-р. + + + т. п-р. + + + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y – G y + G y–y + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + a h – a h + a h–h + + + HH–HH 'сех' + + + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm + + + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) + + + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM + + + + + + + + тӗнче пуҫланнӑран + + + т. п-р. + + + т. п-р. + + + + + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + B h + B h:mm + B h:mm:ss + E, B h + E, B h:mm + E, B h:mm:ss + E, a h + E, a h:mm + E, HH:mm + E, a h:mm:ss + E, HH:mm:ss + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + a h + HH 'сех' + a h:mm + a h:mm:ss + a h (v) + HH 'сех' (v) + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + a h – a h + a h–h + + + HH–HH 'сех' + + + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm + + + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) + + + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) + + + M–M + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM @@ -1820,7 +4231,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic пуш ака ҫу - ҫӗр. + ҫӗрт. утӑ ҫур. авӑн @@ -1844,6 +4255,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + кӑр. + нар. + пуш + ака + ҫу + ҫӗрт. + утӑ + ҫур. + авӑн + юпа + чӳк + раш. + К Н @@ -1863,25 +4288,43 @@ CLDR data files are interpreted according to the LDML specification (http://unic - выр. - тун. - ытл. - юн. - кӗҫ. - эр. - шӑм. + вр + тн + ыт + юн + кҫ + эр + шм + + + вр + тн + ыт + юн + кҫ + эр + шм - вырсарникун - тунтикун - ытларикун - юнкун - кӗҫнерникун - эрнекун - шӑматкун + вырсарни кун + тунти кун + ытлари кун + юн кун + кӗҫнерни кун + эрне кун + шӑмат кун + + вр + тн + ыт + юн + кҫ + эр + шм + В Т @@ -1891,67 +4334,135 @@ CLDR data files are interpreted according to the LDML specification (http://unic Э Ш + + вр + тн + ыт + юн + кҫ + эр + шм + + + вырсарни кун + тунти кун + ытлари кун + юн кун + кӗҫнерни кун + эрне кун + шӑмат кун + - 1-мӗш кв. - 2-мӗш кв. - 3-мӗш кв. - 4-мӗш кв. + 1-мӗш чӗр. + 2-мӗш чӗр. + 3-мӗш чӗр. + 4-мӗш чӗр. - 1-мӗш квартал - 2-мӗш квартал - 3-мӗш квартал - 4-мӗш квартал + 1-мӗш чӗрӗк + 2-мӗш чӗрӗк + 3-мӗш чӗрӗк + 4-мӗш чӗрӗк + + + + + 1-мӗш чӗр. + 2-мӗш чӗр. + 3-мӗш чӗр. + 4-мӗш чӗр. + + + 1-мӗш чӗрӗк + 2-мӗш чӗрӗк + 3-мӗш чӗрӗк + 4-мӗш чӗрӗк + + + + к. у. + к. х. + + + к. у. + к. х. + + + к. у. + к. х. + + + + + к. у. + к. х. + + + к. у. + к. х. + + + к. у. + к. х. + + + - Христос ҫуралнӑ кунччен - пирӗн эрӑччен - Христос ҫуралнӑ кунран - хальхи эрӑ + хальхи саманачченхи + хальхи саманачченхи + хальхи саманари + хальхи саманари - п. э. - х. э. + х. с-ч. + х. с. + + х. с-ч. + х. с-ч. + х. с. + х. с. + - EEEE, d MMMM y 'ҫ'. + y, MMMM, d, EEEE - d MMMM y 'ҫ'. + y, MMMM, d - d MMM y 'ҫ'. + y, MMM, d - dd.MM.y + y.MM.dd - HH:mm:ss zzzz + HH:mm:ss (zzzz) - HH:mm:ss z + HH:mm:ss (z) @@ -1987,124 +4498,183 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ccc, h:mm B - ccc, h:mm:ss B - ccc, d - E h:mm:ss a - y 'ҫ'. G - dd.MM.y GGGGG - LLL y 'ҫ'. G - d MMM y 'ҫ'. G - E, d MMM y 'ҫ'. G - h:mm a - h:mm:ss a - h:mm:ss a v - dd.MM - E, dd.MM - d MMM - ccc, d MMM - d MMMM - MMMM W-'мӗш' 'эрни' - MM.y - dd.MM.y - ccc, dd.MM.y 'ҫ'. - LLL y 'ҫ'. - d MMM y 'ҫ'. - E, d MMM y 'ҫ'. - LLLL y 'ҫ'. - QQQ y 'ҫ'. - QQQQ y 'ҫ'. - w-'мӗш' 'эрни' Y 'ҫ'. + B h + B h:mm + B h:mm:ss + E, B h + ccc, B h:mm + ccc, B h:mm:ss + d, ccc + E, a h + E, a h:mm + E, HH:mm + E, a h:mm:ss + E, HH:mm:ss + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + a h + HH 'сех' + a h:mm + a h:mm:ss + a h:mm:ss (v) + HH:mm:ss (v) + a h:mm (v) + HH:mm (v) + a h (v) + HH 'сех' (v) + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + MMMM, W-'мӗш' 'эрне' + MMMM, W-'мӗш' 'эрне' + MMMM, W-'мӗш' 'эрне' + y.MM + y.MM.dd + y.MM.dd (ccc) + y, MMM + y, MMM, d + y, MMM, d, E + y, MMMM + y, QQQ + y, QQQQ + Y, w-'мӗш' 'эрне' + Y, w-'мӗш' 'эрне' + Y, w-'мӗш' 'эрне' + + {0} ({1}) + - - y 'ҫ'. G – y 'ҫ'. G - y–y 'ҫҫ'. G + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm - MM.y G – MM.y G - MM.y – MM.y G - MM.y – MM.y G + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM - dd.MM.y – dd.MM.y G - dd.MM.y G – dd.MM.y G - dd.MM.y – dd.MM.y G - dd.MM.y – dd.MM.y G + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y G – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) - LLL y 'ҫ'. G – LLL y 'ҫ'. G - LLL – LLL y 'ҫ'. G - LLL y – LLL y 'ҫҫ'. G + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM - d–d MMM y 'ҫ'. G - d MMM y 'ҫ'. G – d MMM y 'ҫ'. G - d MMM – d MMM y 'ҫ'. G - d MMM y – d MMM y 'ҫҫ'. G + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d - ccc, d MMM – ccc, d MMM y 'ҫ'. G - ccc, d MMM y 'ҫ'. G – ccc, d MMM y 'ҫ'. G - ccc, d MMM – ccc, d MMM y 'ҫ'. G - ccc, d MMM y – ccc, d MMM y 'ҫҫ'. G + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + a h – a h + a h–h + + + HH–HH 'сех' + + + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm + + + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) + + + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) M–M - dd.MM – dd.MM - dd.MM – dd.MM + MM.dd – MM.dd + MM.dd – MM.dd - E, dd.MM – E, dd.MM - E, dd.MM – E, dd.MM + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM - d–d MMM - d MMM – d MMM + MMM, d–d + MMM, d – MMM, d - E, d MMM – E, d MMM - E, d MMM – E, d MMM + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E - MM.y – MM.y - MM.y – MM.y + y.MM – y.MM + y.MM – y.MM - dd.MM.y – dd.MM.y - dd.MM.y – dd.MM.y - dd.MM.y – dd.MM.y + y.MM.dd – y.MM.dd + y.MM.dd – y.MM.dd + y.MM.dd – y.MM.dd - ccc, dd.MM.y – ccc, dd.MM.y - ccc, dd.MM.y – ccc, dd.MM.y - ccc, dd.MM.y – ccc, dd.MM.y + y.MM.dd (E) – y.MM.dd (E) + y.MM.dd (E) – y.MM.dd (E) + y.MM.dd (E) – y.MM.dd (E) - LLL – LLL y 'ҫ'. - LLL y 'ҫ'. – LLL y 'ҫ'. + y, MMM – MMM + y, MMM – y, MMM - d–d MMM y 'ҫ'. - d MMM – d MMM y 'ҫ'. - d MMM y 'ҫ'. – d MMM y 'ҫ'. + y, MMM, d–d + y, MMM, d – MMM, d + y, MMM, d – y, MMM, d - ccc, d – ccc, d MMM y 'ҫ'. - ccc, d MMM – ccc, d MMM y 'ҫ'. - ccc, d MMM y 'ҫ'. – ccc, d MMM y 'ҫ'. + y, MMM, d, E – MMM, d, E + y, MMM, d, E – MMM, d, E + y, MMM, d, E – y, MMM, d, E - LLLL – LLLL y 'ҫ'. - LLLL y 'ҫ'. – LLLL y 'ҫ'. + y, MMMM – MMMM + y, MMMM – y, MMMM @@ -2112,98 +4682,251 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - тишрей - хешван - кислев - тевет - шеват - адар I - адар - адар II - нисан - ияр - сиван - таммуз - ав - элул - - тишрей - хешван - кислев - тевет - шеват - адар I - адар - адар II - нисан - ияр - сиван - таммуз - ав - элул + тишрей + хешван + кислев + тевет + шеват + адар-алеф + адар + адар-бет + нисан + ияр + сиван + таммуз + ав + элул - - тишрей - хешван - кислев - тевет - шеват - адар I - адар - адар II - нисан - ияр - сиван - таммуз - ав - элул - - тишрей - хешван - кислев - тевет - шеват - адар I - адар - адар II - нисан - ияр - сиван - таммуз - ав - элул + тишрей + хешван + кислев + тевет + шеват + адар-алеф + адар + адар-бет + нисан + ияр + сиван + таммуз + ав + элул - çут тĕнче пулса кайни + тӗнче пуҫланнӑран + + т. п-р. + + + т. п-р. + + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y – G y + G y–y + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + - h a – h a - h–h a + a h – a h + a h–h + + + HH–HH 'сех' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) - h a – h a v - h–h a v + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM @@ -2211,96 +4934,231 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - чайтра - ваисакха - джанштха - асадха - сравана - бхадра - азвина - картика - аграхайана - пауза - магха - пхалгуна - - чайтра - ваисакха - джанштха - асадха - сравана - бхадра - азвина - картика - аграхайана - пауза - магха - пхалгуна - - - - - чайтра - ваисакха - джанштха - асадха - сравана - бхадра - азвина - картика - аграхайана - пауза - магха - пхалгуна - - - чайтра - ваисакха - джанштха - асадха - сравана - бхадра - азвина - картика - аграхайана - пауза - магха - пхалгуна + чайтра + ваисакха + джанштха + асадха + сравана + бхадра + азвина + картика + аграхайана + пауза + магха + пхалгуна - Сака + Сака саманари - Сака + Сака с. - Сака + Сака с. + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y – G y + G y–y + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + - h a – h a - h–h a + a h – a h + a h–h + + + HH–HH 'сех' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) - h a – h a v - h–h a v + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM @@ -2309,95 +5167,247 @@ CLDR data files are interpreted according to the LDML specification (http://unic - мух. - саф. - раб. I - раб. II - джум. I - джум. II - радж. - шааб. - рам. - шав. - зуль-к. - зуль-х. + мух. + саф. + раб. I + раб. II + джум. I + джум. II + радж. + шааб. + рам. + шав. + зуль-к. + зуль-х. - мухаррам - сафар - раби-уль-авваль - раби-уль-ахир - джумад-уль-авваль - джумад-уль-ахир - раджаб - шаабан - рамадан - шавваль - зуль-каада - зуль-хиджжа - - - - - мух. - саф. - раб. I - раб. II - джум. I - джум. II - радж. - шааб. - рам. - шав. - зуль-к. - зуль-х. - - - мухаррам - сафар - раби-уль-авваль - раби-уль-ахир - джумад-уль-авваль - джумад-уль-ахир - раджаб - шаабан - рамадан - шавваль - зуль-каада - зуль-хиджжа + мухаррам + сафар + раби-уль-авваль + раби-уль-ахир + джумад-уль-авваль + джумад-уль-ахир + раджаб + шаабан + рамадан + шавваль + зуль-каада + зуль-хиджжа - хиджра хыҫҫӑн + хиджра хыҫҫӑнхи + хиджрӑччен - хиджра хҫн + х. х. + х-ч. - х-ра хҫн + х. х. + х-ч. + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y – G y + G y–y + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + - h a – h a - h–h a + a h – a h + a h–h + + + HH–HH - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) - h a – h a v - h–h a v + a h – a h (v) + a h–h (v) + + + HH–HH (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM @@ -2405,742 +5415,921 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Тайка тапхăрĕ (645–650) - Хакути тапхăрĕ (650–671) - Хакухо тапхăрĕ (672–686) - Сючё тапхăрĕ (686–701) - Тайхо тапхăрĕ (701–704) - Кёюн тапхăрĕ (704–708) - Вадо тапхăрĕ (708–715) - Рэйки тапхăрĕ (715–717) - Ёро тапхăрĕ (717–724) - Дзинки тапхăрĕ (724–729) - Темпьё тапхăрĕ (729–749) - Темпьё тапхăрĕ (749–749) - Темпьё-Сьохо тапхăрĕ (749-757) - Темпьё-Ходзи тапхăрĕ (757-765) - Темпьё-Ходзи тапхăрĕ (765-767) - Джинго-Кёюн тапхăрĕ (767-770) - Хоки тапхăрĕ (770–780) - Теньё тапхăрĕ (781–782) - Енряку тапхăрĕ (782–806) - Дайдо тапхăрĕ (806–810) - Конин тапхăрĕ (810–824) - Тентьо тапхăрĕ (824–834) - Шова тапхăрĕ (834–848) - Кайо тапхăрĕ (848–851) - Ниндзю тапхăрĕ (851–854) - Сайко тапхăрĕ (854–857) - Теннан тапхăрĕ (857–859) - Йоган тапхăрĕ (859–877) - Генкей тапхăрĕ (877–885) - Нинна тапхăрĕ (885–889) - Кампьё тапхăрĕ (889–898) - Сьотай тапхăрĕ (898–901) - Энги тапхăрĕ (901–923) - Ентьо тапхăрĕ (923–931) - Сьёхэй тапхăрĕ (931–938) - Тенгьо тапхăрĕ (938–947) - Тенрияку тапхăрĕ (947–957) - Тентоку тапхăрĕ (957–961) - Ова тапхăрĕ (961–964) - Кохо тапхăрĕ (964–968) - Анна тапхăрĕ (968–970) - Тенроку тапхăрĕ (970–973) - Теньен тапхăрĕ (973–976) - Дзьоген тапхăрĕ (976–978) - Тенген тапхăрĕ (978–983) - Ейкан тапхăрĕ (983–985) - Канна тапхăрĕ (985–987) - Ейен тапхăрĕ (987–989) - Ейсо тапхăрĕ (989–990) - Сёряку тапхăрĕ (990–995) - Тётоку тапхăрĕ (995–999) - Тёхо тапхăрĕ (999–1004) - Канко тапхăрĕ (1004–1012) - Тёва тапхăрĕ (1012–1017) - Каннин тапхăрĕ (1017–1021) - Дзиан тапхăрĕ (1021–1024) - Мандзю тапхăрĕ (1024–1028) - Тёгэн тапхăрĕ (1028–1037) - Тёряку тапхăрĕ (1037–1040) - Тёкю тапхăрĕ (1040–1044) - Катоку тапхăрĕ (1044–1046) - Эйсо тапхăрĕ (1046–1053) - Тэнги тапхăрĕ (1053–1058) - Кохэй тапхăрĕ (1058–1065) - Дзиряку тапхăрĕ (1065–1069) - Энкю тапхăрĕ (1069–1074) - Сёхо тапхăрĕ (1074–1077) - Сёряку тапхăрĕ (1077–1081) - Эйхо тапхăрĕ (1081–1084) - Отоку тапхăрĕ (1084–1087) - Кандзи тапхăрĕ (1087–1094) - Кахо тапхăрĕ (1094–1096) - Эйтё тапхăрĕ (1096–1097) - Сётоку тапхăрĕ (1097–1099) - Кова тапхăрĕ (1099–1104) - Тёдзи тапхăрĕ (1104–1106) - Касё тапхăрĕ (1106–1108) - Тэннин тапхăрĕ (1108–1110) - Тэнъэй тапхăрĕ (1110–1113) - Эйкю тапхăрĕ (1113–1118) - Гэнъэй тапхăрĕ (1118–1120) - Хоан тапхăрĕ (1120–1124) - Тэндзи тапхăрĕ (1124–1126) - Дайдзи тапхăрĕ (1126–1131) - Тэнсё тапхăрĕ (1131–1132) - Тёсё тапхăрĕ (1132–1135) - Хоэн тапхăрĕ (1135–1141) - Эйдзи тапхăрĕ (1141–1142) - Кодзи тапхăрĕ (1142–1144) - Тэнё тапхăрĕ (1144–1145) - Кюан тапхăрĕ (1145–1151) - Нимпэй тапхăрĕ (1151–1154) - Кюдзю тапхăрĕ (1154–1156) - Хогэн тапхăрĕ (1156–1159) - Хэйдзи тапхăрĕ (1159–1160) - Эйряку тапхăрĕ (1160–1161) - Охо тапхăрĕ (1161–1163) - Тёкан тапхăрĕ (1163–1165) - Эйман тапхăрĕ (1165–1166) - Нинъан тапхăрĕ (1166–1169) - Као тапхăрĕ (1169–1171) - Сёан тапхăрĕ (1171–1175) - Ангэн тапхăрĕ (1175–1177) - Дзисё тапхăрĕ (1177–1181) - Ёва тапхăрĕ (1181–1182) - Дзюэй тапхăрĕ (1182–1184) - Гэнрюку тапхăрĕ (1184–1185) - Бундзи тапхăрĕ (1185–1190) - Кэнкю тапхăрĕ (1190–1199) - Сёдзи тапхăрĕ (1199–1201) - Кэннин тапхăрĕ (1201–1204) - Гэнкю тапхăрĕ (1204–1206) - Кэнъэй тапхăрĕ (1206–1207) - Сёгэн тапхăрĕ (1207–1211) - Кэнряку тапхăрĕ (1211–1213) - Кэмпо тапхăрĕ (1213–1219) - Сёкю тапхăрĕ (1219–1222) - Дзёо тапхăрĕ (1222–1224) - Гэннин тапхăрĕ (1224–1225) - Кароку тапхăрĕ (1225–1227) - Антэй тапхăрĕ (1227–1229) - Канки тапхăрĕ (1229–1232) - Дзёэй тапхăрĕ (1232–1233) - Тэмпуку тапхăрĕ (1233–1234) - Бунряку тапхăрĕ (1234–1235) - Катэй тапхăрĕ (1235–1238) - Рякунин тапхăрĕ (1238–1239) - Энъо тапхăрĕ (1239–1240) - Ниндзи тапхăрĕ (1240–1243) - Кангэн тапхăрĕ (1243–1247) - Ходзи тапхăрĕ (1247–1249) - Кэнтё тапхăрĕ (1249–1256) - Когэн тапхăрĕ (1256–1257) - Сёка тапхăрĕ (1257–1259) - Сёгэн тапхăрĕ (1259–1260) - Бунъо тапхăрĕ (1260–1261) - Котё тапхăрĕ (1261–1264) - Бунъэй тапхăрĕ (1264–1275) - Кэндзи тапхăрĕ (1275–1278) - Коан тапхăрĕ (1278–1288) - Сёо тапхăрĕ (1288–1293) - Эйнин тапхăрĕ (1293–1299) - Сёан тапхăрĕ (1299–1302) - Кэнгэн тапхăрĕ (1302–1303) - Кагэн тапхăрĕ (1303–1306) - Токудзи тапхăрĕ (1306–1308) - Энкэй тапхăрĕ (1308–1311) - Отё тапхăрĕ (1311–1312) - Сёва тапхăрĕ (1312–1317) - Бумпо тапхăрĕ (1317–1319) - Гэно тапхăрĕ (1319–1321) - Гэнкё тапхăрĕ (1321–1324) - Сётю тапхăрĕ (1324–1326) - Карэки тапхăрĕ (1326–1329) - Гэнтоку тапхăрĕ (1329–1331) - Гэнко тапхăрĕ (1331–1334) - Кэмму тапхăрĕ (1334–1336) - Энгэн тапхăрĕ (1336–1340) - Кококу тапхăрĕ (1340–1346) - Сёхэй тапхăрĕ (1346–1370) - Кэнтоку тапхăрĕ (1370–1372) - Бунтю тапхăрĕ (1372–1375) - Иэндзю тапхăрĕ (1375–1379) - Коряку тапхăрĕ (1379–1381) - Кова тапхăрĕ (1381–1384) - Гэнтю тапхăрĕ (1384–1392) - Мэйтоку тапхăрĕ (1384–1387) - Какэй тапхăрĕ (1387–1389) - Коо тапхăрĕ (1389–1390) - Мэйтоку тапхăрĕ (1390–1394) - Оэй тапхăрĕ (1394–1428) - Сётё тапхăрĕ (1428–1429) - Эйкё тапхăрĕ (1429–1441) - Какицу тапхăрĕ (1441–1444) - Банъан тапхăрĕ (1444–1449) - Хотоку тапхăрĕ (1449–1452) - Кётоку тапхăрĕ (1452–1455) - Косё тапхăрĕ (1455–1457) - Тёроку тапхăрĕ (1457–1460) - Кансё тапхăрĕ (1460–1466) - Бунсё тапхăрĕ (1466–1467) - Онин тапхăрĕ (1467–1469) - Буммэй тапхăрĕ (1469–1487) - Тёкё тапхăрĕ (1487–1489) - Энтоку тапхăрĕ (1489–1492) - Мэйо тапхăрĕ (1492–1501) - Бунки тапхăрĕ (1501–1504) - Эйсё тапхăрĕ (1504–1521) - Тайэй тапхăрĕ (1521–1528) - Кёроку тапхăрĕ (1528–1532) - Тэммон тапхăрĕ (1532–1555) - Кодзи тапхăрĕ (1555–1558) - Эйроку тапхăрĕ (1558–1570) - Гэнки тапхăрĕ (1570–1573) - Тэнсё тапхăрĕ (1573–1592) - Бунроку тапхăрĕ (1592–1596) - Кэйтё тапхăрĕ (1596–1615) - Гэнва тапхăрĕ (1615–1624) - Канъэй тапхăрĕ (1624–1644) - Сёхо тапхăрĕ (1644–1648) - Кэйан тапхăрĕ (1648–1652) - Сё тапхăрĕ (1652–1655) - Мэйряку тапхăрĕ (1655–1658) - Мандзи тапхăрĕ (1658–1661) - Камбун тапхăрĕ (1661–1673) - Эмпо тапхăрĕ (1673–1681) - Тэнва тапхăрĕ (1681–1684) - Дзёкё тапхăрĕ (1684–1688) - Гэнроку тапхăрĕ (1688–1704) - Хоэй тапхăрĕ (1704–1711) - Сётоку тапхăрĕ (1711–1716) - Кёхо тапхăрĕ (1716–1736) - Гэмбун тапхăрĕ (1736–1741) - Кампо тапхăрĕ (1741–1744) - Энкё тапхăрĕ (1744–1748) - Канъэн тапхăрĕ (1748–1751) - Хоряку тапхăрĕ (1751–1764) - Мэйва тапхăрĕ (1764–1772) - Анъэй тапхăрĕ (1772–1781) - Тэммэй тапхăрĕ (1781–1789) - Кансэй тапхăрĕ (1789–1801) - Кёва тапхăрĕ (1801–1804) - Бунка тапхăрĕ (1804–1818) - Бунсэй тапхăрĕ (1818–1830) - Тэмпо тапхăрĕ (1830–1844) - Кока тапхăрĕ (1844–1848) - Каэй тапхăрĕ (1848–1854) - Ансэй тапхăрĕ (1854–1860) - Манъэн тапхăрĕ (1860–1861) - Бункю тапхăрĕ (1861–1864) - Гендзи тапхăрĕ (1864–1865) - Кейо тапхăрĕ (1865–1868) - Мэйдзи тапхăрĕ - Тайсьо тапхăрĕ - Сьова тапхăрĕ - Хэйсэй тапхăрĕ - Рэйва тапхăрĕ + Тайка (645–650) + Хакути (650–671) + Хакухо (672–686) + Сютё (686–701) + Тайхо (701–704) + Кёун (704–708) + Вадо (708–715) + Рэйки (715–717) + Ёро (717–724) + Дзинки (724–729) + Тэмпьё (729–749) + Тэмпьё-Канпо (749–749) + Тэмпьё-Сёхо (749-757) + Тэмпьё-Ходзи (757-765) + Тэмпьё-Дзинго (765-767) + Дзинго-Кёун (767-770) + Хоки (770–781) + Тэнъо (781–782) + Энряку (782–806) + Дайдо (806–810) + Конин (810–824) + Тэнтьё (824–834) + Дзёва (834–848) + Касё (848–851) + Ниндзю (851–854) + Сайко (854–857) + Тэнъан (857–859) + Дзёган (859–877) + Гангё (877–885) + Нинна (885–889) + Канпё (889–898) + Сётай (898–901) + Энги (901–923) + Энтё (923–931) + Дзёхей (931–938) + Тэнгё (938–947) + Тэнряку (947–957) + Тэнтоку (957–961) + Ова (961–964) + Кохо (964–968) + Анна (968–970) + Тэнроку (970–973) + Тэнъэн (973–976) + Дзёгэн (976–978) + Тэнгэн (978–983) + Эйкан (983–985) + Канна (985–987) + Эйэн (987–989) + Эйсо (989–990) + Сёряку (990–995) + Тётоку (995–999) + Тёхо (999–1004) + Канко (1004–1012) + Тёва (1012–1017) + Каннин (1017–1021) + Дзиан (1021–1024) + Мандзю (1024–1028) + Тёгэн (1028–1037) + Тёряку (1037–1040) + Тёкю (1040–1044) + Кантоку (1044–1046) + Эйсё (1046–1053) + Тэнги (1053–1058) + Кохэй (1058–1065) + Дзиряку (1065–1069) + Энкю (1069–1074) + Дзюхо (1074–1077) + Дзёряку (1077–1081) + Эйхо (1081–1084) + Отоку (1084–1087) + Кандзи (1087–1094) + Кахо (1094–1096) + Эйтё (1096–1097) + Дзётоку (1097–1099) + Кова (1099–1104) + Тёдзи (1104–1106) + Кадзё (1106–1108) + Тэннин (1108–1110) + Тэнъэй (1110–1113) + Эйкю (1113–1118) + Гэнъэй (1118–1120) + Хоан (1120–1124) + Тэндзи (1124–1126) + Дайдзи (1126–1131) + Тэнсё (1131–1132) + Тёсё (1132–1135) + Хоэн (1135–1141) + Эйдзи (1141–1142) + Кодзи (1142–1144) + Тэнъё (1144–1145) + Кюан (1145–1151) + Нимпэй (1151–1154) + Кюдзю (1154–1156) + Хогэн (1156–1159) + Хэйдзи (1159–1160) + Эйряку (1160–1161) + Охо (1161–1163) + Тёкан (1163–1165) + Эйман (1165–1166) + Нинъан (1166–1169) + Као (1169–1171) + Дзёан (1171–1175) + Ангэн (1175–1177) + Дзисё (1177–1181) + Ёва (1181–1182) + Дзюэй (1182–1184) + Гэнрюку (1184–1185) + Бундзи (1185–1190) + Кэнкю (1190–1199) + Сёдзи (1199–1201) + Кэннин (1201–1204) + Гэнкю (1204–1206) + Кэнъэй (1206–1207) + Дзёгэн (1207–1211) + Кэнряку (1211–1213) + Кэмпо (1213–1219) + Дзёкю (1219–1222) + Дзёо (1222–1224) + Гэннин (1224–1225) + Кароку (1225–1227) + Антэй (1227–1229) + Канги (1229–1232) + Дзёэй (1232–1233) + Тэмпуку (1233–1234) + Бунряку (1234–1235) + Катэй (1235–1238) + Рякунин (1238–1239) + Энъо (1239–1240) + Ниндзи (1240–1243) + Кангэн (1243–1247) + Ходзи (1247–1249) + Кэнтё (1249–1256) + Когэн (1256–1257) + Сёка (1257–1259) + Сёгэн (1259–1260) + Бунъо (1260–1261) + Котё (1261–1264) + Бунъэй (1264–1275) + Кэндзи (1275–1278) + Коан (1278–1288) + Сёо (1288–1293) + Эйнин (1293–1299) + Сёан (1299–1302) + Кэнгэн (1302–1303) + Кагэн (1303–1306) + Токудзи (1306–1308) + Энкё (1308–1311) + Отё (1311–1312) + Сёва (1312–1317) + Бумпо (1317–1319) + Гэнъо (1319–1321) + Гэнко (1321–1324) + Сётю (1324–1326) + Каряку (1326–1329) + Гэнтоку (1329–1331) + Гэнко (1331–1334) + Кэнму (1334–1336) + Энгэн (1336–1340) + Кококу (1340–1346) + Сёхэй (1346–1370) + Кэнтоку (1370–1372) + Бунтю (1372–1375) + Тэндзю (1375–1379) + Коряку (1379–1381) + Кова (1381–1384) + Гэнтю (1384–1392) + Ситоку (1384–1387) + Какэй (1387–1389) + Коо (1389–1390) + Мэйтоку (1390–1394) + Оэй (1394–1428) + Сётё (1428–1429) + Эйкё (1429–1441) + Какицу (1441–1444) + Бунъан (1444–1449) + Хотоку (1449–1452) + Кётоку (1452–1455) + Кёсё (1455–1457) + Тёроку (1457–1460) + Кансё (1460–1466) + Бунсё (1466–1467) + Онин (1467–1469) + Бунмэй (1469–1487) + Тёкё (1487–1489) + Энтоку (1489–1492) + Мэйо (1492–1501) + Бунки (1501–1504) + Эйсё (1504–1521) + Дайэй (1521–1528) + Кёроку (1528–1532) + Тэнбун (1532–1555) + Кодзи (1555–1558) + Эйроку (1558–1570) + Гэнки (1570–1573) + Тэнсё (1573–1592) + Бунроку (1592–1596) + Кэйтё (1596–1615) + Гэнна (1615–1624) + Канъэй (1624–1644) + Сёхё (1644–1648) + Кэйан (1648–1652) + Дзёо (1652–1655) + Мэйрэки (1655–1658) + Мандзи (1658–1661) + Камбун (1661–1673) + Эмпо (1673–1681) + Тэнна (1681–1684) + Дзёкё (1684–1688) + Гэнроку (1688–1704) + Хоэй (1704–1711) + Сётоку (1711–1716) + Кёхо (1716–1736) + Гэмбун (1736–1741) + Кампо (1741–1744) + Энкё (1744–1748) + Канъэн (1748–1751) + Хореки (1751–1764) + Мэйва (1764–1772) + Анъэй (1772–1781) + Тэнмэй (1781–1789) + Кансэй (1789–1801) + Кёва (1801–1804) + Бунка (1804–1818) + Бунсэй (1818–1830) + Тэнпо (1830–1844) + Кока (1844–1848) + Каэй (1848–1854) + Ансэй (1854–1860) + Манъэн (1860–1861) + Бункю (1861–1864) + Гэндзи (1864–1865) + Кейо (1865–1868) + Мэйдзи + Тайсё + Сёва + Хэйсэй + Рэйва - Тайка тпхр. (645–650) - Хакути тпхр. (650–671) - Хакухо тпхр. (672–686) - Сючё тпхр. (686–701) - Тайхо тпхр. (701–704) - Кёюн тпхр. (704–708) - Вадо тпхр. (708–715) - Рэйки тпхр. (715–717) - Ёро тпхр. (717–724) - Дзинки тпхр. (724–729) - Темпьё тпхр. (729–749) - Т.-кампо тпхр. (749–749) - Темпьё-Сьохо тпхр. (749-757) - Темпьё-Ходзи тпхр. (757-765) - Темпьё-Ходзи тпхр. (765-767) - Джинго-Кёюн тпхр. (767-770) - Хоки тпхр. (770–780) - Теньё тпхр. (781–782) - Енряку тпхр. (782–806) - Дайдо тпхр. (806–810) - Конин тпхр. (810–824) - Тентьо тпхр. (824–834) - Шова тпхр. (834–848) - Кайо тпхр. (848–851) - Ниндзю тпхр. (851–854) - Сайко тпхр. (854–857) - Теннан тпхр. (857–859) - Йоган тпхр. (859–877) - Генкей тпхр. (877–885) - Нинна тпхр. (885–889) - Кампьё тпхр. (889–898) - Сьотай тпхр. (898–901) - Энги тпхр. (901–923) - Ентьо тпхр. (923–931) - Сьёхэй тпхр. (931–938) - Тенгьо тпхр. (938–947) - Тенрияку тпхр. (947–957) - Тентоку тпхр. (957–961) - Ова тпхр. (961–964) - Кохо тпхр. (964–968) - Анна тпхр. (968–970) - Тенроку тпхр. (970–973) - Теньен тпхр. (973–976) - Дзьоген тпхр. (976–978) - Тенген тпхр. (978–983) - Ейкан тпхр. (983–985) - Канна тпхр. (985–987) - Ейен тпхр. (987–989) - Ейсо тпхр. (989–990) - Сёряку тпхр. (990–995) - Тётоку тпхр. (995–999) - Тёхо тпхр. (999–1004) - Канко тпхр. (1004–1012) - Тёва тпхр. (1012–1017) - Каннин тпхр. (1017–1021) - Дзиан тпхр. (1021–1024) - Мандзю тпхр. (1024–1028) - Тёгэн тпхр. (1028–1037) - Тёряку тпхр. (1037–1040) - Тёкю тпхр. (1040–1044) - Катоку тпхр. (1044–1046) - Эйсо тпхр. (1046–1053) - Тэнги тпхр. (1053–1058) - Кохэй тпхр. (1058–1065) - Дзиряку тпхр. (1065–1069) - Энкю тпхр. (1069–1074) - Сёхо тпхр. (1074–1077) - Сёряку тпхр. (1077–1081) - Эйхо тпхр. (1081–1084) - Отоку тпхр. (1084–1087) - Кандзи тпхр. (1087–1094) - Кахо тпхр. (1094–1096) - Эйтё тпхр. (1096–1097) - Сётоку тпхр. (1097–1099) - Кова тпхр. (1099–1104) - Тёдзи тпхр. (1104–1106) - Касё тпхр. (1106–1108) - Тэннин тпхр. (1108–1110) - Тэнъэй тпхр. (1110–1113) - Эйкю тпхр. (1113–1118) - Гэнъэй тпхр. (1118–1120) - Хоан тпхр. (1120–1124) - Тэндзи тпхр. (1124–1126) - Дайдзи тпхр. (1126–1131) - Тэнсё тпхр. (1131–1132) - Тёсё тпхр. (1132–1135) - Хоэн тпхр. (1135–1141) - Эйдзи тпхр. (1141–1142) - Кодзи тпхр. (1142–1144) - Тэнё тпхр. (1144–1145) - Кюан тпхр. (1145–1151) - Нимпэй тпхр. (1151–1154) - Кюдзю тпхр. (1154–1156) - Хогэн тпхр. (1156–1159) - Хэйдзи тпхр. (1159–1160) - Эйряку тпхр. (1160–1161) - Охо тпхр. (1161–1163) - Тёкан тпхр. (1163–1165) - Эйман тпхр. (1165–1166) - Нинъан тпхр. (1166–1169) - Као тпхр. (1169–1171) - Сёан тпхр. (1171–1175) - Ангэн тпхр. (1175–1177) - Дзисё тпхр. (1177–1181) - Ёва тпхр. (1181–1182) - Дзюэй тпхр. (1182–1184) - Гэнрюку тпхр. (1184–1185) - Бундзи тпхр. (1185–1190) - Кэнкю тпхр. (1190–1199) - Сёдзи тпхр. (1199–1201) - Кэннин тпхр. (1201–1204) - Гэнкю тпхр. (1204–1206) - Кэнъэй тпхр. (1206–1207) - Сёгэн тпхр. (1207–1211) - Кэнряку тпхр. (1211–1213) - Кэмпо тпхр. (1213–1219) - Сёкю тпхр. (1219–1222) - Дзёо тпхр. (1222–1224) - Гэннин тпхр. (1224–1225) - Кароку тпхр. (1225–1227) - Антэй тпхр. (1227–1229) - Канки тпхр. (1229–1232) - Дзёэй тпхр. (1232–1233) - Тэмпуку тпхр. (1233–1234) - Бунряку тпхр. (1234–1235) - Катэй тпхр. (1235–1238) - Рякунин тпхр. (1238–1239) - Энъо тпхр. (1239–1240) - Ниндзи тпхр. (1240–1243) - Кангэн тпхр. (1243–1247) - Ходзи тпхр. (1247–1249) - Кэнтё тпхр. (1249–1256) - Когэн тпхр. (1256–1257) - Сёка тпхр. (1257–1259) - Сёгэн тпхр. (1259–1260) - Бунъо тпхр. (1260–1261) - Котё тпхр. (1261–1264) - Бунъэй тпхр. (1264–1275) - Кэндзи тпхр. (1275–1278) - Коан тпхр. (1278–1288) - Сёо тпхр. (1288–1293) - Эйнин тпхр. (1293–1299) - Сёан тпхр. (1299–1302) - Кэнгэн тпхр. (1302–1303) - Кагэн тпхр. (1303–1306) - Токудзи тпхр. (1306–1308) - Энкэй тпхр. (1308–1311) - Отё тпхр. (1311–1312) - Сёва тпхр. (1312–1317) - Бумпо тпхр. (1317–1319) - Гэно тпхр. (1319–1321) - Гэнкё тпхр. (1321–1324) - Сётю тпхр. (1324–1326) - Карэки тпхр. (1326–1329) - Гэнтоку тпхр. (1329–1331) - Гэнко тпхр. (1331–1334) - Кэмму тпхр. (1334–1336) - Энгэн тпхр. (1336–1340) - Кококу тпхр. (1340–1346) - Сёхэй тпхр. (1346–1370) - Кэнтоку тпхр. (1370–1372) - Бунтю тпхр. (1372–1375) - Иэндзю тпхр. (1375–1379) - Коряку тпхр. (1379–1381) - Кова тпхр. (1381–1384) - Гэнтю тпхр. (1384–1392) - Мэйтоку тпхр. (1384–1387) - Какэй тпхр. (1387–1389) - Коо тпхр. (1389–1390) - Мэйтоку тпхр. (1390–1394) - Оэй тпхр. (1394–1428) - Сётё тпхр. (1428–1429) - Эйкё тпхр. (1429–1441) - Какицу тпхр. (1441–1444) - Банъан тпхр. (1444–1449) - Хотоку тпхр. (1449–1452) - Кётоку тпхр. (1452–1455) - Косё тпхр. (1455–1457) - Тёроку тпхр. (1457–1460) - Кансё тпхр. (1460–1466) - Бунсё тпхр. (1466–1467) - Онин тпхр. (1467–1469) - Буммэй тпхр. (1469–1487) - Тёкё тпхр. (1487–1489) - Энтоку тпхр. (1489–1492) - Мэйо тпхр. (1492–1501) - Бунки тпхр. (1501–1504) - Эйсё тпхр. (1504–1521) - Тайэй тпхр. (1521–1528) - Кёроку тпхр. (1528–1532) - Тэммон тпхр. (1532–1555) - Кодзи тпхр. (1555–1558) - Эйроку тпхр. (1558–1570) - Гэнки тпхр. (1570–1573) - Тэнсё тпхр. (1573–1592) - Бунроку тпхр. (1592–1596) - Кэйтё тпхр. (1596–1615) - Гэнва тпхр. (1615–1624) - Канъэй тпхр. (1624–1644) - Сёхо тпхр. (1644–1648) - Кэйан тпхр. (1648–1652) - Сё тпхр. (1652–1655) - Мэйряку тпхр. (1655–1658) - Мандзи тпхр. (1658–1661) - Камбун тпхр. (1661–1673) - Эмпо тпхр. (1673–1681) - Тэнва тпхр. (1681–1684) - Дзёкё тпхр. (1684–1688) - Гэнроку тпхр. (1688–1704) - Хоэй тпхр. (1704–1711) - Сётоку тпхр. (1711–1716) - Кёхо тпхр. (1716–1736) - Гэмбун тпхр. (1736–1741) - Кампо тпхр. (1741–1744) - Энкё тпхр. (1744–1748) - Канъэн тпхр. (1748–1751) - Хоряку тпхр. (1751–1764) - Мэйва тпхр. (1764–1772) - Анъэй тпхр. (1772–1781) - Тэммэй тпхр. (1781–1789) - Кансэй тпхр. (1789–1801) - Кёва тпхр. (1801–1804) - Бунка тпхр. (1804–1818) - Бунсэй тпхр. (1818–1830) - Тэмпо тпхр. (1830–1844) - Кока тпхр. (1844–1848) - Каэй тпхр. (1848–1854) - Ансэй тпхр. (1854–1860) - Манъэн тпхр. (1860–1861) - Бункю тпхр. (1861–1864) - Гендзи тпхр. (1864–1865) - Кейо тпхр. (1865–1868) - Мэйдзи тпхр. - Тайсьо тпхр. - Сьова тпхр. - Хэйсэй тпхр. - Рэйва тпхр. + Тайка (645–650) + Хакути (650–671) + Хакухо (672–686) + Сютё (686–701) + Тайхо (701–704) + Кёун (704–708) + Вадо (708–715) + Рэйки (715–717) + Ёро (717–724) + Дзинки (724–729) + Тэмпьё (729–749) + Тэмпьё-Канпо (749–749) + Тэмпьё-Сёхо (749-757) + Тэмпьё-Ходзи (757-765) + Тэмпьё-Дзинго (765-767) + Дзинго-Кёун (767-770) + Хоки (770–781) + Тэнъо (781–782) + Энряку (782–806) + Дайдо (806–810) + Конин (810–824) + Тэнтьё (824–834) + Дзёва (834–848) + Касё (848–851) + Ниндзю (851–854) + Сайко (854–857) + Тэнъан (857–859) + Дзёган (859–877) + Гангё (877–885) + Нинна (885–889) + Канпё (889–898) + Сётай (898–901) + Энги (901–923) + Энтё (923–931) + Дзёхей (931–938) + Тэнгё (938–947) + Тэнряку (947–957) + Тэнтоку (957–961) + Ова (961–964) + Кохо (964–968) + Анна (968–970) + Тэнроку (970–973) + Тэнъэн (973–976) + Дзёгэн (976–978) + Тэнгэн (978–983) + Эйкан (983–985) + Канна (985–987) + Эйэн (987–989) + Эйсо (989–990) + Сёряку (990–995) + Тётоку (995–999) + Тёхо (999–1004) + Канко (1004–1012) + Тёва (1012–1017) + Каннин (1017–1021) + Дзиан (1021–1024) + Мандзю (1024–1028) + Тёгэн (1028–1037) + Тёряку (1037–1040) + Тёкю (1040–1044) + Кантоку (1044–1046) + Эйсё (1046–1053) + Тэнги (1053–1058) + Кохэй (1058–1065) + Дзиряку (1065–1069) + Энкю (1069–1074) + Дзюхо (1074–1077) + Дзёряку (1077–1081) + Эйхо (1081–1084) + Отоку (1084–1087) + Кандзи (1087–1094) + Кахо (1094–1096) + Эйтё (1096–1097) + Дзётоку (1097–1099) + Кова (1099–1104) + Тёдзи (1104–1106) + Кадзё (1106–1108) + Тэннин (1108–1110) + Тэнъэй (1110–1113) + Эйкю (1113–1118) + Гэнъэй (1118–1120) + Хоан (1120–1124) + Тэндзи (1124–1126) + Дайдзи (1126–1131) + Тэнсё (1131–1132) + Тёсё (1132–1135) + Хоэн (1135–1141) + Эйдзи (1141–1142) + Кодзи (1142–1144) + Тэнъё (1144–1145) + Кюан (1145–1151) + Нимпэй (1151–1154) + Кюдзю (1154–1156) + Хогэн (1156–1159) + Хэйдзи (1159–1160) + Эйряку (1160–1161) + Охо (1161–1163) + Тёкан (1163–1165) + Эйман (1165–1166) + Нинъан (1166–1169) + Као (1169–1171) + Дзёан (1171–1175) + Ангэн (1175–1177) + Дзисё (1177–1181) + Ёва (1181–1182) + Дзюэй (1182–1184) + Гэнрюку (1184–1185) + Бундзи (1185–1190) + Кэнкю (1190–1199) + Сёдзи (1199–1201) + Кэннин (1201–1204) + Гэнкю (1204–1206) + Кэнъэй (1206–1207) + Дзёгэн (1207–1211) + Кэнряку (1211–1213) + Кэмпо (1213–1219) + Дзёкю (1219–1222) + Дзёо (1222–1224) + Гэннин (1224–1225) + Кароку (1225–1227) + Антэй (1227–1229) + Канги (1229–1232) + Дзёэй (1232–1233) + Тэмпуку (1233–1234) + Бунряку (1234–1235) + Катэй (1235–1238) + Рякунин (1238–1239) + Энъо (1239–1240) + Ниндзи (1240–1243) + Кангэн (1243–1247) + Ходзи (1247–1249) + Кэнтё (1249–1256) + Когэн (1256–1257) + Сёка (1257–1259) + Сёгэн (1259–1260) + Бунъо (1260–1261) + Котё (1261–1264) + Бунъэй (1264–1275) + Кэндзи (1275–1278) + Коан (1278–1288) + Сёо (1288–1293) + Эйнин (1293–1299) + Сёан (1299–1302) + Кэнгэн (1302–1303) + Кагэн (1303–1306) + Токудзи (1306–1308) + Энкё (1308–1311) + Отё (1311–1312) + Сёва (1312–1317) + Бумпо (1317–1319) + Гэнъо (1319–1321) + Гэнко (1321–1324) + Сётю (1324–1326) + Каряку (1326–1329) + Гэнтоку (1329–1331) + Гэнко (1331–1334) + Кэнму (1334–1336) + Энгэн (1336–1340) + Кококу (1340–1346) + Сёхэй (1346–1370) + Кэнтоку (1370–1372) + Бунтю (1372–1375) + Тэндзю (1375–1379) + Коряку (1379–1381) + Кова (1381–1384) + Гэнтю (1384–1392) + Ситоку (1384–1387) + Какэй (1387–1389) + Коо (1389–1390) + Мэйтоку (1390–1394) + Оэй (1394–1428) + Сётё (1428–1429) + Эйкё (1429–1441) + Какицу (1441–1444) + Бунъан (1444–1449) + Хотоку (1449–1452) + Кётоку (1452–1455) + Кёсё (1455–1457) + Тёроку (1457–1460) + Кансё (1460–1466) + Бунсё (1466–1467) + Онин (1467–1469) + Бунмэй (1469–1487) + Тёкё (1487–1489) + Энтоку (1489–1492) + Мэйо (1492–1501) + Бунки (1501–1504) + Эйсё (1504–1521) + Дайэй (1521–1528) + Кёроку (1528–1532) + Тэнбун (1532–1555) + Кодзи (1555–1558) + Эйроку (1558–1570) + Гэнки (1570–1573) + Тэнсё (1573–1592) + Бунроку (1592–1596) + Кэйтё (1596–1615) + Гэнна (1615–1624) + Канъэй (1624–1644) + Сёхё (1644–1648) + Кэйан (1648–1652) + Дзёо (1652–1655) + Мэйрэки (1655–1658) + Мандзи (1658–1661) + Камбун (1661–1673) + Эмпо (1673–1681) + Тэнна (1681–1684) + Дзёкё (1684–1688) + Гэнроку (1688–1704) + Хоэй (1704–1711) + Сётоку (1711–1716) + Кёхо (1716–1736) + Гэмбун (1736–1741) + Кампо (1741–1744) + Энкё (1744–1748) + Канъэн (1748–1751) + Хореки (1751–1764) + Мэйва (1764–1772) + Анъэй (1772–1781) + Тэнмэй (1781–1789) + Кансэй (1789–1801) + Кёва (1801–1804) + Бунка (1804–1818) + Бунсэй (1818–1830) + Тэнпо (1830–1844) + Кока (1844–1848) + Каэй (1848–1854) + Ансэй (1854–1860) + Манъэн (1860–1861) + Бункю (1861–1864) + Гэндзи (1864–1865) + Кейо (1865–1868) + Мэйдзи + Тайсё + Сёва + Хэйсэй + Рэйва - Тайка (645–650) - Хакути (650–671) - Хакухо (672–686) - Сючё (686–701) - Тайхо (701–704) - Кёюн (704–708) - Вадо (708–715) - Рэйки (715–717) - Ёро (717–724) - Дзинки (724–729) - Темпьё (729–749) - Темпьё-кампо (749–749) - Темпьё-Сьохо (749-757) - Темпьё-Ходзи (757-765) - Темпьё-Ходзи (765-767) - Джинго-Кёюн (767-770) - Хоки (770–780) - Теньё (781–782) - Енряку (782–806) - Дайдо (806–810) - Конин (810–824) - Тентьо (824–834) - Шова (834–848) - Кайо (848–851) - Ниндзю (851–854) - Сайко (854–857) - Теннан (857–859) - Йоган (859–877) - Генкей (877–885) - Нинна (885–889) - Кампьё (889–898) - Сьотай (898–901) - Энги (901–923) - Ентьо (923–931) - Сьёхэй (931–938) - Тенгьо (938–947) - Тенрияку (947–957) - Тентоку (957–961) - Ова (961–964) - Кохо (964–968) - Анна (968–970) - Тенроку (970–973) - Теньен (973–976) - Дзьоген (976–978) - Тенген (978–983) - Ейкан (983–985) - Канна (985–987) - Ейен (987–989) - Ейсо (989–990) - Сёряку (990–995) - Тётоку (995–999) - Тёхо (999–1004) - Канко (1004–1012) - Тёва (1012–1017) - Каннин (1017–1021) - Дзиан (1021–1024) - Мандзю (1024–1028) - Тёгэн (1028–1037) - Тёряку (1037–1040) - Тёкю (1040–1044) - Катоку (1044–1046) - Эйсо (1046–1053) - Тэнги (1053–1058) - Кохэй (1058–1065) - Дзиряку (1065–1069) - Энкю (1069–1074) - Сёхо (1074–1077) - Сёряку (1077–1081) - Эйхо (1081–1084) - Отоку (1084–1087) - Кандзи (1087–1094) - Кахо (1094–1096) - Эйтё (1096–1097) - Сётоку (1097–1099) - Кова (1099–1104) - Тёдзи (1104–1106) - Касё (1106–1108) - Тэннин (1108–1110) - Тэнъэй (1110–1113) - Эйкю (1113–1118) - Гэнъэй (1118–1120) - Хоан (1120–1124) - Тэндзи (1124–1126) - Дайдзи (1126–1131) - Тэнсё (1131–1132) - Тёсё (1132–1135) - Хоэн (1135–1141) - Эйдзи (1141–1142) - Кодзи (1142–1144) - Тэнё (1144–1145) - Кюан (1145–1151) - Нимпэй (1151–1154) - Кюдзю (1154–1156) - Хогэн (1156–1159) - Хэйдзи (1159–1160) - Эйряку (1160–1161) - Охо (1161–1163) - Тёкан (1163–1165) - Эйман (1165–1166) - Нинъан (1166–1169) - Као (1169–1171) - Сёан (1171–1175) - Ангэн (1175–1177) - Дзисё (1177–1181) - Ёва (1181–1182) - Дзюэй (1182–1184) - Гэнрюку (1184–1185) - Бундзи (1185–1190) - Кэнкю (1190–1199) - Сёдзи (1199–1201) - Кэннин (1201–1204) - Гэнкю (1204–1206) - Кэнъэй (1206–1207) - Сёгэн (1207–1211) - Кэнряку (1211–1213) - Кэмпо (1213–1219) - Сёкю (1219–1222) - Дзёо (1222–1224) - Гэннин (1224–1225) - Кароку (1225–1227) - Антэй (1227–1229) - Канки (1229–1232) - Дзёэй (1232–1233) - Тэмпуку (1233–1234) - Бунряку (1234–1235) - Катэй (1235–1238) - Рякунин (1238–1239) - Энъо (1239–1240) - Ниндзи (1240–1243) - Кангэн (1243–1247) - Ходзи (1247–1249) - Кэнтё (1249–1256) - Когэн (1256–1257) - Сёка (1257–1259) - Сёгэн (1259–1260) - Бунъо (1260–1261) - Котё (1261–1264) - Бунъэй (1264–1275) - Кэндзи (1275–1278) - Коан (1278–1288) - Сёо (1288–1293) - Эйнин (1293–1299) - Сёан (1299–1302) - Кэнгэн (1302–1303) - Кагэн (1303–1306) - Токудзи (1306–1308) - Энкэй (1308–1311) - Отё (1311–1312) - Сёва (1312–1317) - Бумпо (1317–1319) - Гэно (1319–1321) - Гэнкё (1321–1324) - Сётю (1324–1326) - Карэки (1326–1329) - Гэнтоку (1329–1331) - Гэнко (1331–1334) - Кэмму (1334–1336) - Энгэн (1336–1340) - Кококу (1340–1346) - Сёхэй (1346–1370) - Кэнтоку (1370–1372) - Бунтю (1372–1375) - Иэндзю (1375–1379) - Коряку (1379–1381) - Кова (1381–1384) - Гэнтю (1384–1392) - Мэйтоку (1384–1387) - Какэй (1387–1389) - Коо (1389–1390) - Мэйтоку (1390–1394) - Оэй (1394–1428) - Сётё (1428–1429) - Эйкё (1429–1441) - Какицу (1441–1444) - Банъан (1444–1449) - Хотоку (1449–1452) - Кётоку (1452–1455) - Косё (1455–1457) - Тёроку (1457–1460) - Кансё (1460–1466) - Бунсё (1466–1467) - Онин (1467–1469) - Буммэй (1469–1487) - Тёкё (1487–1489) - Энтоку (1489–1492) - Мэйо (1492–1501) - Бунки (1501–1504) - Эйсё (1504–1521) - Тайэй (1521–1528) - Кёроку (1528–1532) - Тэммон (1532–1555) - Кодзи (1555–1558) - Эйроку (1558–1570) - Гэнки (1570–1573) - Тэнсё (1573–1592) - Бунроку (1592–1596) - Кэйтё (1596–1615) - Гэнва (1615–1624) - Канъэй (1624–1644) - Сёхо (1644–1648) - Кэйан (1648–1652) - Сё (1652–1655) - Мэйряку (1655–1658) - Мандзи (1658–1661) - Камбун (1661–1673) - Эмпо (1673–1681) - Тэнва (1681–1684) - Дзёкё (1684–1688) - Гэнроку (1688–1704) - Хоэй (1704–1711) - Сётоку (1711–1716) - Кёхо (1716–1736) - Гэмбун (1736–1741) - Кампо (1741–1744) - Энкё (1744–1748) - Канъэн (1748–1751) - Хоряку (1751–1764) - Мэйва (1764–1772) - Анъэй (1772–1781) - Бунка (1804–1818) - Кансэй (1789–1801) - Кёва (1801–1804) - Бунка (1804–1818) - Бунсэй (1818–1830) - Тэмпо (1830–1844) - Кока (1844–1848) - Каэй (1848–1854) - Ансэй (1854–1860) - Манъэн (1860–1861) - Бункю (1861–1864) - Гендзи (1864–1865) - Кейо (1865–1868) - Мэйдзи - Тайсьо - Сьова - Хэйсэй - Рэйва + Тайка + Хакути + Хакухо + Сютё + Тайхо + Кэйун + Вадо + Рэйки + Ёро + Дзинки + Тэмпьё + Тэмпьё-Канпо + Тэмпьё-Сёхо + Тэмпьё-Ходзи + Тэмпьё-Дзинго + Дзинго-Кэйун + Хоки + Тэнъо + Энряку + Дайдо + Конин + Тэнтьё + Дзёва + Касё + Ниндзю + Сайко + Тэнъан + Дзёган + Гангё + Нинна + Канпё + Сётай + Энги + Энтё + Дзёхей + Тэнгё + Тэнряку + Тэнтоку + Ова + Кохо + Анна + Тэнроку + Тэнъэн + Дзёгэн + Тэнгэн + Эйкан + Канна + Эйэн + Эйсо + Сёряку + Тётоку + Тёхо + Канко + Тёва + Каннин + Дзиан + Мандзю + Тёгэн + Тёряку + Тёкю + Кантоку + Эйсё + Тэнги + Кохэй + Дзиряку + Энкю + Дзюхо + Дзёряку + Эйхо + Отоку + Кандзи + Кахо + Эйтё + Дзётоку + Кова + Тёдзи + Кадзё + Тэннин + Тэнъэй + Эйкю + Гэнъэй + Хоан + Тэндзи + Дайдзи + Тэнсё + Тёсё + Хоэн + Эйдзи + Кодзи + Тэнъё + Кюан + Нимпэй + Кюдзю + Хогэн + Хэйдзи + Эйряку + Охо + Тёкан + Эйман + Нинъан + Као + Дзёан + Ангэн + Дзисё + Ёва + Дзюэй + Гэнрюку + Бундзи + Кэнкю + Сёдзи + Кэннин + Гэнкю + Кэнъэй + Дзёгэн + Кэнряку + Кэмпо + Дзёкю + Дзёо + Гэннин + Кароку + Антэй + Канги + Дзёэй + Тэмпуку + Бунряку + Катэй + Рякунин + Энъо + Ниндзи + Кангэн + Ходзи + Кэнтё + Когэн + Сёка + Сёгэн + Бунъо + Котё + Бунъэй + Кэндзи + Коан + Сёо + Эйнин + Сёан + Кэнгэн + Кагэн + Токудзи + Энкё + Отё + Сёва + Бумпо + Гэнъо + Гэнко + Сётю + Каряку + Гэнтоку + Гэнко + Кэнму + Энгэн + Кококу + Сёхэй + Кэнтоку + Бунтю + Тэндзю + Коряку + Кова + Гэнтю + Ситоку + Какэй + Коо + Мэйтоку + Оэй + Сётё + Эйкё + Какицу + Бунъан + Хотоку + Кётоку + Кёсё + Тёроку + Кансё + Бунсё + Онин + Бунмэй + Тёкё + Энтоку + Мэйо + Бунки + Эйсё + Дайэй + Кёроку + Тэнбун + Кодзи + Эйроку + Гэнки + Тэнсё + Бунроку + Кэйтё + Гэнна + Канъэй + Сёхё + Кэйан + Дзёо + Мэйрэки + Мандзи + Камбун + Эмпо + Тэнна + Дзёкё + Гэнроку + Хоэй + Сётоку + Кёхо + Гэмбун + Кампо + Энкё + Канъэн + Хореки + Мэйва + Анъэй + Тэнмэй + Кансэй + Кёва + Бунка + Бунсэй + Тэнпо + Кока + Каэй + Ансэй + Манъэн + Бункю + Гэндзи + Кейо + Мэйдзи + Тайсё + Сёва + Хэйсэй + Рэйва + + + + G, y, MMMM, d, EEEE + + + + + G, y, MMMM, d + + + + + G, y, MMM, d + + + + + GGGGG, y.MM.dd + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G, y + G, y.MM + G, y.MM.dd + G, y.MM.dd (E) + G, y, MMM + G, y, MMM, d + G, y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G, y + G, y + G, y.MM + G, y.MM.dd + G, y.MM.dd (E) + G, y, MMM + G, y, MMM, d + G, y, MMM, d, E + G, y, MMMM + G, y, QQQ + G, y, QQQQ + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G, y – G, y + G, y–y + + + G, y.MM – G, y.MM + G, y.MM – y.MM + G, y.MM – y.MM + + + G, y.MM.dd – y.MM.dd + G, y.MM.dd – G, y.MM.dd + G, y.MM.dd – y.MM.dd + G, y.MM.dd – y.MM.dd + + + G, y.MM.dd (E) – y.MM.dd (E) + G, y.MM.dd (E) – G, y.MM.dd (E) + G, y.MM.dd (E) – y.MM.dd (E) + G, y.MM.dd (E) – y.MM.dd (E) + + + G, y, MMM – G, y, MMM + G, y, MMM – MMM + G, y, MMM – y, MMM + + + G, y, MMM, d–d + G, y, MMM, d – G, y, MMM, d + G, y, MMM, d – MMM, d + G, y, MMM, d – y, MMM, d + + + G, y, MMM, d, E – MMM, d, E + G, y, MMM, d, E – G, y, MMM, d, E + G, y, MMM, d, E – MMM, d, E + G, y, MMM, d, E – y, MMM, d, E + - h a – h a - h–h a + a h – a h + a h–h + + + HH–HH 'сех' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) - h a – h a v - h–h a v + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G, y–y + + + G, y.MM – y.MM + G, y.MM – y.MM + + + G, y.MM.dd – y.MM.dd + G, y.MM.dd – y.MM.dd + G, y.MM.dd – y.MM.dd + + + G, y.MM.dd (E) – y.MM.dd (E) + G, y.MM.dd (E) – y.MM.dd (E) + G, y.MM.dd (E) – y.MM.dd (E) + + + G, y, MMM – MMM + G, y, MMM – y, MMM + + + G, y, MMM, d–d + G, y, MMM, d – MMM, d + G, y, MMM, d – y, MMM, d + + + G, y, MMM, d, E – MMM, d, E + G, y, MMM, d, E – MMM, d, E + G, y, MMM, d, E – y, MMM, d, E + + + G, y, MMMM – MMMM + G, y, MMMM – y, MMMM @@ -3148,96 +6337,231 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - фарвардин - ордибехешт - хордад - тир - мордад - шахривер - мехр - абан - азер - дей - бахман - эсфанд - - фарвардин - ордибехешт - хордад - тир - мордад - шахривер - мехр - абан - азер - дей - бахман - эсфанд - - - - - фарвардин - ордибехешт - хордад - тир - мордад - шахривер - мехр - абан - азер - дей - бахман - эсфанд - - - фарвардин - ордибехешт - хордад - тир - мордад - шахривер - мехр - абан - азер - дей - бахман - эсфанд + фарвардин + ордибехешт + хордад + тир + мордад + шахривер + мехр + абан + азер + дей + бахман + эсфанд - перси ҫулӗ + хиджра хыҫҫӑнхи - перс ҫулӗ + х. х. - перс ҫ. + х. х. + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y – G y + G y–y + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + - h a – h a - h–h a + a h – a h + a h–h + + + HH–HH 'сех' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) - h a – h a v - h–h a v + a h – a h (v) + a h–h (v) + + + HH–HH 'сех' (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM @@ -3245,37 +6569,216 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Китай республикин никӗсӗ таран - Миньго + Китай Республики йӗркеличченхи + Китай Республики йӗркеленӗрен - К.р-ки нкс.трн. - Миньго + респ. й-ч. + респ. й-р. - Миньго ҫтчн - Миньго + р. й-ч. + р. й-р. + + + + G y, MMMM, d, EEEE + + + + + G y, MMMM, d + + + + + G y, MMM, d + + + + + GGGGG y.MM.dd + + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d, E + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + MM.dd + MM.dd (E) + MMM, d + MMM, d, E + MMMM, d + G y + G y + G y.MM + G y.MM.dd + G y.MM.dd (E) + G y, MMM + G y, MMM, d + G y, MMM, d, E + G y, MMMM + G y, QQQ + G y, QQQQ + + + B h – B h + B h–h + + + B h:mm – B h:mm + B h:mm–h:mm + B h:mm–h:mm + + + G y – G y + G y–y + + + G y.MM – G y.MM + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – G y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – G y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – G y, MMM + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – G y, MMM, d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – G y, MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + - h a – h a - h–h a + a h – a h + a h–h + + + HH–HH - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + a h:mm – a h:mm + a h:mm–h:mm + a h:mm–h:mm - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + a h:mm – a h:mm (v) + a h:mm–h:mm (v) + a h:mm–h:mm (v) + + + HH:mm–HH:mm (v) + HH:mm–HH:mm (v) - h a – h a v - h–h a v + a h – a h (v) + a h–h (v) + + + HH–HH (v) + + + MM.dd – MM.dd + MM.dd – MM.dd + + + MM.dd (E) – MM.dd (E) + MM.dd (E) – MM.dd (E) + + + MMM – MMM + + + MMM, d–d + MMM, d – MMM, d + + + MMM, d, E – MMM, d, E + MMM, d, E – MMM, d, E + + + G y–y + + + G y.MM – y.MM + G y.MM – y.MM + + + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + G y.MM.dd – y.MM.dd + + + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + G y.MM.dd (E) – y.MM.dd (E) + + + G y, MMM – MMM + G y, MMM – y, MMM + + + G y, MMM, d–d + G y, MMM, d – MMM, d + G y, MMM, d – y, MMM, d + + + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – MMM, d, E + G y, MMM, d, E – y, MMM, d, E + + + G y, MMMM – MMMM + G y, MMMM – y, MMMM @@ -3283,73 +6786,107 @@ CLDR data files are interpreted according to the LDML specification (http://unic - эра + самана + + + сам. + + + сам. ҫул пӗлтӗр кӑҫал - ҫитес ҫул + ҫитес ҫулта - +{0} ҫултан + {0} ҫултан + {0} ҫултан + {0} ҫултан - -{0} ҫул каялла + {0} ҫул каялла + {0} ҫул каялла + {0} ҫул каялла - ҫ. пӗлтӗр кӑҫал - ҫитес ҫ. + ҫитес ҫулта - +{0} ҫ. + {0} ҫултан + {0} ҫултан + {0} ҫултан - -{0} ҫ. каялла + {0} ҫул каялла + {0} ҫул каялла + {0} ҫул каялла + ҫул + пӗлтӗр + кӑҫал + ҫитес ҫулта - +{0} ҫ. + {0} ҫултан + {0} ҫултан + {0} ҫултан - -{0} ҫ. к-ла + {0} ҫул каялла + {0} ҫул каялла + {0} ҫул каялла - квартал - иртнӗ квартал - ку квартал - ҫитес квартал + чӗрӗк + иртнӗ чӗрӗкре + ку чӗрӗкре + ҫитес чӗрӗкре - урлӑ +{0} кварталтан + {0} чӗрӗкрен + {0} чӗрӗкрен + {0} чӗрӗкрен - -{0} квартал каялла + {0} чӗрӗк каялла + {0} чӗрӗк каялла + {0} чӗрӗк каялла - кв. - иртнӗ кв. - ку кв. - ҫитес кв. + чӗр. + иртнӗ чӗр. + ку чӗр. + ҫитес чӗр. - урлӑ +{0} кв. + {0} чӗрӗкрен + {0} чӗрӗкрен + {0} чӗрӗкрен - -{0} кв. каялла + {0} чӗрӗк каялла + {0} чӗрӗк каялла + {0} чӗр. каялла - и-нӗ кв. - ку кв. - ҫ-с кв. + чӗр. + иртнӗ чӗр. + ку чӗр. + ҫитес чӗр. - урлӑ +{0} кв. + {0} чӗрӗкрен + {0} чӗрӗкрен + {0} чӗрӗкрен - -{0} кв. к-ла + {0} чӗрӗк каялла + {0} чӗрӗк каялла + {0} чӗр. каялла @@ -3358,73 +6895,93 @@ CLDR data files are interpreted according to the LDML specification (http://unic ку уйӑхра ҫитес уйӑхра - +{0} уйӑхран + {0} уйӑхран + {0} уйӑхран + {0} уйӑхран - -{0} уйӑх каялла + {0} уйӑх каялла + {0} уйӑх каялла + {0} уйӑх каялла - уй. - иртнӗ уй. - ку уй. - ҫитес уй. - +{0} уй. + {0} уйӑхран + {0} уйӑхран + {0} уйӑхран - -{0} уй. каялла + {0} уйӑх каялла + {0} уйӑх каялла + {0} уй. каялла + уйӑх - +{0} уй. + {0} уйӑхран + {0} уйӑхран + {0} уйӑхран - -{0} уй. к-ла + {0} уйӑх каялла + {0} уйӑх каялла + {0} уй. каялла эрне иртнӗ эрнере - ҫак эрнере + ку эрнере ҫитес эрнере - +{0} эрнерен + {0} эрнерен + {0} эрнерен + {0} эрнерен - -{0} эрне каялла + {0} эрне каялла + {0} эрне каялла + {0} эрне каялла - эрнере {0} + {0} эрнинче - эр. - иртнӗ эр. - ҫак эр. - ҫитес эр. + иртнӗ эрн. + ку эрн. + ҫитес эрн. - +{0} эр. + {0} эрнерен + {0} эрнерен + {0} эрнерен - -{0} эр. каялла + {0} эрне каялла + {0} эрне каялла + {0} эрн. каялла + {0} эрнинче + эрне + иртнӗ эрн. + ку эрн. + ҫитес эрн. - +{0} эр. + {0} эрнерен + {0} эрнерен + {0} эрнерен - -{0} эр. к-ла + {0} эрне каялла + {0} эрне каялла + {0} эрн. каялла + {0} эрнинче - уйӑхӑн эрни - - - уй. эрни - - - уй. эр. + уйӑхӑн эрни кун @@ -3432,395 +6989,530 @@ CLDR data files are interpreted according to the LDML specification (http://unic паян ыран - +{0} кунтан + {0} кунтан + {0} кунтан + {0} кунтан - -{0} кун каялла + {0} кун каялла + {0} кун каялла + {0} кун каялла - кн. - +{0} к. + {0} кунтан + {0} кунтан + {0} кунтан - -{0} к. каялла + {0} кун каялла + {0} кун каялла + {0} кун каялла + кун - +{0} к. + {0} кунтан + {0} кунтан + {0} кунтан - -{0} к. к-ла + {0} кун каялла + {0} кун каялла + {0} кун каялла - ҫулталӑкӑн кунӗ + ҫулталӑкӑн кунӗ - ҫул. кунӗ - - - ҫул. кн. + ҫул. кунӗ - эрнери кун + эрнен кунӗ + + + эрн. кунӗ + + + эрн. кунӗ - эрнен кунӗ + уйӑхӑн кунӗ - эр. кунӗ + уйӑхӑн кунӗ - эр. кн. + уй. кунӗ - иртнӗ вырсарникун - ку вырсарникун - ҫитес вырсарникун + иртнӗ вырсарни кун + ку вырсарни кун + ҫитес вырсарни кун - +{0} вырсарникун + {0} вырсарни кунтан + {0} вырсарни кунтан + {0} вырсарни кунтан - -{0} вырсарникун + {0} вырсарни кун каялла + {0} вырсарни кун каялла + {0} вырсарни кун каялла - иртнӗ вырсарни - ку вырсарни - ҫитес вырсарни + иртнӗ вр + ку вр + ҫитес вр - +{0} вырсарни + {0} вырсарни кунтан + {0} вырсарни кунтан + {0} вр-тан - -{0} вырсарни + {0} вырсарни кун каялла + {0} вырсарни кун каялла + {0} вр каялла - иртнӗ Вр - ку Вр - ҫитес Вр + иртнӗ вр + ку вр + ҫитес вр - +{0} Вр + {0} вырсарни кунтан + {0} вырсарни кунтан + {0} вр-тан - -{0} Вр + {0} вырсарни кун каялла + {0} вырсарни кун каялла + {0} вр каялла - иртнӗ тунтикун - ку тунтикун - ҫитес тунтикун + иртнӗ тунти кун + ку тунти кун + ҫитес тунти кун - +{0} тунтикун + {0} тунти кунтан + {0} тунти кунтан + {0} тунти кунтан - -{0} тунтикун + {0} тунти кун каялла + {0} тунти кун каялла + {0} тунти кун каялла - иртнӗ тунти - ку тунти - ҫитес тунти + иртнӗ тн + ку тн + ҫитес тн - +{0} тунти + {0} тунти кунтан + {0} тунти кунтан + {0} тн-тан - -{0} тунти + {0} тунти кун каялла + {0} тунти кун каялла + {0} тн каялла - иртнӗ Тн - ку Тн - ҫитес Тн + иртнӗ тн + ку тн + ҫитес тн - +{0} Тн + {0} тунти кунтан + {0} тунти кунтан + {0} тн-тан - -{0} Тн + {0} тунти кун каялла + {0} тунти кун каялла + {0} тн каялла - иртнӗ ытларикун - ку ытларикун - ҫитес ытларикун + иртнӗ ытлари кун + ку ытлари кун + ҫитес ытлари кун - +{0} ытларикун + {0} ытлари кунтан + {0} ытлари кунтан + {0} ытлари кунтан - -{0} ытларикун + {0} ытлари кун каялла + {0} ытлари кун каялла + {0} ытлари кун каялла - иртнӗ ытлари - ку ытлари - ҫитес ытлари + иртнӗ ыт + ку ыт + ҫитес ыт - +{0} ытлари + {0} ытлари кунтан + {0} ытлари кунтан + {0} ыт-тан - -{0} ытлари + {0} ытлари кун каялла + {0} ытлари кун каялла + {0} ыт каялла - иртнӗ Ыт - ку Ыт - ҫитес Ыт + иртнӗ ыт + ку ыт + ҫитес ыт - +{0} Ыт + {0} ытлари кунтан + {0} ытлари кунтан + {0} ыт-тан - -{0} Ыт + {0} ытлари кун каялла + {0} ытлари кун каялла + {0} ыт каялла - иртнӗ юнкун - ку юнкун - ҫитес юнкун + иртнӗ юн кун + ку юн кун + ҫитес юн кун - +{0} юнкун + {0} юн кунтан + {0} юн кунтан + {0} юн кунтан - -{0} юнкун + {0} юн кун каялла + {0} юн кун каялла + {0} юн кун каялла - иртнӗ юн - ку юн - ҫитес юн + иртнӗ юн + ку юн + ҫитес юн - +{0} юн + {0} юн кунтан + {0} юн кунтан + {0} юн-тан - -{0} юн + {0} юн кун каялла + {0} юн кун каялла + {0} юн каялла - иртнӗ Юн - ҫитес Юн - ҫитес Юн - +{0} Юн + {0} юн кунтан + {0} юн кунтан + {0} юн-тан - -{0} Юн + {0} юн кун каялла + {0} юн кун каялла + {0} юн каялла - иртнӗ кӗҫнерникун - ку кӗҫнерникун - ҫитес кӗҫнерникун + иртнӗ кӗҫнерни кун + ку кӗҫнерни кун + ҫитес кӗҫнерни кун - +{0} кӗҫнерникун + {0} кӗҫнерни кунтан + {0} кӗҫнерни кунтан + {0} кӗҫнерни кунтан - -{0} кӗҫнерникун + {0} кӗҫнерни кун каялла + {0} кӗҫнерни кун каялла + {0} кӗҫнерни кун каялла - иртнӗ кӗҫнерни - ку кӗҫнерни - ҫитес кӗҫнерни + иртнӗ кҫ + ку кҫ + ҫитес кҫ - +{0} кӗҫнерни + {0} кӗҫнерни кунтан + {0} кӗҫнерни кунтан + {0} кҫ-тан - -{0} кӗҫнерни + {0} кӗҫнерни кун каялла + {0} кӗҫнерни кун каялла + {0} кҫ каялла - иртнӗ Кҫ - ку Кҫ - ҫитес Кҫ + иртнӗ кҫ + ку кҫ + ҫитес кҫ - +{0} Кҫ + {0} кӗҫнерни кунтан + {0} кӗҫнерни кунтан + {0} кҫ-тан - -{0} Кҫ + {0} кӗҫнерни кун каялла + {0} кӗҫнерни кун каялла + {0} кҫ каялла - иртнӗ эрнекун - ку эрнекун - ҫитес эрнекун + иртнӗ эрне кун + ку эрне кун + ҫитес эрне кун - +{0} эрнекун + {0} эрне кунтан + {0} эрне кунтан + {0} эрне кунтан - -{0} эрнекун + {0} эрне кун каялла + {0} эрне кун каялла + {0} эрне кун каялла - иртнӗ эрнекун - ку эрнекун - ҫитес эрнекун + иртнӗ эр + ку эр + ҫитес эр - +{0} эрнекун + {0} эрне кунтан + {0} эрне кунтан + {0} эр-тан - -{0} эрнекун + {0} эрне кун каялла + {0} эрне кун каялла + {0} эр каялла - иртн.эрнекун - ҫк.эрнекун - ҫтс.эрнекун + иртнӗ эр + ку эр + ҫитес эр - +{0} эрнекун + {0} эрне кунтан + {0} эрне кунтан + {0} эр-тан - -{0} эрнекун + {0} эрне кун каялла + {0} эрне кун каялла + {0} эр каялла - иртнӗ шӑматкун - ку шӑматкун - ҫитес шӑматкун + иртнӗ шӑмат кун + ку шӑмат кун + ҫитес шӑмат кун - +{0} шӑматкун + {0} шӑмат кунтан + {0} шӑмат кунтан + {0} шӑмат кунтан - -{0} шӑматкун + {0} шӑмат кун каялла + {0} шӑмат кун каялла + {0} шӑмат кун каялла - иртнӗ шӑмат - ку шӑмат - ҫитес шӑмат + иртнӗ шм + ку шм + ҫитес шм - +{0} шӑмат + {0} шӑмат кунтан + {0} шӑмат кунтан + {0} шм-тан - -{0} шӑмат + {0} шӑмат кун каялла + {0} шӑмат кун каялла + {0} шм каялла - иртнӗ Шм - ку Шм - ҫитес Шм + иртнӗ шм + ку шм + ҫитес шм - +{0} Шм + {0} шӑмат кунтан + {0} шӑмат кунтан + {0} шм-тан - -{0} Шм + {0} шӑмат кун каялла + {0} шӑмат кун каялла + {0} шм каялла + + к. у./к. х. + - AM/PM + к. у./к. х. + + + КУ/КХ сехет - ҫак сехетре + ку сехетре - +{0} сехетрен + {0} сехетрен + {0} сехетрен + {0} сехетрен - -{0} сехет каялла + {0} сехет каялла + {0} сехет каялла + {0} сехет каялла - с. - ҫак сех. + сех. + ку сех. - +{0} сех. + {0} сехетрен + {0} сехетрен + {0} сехетрен - -{0} сех. каялла + {0} сехет каялла + {0} сехет каялла + {0} сех. каялла - с - ҫак сех. + сех + ку сех. - +{0} сех. + {0} сехетрен + {0} сехетрен + {0} сехетрен - -{0} сех. к-ла + {0} сехет каялла + {0} сехет каялла + {0} сех. каялла минут - ҫак минутра + ку минутра - +{0} минутран + {0} минутран + {0} минутран + {0} минутран - -{0} минут каялла + {0} минут каялла + {0} минут каялла + {0} минут каялла мин. - ҫак мин. + ку мин. - +{0} мин. + {0} минутран + {0} минутран + {0} минутран - -{0} мин. каялла + {0} минут каялла + {0} минут каялла + {0} мин. каялла мин - ҫак мин. + ку мин. - +{0} мин. + {0} минутран + {0} минутран + {0} минутран - -{0} мин. к-ла + {0} минут каялла + {0} минут каялла + {0} мин. каялла - секунд - халӗ + ҫеккунт + халь - +{0} ҫекундран + {0} ҫеккунтран + {0} ҫеккунтран + {0} ҫеккунтран - -{0} ҫеккунт каялла + {0} ҫеккунт каялла + {0} ҫеккунт каялла + {0} ҫеккунт каялла - сек. - халӗ + ҫек. + халь - +{0} ҫек. + {0} ҫеккунтран + {0} ҫеккунтран + {0} ҫеккунтран - -{0} ҫек. каялла + {0} ҫеккунт каялла + {0} ҫеккунт каялла + {0} ҫек. каялла - сек - халӗ + ҫ + халь - +{0} ҫ + {0} ҫеккунтран + {0} ҫеккунтран + {0} ҫ-ран - -{0} ҫ к-ла + {0} ҫеккунт каялла + {0} ҫеккунт каялла + {0} ҫ каялла - пӗр сехетри зона + вӑхӑт тӑрӑхӗ + + + вӑх. тӑрӑхӗ + + + вӑх. тӑрӑхӗ + {0} вӑхӑчӗ {0} ҫуллахи вӑхӑчӗ {0} стандартлӑ вӑхӑчӗ - - - Гавай стандартлӑ вӑхӑчӗ - Гавай стандартлӑ вӑхӑчӗ - Гавай ҫуллахи вӑхӑчӗ - - - Пӗтӗм тӗнчери координацилене вӑхӑчӗ + Пӗтӗм тӗнчери килӗштернӗ вӑхӑт - - ПТКВ (UTC) - Паллӑ мар хула @@ -3874,7 +7566,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кейси - Дюмон-д’Юрвиль Дюмон-д’Юрвиль + Дюмон-д’Юрвиль Мак-Мердо @@ -3895,7 +7587,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ла-Риоха - Сан-Луис Сан-Луис + Сан-Луис Катамарка @@ -3997,7 +7689,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сен-Бартелеми - Бермуд утравӗсем + Бермуда Бруней @@ -4039,7 +7731,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Арагуаина - Сан-Паулу Сан-Паулу + Сан-Паулу Баия @@ -4084,7 +7776,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ванкувер - Форт Нельсон + Форт-Нельсон Доусон-Крик @@ -4165,7 +7857,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Раротонга - Мӑнкун утравӗ + Мӑн кун утравӗ + + + Койхик Пунта-Аренас @@ -4270,7 +7965,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Стэнли - Трук + Чуук Понпеи @@ -4336,7 +8031,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Малабо - Афинсем + Афина Кӑнтӑр Георги @@ -4431,7 +8126,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Пномпень - + Кантон @@ -4441,7 +8136,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Тарава - Коморсем + Комор утравӗсем Сент-Китс @@ -4519,7 +8214,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Монако - Кишинев + Кишинёв Подгорица @@ -4570,10 +8265,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мальта - Маврикий + Маврики - Мальдивсем + Мальдива Блантайр @@ -4585,7 +8280,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Эрмосильо - Сьюдад-Хуарес + Сьюдад-Хуарес Масатлан @@ -4678,7 +8373,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Маркизас утравӗсем - Гамбье утравӗсем + Гамбье Порт-Морсби @@ -4747,19 +8442,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Волгоград - Саратов + Сарӑту - Астрахань + Аҫтӑрхан - Ульяновск + Чӗмпӗр Киров - Самара + Самар Екатеринбург @@ -4798,7 +8493,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Хандыга - Сахалин утравӗ + Сахалин Усть-Нера @@ -4810,7 +8505,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Среднеколымск - Петропавловск-Камчатски + Петропавловск-Камчатский Анадырь @@ -4867,7 +8562,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Джуба - Сан-Томе Сан-Томе + Сан-Томе Сальвадор @@ -4930,7 +8625,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Дар-эс-Салам - Киев + Кийӳ Симферополь @@ -4942,7 +8637,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мидуэй - Уэйк + Уэйк утравӗ Адак @@ -4978,13 +8673,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Денвер - Бойла, Ҫурҫӗр Дакота + Бойла, Ҫур ҫӗр Дакота - Нью-Сейлем, Ҫурҫӗр Дакота + Нью-Сейлем, Ҫур ҫӗр Дакота - Центр, Ҫурҫӗр Дакота + Сентер, Ҫурҫӗр Дакота Чикаго @@ -5059,7 +8754,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Эфате - Уоллис + Уоллиспа Футуна Апиа @@ -5081,14 +8776,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Акри вӑхӑчӗ - Акри стандартлӑ вӑхӑчӗ - Акри ҫуллахи вӑхӑчӗ + Акри вӑхӑчӗ + Акри стандартлӑ вӑхӑчӗ + Акри ҫуллахи вӑхӑчӗ - ACT Acre - ACT Acre - ACST Acre + ACT Acre + ACT Acre + ACST Acre @@ -5096,23 +8791,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic Афганистан вӑхӑчӗ - AFT + AFT - Тӗп Африка вӑхӑчӗ + Вӑта Африка вӑхӑчӗ - CAT + CAT - Хӗвелтухӑҫ Африка вӑхӑчӗ + Тухӑҫ Африка вӑхӑчӗ - EAT + EAT @@ -5120,19 +8815,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кӑнтӑр Африка вӑхӑчӗ - SAST + SAST - Анӑҫ Африка вӑхӑчӗ - Анӑҫ Африка стандартлӑ вӑхӑчӗ - Анӑҫ Африка ҫуллахи вӑхӑчӗ + Анӑҫ Африка вӑхӑчӗ - WAT - WAT - WAST + WAT @@ -5142,21 +8833,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Аляска ҫуллахи вӑхӑчӗ - AKT - AKST - AKDT + AKT + AKST + AKDT - Алматы вӑхӑчӗ - Алматы стандартлӑ вӑхӑчӗ - Алматы ҫуллахи вӑхӑчӗ + Алматы вӑхӑчӗ + Алматы стандартлӑ вӑхӑчӗ + Алматы ҫуллахи вӑхӑчӗ - ALMT - ALMT - ALMT DST + ALMT + ALMT + ALMT DST @@ -5166,45 +8857,45 @@ CLDR data files are interpreted according to the LDML specification (http://unic Амазонка ҫуллахи вӑхӑчӗ - AMT - AMT - AMST + AMT + AMT + AMST - Тӗп Америка вӑхӑчӗ - Тӗп Америка стандартлӑ вӑхӑчӗ - Тӗп Америка ҫуллахи вӑхӑчӗ + Вӑта Америка вӑхӑчӗ + Вӑта Америка стандартлӑ вӑхӑчӗ + Вӑта Америка ҫуллахи вӑхӑчӗ - CT - CST - CDT + CT + CST + CDT - Хӗвелтухӑҫ Америка вӑхӑчӗ - Хӗвелтухӑҫ Америка стандартлӑ вӑхӑчӗ - Хӗвелтухӑҫ Америка ҫуллахи вӑхӑчӗ + Тухӑҫ Америка вӑхӑчӗ + Тухӑҫ Америка стандартлӑ вӑхӑчӗ + Тухӑҫ Америка ҫуллахи вӑхӑчӗ - ET - EST - EDT + ET + EST + EDT - Ту вӑхӑчӗ (Ҫурҫӗр Америка) - Стандартлӑ ту вӑхӑчӗ (Ҫурҫӗр Америка) - Ҫуллахи ту вӑхӑчӗ (Ҫурҫӗр Америка) + Ту вӑхӑчӗ + Ту стандартлӑ вӑхӑчӗ + Ту ҫуллахи вӑхӑчӗ - MT - MST - MDT + MT + MST + MDT @@ -5214,21 +8905,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лӑпкӑ океан ҫуллахи вӑхӑчӗ - PT - PST - PDT + PT + PST + PDT - Анадырь вӑхӑчӗ - Анадырь стандартлӑ вӑхӑчӗ - Анадырь ҫуллахи вӑхӑчӗ + Анадырь вӑхӑчӗ + Анадырь стандартлӑ вӑхӑчӗ + Анадырь ҫуллахи вӑхӑчӗ - ANAT - ANAT - ANAST + ANAT + ANAT + ANAST @@ -5238,45 +8929,45 @@ CLDR data files are interpreted according to the LDML specification (http://unic Апиа ҫуллахи вӑхӑчӗ - SST Samoa Apia - SST Samoa Apia - SST Samoa Apia DST + SST Samoa Apia + SST Samoa Apia + SST Samoa Apia DST - Актау вӑхӑчӗ - Актау стандартлӑ вӑхӑчӗ - Актау ҫуллахи вӑхӑчӗ + Актау вӑхӑчӗ + Актау стандартлӑ вӑхӑчӗ + Актау ҫуллахи вӑхӑчӗ - ALMT Aktau - ALMT Aktau - ALMT Aktau DST + ALMT Aktau + ALMT Aktau + ALMT Aktau DST - Актобе вӑхӑчӗ - Актобе стандартлӑ вӑхӑчӗ - Актобе ҫуллахи вӑхӑчӗ + Актобе вӑхӑчӗ + Актобе стандартлӑ вӑхӑчӗ + Актобе ҫуллахи вӑхӑчӗ - AQTT - AQTT - AQTT DST + AQTT + AQTT + AQTT DST - Арап вӑхӑчӗ - Арап стандартлӑ вӑхӑчӗ - Арап ҫуллахи вӑхӑчӗ + Сауд Аравийӗ вӑхӑчӗ + Сауд Аравийӗ стандартлӑ вӑхӑчӗ + Сауд Аравийӗ ҫуллахи вӑхӑчӗ - AST Arabia - AST Arabia - ADT Arabia + AST Arabia + AST Arabia + ADT Arabia @@ -5286,9 +8977,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Аргентина ҫуллахи вӑхӑчӗ - ART - ART - ARST + ART + ART + ARST @@ -5298,9 +8989,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Анӑҫ Аргентина ҫуллахи вӑхӑчӗ - WART - WART - WARST + WART + WART + WARST @@ -5310,9 +9001,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Армени ҫуллахи вӑхӑчӗ - AMT Armenia - AMT Armenia - AMST Armenia + AMT Armenia + AMT Armenia + AMST Armenia @@ -5322,45 +9013,45 @@ CLDR data files are interpreted according to the LDML specification (http://unic Атлантика ҫуллахи вӑхӑчӗ - AT - AST - ADT + AT + AST + ADT - Тӗп Австрали вӑхӑчӗ - Тӗп Австрали стандартлӑ вӑхӑчӗ - Тӗп Австрали ҫуллахи вӑхӑчӗ + Вӑта Австрали вӑхӑчӗ + Вӑта Австрали стандартлӑ вӑхӑчӗ + Вӑта Австрали ҫуллахи вӑхӑчӗ - ACST - ACST - ACDT + ACST + ACST + ACDT - Тӗп Австрали анӑҫ вӑхӑчӗ - Тӗп Австрали анӑҫ стандартлӑ вӑхӑчӗ - Тӗп Австрали анӑҫ ҫуллахи вӑхӑчӗ + Анӑҫ Вӑта Австрали вӑхӑчӗ + Анӑҫ Вӑта Австрали стандартлӑ вӑхӑчӗ + Анӑҫ Вӑта Австрали ҫуллахи вӑхӑчӗ - ACWST - ACWST - ACWDT + ACWST + ACWST + ACWDT - Хӗвелтухӑҫ Австрали вӑхӑчӗ - Хӗвелтухӑҫ Австрали стандартлӑ вӑхӑчӗ - Хӗвелтухӑҫ Австрали ҫуллахи вӑхӑчӗ + Тухӑҫ Австрали вӑхӑчӗ + Тухӑҫ Австрали стандартлӑ вӑхӑчӗ + Тухӑҫ Австрали ҫуллахи вӑхӑчӗ - AEST - AEST - AEDT + AEST + AEST + AEDT @@ -5370,9 +9061,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Анӑҫ Австрали ҫуллахи вӑхӑчӗ - AWST - AWST - AWDT + AWST + AWST + AWDT @@ -5382,9 +9073,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Азербайджан ҫуллахи вӑхӑчӗ - AZT - AZT - AZST + AZT + AZT + AZST @@ -5394,9 +9085,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Азор утравӗсен ҫуллахи вӑхӑчӗ - AZOT - AZOT - AZOST + AZOT + AZOT + AZOST @@ -5406,9 +9097,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Бангладеш ҫуллахи вӑхӑчӗ - BST Bangladesh - BST Bangladesh - BDT Bangladesh + BST Bangladesh + BST Bangladesh + BDT Bangladesh @@ -5416,7 +9107,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Бутан вӑхӑчӗ - BTT + BTT @@ -5424,7 +9115,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Боливи вӑхӑчӗ - BOT + BOT @@ -5434,17 +9125,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Бразили ҫуллахи вӑхӑчӗ - BRT - BRT - BRST + BRT + BRT + BRST - Бруней-Даруссалам вӑхӑчӗ + Бруней вӑхӑчӗ - BNT + BNT @@ -5454,17 +9145,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кабо-Верде ҫуллахи вӑхӑчӗ - CVT - CVT - CVST + CVT + CVT + CVST - Кейси вӑхӑчӗ + Кейси вӑхӑчӗ - CAST + CAST @@ -5472,7 +9163,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Чаморро вӑхӑчӗ - ChST + ChST @@ -5482,9 +9173,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Чатем ҫуллахи вӑхӑчӗ - CHAST - CHAST - CHADT + CHAST + CHAST + CHADT @@ -5494,9 +9185,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Чили ҫуллахи вӑхӑчӗ - CLT - CLT - CLST + CLT + CLT + CLST @@ -5506,17 +9197,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Китай ҫуллахи вӑхӑчӗ - CST China - CST China - CST China DST + CST China + CST China + CST China DST - Раштав утравӗн вӑхӑчӗ + Раштав утравӗ вӑхӑчӗ - CXT + CXT @@ -5524,7 +9215,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кокос утравӗсен вӑхӑчӗ - CCT + CCT @@ -5534,21 +9225,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Колумби ҫуллахи вӑхӑчӗ - COT - COT - COST + COT + COT + COST - Кукӑн утравӗсен вӑхӑчӗ - Кукӑн утравӗсен стандартлӑ вӑхӑчӗ - Кукӑн утравӗсен ҫуллахи вӑхӑчӗ + Кук утравӗсен вӑхӑчӗ + Кук утравӗсен стандартлӑ вӑхӑчӗ + Кук утравӗсен ҫуллахи вӑхӑчӗ - CKT - CKT - CKT DST + CKT + CKT + CKT DST @@ -5558,9 +9249,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Куба ҫуллахи вӑхӑчӗ - CST Cuba - CST Cuba - CDT Cuba + CST Cuba + CST Cuba + CDT Cuba @@ -5568,7 +9259,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Дейвис вӑхӑчӗ - DAVT + DAVT @@ -5576,27 +9267,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic Дюмон-д’Юрвиль вӑхӑчӗ - DDUT + DDUT - Хӗвелтухӑҫ Тимор вӑхӑчӗ + Тухӑҫ Тимор вӑхӑчӗ - TLT + TLT - Мӑнкун утравӗн вӑхӑчӗ - Мӑнкун утравӗн стандартлӑ вӑхӑчӗ - Мӑнкун утравӗн ҫуллахи вӑхӑчӗ + Мӑн кун утравӗн вӑхӑчӗ + Мӑн кун утравӗн стандартлӑ вӑхӑчӗ + Мӑн кун утравӗн ҫуллахи вӑхӑчӗ - EAST - EAST - EASST + EAST + EAST + EASST @@ -5604,39 +9295,39 @@ CLDR data files are interpreted according to the LDML specification (http://unic Эквадор вӑхӑчӗ - ECT Ecuador + ECT Ecuador - Тӗп Европа вӑхӑчӗ - Тӗп Европа стандартлӑ вӑхӑчӗ - Тӗп Европа ҫуллахи вӑхӑчӗ + Вӑта Европа вӑхӑчӗ + Вӑта Европа стандартлӑ вӑхӑчӗ + Вӑта Европа ҫуллахи вӑхӑчӗ - CET - CET - CEST + CET + CET + CEST - Хӗвелтухӑҫ Европа вӑхӑчӗ - Хӗвелтухӑҫ Европа стандартлӑ вӑхӑчӗ - Хӗвелтухӑҫ Европа ҫуллахи вӑхӑчӗ + Тухӑҫ Европа вӑхӑчӗ + Тухӑҫ Европа стандартлӑ вӑхӑчӗ + Тухӑҫ Европа ҫуллахи вӑхӑчӗ - EET - EET - EEST + EET + EET + EEST - Инҫет-хӗвелтухӑҫ Европа вӑхӑчӗ + Инҫет Тухӑҫ Европа вӑхӑчӗ - FEET + FEET @@ -5646,9 +9337,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Анӑҫ Европа ҫуллахи вӑхӑчӗ - WET - WET - WEST + WET + WET + WEST @@ -5658,9 +9349,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Фолкленд утравӗсен ҫуллахи вӑхӑчӗ - FKT - FKT - FKST + FKT + FKT + FKST @@ -5670,17 +9361,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Фиджи ҫуллахи вӑхӑчӗ - FJT - FJT - FJT Summer + FJT + FJT + FJT Summer - Франци Гвиана вӑхӑчӗ + Франци Гвианин вӑхӑчӗ - GFT + GFT @@ -5688,15 +9379,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Франци Кӑнтӑрпа Антарктика территорийӗсен вӑхӑчӗ - TAAF + TAAF - Галапагос утравӗсен вӑхӑчӗ + Галапагос вӑхӑчӗ - GALT + GALT @@ -5704,7 +9395,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гамбье вӑхӑчӗ - GAMT + GAMT @@ -5714,49 +9405,49 @@ CLDR data files are interpreted according to the LDML specification (http://unic Грузи ҫуллахи вӑхӑчӗ - GET - GET - GEST + GET + GET + GEST - Гилбертӑн утравӗсен вӑхӑчӗ + Гилберт утравӗсен вӑхӑчӗ - GIT + GIT - Гринвичпа вӑтам вӑхӑчӗ + Гринвич вӑхӑчӗ - GMT + GMT - Гренланди вӑхӑчӗ - Гренланди стандартлӑ вӑхӑчӗ - Гренланди ҫуллахи вӑхӑчӗ + Гренланди вӑхӑчӗ + Гренланди стандартлӑ вӑхӑчӗ + Гренланди ҫуллахи вӑхӑчӗ - GNST - GNST - GNSST + GNST + GNST + GNSST - Хӗвелтухӑҫ Гринланди вӑхӑчӗ - Хӗвелтухӑҫ Гринланди стандартлӑ вӑхӑчӗ - Хӗвелтухӑҫ Гринланди ҫуллахи вӑхӑчӗ + Тухӑҫ Гренланди вӑхӑчӗ + Тухӑҫ Гренланди стандартлӑ вӑхӑчӗ + Тухӑҫ Гренланди ҫуллахи вӑхӑчӗ - EGT - EGT - EGST + EGT + EGT + EGST @@ -5766,25 +9457,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic Анӑҫ ҫуллахи вӑхӑчӗ - WGT - WGT - WGST + WGT + WGT + WGST - Гуам стандартлӑ вӑхӑчӗ + Гуам стандартлӑ вӑхӑчӗ - GST Guam + GST Guam - Перси залив вӑхӑчӗ + Перс кӳлмекӗн вӑхӑчӗ - GST Gulf + GST Gulf @@ -5792,19 +9483,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гайана вӑхӑчӗ - GYT + GYT + + + + + Гавайи-Алеут стандартлӑ вӑхӑчӗ + + + HST - Гавайи Алеут вӑхӑчӗ - Гавайи Алеут стандартлӑ вӑхӑчӗ - Гавайи Алеут ҫуллахи вӑхӑчӗ + Гавайи-Алеут вӑхӑчӗ + Гавайи-Алеут стандартлӑ вӑхӑчӗ + Гавайи-Алеут ҫуллахи вӑхӑчӗ - HST - HST - HDT + HST + HST + HDT @@ -5814,9 +9513,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гонконг ҫуллахи вӑхӑчӗ - HKT - HKT - HKT DST + HKT + HKT + HKT DST @@ -5826,9 +9525,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ховд ҫуллахи вӑхӑчӗ - HOVT - HOVT - HOVST + HOVT + HOVT + HOVST @@ -5836,7 +9535,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Инди вӑхӑчӗ - IST Indian + IST Indian @@ -5844,7 +9543,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Инди океанӗ вӑхӑчӗ - IOT + IOT @@ -5852,23 +9551,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic Индокитай вӑхӑчӗ - ICT + ICT - Тӗп Индонези вӑхӑчӗ + Вӑта Индонези вӑхӑчӗ - CIT + CIT - Хӗвелтухӑҫ Индонези вӑхӑчӗ + Тухӑҫ Индонези вӑхӑчӗ - EIT + EIT @@ -5876,7 +9575,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Анӑҫ Индонези вӑхӑчӗ - WIT + WIT @@ -5886,9 +9585,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Иран ҫуллахи вӑхӑчӗ - IRST - IRST - IRST DST + IRST + IRST + IRST DST @@ -5898,9 +9597,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Иркутск ҫуллахи вӑхӑчӗ - IRKT - IRKT - IRKST + IRKT + IRKT + IRKST @@ -5910,9 +9609,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Израиль ҫуллахи вӑхӑчӗ - IST Israel - IST Israel - IDT + IST Israel + IST Israel + IDT @@ -5922,37 +9621,37 @@ CLDR data files are interpreted according to the LDML specification (http://unic Япони ҫуллахи вӑхӑчӗ - JST - JST - JST DST + JST + JST + JST DST - Петропавловск-Камчаткăри вӑхӑчӗ - Петропавловск-Камчаткăри стандартлӑ вӑхӑчӗ - Петропавловск-Камчаткăри ҫуллахи вӑхӑчӗ + Петропавловск-Камчатский вӑхӑчӗ + Петропавловск-Камчатский стандартлӑ вӑхӑчӗ + Петропавловск-Камчатский ҫуллахи вӑхӑчӗ - PETT - PETST - PETDT + PETT + PETST + PETDT - Казахстан вӑхӑчӗ + Казахстан вӑхӑчӗ - Казахстан вхч + Казахстан вхч - Хӗвелтухӑҫ Казахстан вӑхӑчӗ + Тухӑҫ Казахстан вӑхӑчӗ - Хӗвелтухӑҫ Казахстан вхч + Хӗвелтухӑҫ Казахстан вхч @@ -5960,19 +9659,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Анӑҫ Казахстан вӑхӑчӗ - Анӑҫ Казахстан вхч + Анӑҫ Казахстан вхч - Корей вӑхӑчӗ - Корей стандартлӑ вӑхӑчӗ - Корей ҫуллахи вӑхӑчӗ + Корея вӑхӑчӗ + Корея стандартлӑ вӑхӑчӗ + Корея ҫуллахи вӑхӑчӗ - KST - KST - KST DST + KST + KST + KST DST @@ -5980,7 +9679,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Косрае вӑхӑчӗ - KOST + KOST @@ -5990,25 +9689,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic Красноярск ҫуллахи вӑхӑчӗ - KRAT - KRAT - KRAST + KRAT + KRAT + KRAST - Киргизи вӑхӑчӗ + Кӑркӑстан вӑхӑчӗ - KGT + KGT - Ланка вӑхӑчӗ + Шри-Ланка вӑхӑчӗ - SLST + SLST @@ -6016,7 +9715,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лайн утравӗсен вӑхӑчӗ - LINT + LINT @@ -6026,21 +9725,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лорд-Хау ҫуллахи вӑхӑчӗ - LHST - LHST - LHST Summer + LHST + LHST + LHST Summer - Макао вӑхӑчӗ - Макао стандартлӑ вӑхӑчӗ - Макао ҫуллахи вӑхӑчӗ + Макао вӑхӑчӗ + Макао стандартлӑ вӑхӑчӗ + Макао ҫуллахи вӑхӑчӗ - MST Macao - MST Macao - MST Macao DST + MST Macao + MST Macao + MST Macao DST @@ -6050,9 +9749,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Магадан ҫуллахи вӑхӑчӗ - MAGT - MAGT - MAGST + MAGT + MAGT + MAGST @@ -6060,15 +9759,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Малайзи вӑхӑчӗ - MYT + MYT - Мальдивсем вӑхӑчӗ + Мальдива вӑхӑчӗ - MVT + MVT @@ -6076,7 +9775,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Маркизас утравӗсен вӑхӑчӗ - MART + MART @@ -6084,19 +9783,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Маршалл утравӗсен вӑхӑчӗ - MHT + MHT - Маврикий вӑхӑчӗ - Маврикий стандартлӑ вӑхӑчӗ - Маврикий ҫуллахи вӑхӑчӗ + Маврики вӑхӑчӗ + Маврики стандартлӑ вӑхӑчӗ + Маврики ҫуллахи вӑхӑчӗ - MUT - MUT - MUST + MUT + MUT + MUST @@ -6104,7 +9803,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Моусон вӑхӑчӗ - MAWT + MAWT @@ -6114,9 +9813,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мексика Лӑпкӑ океан ҫуллахи вӑхӑчӗ - PSTM - PSTM - PDTM + PSTM + PSTM + PDTM @@ -6126,9 +9825,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Улан-Батор ҫуллахи вӑхӑчӗ - ULAT - ULAT - ULAST + ULAT + ULAT + ULAST @@ -6138,9 +9837,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мускав ҫуллахи вӑхӑчӗ - MSK - МСК - MSD + MSK + МСК + MSD @@ -6148,7 +9847,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Мьянма вӑхӑчӗ - MMT + MMT @@ -6156,7 +9855,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Науру вӑхӑчӗ - NRT + NRT @@ -6164,7 +9863,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Непал вӑхӑчӗ - NPT + NPT @@ -6174,9 +9873,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ҫӗнӗ Каледони ҫуллахи вӑхӑчӗ - NCT - NCT - NDT New Caledonia + NCT + NCT + NDT New Caledonia @@ -6186,9 +9885,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ҫӗнӗ Зеланди ҫуллахи вӑхӑчӗ - NZST - NZST - NZDT + NZST + NZST + NZDT @@ -6198,9 +9897,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ньюфаундленд ҫуллахи вӑхӑчӗ - NST - NST - NDT + NST + NST + NDT @@ -6208,7 +9907,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ниуэ вӑхӑчӗ - NUT + NUT @@ -6218,9 +9917,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Норфолк ҫуллахи вӑхӑчӗ - NFT - NFT - NFDT + NFT + NFT + NFDT @@ -6230,17 +9929,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Фернанду-ди-Норонья ҫуллахи вӑхӑчӗ - FNT - FNT - FNST + FNT + FNT + FNST - Мариансен ҫурҫӗрти утравӗсем вӑхӑчӗ + Ҫур ҫӗр Мариана утравӗсен вӑхӑчӗ - ChST NMI + ChST NMI @@ -6250,9 +9949,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Новосибирск ҫуллахи вӑхӑчӗ - NOVT - NOVT - NOVST + NOVT + NOVT + NOVST @@ -6262,9 +9961,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Омск ҫуллахи вӑхӑчӗ - OMST - OMST - OMSST + OMST + OMST + OMSST @@ -6274,9 +9973,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Пакистан ҫуллахи вӑхӑчӗ - PKT - PKT - PKT DST + PKT + PKT + PKT DST @@ -6284,15 +9983,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Палау вӑхӑчӗ - PWT + PWT - Папуа — Ҫӗнӗ Гвиней вӑхӑчӗ + Папуа — Ҫӗнӗ Гвинея вӑхӑчӗ - PGT + PGT @@ -6302,9 +10001,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Парагвай ҫуллахи вӑхӑчӗ - PYT - PYT - PYST + PYT + PYT + PYST @@ -6314,41 +10013,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic Перу ҫуллахи вӑхӑчӗ - PET - PET - EDT Peru + PET + PET + EDT Peru - Филиппинсем вӑхӑчӗ - Филиппинсем стандартлӑ вӑхӑчӗ - Филиппинсем ҫуллахи вӑхӑчӗ + Филиппин вӑхӑчӗ + Филиппин стандартлӑ вӑхӑчӗ + Филиппин ҫуллахи вӑхӑчӗ - PST Philippine - PST Philippine - PST Philippine DST + PST Philippine + PST Philippine + PST Philippine DST - Феникс вӑхӑчӗ + Феникс утравӗсен вӑхӑчӗ - PHOT + PHOT - Сен-Пьер тата Микелон вӑхӑчӗ - Сен-Пьер тата Микелон стандартлӑ вӑхӑчӗ - Сен-Пьер тата Микелон ҫуллахи вӑхӑчӗ + Сен-Пьерпа Микелон вӑхӑчӗ + Сен-Пьерпа Микелон стандартлӑ вӑхӑчӗ + Сен-Пьерпа Микелон ҫуллахи вӑхӑчӗ - PMST - PMST - PMDT + PMST + PMST + PMDT @@ -6356,7 +10055,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Питкэрн вӑхӑчӗ - PST Pitcairn + PST Pitcairn @@ -6364,27 +10063,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic Понпеи вӑхӑчӗ - PONT + PONT - Пхеньян + Ҫур ҫӗр Корея вӑхӑчӗ - PYT Korea + PYT Korea - Кызылорда вӑхӑчӗ - Кызылорда стандартлӑ вӑхӑчӗ - Кызылорда ҫуллахи вӑхӑчӗ + Кызылорда вӑхӑчӗ + Кызылорда стандартлӑ вӑхӑчӗ + Кызылорда ҫуллахи вӑхӑчӗ - QYZT - QYZT - QYZT DST + QYZT + QYZT + QYZT DST @@ -6392,7 +10091,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Реюньон вӑхӑчӗ - RET + RET @@ -6400,7 +10099,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ротера вӑхӑчӗ - ROTT + ROTT @@ -6410,21 +10109,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сахалин ҫуллахи вӑхӑчӗ - SAKT - SAKT - SAKST + SAKT + SAKT + SAKST - Самар вӑхӑчӗ - Самар стандартлӑ вӑхӑчӗ - Самар ҫуллахи вӑхӑчӗ + Самар вӑхӑчӗ + Самар стандартлӑ вӑхӑчӗ + Самар ҫуллахи вӑхӑчӗ - SAMT - SAMT - SAMST + SAMT + SAMT + SAMST @@ -6434,9 +10133,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Самоа ҫуллахи вӑхӑчӗ - SST Samoa - SST Samoa - SST Samoa DST + SST Samoa + SST Samoa + SST Samoa DST @@ -6444,7 +10143,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сейшел утравӗсен вӑхӑчӗ - SCT + SCT @@ -6452,7 +10151,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сингапур вӑхӑчӗ - SGT + SGT @@ -6460,7 +10159,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Соломон вӑхӑчӗ - SBT + SBT @@ -6468,7 +10167,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кӑнтӑр Георги вӑхӑчӗ - GST + GST @@ -6476,7 +10175,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Суринам вӑхӑчӗ - SRT + SRT @@ -6484,7 +10183,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сёва вӑхӑчӗ - SYOT + SYOT @@ -6492,19 +10191,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Таити вӑхӑчӗ - TAHT + TAHT - Тайпей вӑхӑчӗ - Тайпей стандартлӑ вӑхӑчӗ - Тайпей ҫуллахи вӑхӑчӗ + Тайвань вӑхӑчӗ + Тайвань стандартлӑ вӑхӑчӗ + Тайвань ҫуллахи вӑхӑчӗ - TWT - TWT - TWT DST + TWT + TWT + TWT DST @@ -6512,7 +10211,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Таджикистан вӑхӑчӗ - TJT + TJT @@ -6520,7 +10219,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Токелау вӑхӑчӗ - TKT + TKT @@ -6530,17 +10229,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Тонга ҫуллахи вӑхӑчӗ - TOT - TOT - TOST + TOT + TOT + TOST - Трук вӑхӑчӗ + Чуук вӑхӑчӗ - CHUT + CHUT @@ -6550,9 +10249,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Туркменистан ҫуллахи вӑхӑчӗ - TMT - TMT - TMT DST + TMT + TMT + TMT DST @@ -6560,7 +10259,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Тувалу вӑхӑчӗ - TVT + TVT @@ -6570,9 +10269,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Уругвай ҫуллахи вӑхӑчӗ - UYT - UYT - UYST + UYT + UYT + UYST @@ -6582,9 +10281,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Узбекистан ҫуллахи вӑхӑчӗ - UZT - UZT - UZT DST + UZT + UZT + UZT DST @@ -6594,9 +10293,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Вануату ҫуллахи вӑхӑчӗ - VUT - VUT - VUT DST + VUT + VUT + VUT DST @@ -6604,7 +10303,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Венесуэла вӑхӑчӗ - VnzlT + VnzlT @@ -6614,9 +10313,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Владивосток ҫуллахи вӑхӑчӗ - VLAT - VLAT - VLAST + VLAT + VLAT + VLAST @@ -6626,9 +10325,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Волгоград ҫуллахи вӑхӑчӗ - VOLT - VOLT - VOLST + VOLT + VOLT + VOLST @@ -6636,23 +10335,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic Восток вӑхӑчӗ - VOST + VOST - Уэйк вӑхӑчӗ + Уэйк утравӗ вӑхӑчӗ - WAKT + WAKT - Уоллис тата Футуна вӑхӑчӗ + Уоллиспа Футуна вӑхӑчӗ - WFT + WFT @@ -6662,9 +10361,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Якутск ҫуллахи вӑхӑчӗ - YAKT - YAKT - YAKST + YAKT + YAKT + YAKST @@ -6674,9 +10373,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Екатеринбург ҫуллахи вӑхӑчӗ - YEKT - YEKT - YEKST + YEKT + YEKT + YEKST @@ -6684,50 +10383,325 @@ CLDR data files are interpreted according to the LDML specification (http://unic Юкон вӑхӑчӗ - YST + YST + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + ,   + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар + + + хисеп мар - 0 пин - 00 пин - 000 пин - 0 миллион - 00 миллион - 000 миллион - 0 миллиард - 00 миллиард - 000 миллиард - 0 триллион - 00 триллион - 000 триллион + 0 пин + 0 пин + 0 пин + 00 пин + 00 пин + 00 пин + 000 пин + 000 пин + 000 пин + 0 млн + 0 млн + 0 млн + 00 млн + 00 млн + 00 млн + 000 млн + 000 млн + 000 млн + 0 млрд + 0 млрд + 0 млрд + 00 млрд + 00 млрд + 00 млрд + 000 млрд + 000 млрд + 000 млрд + 0 трлн + 0 трлн + 0 трлн + 00 трлн + 00 трлн + 00 трлн + 000 трлн + 000 трлн + 000 трлн - 0 пин - 00 пин - 000 пин - 0 млн - 00 млн - 000 млн - 0 млрд - 00 млрд - 000 млрд - 0 трлн - 00 трлн - 000 трлн + 0 пин + 0 пин + 00 пин + 00 пин + 000 пин + 000 пин + 0 млн + 0 млн + 00 млн + 00 млн + 000 млн + 000 млн + 0 млрд + 0 млрд + 00 млрд + 00 млрд + 000 млрд + 000 млрд + 0 трлн + 0 трлн + 00 трлн + 00 трлн + 000 трлн + 000 трлн + + + + #,##0 % + + + @@ -6735,94 +10709,1085 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) - 0 пин ¤ - 00 пин ¤ - 000 пин ¤ - 0 млн ¤ - 00 млн ¤ - 000 млн ¤ - 0 млрд ¤ - 00 млрд ¤ - 000 млрд ¤ - 0 трлн ¤ - 00 трлн ¤ - 000 трлн ¤ + 0 пин ¤ + 0 пин ¤ + 0 пин ¤ + 00 пин ¤ + 00 пин ¤ + 00 пин ¤ + 000 пин ¤ + 000 пин ¤ + 000 пин ¤ + 0 млн ¤ + 0 млн ¤ + 0 млн ¤ + 00 млн ¤ + 00 млн ¤ + 00 млн ¤ + 000 млн ¤ + 000 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 0 млрд ¤ + 0 млрд ¤ + 00 млрд ¤ + 00 млрд ¤ + 00 млрд ¤ + 000 млрд ¤ + 000 млрд ¤ + 000 млрд ¤ + 0 трлн ¤ + 0 трлн ¤ + 0 трлн ¤ + 00 трлн ¤ + 00 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ + 000 трлн ¤ + 000 трлн ¤ + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) - Андорра песийӗ - Андорра песийӗ + Андорра песи + Андорра песи + Андорра песи + Андорра песи - АПЭ дирхамӗ + Пӗрлешнӗ Араб Эмирачӗсен дирхамӗ + ПАЭ дирхамӗ + ПАЭ дирхамӗ + ПАЭ дирхамӗ - Афган афганийӗ (1927–2002) - Афган афганийӗ (1927–2002) + Афганистан афганийӗ (1927–2002) + Афганистан афганийӗ (1927–2002) + Афганистан афганийӗ (1927–2002) + Афганистан афганийӗ (1927–2002) - афганийӗ + Афганистан афганийӗ + Афганистан афганийӗ + Афганистан афганийӗ + Афганистан афганийӗ - Албани лек - Албани лек + Албани лекӗ (1946–1965) + Албани лекӗ (1946–1965) + Албани лекӗ (1946–1965) + Албани лекӗ (1946–1965) Албани лекӗ - Армяни драмӗ + Армени драмӗ + Армени драмӗ + Армени драмӗ + Армени драмӗ - Нидерланд Антиллиан гульденӗ + Нидерланд Антилӗн гульденӗ + Нидерланд Антилӗн гульденӗ + Нидерланд Антилӗн гульденӗ + Нидерланд Антилӗн гульденӗ - Ангола кванзӗ + Ангола кванзи + Ангола кванзи + Ангола кванзи + Ангола кванзи - Ангола кванзӗ (1977–1991) - Ангола кванзӗ (1977–1991) + Ангола кванзи (1977–1991) + Ангола кванзи (1977–1991) + Ангола кванзи (1977–1991) + Ангола кванзи (1977–1991) - Ангола ҫӗнӗ кванзӗ (1990–2000) - Ангола ҫӗнӗ кванзӗ (1990–2000) + Ангола ҫӗнӗ кванзи (1990–2000) + Ангола ҫӗнӗ кванзи (1990–2000) + Ангола ҫӗнӗ кванзи (1990–2000) + Ангола ҫӗнӗ кванзи (1990–2000) - Ангола деноминаци хыҫҫӑн кванзӗ (1995–1999) - Ангола деноминаци хыҫҫӑн кванзӗ (1995–1999) + Ангола реюстадо кванзӗ (1995–1999) + Ангола реюстадо кванзӗ (1995–1999) + Ангола реюстадо кванзӗ (1995–1999) + Ангола реюстадо кванзӗ (1995–1999) - Аргентин аусталӗ - Аргентин аусталӗ + Аргентина аустралӗ + Аргентина аустралӗ + Аргентина аустралӗ + Аргентина аустралӗ - Аргентин песийӗ лей (1970–1983) - Аргентин песийӗ лей (1970–1983) + Аргентина песо-лейӗ (1970–1983) + Аргентина песо-лейӗ (1970–1983) + Аргентина песо-лейӗ (1970–1983) + Аргентина песо-лейӗ (1970–1983) - Аргентин песийӗ (1881–1970) - Аргентин песийӗ (1881–1970) + Аргентина песи (1881–1970) + Аргентина песи (1881–1970) + Аргентина песи (1881–1970) + Аргентина песи (1881–1970) - Аргентин песийӗ (1983–1985) - Аргентин песийӗ (1983–1985) + Аргентина песи (1983–1985) + Аргентина песи (1983–1985) + Аргентина песи (1983–1985) + Аргентина песи (1983–1985) - Аргентина песийӗ + Аргентина песи + Аргентина песи + Аргентина песи + Аргентина песи - Австри шиллинг - Австри шиллинг + Австри шиллингӗ + Австри шиллингӗ + Австри шиллингӗ + Австри шиллингӗ Австрали долларӗ @@ -6831,22 +11796,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic Аруба флоринӗ - Азербайджан маначӗ (1993–2006) - Азербайджан маначӗ (1993–2006) + Азербайджан маначӗ (1993–2006) Азербайджан маначӗ - Боснипе Герцеговина динар (1992–1994) - Боснипе Герцеговина динар (1992–1994) + Боснипе Герцеговина динарӗ (1992–1994) + Боснипе Герцеговина динарӗ (1992–1994) + Боснипе Герцеговина динарӗ (1992–1994) + Боснипе Герцеговина динарӗ (1992–1994) - Боснипе Герцеговина конвертланакан марки + Боснипе Герцеговина конверсиленекен марки + Боснипе Герцеговина конверсиленекен марки + Боснипе Герцеговина конверсиленекен марки + Боснипе Герцеговина конверсиленекен марки - Боснипе Герцеговина ҫӗнӗ динар (1994–1997) - Боснипе Герцеговина ҫӗнӗ динар (1994–1997) + Боснипе Герцеговина ҫӗнӗ динарӗ (1994–1997) + Боснипе Герцеговина ҫӗнӗ динарӗ (1994–1997) + Боснипе Герцеговина ҫӗнӗ динарӗ (1994–1997) + Боснипе Герцеговина ҫӗнӗ динарӗ (1994–1997) Барбадос долларӗ @@ -6855,31 +11826,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic Бангладеш таки - Бельги конвертланакан франк - Бельги конвертланакан франк + Бельги конверсиленекен франкӗ + Бельги конверсиленекен франкӗ + Бельги конверсиленекен франкӗ + Бельги конверсиленекен франкӗ - Бельги франк - Бельги франк + Бельги франкӗ + Бельги франкӗ + Бельги франкӗ + Бельги франкӗ - Бельги франк (финанс) - Бельги франк (финанс) + Бельги франкӗ (финанс) + Бельги франкӗ (финанс) + Бельги франкӗ (финанс) + Бельги франкӗ (финанс) - Болгари хытӑ левӗ - Болгари хытӑ левӗ + Болгари хытӑ левӗ - Болгари социалистсен левӗ - Болгари социалистсен левӗ + Болгари социалистсен левӗ Болгари левӗ - Болгари левӗ (1879–1952) - Болгари левӗ (1879–1952) + Болгари левӗ (1879–1952) Бахрейн динарӗ @@ -6897,68 +11871,94 @@ CLDR data files are interpreted according to the LDML specification (http://unic Боливи боливианӗ - Боливи боливианӗ (1863–1963) - Боливи боливианӗ (1863–1963) + Боливи боливианӗ (1863–1963) - Боливи песийӗ - Боливи песийӗ + Боливи песи + Боливи песи + Боливи песи + Боливи песи - Боливи мвдол - Боливи мвдол + Боливи мвдолӗ + Боливи мвдолӗ + Боливи мвдолӗ + Боливи мвдолӗ - Бразили ҫӗнӗ крузейро (1967–1986) - Бразили ҫӗнӗ крузейро (1967–1986) + Бразили ҫӗнӗ крузейри (1967–1986) + Бразили ҫӗнӗ крузейри (1967–1986) + Бразили ҫӗнӗ крузейри (1967–1986) + Бразили ҫӗнӗ крузейри (1967–1986) - Бразили крузадо - Бразили крузадо + Бразили крузади (1986–1989) + Бразили крузади (1986–1989) + Бразили крузади (1986–1989) + Бразили крузади (1986–1989) - Бразили крузейро (1990–1993) - Бразили крузейро (1990–1993) + Бразили крузейри (1990–1993) + Бразили крузейри (1990–1993) + Бразили крузейри (1990–1993) + Бразили крузейри (1990–1993) Бразили реалӗ - Бразили ҫӗнӗ крузадо (1989–1990) - Бразили ҫӗнӗ крузадо (1989–1990) + Бразили ҫӗнӗ крузади (1989–1990) + Бразили ҫӗнӗ крузади (1989–1990) + Бразили ҫӗнӗ крузади (1989–1990) + Бразили ҫӗнӗ крузади (1989–1990) - Бразили крузейро (1993–1994) - Бразили крузейро (1993–1994) + Бразили крузейри (1993–1994) + Бразили крузейри (1993–1994) + Бразили крузейри (1993–1994) + Бразили крузейри (1993–1994) - Бразили крузейро (1942–1967) - Бразили крузейро (1942–1967) + Бразили крузейри (1942–1967) + Бразили крузейри (1942–1967) + Бразили крузейри (1942–1967) + Бразили крузейри (1942–1967) - Багам долларӗ + Багама долларӗ + Багама долларӗ + Багама долларӗ + Багама долларӗ Бутан нгултрумӗ - Бирман кьят - Бирман кьят + Бирман кьячӗ + Бирман кьячӗ + Бирман кьячӗ + Бирман кьячӗ Ботсвана пули - Белорусси тенкӗ (1994–1999) - Белорусси тенкӗ (1994–1999) + Беларусь рублӗ (1994–1999) + Беларусь рублӗ (1994–1999) + Беларусь рублӗ (1994–1999) + Беларусь рублӗ (1994–1999) - Беларуҫ тенкӗ - Беларуҫ тенки + Беларусь рублӗ + Беларусь рублӗ + Беларусь рублӗ + Беларусь рублӗ - Белорусси тенкӗ (2000–2016) - Белорусси тенкӗ (2000–2016) + Беларусь рублӗ (2000–2016) + Беларусь рублӗ (2000–2016) + Беларусь рублӗ (2000–2016) + Беларусь рублӗ (2000–2016) Белиз долларӗ @@ -6967,123 +11967,181 @@ CLDR data files are interpreted according to the LDML specification (http://unic Канада долларӗ - Конголези франкӗ + Конго франкӗ + Конго франкӗ + Конго франкӗ + Конго франкӗ - WIR евро - WIR евро + WIR еври + WIR еври + WIR еври + WIR еври Швейцари франкӗ - WIR франк - WIR франк + WIR франкӗ + WIR франкӗ + WIR франкӗ + WIR франкӗ - Чили эскудо - Чили эскудо + Чили эскуди + Чили эскуди + Чили эскуди + Чили эскуди - Чили расчет единици (UF) - Чили расчет единици (UF) + Чили татӑлу единици (UF) + Чили татӑлу единици (UF) + Чили татӑлу единици (UF) + Чили татӑлу единици (UF) - Чили песийӗ + Чили песи + Чили песи + Чили песи + Чили песи - Китай офшор юанӗ + Китай юанӗ (офшор) + Китай юанӗ (офшор) + Китай юанӗ (офшор) + Китай юанӗ (офшор) - Китай халӑх банкӗн доллар - Китай халӑх банкӗн доллар + Китай халӑх банкӗн долларӗ + Китай халӑх банкӗн долларӗ + Китай халӑх банкӗн долларӗ + Китай халӑх банкӗн долларӗ Китай юанӗ - Колумби песийӗ + Колумби песи + Колумби песи + Колумби песи + Колумби песи - Колумби чӑн тивĕçлĕ единици - Колумби чӑн тивĕçлĕ единици + Колумби чӑн хаклӑх единици + Колумби чӑн хаклӑх единици + Колумби чӑн хаклӑх единици + Колумби чӑн хаклӑх единици Коста-Рика колонӗ - Серби динарӗ (2002–2006) - Серби динарӗ (2002–2006) + Серби динарӗ (2002–2006) - Чехословак хытӑ кронӗ - Чехословак хытӑ кронӗ + Чехословаки хытӑ кронӗ + Чехословаки хытӑ кронӗ + Чехословаки хытӑ кронӗ + Чехословаки хытӑ кронӗ - Куба конвертланакан песийӗ + Куба конверсиленекен песи + Куба конверсиленекен песи + Куба конверсиленекен песи + Куба конверсиленекен песи - Куба песийӗ + Куба песи + Куба песи + Куба песи + Куба песи - Кабо-Верде эскудӗ + Кабо-Верде эскуди + Кабо-Верде эскуди + Кабо-Верде эскуди + Кабо-Верде эскуди - Кипр фунчӗ - Кипр фунчӗ + Кипр фунчӗ - Чехи кронӗ + Чехи крони + Чехи крони + Чехи крони + Чехи крони - Хӗвелтухӑҫ Германи марки - Хӗвелтухӑҫ Германи марки + Тухӑҫ Германи марки + Тухӑҫ Германи марки + Тухӑҫ Германи марки + Тухӑҫ Германи марки - Германи марки - Германи марки + Германи марки Джибути франкӗ - Дани кронӗ + Дани крони + Дани крони + Дани крони + Дани крони - Доминикан песийӗ + Доминика песи + Доминика песи + Доминика песи + Доминика песи Алжир динарӗ - Эквадор сукре - Эквадор сукре + Эквадор сукри + Эквадор сукри + Эквадор сукри + Эквадор сукри - Эквадор яланхи хаклӑхӑн единици - Эквадор яланхи хаклӑхӑн единици + Эквадор яланхи хаклӑх единици + Эквадор яланхи хаклӑх единици + Эквадор яланхи хаклӑх единици + Эквадор яланхи хаклӑх единици - Эстон кронӗ - Эстон кронӗ + Эстон крони + Эстон крони + Эстон крони + Эстон крони Египет фунчӗ - Эритрей накфӗ + Эритрей накфи + Эритрей накфи + Эритрей накфи + Эритрей накфи - Испани песета (А) - Испани песета (А) + Испани песети (А) + Испани песети (А) + Испани песети (А) + Испани песети (А) - Испани конвертланакан песета - Испани конвертланакан песета + Испани конверсиленекен песети + Испани конверсиленекен песети + Испани конверсиленекен песети + Испани конверсиленекен песети - Испани песета - Испани песета + Испани песети + Испани песети + Испани песети + Испани песети Эфиопи бырӗ @@ -7092,32 +12150,43 @@ CLDR data files are interpreted according to the LDML specification (http://unic евро - Фин марка - Фин марка + Финлянди марки + Финлянди марки + Финлянди марки + Финлянди марки Фиджи долларӗ - Факланд утравӗсен фунчӗ + Фолкленд утравӗсен фунчӗ + Фолкленд утравӗсен фунчӗ + Фолкленд утравӗсен фунчӗ + Фолкленд утравӗсен фунчӗ - Француз франк - Француз франк + Франци франкӗ + Франци франкӗ + Франци франкӗ + Франци франкӗ Британи фунчӗ - Грузин купон - Грузин купон + Грузи купонӗ + Грузи купонӗ + Грузи купонӗ + Грузи купонӗ Грузи ларийӗ - Гана седи (1979–2007) - Гана седи (1979–2007) + Гана седийӗ (1979–2007) + Гана седийӗ (1979–2007) + Гана седийӗ (1979–2007) + Гана седийӗ (1979–2007) Гана седийӗ @@ -7132,27 +12201,40 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гвиней франкӗ - Гвиней сили - Гвиней сили + Гвиней силийӗ + Гвиней силийӗ + Гвиней силийӗ + Гвиней силийӗ - Экваториаллă Гвиней эквель - Экваториаллă Гвиней эквель + Экваторти Гвиней эквелӗ + Экваторти Гвиней эквелӗ + Экваторти Гвиней эквелӗ + Экваторти Гвиней эквелӗ - Грек драхми - Грек драхма + Греци драхми + Греци драхми + Греци драхми + Греци драхми - Гватемала кетсалӗ + Гватемала кетцалӗ + Гватемала кетцалӗ + Гватемала кетцалӗ + Гватемала кетцалӗ - Гвиней-Бисау эскудо - Гвиней-Бисау эскудо + Гвиней-Бисау эскуди + Гвиней-Бисау эскуди + Гвиней-Бисау эскуди + Гвиней-Бисау эскуди - Гвиней-Бисау песийӗ - Гвиней-Бисау песийӗ + Гвиней-Бисау песи + Гвиней-Бисау песи + Гвиней-Бисау песи + Гвиней-Бисау песи Гайана долларӗ @@ -7161,11 +12243,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гонконг долларӗ - Гондурас лемпирӗ + Гондурас лемпири + Гондурас лемпири + Гондурас лемпири + Гондурас лемпири - Хорват динар - Хорват динар + Хорвати динарӗ + Хорвати динарӗ + Хорвати динарӗ + Хорвати динарӗ Хорвати куни @@ -7180,19 +12267,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Индонези рупийӗ - Ирланди фунчӗ - Ирланди фунчӗ + Ирланди фунчӗ - Израиль фунчӗ - Израиль фунчӗ + Израиль фунчӗ - Израиль шекель (1980–1985) - Израиль шекель (1980–1985) + Израиль шекелӗ (1980–1985) + Израиль шекелӗ (1980–1985) + Израиль шекелӗ (1980–1985) + Израиль шекелӗ (1980–1985) - Ҫӗнӗ Израиль шекелӗ + Израиль ҫӗнӗ шекелӗ + Израиль ҫӗнӗ шекелӗ + Израиль ҫӗнӗ шекелӗ + Израиль ҫӗнӗ шекелӗ Инди рупийӗ @@ -7204,15 +12294,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Иран риалӗ - Исланди кронӗ (1918–1981) - Исланди кронӗ (1918–1981) + Исланди крони (1918–1981) + Исланди крони (1918–1981) + Исланди крони (1918–1981) + Исланди крони (1918–1981) - Исланди кронӗ + Исланди крони + Исланди крони + Исланди крони + Исланди крони - Итали лира - Итали лира + Итали лири + Итали лири + Итали лири + Итали лири Ямайка долларӗ @@ -7227,27 +12324,43 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кени шиллингӗ - Киргиз сомӗ + Кӑркӑсстан сомӗ + Кӑркӑсстан сомӗ + Кӑркӑсстан сомӗ + Кӑркӑсстан сомӗ Камбоджа риелӗ - Комора франкӗ + Комор франкӗ + Комор франкӗ + Комор франкӗ + Комор франкӗ - КХДР вони + Ҫур ҫӗр Корей вони + Ҫур ҫӗр Корей вони + Ҫур ҫӗр Корей вони + Ҫур ҫӗр Корей вони - Корей хван - Корей хван + Кӑнтӑр Корея хванӗ (1953–1962) + Кӑнтӑр Корея хванӗ (1953–1962) + Кӑнтӑр Корея хванӗ (1953–1962) + Кӑнтӑр Корея хванӗ (1953–1962) - Корей вони (1945–1953) - Корей вони (1945–1953) + Кӑнтӑр Корей вони (1945–1953) + Кӑнтӑр Корей вони (1945–1953) + Кӑнтӑр Корей вони (1945–1953) + Кӑнтӑр Корей вони (1945–1953) - Корей вони + Кӑнтӑр Корей вони + Кӑнтӑр Корей вони + Кӑнтӑр Корей вони + Кӑнтӑр Корей вони Кувейт динарӗ @@ -7256,7 +12369,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кайман утравӗсен долларӗ - Казах тенгейӗ + Казахстан тенги + Казахстан тенги + Казахстан тенги + Казахстан тенги Лаос кипӗ @@ -7265,7 +12381,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ливан фунчӗ - Шри-ланка рупийӗ + Шри-Ланка рупийӗ + Шри-Ланка рупийӗ + Шри-Ланка рупийӗ + Шри-Ланка рупийӗ Либери долларӗ @@ -7274,32 +12393,46 @@ CLDR data files are interpreted according to the LDML specification (http://unic Лесото лотийӗ - Литва лит - Литва лит + Литва личӗ + Литва личӗ + Литва личӗ + Литва личӗ - Литва талон - Литва талон + Литва талонӗ + Литва талонӗ + Литва талонӗ + Литва талонӗ - Люксембург конвертланакан франк - Люксембург конвертланакан франк + Люксембург конверсиленекен франкӗ + Люксембург конверсиленекен франкӗ + Люксембург конверсиленекен франкӗ + Люксембург конверсиленекен франкӗ - Люксембург франк - Люксембург франк + Люксембург франкӗ + Люксембург франкӗ + Люксембург франкӗ + Люксембург франкӗ - Люксембург финанс франк - Люксембург финанс франк + Люксембург финанс франкӗ + Люксембург финанс франкӗ + Люксембург финанс франкӗ + Люксембург финанс франкӗ - Латви лат - Латви лат + Латви лачӗ + Латви лачӗ + Латви лачӗ + Латви лачӗ - Латви тенкĕ - Латви тенкĕ + Латви рублӗ + Латви рублӗ + Латви рублӗ + Латви рублӗ Ливи динарӗ @@ -7308,40 +12441,58 @@ CLDR data files are interpreted according to the LDML specification (http://unic Марокко дирхамӗ - Марокко франк - Марокко франк + Марокко франкӗ + Марокко франкӗ + Марокко франкӗ + Марокко франкӗ - Монако франк - Монако франк + Монако франкӗ + Монако франкӗ + Монако франкӗ + Монако франкӗ - Молдова купон - Молдова купон + Молдова купонӗ + Молдова купонӗ + Молдова купонӗ + Молдова купонӗ Молдова лайӗ - Малагаси ариарийӗ + Мадагаскар ариарийӗ + Мадагаскар ариарийӗ + Мадагаскар ариарийӗ + Мадагаскар ариарийӗ - Малагаси франк - Малагаси франк + Мадагаскар франкӗ + Мадагаскар франкӗ + Мадагаскар франкӗ + Мадагаскар франкӗ Македони денарӗ - Македони динар (1992–1993) - Македони динар (1992–1993) + Македони денарӗ (1992–1993) + Македони денарӗ (1992–1993) + Македони денарӗ (1992–1993) + Македони денарӗ (1992–1993) - Мали франк - Мали франк + Мали франкӗ + Мали франкӗ + Мали франкӗ + Мали франкӗ - Мьянман кьятӗ + Мьянма кьячӗ + Мьянма кьячӗ + Мьянма кьячӗ + Мьянма кьячӗ Монголи тугрикӗ @@ -7350,54 +12501,70 @@ CLDR data files are interpreted according to the LDML specification (http://unic Макао патаки - Мавритани угийӗ (1973–2017) - Мавритани угийӗ (1973–2017) + Мавритани угийӗ (1973–2017) Мавритани угийӗ - Мальта лира - Мальта лира + Мальта лири + Мальта лири + Мальта лири + Мальта лири - Мальта фунчӗ - Мальта фунчӗ + Мальта фунчӗ Маврики рупийӗ - Мальдив рупийӗ (1947–1981) - Мальдив рупийӗ (1947–1981) + Мальдив рупийӗ (1947–1981) - Мальдивсен руфийӗ + Мальдив руфийӗ + Мальдив руфийӗ + Мальдив руфийӗ + Мальдив руфийӗ - Малави квачӗ + Малави квачи + Малави квачи + Малави квачи + Малави квачи - Мексика песийӗ + Мексика песи + Мексика песи + Мексика песи + Мексика песи - Мексика кӗмӗл песийӗ (1861–1992) - Мексика кӗмӗл песийӗ (1861–1992) + Мексика кӗмӗл песи (1861–1992) + Мексика кӗмӗл песи (1861–1992) + Мексика кӗмӗл песи (1861–1992) + Мексика кӗмӗл песи (1861–1992) - Мексика инвестици единици (UDI) - Мексика инвестици единици (UDI) + Мексика инвестици единици + Мексика инвестици единици + Мексика инвестици единици + Мексика инвестици единици Малайзи ринггичӗ - Мозамбик эскудо - Мозамбик эскудо + Мозамбик эскуди + Мозамбик эскуди + Мозамбик эскуди + Мозамбик эскуди - Мозамбик метикал (1980–2006) - Мозамбик метикал (1980–2006) + Мозамбик метикалӗ (1980–2006) + Мозамбик метикалӗ (1980–2006) + Мозамбик метикалӗ (1980–2006) + Мозамбик метикалӗ (1980–2006) Мозамбик метикалӗ @@ -7406,21 +12573,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic Намиби долларӗ - Нигери найрӗ + Нигери найри + Нигери найри + Нигери найри + Нигери найри - Никарагуа кордобӗ (1988–1991) - Никарагуа кордобӗ (1988–1991) + Никарагуа кордоби (1988–1991) + Никарагуа кордоби (1988–1991) + Никарагуа кордоби (1988–1991) + Никарагуа кордоби (1988–1991) - Никарагуа кордобӗ + Никарагуа кордоби + Никарагуа кордоби + Никарагуа кордоби + Никарагуа кордоби - Нидерланд гульден - Нидерланд гульден + Нидерланд гульденӗ + Нидерланд гульденӗ + Нидерланд гульденӗ + Нидерланд гульденӗ - Норвеги кронӗ + Норвеги крони + Норвеги крони + Норвеги крони + Норвеги крони Непал рупийӗ @@ -7432,38 +12612,61 @@ CLDR data files are interpreted according to the LDML specification (http://unic Оман риалӗ - Панама бальбоа + Панама бальбойи + Панама бальбойи + Панама бальбойи + Панама бальбойи - Перу инти - Перу инти + Перу интийӗ + Перу интийӗ + Перу интийӗ + Перу интийӗ Перу солӗ - Перу соль (1863–1965) - Перу соль (1863–1965) + Перу солӗ (1863–1965) + Перу солӗ (1863–1965) + Перу солӗ (1863–1965) + Перу солӗ (1863–1965) - Папуа – Ҫӗнӗ Гвиней кини + Папуа – Ҫӗнӗ Гвинея кини + Папуа – Ҫӗнӗ Гвинея кини + Папуа – Ҫӗнӗ Гвинея кини + Папуа – Ҫӗнӗ Гвинея кини - Филиппин песийӗ + Филиппин песи + Филиппин песи + Филиппин песи + Филиппин песи - пакистан рупийӗ + Пакистан рупийӗ + Пакистан рупийӗ + Пакистан рупийӗ + Пакистан рупийӗ - Польша злотыйӗ + Польша злотӑйӗ + Польша злотӑйӗ + Польша злотӑйӗ + Польша злотӑйӗ - Польша злотыйӗ (1950–1995) - Польша злотыйӗ (1950–1995) + Польша злотӑйӗ (1950–1995) + Польша злотӑйӗ (1950–1995) + Польша злотӑйӗ (1950–1995) + Польша злотӑйӗ (1950–1995) - Португали эскудо - Португали эскудо + Португали эскуди + Португали эскуди + Португали эскуди + Португали эскуди Парагвай гуаранӗ @@ -7472,12 +12675,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Катар риалӗ - Родези доллар - Родези доллар + Родези долларӗ + Родези долларӗ + Родези долларӗ + Родези долларӗ - Румыни лейӗ (1952–2006) - Румыни лейӗ (1952–2006) + Румыни лейӗ (1952–2006) Румыни лейӗ @@ -7486,19 +12690,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic Серби динарӗ - Раҫҫей тенкӗ - Раҫҫей тенки + Раҫҫей рублӗ + Раҫҫей рублӗ + Раҫҫей рублӗ + Раҫҫей рублӗ - Раҫҫей тенкӗ (1991–1998) - Раҫҫей тенки (1991–1998) + Раҫҫей рублӗ (1991–1998) + Раҫҫей рублӗ (1991–1998) + Раҫҫей рублӗ (1991–1998) + Раҫҫей рублӗ (1991–1998) Руанда франкӗ - Сауд риялӗ + Сауд Аравийӗ риялӗ + Сауд Аравийӗ риялӗ + Сауд Аравийӗ риялӗ + Сауд Аравийӗ риялӗ Соломон утравӗсен долларӗ @@ -7507,18 +12718,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сейшел рупийӗ - Судан динар (1992–2007) - Судан динар (1992–2007) + Судан динарӗ (1992–2007) + Судан динарӗ (1992–2007) + Судан динарӗ (1992–2007) + Судан динарӗ (1992–2007) Судан фунчӗ - Судан фунчӗ (1957–1998) - Судан фунчӗ (1957–1998) + Судан фунчӗ (1957–1998) - Швеци кронӗ + Швеци крони + Швеци крони + Швеци крони + Швеци крони Сингапур долларӗ @@ -7527,18 +12742,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic Сӑваплӑ Елена утравӗн фунчӗ - Словени толар - Словени толар + Словени толарӗ + Словени толарӗ + Словени толарӗ + Словени толарӗ - Словак кронӗ - Словак кронӗ + Словаки крони + Словаки крони + Словаки крони + Словаки крони - леонӗ + Сьерра-Леоне леони + Сьерра-Леоне леони + Сьерра-Леоне леони + Сьерра-Леоне леони - леонӗ (1964—2022) + Сьерра-Леоне леони (1964–2022) + Сьерра-Леоне леони (1964–2022) + Сьерра-Леоне леони (1964–2022) + Сьерра-Леоне леони (1964–2022) Сомали шиллингӗ @@ -7547,72 +12772,115 @@ CLDR data files are interpreted according to the LDML specification (http://unic Суринам долларӗ - Суринам гульден - Суринам гульден + Суринам гульденӗ + Суринам гульденӗ + Суринам гульденӗ + Суринам гульденӗ Кӑнтӑр Судан фунчӗ - Сан-Томе и Принсипи добра - Сан-Томе и Принсипи добра + Сан-Томепе Принсипи добри (1977–2017) + Сан-Томепе Принсипи добри (1977–2017) + Сан-Томепе Принсипи добри (1977–2017) + Сан-Томепе Принсипи добри (1977–2017) - Сан-Томе тата Принсипи добрӗ + Сан-Томепе Принсипи добри + Сан-Томепе Принсипи добри + Сан-Томепе Принсипи добри + Сан-Томепе Принсипи добри - Совет тенкӗ - Совет тенки + ССРП рублӗ + ССРП рублӗ + ССРП рублӗ + ССРП рублӗ - Сальвадор колон - Сальвадор колон + Сальвадор колонӗ + Сальвадор колонӗ + Сальвадор колонӗ + Сальвадор колонӗ Сири фунчӗ - Свази лилангенийӗ + Эсватини лилангенийӗ + Эсватини лилангенийӗ + Эсватини лилангенийӗ + Эсватини лилангенийӗ - Таиланд барӗ + Таиланд бачӗ + Таиланд бачӗ + Таиланд бачӗ + Таиланд бачӗ - Таджик тенкӗ - Таджик тенки + Таджикистан рублӗ + Таджикистан рублӗ + Таджикистан рублӗ + Таджикистан рублӗ - Таджик сомонийӗ + Таджикистан сомонийӗ + Таджикистан сомонийӗ + Таджикистан сомонийӗ + Таджикистан сомонийӗ - Туркмен маначӗ (1993–2009) - Туркмен маначӗ (1993–2009) + Туркменистан маначӗ (1993–2009) + Туркменистан маначӗ (1993–2009) + Туркменистан маначӗ (1993–2009) + Туркменистан маначӗ (1993–2009) - Туркмен маначӗ + Туркменистан маначӗ + Туркменистан маначӗ + Туркменистан маначӗ + Туркменистан маначӗ - Тунези динарӗ + Тунис динарӗ + Тунис динарӗ + Тунис динарӗ + Тунис динарӗ - Тонган паанги + Тонга паанги + Тонга паанги + Тонга паанги + Тонга паанги - Тимор эскудо - Тимор эскудо + Тимор эскуди + Тимор эскуди + Тимор эскуди + Тимор эскуди - Турци лира (1922–2005) - Турци лира (1922–2005) + Турци лири (1922–2005) + Турци лири (1922–2005) + Турци лири (1922–2005) + Турци лири (1922–2005) Турци лири - Тринидад тата Тобаго долларӗ + Тринидадпа Тобаго долларӗ + Тринидадпа Тобаго долларӗ + Тринидадпа Тобаго долларӗ + Тринидадпа Тобаго долларӗ - Ҫӗнӗ Тайван долларӗ + Тайвань ҫӗнӗ долларӗ + Тайвань ҫӗнӗ долларӗ + Тайвань ҫӗнӗ долларӗ + Тайвань ҫӗнӗ долларӗ Танзани шиллингӗ @@ -7621,12 +12889,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic Украина гривни - Украина карбованец - Украина карбованец + Украина карбованецӗ + Украина карбованецӗ + Украина карбованецӗ + Украина карбованецӗ - Уганда шиллинг (1966–1987) - Уганда шиллинг (1966–1987) + Уганда шиллингӗ (1966–1987) + Уганда шиллингӗ (1966–1987) + Уганда шиллингӗ (1966–1987) + Уганда шиллингӗ (1966–1987) Уганда шиллингӗ @@ -7636,42 +12908,61 @@ CLDR data files are interpreted according to the LDML specification (http://unic $ - АПШ долларӗ ыранхи кун - АПШ долларӗ ыранхи кун + АПШ долларӗ (ҫитес кун) + АПШ долларӗ (ҫитес кун) + АПШ долларӗ (ҫитес кун) + АПШ долларӗ (ҫитес кун) - АПШ долларӗ паянхи кун - АПШ долларӗ паянхи кун + АПШ долларӗ (ҫак кун) + АПШ долларӗ (ҫак кун) + АПШ долларӗ (ҫак кун) + АПШ долларӗ (ҫак кун) - Уругвай песийӗ (индексаци хыҫҫӑн единици) - Уругвай песийӗ (индексаци хыҫҫӑн единици) + Уругвай песи (индексациленӗ единица) + Уругвай песи (индексациленӗ единица) + Уругвай песи (индексациленӗ единица) + Уругвай песи (индексациленӗ единица) - Уругвай песийӗ (1975–1993) - Уругвай песийӗ (1975–1993) + Уругвай песи (1975–1993) + Уругвай песи (1975–1993) + Уругвай песи (1975–1993) + Уругвай песи (1975–1993) - Уругвай песийӗ + Уругвай песи + Уругвай песи + Уругвай песи + Уругвай песи - Уругвай номиналлӑ индексаци единици - Уругвай номиналлӑ индексаци единици + Уругвай номинал ӗҫ хакӗн индексӗн единици + Уругвай номинал ӗҫ хакӗн индексӗн единици + Уругвай номинал ӗҫ хакӗн индексӗн единици + Уругвай номинал ӗҫ хакӗн индексӗн единици - Узбек сумӗ + Узбекистан сумӗ + Узбекистан сумӗ + Узбекистан сумӗ + Узбекистан сумӗ - Венесуэла боливарӗ (1871–2008) - Венесуэла боливарӗ (1871–2008) + Венесуэла боливарӗ (1871–2008) - Суверенлă боливарӗ - Суверенлă боливарӗ + Венесуэла суверенлӑ боливарӗ + Венесуэла суверенлӑ боливарӗ + Венесуэла суверенлӑ боливарӗ + Венесуэла суверенлӑ боливарӗ - Венесуэль боливарӗ (2008–2018) - Венесуэль боливарӗ (2008–2018) + Венесуэла боливарӗ (2008–2018) + Венесуэла боливарӗ (2008–2018) + Венесуэла боливарӗ (2008–2018) + Венесуэла боливарӗ (2008–2018) Венесуэла боливарӗ @@ -7680,2680 +12971,3824 @@ CLDR data files are interpreted according to the LDML specification (http://unic Вьетнам донгӗ - Вьетнам донг (1978–1985) - Вьетнам донг (1978–1985) + Вьетнам донгӗ (1978–1985) + Вьетнам донгӗ (1978–1985) + Вьетнам донгӗ (1978–1985) + Вьетнам донгӗ (1978–1985) - Вануату ватуйӗ + Вануату ватувӗ + Вануату ватувӗ + Вануату ватувӗ + Вануату ватувӗ Самоа тали - Тӗп Африка КФА франкӗ + Вӑта Африка КФА франкӗ + Вӑта Африка КФА франкӗ + Вӑта Африка КФА франкӗ + Вӑта Африка КФА франкӗ - кӗмӗл - Трой унци кӗмӗл + кӗмӗл + Троя унцийӗ кӗмӗлпе + Троя унцийӗ кӗмӗлпе + Троя унцийӗ кӗмӗлпе - ылтӑн - Трой унци ылтӑн + ылтӑн + Троя унцийӗ ылтӑнпа + Троя унцийӗ ылтӑнпа + Троя унцийӗ ылтӑнпа - Европа хутлă единици - Европа хутлă единици + Европа сыпӑнчӑк единици + Европа сыпӑнчӑк единици + Европа сыпӑнчӑк единици + Европа сыпӑнчӑк единици - Европа укҫа единици - Европа укҫа единици + Европа укҫа единици - Европа расчет единицисем (XBС) - Европа расчет единицисем (XBС) + Европа тӳлев единици (XBС) + Европа тӳлев единици (XBС) + Европа тӳлев единици (XBС) + Европа тӳлев единици (XBС) - Европа расчет единицисем (XBD) - Европа расчет единицисем (XBD) + Европа тӳлев единици (XBD) + Европа тӳлев единици (XBD) + Европа тӳлев единици (XBD) + Европа тӳлев единици (XBD) - Хӗвелтухӑҫ Карибсем долларӗ + Тухӑҫ Кариб долларӗ + Тухӑҫ Кариб долларӗ + Тухӑҫ Кариб долларӗ + Тухӑҫ Кариб долларӗ - Кариб гульден - Кариб гульден + Кариб гульденӗ + Кариб гульденӗ + Кариб гульденӗ + Кариб гульденӗ - ятарлӑ заемлени прависем (СДР) - ятарлӑ заемлени прависем (СДР) + ятарлӑ йышӑну прависем (СДР) + ятарлӑ йышӑну прависем (СДР) + ятарлӑ йышӑну прависем (СДР) + ятарлӑ йышӑну прависем (СДР) - Европа валюта единици - Европа валюта единици + Европа валюта единици - Франци ылтӑн франк - Франци ылтӑн франк + Франци ылтӑн франкӗ + Франци ылтӑн франкӗ + Франци ылтӑн франкӗ + Франци ылтӑн франкӗ - Франци UIC-франк - Франци UIC-франк + Франци UIC франкӗ + Франци UIC франкӗ + Франци UIC франкӗ + Франци UIC франкӗ - КФА ВСЕАО франкӗ + Анӑҫ Африка КФА франкӗ + Анӑҫ Африка КФА франкӗ + Анӑҫ Африка КФА франкӗ + Анӑҫ Африка КФА франкӗ - паллади - Трой унци паллади + паллади + Троя унцийӗ палладипе + Троя унцийӗ палладипе + Троя унцийӗ палладипе - Франци Лӑпкӑ океан франкӗ + КФП франкӗ + КФП франкӗ + КФП франкӗ + КФП франкӗ - платина - Трой унци платина + платина + Троя унцийӗ платинӑпа + Троя унцийӗ платинӑпа + Троя унцийӗ платинӑпа - RINET фонд единици - RINET фонд единици + RINET фонд единици - сукре - сукре + сукре - тĕрĕслев валют код - тĕрĕслев валют код + тӗрӗслев валют кочӗ + тӗрӗслев валют кочӗ + тӗрӗслев валют кочӗ + тӗрӗслев валют кочӗ - ADB расчет единици - ADB расчет единици + ADB тӳлев единици + ADB тӳлев единици + ADB тӳлев единици + ADB тӳлев единици паллӑ мар валюта - Йемен динар - Йемен динар + Йемен динарӗ + Йемен динарӗ + Йемен динарӗ + Йемен динарӗ Йемен риалӗ - Югослави хытӑ динарӗ (1966–1990) - Югослави хытӑ динарӗ (1966–1990) + Югослави хытӑ динарӗ (1966–1990) - Югослави ҫӗнӗ динарӗ (1994–2002) - Югослави ҫӗнӗ динарӗ (1994–2002) + Югослави ҫӗнӗ динарӗ (1994–2002) - Югослави конвертланакан динарӗ (1990–1992) - Югослави конвертланакан динарӗ (1990–1992) + Югослави конверсиленекен динарӗ (1990–1992) + Югослави конверсиленекен динарӗ (1990–1992) + Югослави конверсиленекен динарӗ (1990–1992) + Югослави конверсиленекен динарӗ (1990–1992) - Югослави реформӑланӑ динарӗ (1992–1993) - Югослави реформӑланӑ динарӗ (1992–1993) + Югослави реформӑланӑ динарӗ (1992–1993) - Кӑнтӑр Африка рэндӗ (финанс) - Кӑнтӑр Африка рэндӗ (финанс) + Кӑнтӑр Африка рэнчӗ (финанс) + Кӑнтӑр Африка рэнчӗ (финанс) + Кӑнтӑр Африка рэнчӗ (финанс) + Кӑнтӑр Африка рэнчӗ (финанс) - Кӑнтӑр Африка рэндӗ + Кӑнтӑр Африка рэнчӗ + Кӑнтӑр Африка рэнчӗ + Кӑнтӑр Африка рэнчӗ + Кӑнтӑр Африка рэнчӗ - Замби квачи (1968–2012) - Замби квачи (1968–2012) + Замби квачи (1968–2012) Замби квачи - Ҫӗнӗ заир (1993–1998) - Ҫӗнӗ заир (1993–1998) + Заир ҫӗнӗ заирӗ (1993–1998) + Заир ҫӗнӗ заирӗ (1993–1998) + Заир ҫӗнӗ заирӗ (1993–1998) + Заир ҫӗнӗ заирӗ (1993–1998) - Заир (1971–1993) - Заир (1971–1993) + Заир заирӗ (1971–1993) + Заир заирӗ (1971–1993) + Заир заирӗ (1971–1993) + Заир заирӗ (1971–1993) - Зимбабве доллар (1980–2008) - Зимбабве доллар (1980–2008) + Зимбабве долларӗ (1980–2008) + Зимбабве долларӗ (1980–2008) + Зимбабве долларӗ (1980–2008) + Зимбабве долларӗ (1980–2008) + + + Зимбабве ылтӑнӗ + Зимбабве ылтӑнӗ + Зимбабве ылтӑнӗ + Зимбабве ылтӑнӗ - Зимбабве доллар (2009) - Зимбабве доллар (2009) + Зимбабве долларӗ (2009–2024) + Зимбабве долларӗ (2009–2024) + Зимбабве долларӗ (2009–2024) + Зимбабве долларӗ (2009–2024) - Зимбабве доллар (2008) - Зимбабве доллар (2008) + Зимбабве долларӗ (2008) + Зимбабве долларӗ (2008) + Зимбабве долларӗ (2008) + Зимбабве долларӗ (2008) ≈{0} - {0} кунсем - {0}-мӗш хӗреслӗ урамран сылтӑм енне пӑрӑнӑр + Пан улми ҫук. + {0} пан улми пур. Ӑна илесшӗн-и? + {0} пан улми пур. Вӗсене илесшӗн-и? + {0}-мӗш пан улми выртать. - деци{0} + деци{0} - санти{0} + санти{0} - милли{0} + милли{0} - микро{0} + микро{0} - нано{0} + нано{0} - пико{0} + пико{0} - фемто{0} + фемто{0} - атто{0} + атто{0} - зепто{0} + зепто{0} - иокто{0} + иокто{0} - ронто{0} + ронто{0} - квекто{0} + квекто{0} - дека{0} + дека{0} - гекто{0} + гекто{0} - кило{0} + кило{0} - мега{0} + мега{0} - гига{0} + гига{0} - тера{0} + тера{0} - пета{0} + пета{0} - экса{0} + экса{0} - зетта{0} + зетта{0} - иотта{0} + иотта{0} - ронна{0} + ронна{0} - кветта{0} + кветта{0} - киби{0} + киби{0} - меби{0} + меби{0} - гиби{0} + гиби{0} - теби{0} + теби{0} - пеби{0} + пеби{0} - эксби{0} + эксби{0} - зеби{0} + зеби{0} - йоби{0} + йоби{0} - тӑваткал {0} + тӑваткал {0} + тӑваткал {0} + тӑваткал {0} - кубла {0} + куб {0} + куб {0} + куб {0} + + + {0}-{1} - ирĕклĕн ӳкнин хăвăртланăвĕ - {0} ирĕклĕн ӳкнин хăвăртланăвĕ + ирӗклӗ ӳкни хӑвӑртланӑвӗ + {0} g + {0} g + {0} ирӗклӗ ӳкни хӑвӑртланӑвӗ - тӑваткал ҫеккунтра метр - тӑваткал ҫеккунтра {0} метр - - - çавра - {0} çавра + метр/тӑваткал ҫеккунт + {0} м/ҫ² + {0} м/ҫ² + {0} метр/тӑваткал ҫеккунт - радиан - {0} радиан + {0} рад + {0} рад + {0} рад - градус - {0} градус + {0}° + {0}° + {0}° - кĕтесле минут - {0} кĕтесле минут + пӗкӗ минучӗ + {0}′ + {0}′ + {0} пӗкӗ минучӗ - кĕтесле çеккунт - {0} кĕтесле çеккунт + пӗкӗ ҫеккунчӗ + {0}″ + {0}″ + {0} пӗкӗ ҫеккунчӗ - тӑваткал километр - {0} тӑваткал километр - {0}/тӑваткал километр + тӑваткал километр + {0} км² + {0} км² + {0} тӑваткал километр + {0}/тӑваткал километр - гектар - {0} гектар + гектар + {0} га + {0} га + {0} гектар - тӑваткал метр - {0} тӑваткал метр - {0}/тӑваткал метр + тӑваткал метр + {0} м² + {0} м² + {0} тӑваткал метр + {0}/тӑваткал метр - тӑваткал сантиметр - {0} тӑваткал сантиметр - {0}/тӑваткал сантиметр + тӑваткал сантиметр + {0} см² + {0} см² + {0} тӑваткал сантиметр + {0}/тӑваткал сантиметр - тӑваткал миля - {0} тӑваткал миля - {0}/тӑваткал миля - - - акр - {0} акр + тӑваткал миля + {0} ми² + {0} ми² + {0} тӑваткал миля + {0}/тӑваткал миля - тӑваткал ярд - {0} тӑваткал ярд + тӑваткал ярд + {0} ярд² + {0} ярд² + {0} тӑваткал ярд - тӑваткал фут - {0} тӑваткал фут + тӑваткал фут + {0} фт² + {0} фт² + {0} тӑваткал фут - тӑваткал дюйм - {0} тӑваткал дюйм - {0}/тӑваткал дюйм - - - дунам - {0} дунам + тӑваткал дюйм + {0} дюйм² + {0} дюйм² + {0} тӑваткал дюйм + {0}/тӑваткал дюйм - карат - {0} карат + {0} кар + {0} кар + {0} кар - децилитрӑ миллиграмм - {0} децилитрӑ миллиграмм + миллиграмм/децилитр + {0} мг/дл + {0} мг/дл + {0} миллиграмм/децилитр - литрлӑх миллимоль - {0} литрлӑх миллимоль + миллимоль/литр + {0} ммоль/л + {0} ммоль/л + {0} миллимоль/литр - объект - {0} объект + япала + {0} япала + {0} япала + {0} япала - - миллионмĕш пайĕ - {0} миллионмĕш пайĕ + + пай + {0} пай + {0} пай + {0} пай + + + миллионмĕш пайĕ + {0} млн⁻¹ + {0} млн⁻¹ + {0} миллионмĕш пайĕ - процент - {0} процент + процент + {0} % + {0} % + {0} процент - промиллĕ - {0} промиллĕ + промилле + {0} ‰ + {0} ‰ + {0} промилле - промириад - {0} промириад + промириад + {0} ‱ + {0} ‱ + {0} промириад - - моль - {0} моль + + глюкоза + {0} Глк + {0} Глк + {0} глюкоза - километрлӑх литр - километрлӑх {0} литр + литр/километр + {0} л/км + {0} л/км + {0} литр/километр - çĕр километрах литр - çĕр километрах {0} литр + литр/100 километр + {0} л/100 км + {0} л/100 км + {0} литр/100 километр - галлон ҫине миля - {0} галлон ҫине миля + миля/галлон + {0} ми/гал + {0} ми/гал + {0} миля/галлон - импери галлон ҫинче миля - {0} импери галлон ҫинче миля + миля/империлле галлон + {0} ми/имп. гал + {0} ми/имп. гал + {0} миля/империлле галлон - петабайт - {0} петабайт + петабайт + {0} Пбайт + {0} Пбайт + {0} петабайт - терабайт - {0} терабайт + терабайт + {0} Тбайт + {0} Тбайт + {0} терабайт - терабит - {0} терабит + терабит + {0} Тбит + {0} Тбит + {0} терабит - гигабайт - {0} гигабайт + гигабайт + {0} Гбайт + {0} Гбайт + {0} гигабайт - гигабит - {0} гигабит + гигабит + {0} Гбит + {0} Гбит + {0} гигабит - мегабайт - {0} мегабайт + мегабайт + {0} Мбайт + {0} Мбайт + {0} мегабайт - мегабит - {0} мегабит + мегабит + {0} Мбит + {0} Мбит + {0} мегабит - килобайт - {0} килобайт + килобайт + {0} кбайт + {0} кбайт + {0} килобайт - килобит - {0} килобит - - - байт - {0} байт - - - бит - {0} бит - - - ӗмӗрсем - {0} ӗмӗрсем + килобит + {0} кбит + {0} кбит + {0} килобит - вунҫуллӑх - {0} вунҫуллӑх + вунӑ ҫуллӑх + {0} вунӑ ҫ. + {0} вунӑ ҫ. + {0} вунӑ ҫуллӑх - ҫулталӑксем - {0} ҫулталӑксем - {0} ҫулталӑкра + ҫул + {0} ҫул + {0} ҫул + {0} ҫул - чӗрӗк - {0} чӗрӗк - {0}/чӗрӗк - - - уйăхсем - {0} уйӑхсем - {0}/уйӑх - - - эрне - {0} эрне - {0}/эрнере - - - кун - {0} кун - {0} кунне + {0} чӗр. + {0} чӗр. + {0} чӗр. - сехет - {0} сехет - {0} сехетре + {0} сех + {0} сех + {0} сех - минут - {0} минут - {0} минутра + минут + {0} мин + {0} мин + {0} минут + {0}/минут - ҫеккунт - {0} ҫеккунт - {0}/ҫеккунтра + ҫеккунт + {0} ҫ + {0} ҫ + {0} ҫеккунт + {0}/ҫеккунт - миллиҫеккунт - {0} миллиҫеккунт + миллиҫеккунт + {0} мҫ + {0} мҫ + {0} миллиҫеккунт - микроҫеккунт - {0} микроҫеккунт + микроҫеккунт + {0} мкҫ + {0} мкҫ + {0} микроҫеккунт - наноҫеккунт - {0} наноҫеккунт + наноҫеккунт + {0} нҫ + {0} нҫ + {0} наноҫеккунт - ампер - {0} ампер + ампер + {0} А + {0} А + {0} ампер - миллиампер - {0} миллиампер + миллиампер + {0} мА + {0} мА + {0} миллиампер - ом - {0} ом + ом + {0} Ом + {0} Ом + {0} ом - вольт - {0} вольт + вольт + {0} В + {0} В + {0} вольт - килокалори - {0} килокалори + килокалори + {0} ккал + {0} ккал + {0} килокалори - калори - {0} калори + калори + {0} кал + {0} кал + {0} калори - килоджоуль - {0} килоджоуль + килоджоуль + {0} кДж + {0} кДж + {0} килоджоуль - джоуль - {0} джоуль + джоуль + {0} Дж + {0} Дж + {0} джоуль - киловатт-сехет - {0} киловатт-сехет + киловатт-сехет + {0} кВт⋅сех + {0} кВт⋅сех + {0} киловатт-сехет - электронвольт - {0} электронвольт + электронвольт + {0} эВ + {0} эВ + {0} электронвольт - британи ӑшӑ единици - {0} британи ӑшӑ единици + Британи ӑшӑ виҫи + {0} БӐВ + {0} БӐВ + {0} Британи ӑшӑ виҫи - америка терм - {0} америка терм + АПШ термӗ + {0} АПШ термӗ + {0} АПШ термӗ + {0} АПШ термӗ - кĕренке-вăй - {0} кĕренке-вăй + фунт-вӑй + {0} фнтв + {0} фнтв + {0} фунт-вӑй - ньютон - {0} ньютон + ньютон + {0} Н + {0} Н + {0} ньютон - çĕр километрах киловатт-сехет - çĕр километрах {0} киловатт-сехет + киловатт-сехет/100 километр + {0} кВт⋅сех/100 км + {0} кВт⋅сех/100 км + {0} киловатт-сехет/100 километр - гигагерц - {0} гигагерц + гигагерц + {0} ГГц + {0} ГГц + {0} гигагерц - мегагерц - {0} мегагерц + мегагерц + {0} МГц + {0} МГц + {0} мегагерц - килогерц - {0} килогерц + килогерц + {0} кГц + {0} кГц + {0} килогерц - герц - {0} герц - - - эм - {0} эм + герц + {0} Гц + {0} Гц + {0} герц - пиксельсем - {0} пиксельсем + пиксель + {0} пкс + {0} пкс + {0} пиксель - мегапиксельсем - {0} Мпкс + мегапиксель + {0} Мпкс + {0} Мпкс + {0} мегапиксель - сантиметрпалан пиксель тачӑлӑхӗ - {0} сантиметрпалан пиксель тачӑлӑхӗ + пиксель/сантиметр + {0} пкс/см + {0} пкс/см + {0} пиксель/сантиметр - дюймпалан пиксель тачӑлӑхӗ - {0} дюймпалан пиксель тачӑлӑхӗ + пиксель/дюйм + {0} пкс/дюйм + {0} пкс/дюйм + {0} пиксель/дюйм - ҫӗр радиусӗ - {0} ҫӗр радиусӗ + Ҫӗр радиусӗ + {0} R⊕ + {0} R⊕ + {0} Ҫӗр радиусӗ - километр - {0} км - {0}/километр + километр + {0} км + {0} км + {0} километр + {0}/километр - метр - {0} метр - {0}/метр + метр + {0} м + {0} м + {0} метр + {0}/метр - дециметр - {0} дециметр + дециметр + {0} дм + {0} дм + {0} дециметр - сантиметр - {0} сантиметр - {0}/сантиметр + сантиметр + {0} см + {0} см + {0} сантиметр + {0}/сантиметр - миллиметр - {0} миллиметр + миллиметр + {0} мм + {0} мм + {0} миллиметр - микрометр - {0}микрометр + микрометр + {0} мкм + {0} мкм + {0} микрометр - нанометр - {0} нанометр + нанометр + {0} нм + {0} нм + {0} нанометр - пикометр - {0} пикометр + пикометр + {0} пм + {0} пм + {0} пикометр - миля - {0} миля - - - ярд - {0} ярд + миля + {0} ми + {0} ми + {0} миля - фут - {0} фут - {0}/фут - - - дюйм - {0} дюйм - {0}/дюйм + фут + {0} фт + {0} фт + {0} фут + {0}/фут - парçек - {0} парçек + парсек + {0} пк + {0} пк + {0} парсек - çуттăн çулĕ - {0} çуттăн çулĕ + ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ - астрономилле пĕрчĕ - {0} астрономилле пĕрчĕ + астрономи виҫи + {0} а. в. + {0} а. в. + {0} астрономи виҫи - фурлонгсем - {0} фурлонгсем + фурлонг + {0} фрл + {0} фрл + {0} фурлонг - тинӗс чалӑш - {0} тинӗс чалӑш + тинӗс хӑлаҫӗ + {0} тинӗс хӑл. + {0} тинӗс хӑл. + {0} тинӗс хӑлаҫӗ - тинӗс милли - {0} тинӗс милли + тинӗс мили + {0} тинӗс ми + {0} тинӗс ми + {0} тинӗс мили - скандинави милли - {0} скандинави милли + скандинави мили + {0} ск. ми + {0} ск. ми + {0} скандинави мили - типографи пункчӗ - {0} типографи пункчӗ + пункт + {0} пкт + {0} пкт + {0} пункт - хӗвел радиусӗ - {0} хӗвел радиусӗ + Хӗвел радиусӗ + {0} R☉ + {0} R☉ + {0} Хӗвел радиусӗ - люкс - {0} люкс + люкс + {0} лк + {0} лк + {0} люкс - кандела - {0} кандела + кандела + {0} кд + {0} кд + {0} кандела - люмен - {0} люмен + люмен + {0} лм + {0} лм + {0} люмен - хĕвел çутатаслăхĕ - {0} хĕвел çутатаслăхĕ + Хӗвел ҫутатаслӑхӗ + {0} L☉ + {0} L☉ + {0} Хӗвел ҫутатаслӑхӗ - метрикăлла тонна - {0} метрикăлла тонна + {0} т + {0} т + {0} т - килограмм - {0} килограмм - {0}/килограмм + килограмм + {0} кг + {0} кг + {0} килограмм + {0}/килограмм - грамм - {0} грамм - {0}/грамм + грамм + {0} г + {0} г + {0} грамм + {0}/грамм - миллиграмм - {0} миллиграмм + миллиграмм + {0} мг + {0} мг + {0} миллиграмм - микрограмм - {0} микрограмм + микрограмм + {0} мкг + {0} мкг + {0} микрограмм - америка тонна - {0} америка тонна + америкӑлла тонна + {0} ам. тонна + {0} ам. тонна + {0} америкӑлла тонна - стоун - {0} стоун + {0} стн + {0} стн + {0} стн - кĕренке - {0} кĕренке - {0}/кĕренке - - - унци - {0} унци - {0}/унци + фунт + {0} фнт + {0} фнт + {0} фунт + {0}/фунт - трой унци - {0} трой унци + троя унцийӗ + {0} тр. унц. + {0} тр. унц. + {0} троя унцийӗ - метрикăлла карат - {0} метрикăлла карат + {0} кар + {0} кар + {0} кар - массăн атомла пĕрчи - {0} массăн атомла пĕрчи + {0} Да + {0} Да + {0} Да - Ҫӗр масси - {0} Ҫӗр масси + {0} M⊕ + {0} M⊕ + {0} M⊕ - Хӗвел масси - {0} Хӗвел масси - - - гран - {0} гран + {0} M☉ + {0} M☉ + {0} M☉ - гигаватт - {0} гигаватт + гигаватт + {0} ГВт + {0} ГВт + {0} гигаватт - мегаватт - {0} мегаватт + мегаватт + {0} МВт + {0} МВт + {0} мегаватт - киловатт - {0} киловатт + киловатт + {0} кВт + {0} кВт + {0} киловатт - ватт - {0} ватт + ватт + {0} Вт + {0} Вт + {0} ватт - милливатт - {0} милливатт + милливатт + {0} мВт + {0} мВт + {0} милливатт - лаша вӑйӗ - {0} лаша вӑйӗ + лаша вӑйӗ + {0} л. в. + {0} л. в. + {0} лаша вӑйӗ - чĕркĕмĕл юпи миллиметр - чĕркĕмĕл юпи {0} миллиметр + миллиметр чĕр кĕмĕл юпипе + {0} мм ч. к. ю. + {0} мм ч. к. ю. + {0} миллиметр чĕр кĕмĕл юпипе + + + чĕр кĕмĕл юпипе + {0} ч. к. ю. + {0} ч. к. ю. + {0} чĕр кĕмĕл юпипе - тӑваткал дюйм кӗренке - тӑваткал дюйм {0} кӗренке + фунт-вӑй/тӑваткал дюйм + {0} фнтв/дюйм² + {0} фнтв/дюйм² + {0} фунт-вӑй/тӑваткал дюйм - чĕркĕмĕл юпи дюйм - чĕркĕмĕл юпи {0} дюйм - - - бар - {0} бар + дюйм чĕр кĕмĕл юпипе + {0} дюйм ч. к. ю. + {0} дюйм ч. к. ю. + {0} дюйм чĕр кĕмĕл юпипе - миллибар - {0} миллибар + миллибар + {0} мбар + {0} мбар + {0} миллибар - физикăлла атмосфера - {0} физикăлла атмосфера + {0} атм + {0} атм + {0} атм - паскаль - {0} паскаль + паскаль + {0} Па + {0} Па + {0} паскаль - гектопаскаль - {0} гектопаскаль + гектопаскаль + {0} гПа + {0} гПа + {0} гектопаскаль - килопаскаль - {0} килопаскаль + килопаскаль + {0} кПа + {0} кПа + {0} килопаскаль - мегапаскаль - {0} мегапаскаль + мегапаскаль + {0} МПа + {0} МПа + {0} мегапаскаль - сехетре километр - сехетре {0} километр + километр/сехет + {0} км/сех + {0} км/сех + {0} километр/сехет - ҫеккунтра метр - ҫеккунтра {0} метр + метр/ҫеккунт + {0} м/ҫ + {0} м/ҫ + {0} метр/ҫеккунт - сехетре миля - сехетре {0} миля + миля/сехет + {0} ми/сех + {0} ми/сех + {0} миля/сехет - тĕвĕ - {0} тĕвĕ + узел + {0} уз + {0} уз + {0} узел - Бофорт шкали ҫинчи балл - {0} Бофорт шкали ҫинчи балл + Бофорт балӗ + {0} Бфт + {0} Бфт + {0} Бофорт балӗ - Цельсий градусĕ - {0} Цельсий градусĕ + Цельсий градусĕ + {0}°C + {0}°C + {0} Цельсий градусĕ - Фаренгейт градусĕ - {0} Фаренгейт градусĕ + Фаренгейт градусĕ + {0}°F + {0}°F + {0} Фаренгейт градусĕ - Кельвин - {0} Кельвин + кельвин + {0} К + {0} К + {0} кельвин - кĕренке-фут - {0} кĕренке-фут + фунт-вӑй-фут + {0} фнтв⋅фт + {0} фнтв⋅фт + {0} фунт-вӑй-фут - ньютон-метр - {0} ньютон-метр + ньютон-метр + {0} Н⋅м + {0} Н⋅м + {0} ньютон-метр - кубла километр - {0} кубла километр + куб километр + {0} км³ + {0} км³ + {0} куб километр - кубла метр - {0} кубла метр - {0}/кубла метр + куб метр + {0} м³ + {0} м³ + {0} куб метр + {0}/куб метр - кубла сантиметр - {0} кубла сантиметр - {0}/кубла сантиметр + куб сантиметр + {0} см³ + {0} см³ + {0} куб сантиметр + {0}/куб сантиметр - кубла милли - {0} кубла милли + куб миля + {0} ми³ + {0} ми³ + {0} куб миля - кубла ярд - {0} кубла ярд + куб ярд + {0} ярд³ + {0} ярд³ + {0} куб ярд - кубла фут - {0} кубла фут + куб фут + {0} фт³ + {0} фт³ + {0} куб фут - кубла дюйм - {0} кубла дюйм + куб дюйм + {0} дюйм³ + {0} дюйм³ + {0} куб дюйм - мегалитр - {0} мегалитр + {0} Мл + {0} Мл + {0} Мл - гектолитр - {0} гектолитр + гектолитр + {0} гл + {0} гл + {0} гектолитр - литр - {0} литр - {0}/литр + литр + {0} л + {0} л + {0} литр + {0}/литр - децилитр - {0} децилитр + децилитр + {0} дл + {0} дл + {0} децилитр - сантилитр - {0} сантилитр + сантилитр + {0} сл + {0} сл + {0} сантилитр - миллилитр - {0} миллилитр + миллилитр + {0} мл + {0} мл + {0} миллилитр - пинт-метрлӑ - {0} пинт-метрлӑ + метрла пинт + {0} мпт + {0} мпт + {0} метрла пинт - курка-метрлӑ - {0} курка-метрлӑ + метрла курка + {0} м. курка + {0} м. курка + {0} метрла курка + + + метрла шӗвӗ унци + {0} м. шӗвӗ унци + {0} м. шӗвӗ унци + {0} метрла шӗвӗ унци - акр-фут - {0} акр-фут + {0} акр-фт + {0} акр-фт + {0} акр-фт - бушел - {0} бушел + бушель + {0} бушель + {0} бушель + {0} бушель - галлон - {0} галлон - {0}/галлон + америкӑлла галлон + {0} ам. гал. + {0} ам. гал. + {0} америкӑлла галлон + {0}/америкӑлла галлон - импери галлон - {0} импери галлон - {0}/импери галлон + империлле галлон + {0} имп. гал. + {0} имп. гал. + {0} империлле галлон + {0}/империлле галлон - кварт - {0} кварт + америкӑлла кварт + {0} ам. кварт + {0} ам. кварт + {0} америкӑлла кварт - пинт - {0} пинт + америкӑлла пинт + {0} ам. пинт + {0} ам. пинт + {0} америкӑлла пинт + + + империлле пинт + {0} имп. пинт + {0} имп. пинт + {0} империлле пинт - чашӑк - {0} чашӑк + америкӑлла курка + {0} ам. курка + {0} ам. курка + {0} америкӑлла курка + + + империлле курка + {0} имп. курка + {0} имп. курка + {0} империлле курка - шӗвӗ унци - {0} шӗвӗ унци + америкӑлла шӗвӗ унци + {0} ам. шӗвӗ унци + {0} ам. шӗвӗ унци + {0} америкӑлла шӗвӗ унци - импери шӗвӗ унци - {0} импери шӗвӗ унци + империлле шӗвӗ унци + {0} имп. шӗвӗ унц. + {0} имп. шӗвӗ унц. + {0} империлле шӗвӗ унци - апат кашӑкӗ - {0} апат кашӑкӗ + {0} апат каш. + {0} апат каш. + {0} апат каш. - чей кашӑкӗ - {0} чей кашӑкӗ + {0} чей каш. + {0} чей каш. + {0} чей каш. - баррель - {0} баррель + баррель + {0} барр. + {0} барр. + {0} баррель - пылак апат кашӑкӗ - {0} пылак апат кашӑкӗ + пылак апат кашӑкӗ + {0} пыл. апат каш. + {0} пыл. апат каш. + {0} пылак апат кашӑкӗ - импери пылак апат кашӑкӗ - {0} импери пылак апат кашӑкӗ + империлле пылак апат кашӑкӗ + {0} имп. пыл. апат каш. + {0} имп. пыл. апат каш. + {0} империлле пылак апат кашӑкӗ - тумлам - {0} тумлам + {0} тумл. + {0} тумл. + {0} тумл. - шĕвĕ драхма - {0} шĕвĕ драхма - - - чӗркке - {0} чӗркке + {0} шӗвӗ др. + {0} шӗвӗ др. + {0} шӗвӗ драхма - чĕптĕм - {0} чĕптĕм + {0} чӗпт. + {0} чӗпт. + {0} чӗптӗм - импери кварт - {0} импери кварт + империлле кварт + {0} имп. кварт + {0} имп. кварт + {0} империлле кварт + + + стерадиан + {0} ср + {0} ср + {0} стерадиан + + + катал + {0} кат + {0} кат + {0} катал + + + кулон + {0} Кл + {0} Кл + {0} кулон + + + фарад + {0} Ф + {0} Ф + {0} фарад + + + генри + {0} Гн + {0} Гн + {0} генри + + + сименс + {0} См + {0} См + {0} сименс + + + калори-IT + {0} кал-IT + {0} кал-IT + {0} калори-IT + + + Британи ӑшӑ виҫи-IT + {0} БӐВ-IT + {0} БӐВ-IT + {0} Британи ӑшӑ виҫи-IT + + + беккерель + {0} Бк + {0} Бк + {0} беккерель + + + зиверт + {0} Зв + {0} Зв + {0} зиверт + + + грей + {0} Гр + {0} Гр + {0} грей + + + килограмм-вӑй + {0} кгв + {0} кгв + {0} килограмм-вӑй + + + род + {0} род + {0} род + {0} род + + + чейн + {0} чейн + {0} чейн + {0} чейн + + + тесла + {0} Тл + {0} Тл + {0} тесла + + + вебер + {0} Вб + {0} Вб + {0} вебер + + + Ранкин градусӗ + {0} °R + {0} °R + {0} Ранкин градусӗ + + + икӗ эрнелӗх + {0} икӗ эрн. + {0} икӗ эрн. + {0} икӗ эрнелӗх + + + слаг + {0} слаг + {0} слаг + {0} слаг + + + бензин танлӑхӗпе + {0} бенз. тан. + {0} бенз. тан. + {0} бензин танлӑхӗпе + + + рин + {0} рин + {0} рин + {0} рин + + + сун + {0} сун + {0} сун + {0} сун + + + сяку + {0} сяку + {0} сяку + {0} сяку + + + кудзирадзяку + {0} кудзирадзяку + {0} кудзирадзяку + {0} кудзирадзяку + + + кэн + {0} кэн + {0} кэн + {0} кэн + + + дзё + {0} дзё + {0} дзё + {0} дзё + + + ри + {0} ри + {0} ри + {0} ри + + + бу + {0} бу + {0} бу + {0} бу + + + сэ + {0} сэ + {0} сэ + {0} сэ + + + тё + {0} тё + {0} тё + {0} тё + + + косадзи + {0} косадзи + {0} косадзи + {0} косадзи + + + осадзи + {0} осадзи + {0} осадзи + {0} осадзи + + + каппу + {0} каппу + {0} каппу + {0} каппу + + + секи + {0} секи + {0} секи + {0} секи + + + сай + {0} сай + {0} сай + {0} сай + + + то + {0} то + {0} то + {0} то + + + коку + {0} коку + {0} коку + {0} коку - ҫутӑ хӑвӑртлӑхӗ - {0} ҫутӑ хӑвӑртлӑхӗ + ҫутӑ + {0} ҫутӑ + {0} ҫутӑ + {0} ҫутӑ - - миллиардмĕш пайĕ - {0} миллиардмĕш пайĕ + + фун + {0} фун + {0} фун + {0} фун + + + миллиардмĕш пайĕ + {0} млрд⁻¹ + {0} млрд⁻¹ + {0} миллиардмĕш пайĕ - ҫӗрсем - {0} ҫӗрсем - {0}/ҫӗр + каҫ + {0} каҫ + {0} каҫ + {0} каҫ + {0}/каҫ - {0} хӗвелтухӑҫ тӑрӑхӗ - {0} ҫурҫӗр тӑрӑхӗ - {0} кӑнтӑр тӑрӑхӗ - {0} анăҫ тӑрӑхӗ + ен + тухӑҫ еннелле {0} + ҫур ҫӗр еннелле {0} + кӑнтӑр еннелле {0} + анӑҫ еннелле {0} - д{0} + д{0} - с{0} + с{0} - м{0} + м{0} - мк{0} + мк{0} - н{0} + н{0} - п{0} + п{0} - ф{0} + ф{0} - а{0} + а{0} - з{0} + з{0} - и{0} + и{0} - р{0} + р{0} - кв{0} + кв{0} - да{0} + да{0} - г{0} + г{0} - к{0} + к{0} - М{0} + М{0} - Г{0} + Г{0} - Т{0} + Т{0} - П{0} + П{0} - Э{0} + Э{0} - З{0} + З{0} - И{0} + И{0} - Р{0} + Р{0} - Кв{0} + Кв{0} - Ки{0} + Ки{0} - Ми{0} + Ми{0} - Ги{0} + Ги{0} - Ти{0} + Ти{0} - Пи{0} + Пи{0} - Эи{0} + Эи{0} - Зи{0} + Зи{0} - Йи{0} + Йи{0} - g - {0}g + g + {0} g + {0} g + {0} g - м/ҫ² - {0} м/ҫ² + м/ҫ² + {0} м/ҫ² + {0} м/ҫ² + {0} м/ҫ² - çавра - {0} çавра + çавра + {0} çавра + {0} çавра + {0} çавра - радиан - {0} радиан + рад + {0} рад + {0} рад + {0} рад - градус - {0} градус + градус + {0}° + {0}° + {0}° - минут - {0} минут + + {0}′ + {0}′ + {0}′ - çеккунт - {0} çеккунт + + {0}″ + {0}″ + {0}″ - км² - {0} км² - {0}/км² + км² + {0} км² + {0} км² + {0} км² + {0}/км² - га - {0} га + га + {0} га + {0} га + {0} га - м² - {0} м² - {0}/м² + м² + {0} м² + {0} м² + {0} м² + {0}/м² - см² - {0} см² - {0}/см² + см² + {0} см² + {0} см² + {0} см² + {0}/см² - ми² - {0} ми² - {0}/ми² + ми² + {0} ми² + {0} ми² + {0} ми² + {0}/ми² - акр - {0} акр + акр + {0} акр + {0} акр + {0} акр - ярд² - {0} ярд² + ярд² + {0} ярд² + {0} ярд² + {0} ярд² - фт² - {0} фт² + фт² + {0} фт² + {0} фт² + {0} фт² - дюйм² - {0} дюйм² - {0}/дюйм² + дюйм² + {0} дюйм² + {0} дюйм² + {0} дюйм² + {0}/дюйм² - дунам - {0} дунам + дунам + {0} дунам + {0} дунам + {0} дунам - карат - {0} карат + кар + {0} кар + {0} кар + {0} кар - мг/дл - {0} мг/дл + мг/дл + {0} мг/дл + {0} мг/дл + {0} мг/дл - ммоль/л - {0} ммоль/л + ммоль/л + {0} ммоль/л + {0} ммоль/л + {0} ммоль/л - объект - {0} объект + япала + {0} япала + {0} япала + {0} япала + + + пай + {0} пай + {0} пай + {0} пай + + + млн⁻¹ + {0} млн⁻¹ + {0} млн⁻¹ + {0} млн⁻¹ + + + {0} % + {0} % + {0} % + + + {0} ‰ + {0} ‰ + {0} ‰ + + + {0} ‱ + {0} ‱ + {0} ‱ - моль - {0} моль + моль + {0} моль + {0} моль + {0} моль + + + Глк + {0} Глк + {0} Глк + {0} Глк - л/км - {0} л/км + л/км + {0} л/км + {0} л/км + {0} л/км - л/100 км - {0} л/100 км + л/100 км + {0} л/100 км + {0} л/100 км + {0} л/100 км - ми/гал - {0} ми/гал + ми/гал + {0} ми/гал + {0} ми/гал + {0} ми/гал - мили/имп. гал - {0} ми/имп. гал + ми/имп. гал + {0} ми/имп. гал + {0} ми/имп. гал + {0} ми/имп. гал - Пбайт - {0} Пбайт + Пбайт + {0} Пбайт + {0} Пбайт + {0} Пбайт - Тбайт - {0} Тбайт + Тбайт + {0} Тбайт + {0} Тбайт + {0} Тбайт - Тбит - {0} Тбит + Тбит + {0} Тбит + {0} Тбит + {0} Тбит - Гбайт - {0} Гбайт + Гбайт + {0} Гбайт + {0} Гбайт + {0} Гбайт - Гбит - {0} Гбит + Гбит + {0} Гбит + {0} Гбит + {0} Гбит - Мбайт - {0} Мбайт + Мбайт + {0} Мбайт + {0} Мбайт + {0} Мбайт - Мбит - {0} Мбит + Мбит + {0} Мбит + {0} Мбит + {0} Мбит - Кбайт - {0} Кбайт + кбайт + {0} кбайт + {0} кбайт + {0} кбайт - кбит - {0} кбит + кбит + {0} кбит + {0} кбит + {0} кбит - байт - {0} байт + байт + {0} байт + {0} байт + {0} байт - бит - {0} бит + бит + {0} бит + {0} бит + {0} бит - ӗмӗр - {0} ӗмӗр + ӗмӗр + {0} ӗмӗр + {0} ӗмӗр + {0} ӗмӗр - вунҫул - {0} вунҫул + вунӑ ҫ. + {0} вунӑ ҫ. + {0} вунӑ ҫ. + {0} вунӑ ҫ. - ҫулсем - {0} ҫулсем - {0}/ҫул + ҫул + {0} ҫул + {0} ҫул + {0} ҫул + {0}/ҫул - чӗрӗк - {0} чӗрӗк - {0}/чӗрӗк + чӗр. + {0} чӗр. + {0} чӗр. + {0} чӗр. + {0}/чӗр. - уйӑх - {0} уйӑх - {0}/уйӑх + уйӑх + {0} уйӑх + {0} уйӑх + {0} уйӑх + {0}/уйӑх - эрне - {0} эрне - {0}/эрне + эрне + {0} эрне + {0} эрне + {0} эрне + {0}/эрне - кун - {0} кун - {0}/кун + кун + {0} кун + {0} кун + {0} кун + {0}/кун - сехет - {0} сехет - {0}/сехет + сех + {0} сех + {0} сех + {0} сех + {0}/сех - мин - {0} мин - {0}/мин + мин + {0} мин + {0} мин + {0} мин + {0}/мин - ҫ - {0} ҫ - {0}/ҫ + ҫ + {0} ҫ + {0} ҫ + {0} ҫ + {0}/ҫ - мҫ - {0} мҫ + мҫ + {0} мҫ + {0} мҫ + {0} мҫ - мкҫ - {0} мкҫ + мкҫ + {0} мкҫ + {0} мкҫ + {0} мкҫ - нҫ - {0} нҫ + нҫ + {0} нҫ + {0} нҫ + {0} нҫ - А - {0} А + А + {0} А + {0} А + {0} А - мА - {0} мА + мА + {0} мА + {0} мА + {0} мА - Ом - {0} Ом + Ом + {0} Ом + {0} Ом + {0} Ом - В - {0} В + В + {0} В + {0} В + {0} В - ккал - {0} ккал + ккал + {0} ккал + {0} ккал + {0} ккал - кал - {0} кал + кал + {0} кал + {0} кал + {0} кал - кДж - {0} кДж + кДж + {0} кДж + {0} кДж + {0} кДж - Дж - {0} Дж + Дж + {0} Дж + {0} Дж + {0} Дж - КВт⋅сехет - {0} КВт⋅сехет + кВт⋅сех + {0} кВт⋅сех + {0} кВт⋅сех + {0} кВт⋅сех - эВ - {0} эВ + эВ + {0} эВ + {0} эВ + {0} эВ - БӐЕ - {0} БӐЕ + БӐВ + {0} БӐВ + {0} БӐВ + {0} БӐВ - АПШ терм - {0} АПШ терм + АПШ термӗ + {0} АПШ термӗ + {0} АПШ термӗ + {0} АПШ термӗ - кĕренке-вăй - {0} кĕренке-вăй + фнтв + {0} фнтв + {0} фнтв + {0} фнтв - Н - {0} Н + Н + {0} Н + {0} Н + {0} Н - кВт⋅ч/100 км - {0} кВт⋅ч/100 км + кВт⋅сех/100 км + {0} кВт⋅сех/100 км + {0} кВт⋅сех/100 км + {0} кВт⋅сех/100 км - ГГц - {0} ГГц + ГГц + {0} ГГц + {0} ГГц + {0} ГГц - МГц - {0} МГц + МГц + {0} МГц + {0} МГц + {0} МГц - кГц - {0} кГц + кГц + {0} кГц + {0} кГц + {0} кГц - Гц - {0} Гц + Гц + {0} Гц + {0} Гц + {0} Гц - эм - {0} эм + эм + {0} эм + {0} эм + {0} эм - пиксельсем - {0} пкс + пкс + {0} пкс + {0} пкс + {0} пкс - мегапиксельсем - {0} Мпкс + Мпкс + {0} Мпкс + {0} Мпкс + {0} Мпкс - пкс/см - {0} пкс/см + пкс/см + {0} пкс/см + {0} пкс/см + {0} пкс/см - пкс/дюйм - {0} пкс/дюйм + пкс/дюйм + {0} пкс/дюйм + {0} пкс/дюйм + {0} пкс/дюйм - ҫӗр радиусӗ - {0} ҫӗр радиусӗ + {0} R⊕ + {0} R⊕ + {0} R⊕ - км - {0} км - {0}/км + км + {0} км + {0} км + {0} км + {0}/км - м - {0} м - {0}/м + м + {0} м + {0} м + {0} м + {0}/м - дм - {0} дм + дм + {0} дм + {0} дм + {0} дм - см - {0} см - {0}/см + см + {0} см + {0} см + {0} см + {0}/см - мм - {0} мм + мм + {0} мм + {0} мм + {0} мм - мкм - {0} мкм + мкм + {0} мкм + {0} мкм + {0} мкм - нм - {0} нм + нм + {0} нм + {0} нм + {0} нм - пм - {0} пм + пм + {0} пм + {0} пм + {0} пм - ми - {0} ми + ми + {0} ми + {0} ми + {0} ми - ярд - {0} ярд + ярд + {0} ярд + {0} ярд + {0} ярд - фт - {0} фт - {0}/фт + фт + {0} фт + {0} фт + {0} фт + {0}/фт - дюйм - {0} дюйм - {0}/дюйм + дюйм + {0} дюйм + {0} дюйм + {0} дюйм + {0}/дюйм - пк - {0} пк + пк + {0} пк + {0} пк + {0} пк - çуттăн çулĕ - {0} çуттăн çулĕ + ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ - а.п. - {0} а.п. + а. в. + {0} а. в. + {0} а. в. + {0} а. в. - фурлонгсем - {0} фрл + фрл + {0} фрл + {0} фрл + {0} фрл - тинӗс чалӑш - {0} тинӗс чалӑш + тинӗс хӑл. + {0} тинӗс хӑл. + {0} тинӗс хӑл. + {0} тинӗс хӑл. - тнс.ми - {0} тинӗс милли + тинӗс ми + {0} тинӗс ми + {0} тинӗс ми + {0} тинӗс ми - ск.ми - {0} ск.ми + ск. ми + {0} ск. ми + {0} ск. ми + {0} ск. ми - пкт - {0} пкт + пкт + {0} пкт + {0} пкт + {0} пкт - хӗвел радиусӗ - {0} хӗвел радиусӗ + {0} R☉ + {0} R☉ + {0} R☉ - лк - {0} лк + лк + {0} лк + {0} лк + {0} лк - кд - {0} кд + кд + {0} кд + {0} кд + {0} кд - лм - {0} лм + лм + {0} лм + {0} лм + {0} лм - тонна - {0} тонна + т + {0} т + {0} т + {0} т - кг - {0} кг - {0}/кг + кг + {0} кг + {0} кг + {0} кг + {0}/кг - г - {0} г - {0}/г + г + {0} г + {0} г + {0} г + {0}/г - мг - {0} мг + мг + {0} мг + {0} мг + {0} мг - мкг - {0} мкг + мкг + {0} мкг + {0} мкг + {0} мкг - амер. тонна - {0} амер. тонна + ам. тонна + {0} ам. тонна + {0} ам. тонна + {0} ам. тонна - стоун - {0} стоун + стн + {0} стн + {0} стн + {0} стн - кĕренке - {0} кĕренке - {0}/кĕренке + фнт + {0} фнт + {0} фнт + {0} фнт + {0}/фнт - унци - {0} унци - {0}/унци + унци + {0} унци + {0} унци + {0} унци + {0}/унци - трой унци - {0} трой унци + тр. унцийӗ + {0} тр. унц. + {0} тр. унц. + {0} тр. унц. - карат - {0} карат + кар + {0} кар + {0} кар + {0} кар - дальтон - {0} дальтон + Да + {0} Да + {0} Да + {0} Да - Ҫӗр масси - {0} Ҫӗр масси + {0} M⊕ + {0} M⊕ + {0} M⊕ - Хӗвел масси - {0} Хӗвел масси + {0} M☉ + {0} M☉ + {0} M☉ - гран - {0} гран + гран + {0} гран + {0} гран + {0} гран - ГВт - {0} ГВт + ГВт + {0} ГВт + {0} ГВт + {0} ГВт - МВт - {0} МВт + МВт + {0} МВт + {0} МВт + {0} МВт - КВт - {0} КВт + кВт + {0} кВт + {0} кВт + {0} кВт - Вт - {0} Вт + Вт + {0} Вт + {0} Вт + {0} Вт - мВт - {0} мВт + мВт + {0} мВт + {0} мВт + {0} мВт - л.в. - {0} л.в. + л. в. + {0} л. в. + {0} л. в. + {0} л. в. - чĕркĕмĕл юпи мм - чĕркĕмĕл юпи {0} мм + мм ч. к. ю. + {0} мм ч. к. ю. + {0} мм ч. к. ю. + {0} мм ч. к. ю. + + + ч. к. ю. + {0} ч. к. ю. + {0} ч. к. ю. + {0} ч. к. ю. - дюйм² кӗренке - дюйм² {0} кӗренке + фнтв/дюйм² + {0} фнтв/дюйм² + {0} фнтв/дюйм² + {0} фнтв/дюйм² - чĕркĕмĕл юпи дюйм - чĕркĕмĕл юпи {0} дюйм + дюйм ч. к. ю. + {0} дюйм ч. к. ю. + {0} дюйм ч. к. ю. + {0} дюйм ч. к. ю. - бар - {0} бар + бар + {0} бар + {0} бар + {0} бар - мбар - {0} мбар + мбар + {0} мбар + {0} мбар + {0} мбар - атмосфера - {0} атмосфера + атм + {0} атм + {0} атм + {0} атм - Па - {0} Па + Па + {0} Па + {0} Па + {0} Па - гПа - {0} гПа + гПа + {0} гПа + {0} гПа + {0} гПа - кПа - {0} кПа + кПа + {0} кПа + {0} кПа + {0} кПа - МПа - {0} МПа + МПа + {0} МПа + {0} МПа + {0} МПа - км/сехет - {0} км/сехет + км/сех + {0} км/сех + {0} км/сех + {0} км/сех - м/ҫ - {0} м/ҫ + м/ҫ + {0} м/ҫ + {0} м/ҫ + {0} м/ҫ - ми/сехет - {0} ми/сехет + ми/сех + {0} ми/сех + {0} ми/сех + {0} ми/сех - тĕвĕ - {0} тĕвĕ + уз + {0} уз + {0} уз + {0} уз - Бофорт балл - {0} Бофорт балл + Бфт + {0} Бфт + {0} Бфт + {0} Бфт - К - {0} К + К + {0} К + {0} К + {0} К - кĕренке-фут - {0} кĕренке-фут + фнтв⋅фт + {0} фнтв⋅фт + {0} фнтв⋅фт + {0} фнтв⋅фт - Н⋅м - {0} Н⋅м + Н⋅м + {0} Н⋅м + {0} Н⋅м + {0} Н⋅м - км³ - {0} км³ + км³ + {0} км³ + {0} км³ + {0} км³ - м³ - {0} м³ - {0}/м³ + м³ + {0} м³ + {0} м³ + {0} м³ + {0}/м³ - см³ - {0} см³ - {0}/см³ + см³ + {0} см³ + {0} см³ + {0} см³ + {0}/см³ - ми³ - {0} ми³ + ми³ + {0} ми³ + {0} ми³ + {0} ми³ - ярд³ - {0} ярд³ + ярд³ + {0} ярд³ + {0} ярд³ + {0} ярд³ - фт³ - {0} фт³ + фт³ + {0} фт³ + {0} фт³ + {0} фт³ - дюйм³ - {0} дюйм³ + дюйм³ + {0} дюйм³ + {0} дюйм³ + {0} дюйм³ - мегалитр - {0} мегалитр + Мл + {0} Мл + {0} Мл + {0} Мл - гл - {0} гл + гл + {0} гл + {0} гл + {0} гл - л - {0} л - {0}/л + л + {0} л + {0} л + {0} л + {0}/л - дл - {0} дл + дл + {0} дл + {0} дл + {0} дл - сл - {0} сл + сл + {0} сл + {0} сл + {0} сл - мл - {0} мл + мл + {0} мл + {0} мл + {0} мл - мпт - {0} мпт + мпт + {0} мпт + {0} мпт + {0} мпт - курка-метрлӑ - {0} курка-метрлӑ + м. курка + {0} м. курка + {0} м. курка + {0} м. курка + + + м. шӗвӗ унци + {0} м. шӗвӗ унци + {0} м. шӗвӗ унци + {0} м. шӗвӗ унци - акр-фут - {0} акр-фут + акр-фт + {0} акр-фт + {0} акр-фт + {0} акр-фт - буш. - {0} буш. + бушель + {0} бушель + {0} бушель + {0} бушель - гал. - {0} гал. - {0}/гал. + ам. гал. + {0} ам. гал. + {0} ам. гал. + {0} ам. гал. + {0}/ам. гал. - импери галлон - {0} импери галлон - {0}/импери галлон + имп. гал. + {0} имп. гал. + {0} имп. гал. + {0} имп. гал. + {0}/имп. гал. - кварт - {0} кварт + ам. кварт + {0} ам. кварт + {0} ам. кварт + {0} ам. кварт - пинт - {0} пинт + ам. пинт + {0} ам. пинт + {0} ам. пинт + {0} ам. пинт + + + имп. пинт + {0} имп. пинт + {0} имп. пинт + {0} имп. пинт - чашӑк - {0} чашӑк + ам. курка + {0} ам. курка + {0} ам. курка + {0} ам. курка + + + имп. курка + {0} имп. курка + {0} имп. курка + {0} имп. курка - шӗвӗ унци - {0} шӗвӗ унци + ам. шӗвӗ унци + {0} ам. шӗвӗ унци + {0} ам. шӗвӗ унци + {0} ам. шӗвӗ унци - импери шӗвӗ унци - {0} импери шӗвӗ унци + имп. шӗвӗ унц. + {0} имп. шӗвӗ унц. + {0} имп. шӗвӗ унц. + {0} имп. шӗвӗ унц. - апат кашӑкӗ - {0} апат кашӑкӗ + апат каш. + {0} апат каш. + {0} апат каш. + {0} апат каш. - чей кашӑкӗ - {0} чей кашӑкӗ + чей каш. + {0} чей каш. + {0} чей каш. + {0} чей каш. - барр. - {0} барр. + барр. + {0} барр. + {0} барр. + {0} барр. - плк.апат кшк. - {0} плк.апат кшк. + пыл. апат каш. + {0} пыл. апат каш. + {0} пыл. апат каш. + {0} пыл. апат каш. - имп. пылак апат кашӑкӗ - {0} имп.пылак апат кашӑкӗ + имп. пыл. апат каш. + {0} имп. пыл. апат каш. + {0} имп. пыл. апат каш. + {0} имп. пыл. апат каш. - тумлам - {0} тумлам + тумл. + {0} тумл. + {0} тумл. + {0} тумл. - шĕвĕ драхма - {0} шĕвĕ драхма + шӗвӗ др. + {0} шӗвӗ др. + {0} шӗвӗ др. + {0} шӗвӗ др. - чӗркке - {0} чӗркке + чӗркке + {0} чӗркке + {0} чӗркке + {0} чӗркке - чĕптĕм - {0} чĕптĕм + чӗпт. + {0} чӗпт. + {0} чӗпт. + {0} чӗпт. - импери кварт - {0} импери кварт + имп. кварт + {0} имп. кварт + {0} имп. кварт + {0} имп. кварт + + + ср + {0} ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + {0} Ф + + + Гн + {0} Гн + {0} Гн + {0} Гн + + + См + {0} См + {0} См + {0} См + + + кал-IT + {0} кал-IT + {0} кал-IT + {0} кал-IT + + + БӐВ-IT + {0} БӐВ-IT + {0} БӐВ-IT + {0} БӐВ-IT + + + Бк + {0} Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + {0} Гр + + + кгв + {0} кгв + {0} кгв + {0} кгв + + + род + {0} род + {0} род + {0} род + + + чейн + {0} чейн + {0} чейн + {0} чейн + + + Тл + {0} Тл + {0} Тл + {0} Тл + + + Вб + {0} Вб + {0} Вб + {0} Вб + + + {0} °R + {0} °R + {0} °R + + + икӗ эрн. + {0} икӗ эрн. + {0} икӗ эрн. + {0} икӗ эрн. + + + слаг + {0} слаг + {0} слаг + {0} слаг + + + бенз. тан. + {0} бенз. тан. + {0} бенз. тан. + {0} бенз. тан. + + + рин + {0} рин + {0} рин + {0} рин + + + сун + {0} сун + {0} сун + {0} сун + + + сяку + {0} сяку + {0} сяку + {0} сяку + + + кудзирадзяку + {0} кудзирадзяку + {0} кудзирадзяку + {0} кудзирадзяку + + + кэн + {0} кэн + {0} кэн + {0} кэн + + + дзё + {0} дзё + {0} дзё + {0} дзё + + + ри + {0} ри + {0} ри + {0} ри + + + бу + {0} бу + {0} бу + {0} бу + + + сэ + {0} сэ + {0} сэ + {0} сэ + + + тё + {0} тё + {0} тё + {0} тё + + + косадзи + {0} косадзи + {0} косадзи + {0} косадзи + + + осадзи + {0} осадзи + {0} осадзи + {0} осадзи + + + каппу + {0} каппу + {0} каппу + {0} каппу + + + секи + {0} секи + {0} секи + {0} секи + + + сай + {0} сай + {0} сай + {0} сай + + + то + {0} то + {0} то + {0} то + + + коку + {0} коку + {0} коку + {0} коку - ҫутӑ хӑвӑрт - {0} ҫутӑ хӑвӑрт + ҫутӑ + {0} ҫутӑ + {0} ҫутӑ + {0} ҫутӑ + + + фун + {0} фун + {0} фун + {0} фун + + + млрд⁻¹ + {0} млрд⁻¹ + {0} млрд⁻¹ + {0} млрд⁻¹ - ҫӗрсем - {0} ҫӗрсем - {0}/ҫӗр + каҫ + {0} каҫ + {0} каҫ + {0} каҫ + {0}/каҫ - енӗ - {0} х. т. - {0} ҫ. т. - {0} к. т. - {0} а. т. + ен + т. е. {0} + ҫ. е. {0} + к. е. {0} + а. е. {0} - - д{0} - - - с{0} - - - м{0} - - - мк{0} - - - н{0} - - - п{0} - - - ф{0} - - - а{0} - - - з{0} - - - и{0} - - - р{0} - - - кв{0} - - - да{0} - - - г{0} - - - к{0} - - - М{0} - - - Г{0} - - - Т{0} - - - П{0} - - - Э{0} - - - З{0} - - - И{0} - - - Р{0} - - - Кв{0} - - - Ки{0} - - - Ми{0} - - - Ги{0} - - - Ти{0} - - - Пи{0} - - - Эи{0} - - - Зи{0} - - - Йи{0} - - g - {0}g - - - м/ҫ² - {0} м/ҫ² - - - çавра - {0} çавра + {0} g + {0} g + {0} g - рад - {0} рад + рад + {0} рад + {0} рад + {0} рад - градус + {0}° + {0}° + {0}° - минут - {0} минут + + {0}′ + {0}′ + {0}′ - çеккунт - {0} çеккунт - - - км² - {0} км² - {0}/км² - - - га - {0} га - - - м² - {0} м² - {0}/м² - - - см² - {0} см² - {0}/см² - - - ми² - {0} ми² - {0}/ми² - - - акр - {0} акр - - - ярд² - {0} ярд² - - - фт² - {0} фт² - - - дюйм² - {0} дюйм² - {0}/дюйм² - - - дунам - {0} дунам + + {0}″ + {0}″ + {0}″ - кар - {0} кар - - - мг/дл - {0} мг/дл - - - ммоль/л - {0} ммоль/л + кар + {0} кар + {0} кар + {0} кар - объект - {0} объект + япала + {0} япала + {0} япала + {0} япала - - моль - {0} моль + + пай + {0} пай + {0} пай + {0} пай - - л/км - {0} л/км + + млн⁻¹ + {0} млн⁻¹ + {0} млн⁻¹ + {0} млн⁻¹ - - л/100 км - {0} л/100 км + + {0} % + {0} % + {0} % - - ми/гал - {0} ми/гал + + {0} ‰ + {0} ‰ + {0} ‰ + + + {0} ‱ + {0} ‱ + {0} ‱ + + + Глк + {0} Глк + {0} Глк + {0} Глк - ми/имп. гал - {0} ми/имп. гал + ми/имп. гал - Пб - {0} Пб + ПБ + {0} Пбайт + {0} Пбайт + {0} ПБ - Тб - {0} Тб + ТБ + {0} Тбайт + {0} Тбайт + {0} ТБ - Тбит - {0} Тбит + Тб + {0} Тбит + {0} Тбит + {0} Тб - Гб - {0} Гб + ГБ + {0} Гбайт + {0} Гбайт + {0} ГБ - Гбит - {0} Гбит + Гб + {0} Гбит + {0} Гбит + {0} Гб - Мб - {0} Мб + МБ + {0} Мбайт + {0} Мбайт + {0} МБ - Мбит - {0} Мбит + Мб + {0} Мбит + {0} Мбит + {0} Мб - Кб - {0} Кб + кБ + {0} кбайт + {0} кбайт + {0} кБ - кбит - {0} кбит + кб + {0} кбит + {0} кбит + {0} кб - Б - {0} Б - - - бит - {0} бит - - - ӗмӗр - {0} ӗмӗр + Б + {0} байт + {0} байт + {0} Б - внҫл - {0} внҫл + вунӑ ҫ. + {0} вунӑ ҫ. + {0} вунӑ ҫ. + {0} вунӑ ҫ. - ҫул. - {0} ҫул. - {0}/ҫул + ҫул + {0} ҫул + {0} ҫул + {0} ҫул - чрк - {0} чрк - {0}/чрк - - - уйӑх - {0} уйӑх - {0}/уйӑх - - - эрн. - {0} эрн. - {0}/эрн. - - - к. - {0} к. - {0}/к. + чӗр. + {0} чӗр. + {0} чӗр. + {0} чӗр. + {0}/чӗр. - схт - {0} схт - {0}/схт - - - мин - {0} мин - {0}/мин - - - ҫ - {0} ҫ - {0}/ҫ - - - мҫ - {0} мҫ - - - мкҫ - {0} мкҫ - - - нҫ - {0} нҫ - - - А - {0} А - - - мА - {0} мА - - - Ом - {0} Ом - - - В - {0} В - - - ккал - {0} ккал - - - кал - {0} кал - - - кДж - {0} кДж - - - Дж - {0} Дж + сех + {0} сех + {0} сех + {0} сех + {0}/сех - КВт⋅схт - {0} КВт⋅схт - - - эВ - {0} эВ + кВт⋅сех + {0} кВт⋅сех + {0} кВт⋅сех + {0} кВт⋅сех - БӐЕ - {0} БӐЕ + БӐВ + {0} БӐВ + {0} БӐВ + {0} БӐВ - АПШ терм - {0} АПШ терм + АПШ термӗ + {0} АПШ термӗ + {0} АПШ термӗ + {0} АПШ термӗ - крнк-вăй - {0} крнк-вăй - - - Н - {0} Н + фнтв + {0} фнтв + {0} фнтв + {0} фнтв - кВт⋅ч/100 км - {0} кВт⋅ч/100 км - - - ГГц - {0} ГГц - - - МГц - {0} МГц - - - кГц - {0} кГц - - - Гц - {0} Гц - - - эм - {0} эм + кВт⋅сех/100 км + {0} кВт⋅сех/100 км + {0} кВт⋅сех/100 км + {0} кВт⋅сех/100 км - пкс - {0} пкс + пкс - Мпкс - {0} Мпкс - - - пкс/см - {0} пкс/см - - - пкс/дюйм - {0} пкс/дюйм + Мпкс - ҫӗр р-сӗ - {0} ҫӗр р-сӗ - - - км - {0} км - {0}/км - - - м - {0} м - {0}/м - - - дм - {0} дм - - - см - {0} см - {0}/см - - - мм - {0} мм - - - мкм - {0} мкм - - - нм - {0} нм - - - пм - {0} пм - - - ми - {0} ми - - - ярд - {0} ярд - - - фт - {0} фт - {0}/фт - - - дюйм - {0} дюйм - {0}/дюйм - - - пк - {0} пк + R⊕ + {0} R⊕ + {0} R⊕ + {0} R⊕ - ç.ç. - {0} ç.ç. + ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ + {0} ҫутӑ ҫулӗ - а.п. - {0} а.п. + а. в. + {0} а. в. + {0} а. в. + {0} а. в. - фрл - {0} фрл + фрл - тнс.члш. - {0} тнс.члш. + тинӗс хӑл. + {0} тинӗс хӑл. + {0} тинӗс хӑл. + {0} тинӗс хӑл. - тнс.ми - {0} тнс.ми + тинӗс ми + {0} тинӗс ми + {0} тинӗс ми + {0} тинӗс ми - ск.ми - {0} ск.ми - - - пкт - {0} пкт + ск. ми + {0} ск. ми + {0} ск. ми + {0} ск. ми - хӗвел р-с - {0} хӗвел р-с - - - лк - {0} лк - - - кд - {0} кд - - - лм - {0} лм + R☉ + {0} R☉ + {0} R☉ + {0} R☉ - т - {0} т - - - кг - {0} кг - {0}/кг - - - г - {0} г - {0}/г - - - мг - {0} мг - - - мкг - {0} мкг + т + {0} т + {0} т + {0} т - амер. т - {0} амер. т + ам. тонна + {0} ам. тонна + {0} ам. тонна + {0} ам. тонна - стн - {0} стн + стн + {0} стн + {0} стн + {0} стн - крнк - {0} крнк - {0}/крнк - - - унц. - {0} унц. - {0}/унц. + фнт + {0} фнт + {0} фнт + {0} фнт + {0}/фнт - тр. унц. - {0} тр. унц. + тр. унцийӗ + {0} тр. унц. + {0} тр. унц. + {0} тр. унц. - кар - {0} кар + кар + {0} кар + {0} кар + {0} кар - Да - {0} Да + Да + {0} Да + {0} Да + {0} Да - Ҫӗр масси - {0} Ҫӗр масси + M⊕ + {0} M⊕ + {0} M⊕ + {0} M⊕ - Хӗвел масси - {0} Хӗвел масси - - - гран - {0} гран - - - ГВт - {0} ГВт + M☉ + {0} M☉ + {0} M☉ + {0} M☉ - Мвт - {0} МВт + Мвт - КВт - {0} КВт - - - Вт - {0} Вт - - - мВт - {0} мВт + кВт + {0} кВт + {0} кВт + {0} кВт - л.в. - {0} л.в. + л. в. + {0} л. в. + {0} л. в. + {0} л. в. - ч.ю. мм - ч.ю. {0} мм + мм ч. к. ю. + {0} мм ч. к. ю. + {0} мм ч. к. ю. + {0} мм ч. к. ю. + + + ч. к. ю. + {0} ч. к. ю. + {0} ч. к. ю. + {0} ч. к. ю. - дюйм² крнк - дюйм² {0} крнк + фнтв/дюйм² + {0} фнтв/дюйм² + {0} фнтв/дюйм² + {0} фнтв/дюйм² - ч.ю. дюйм - ч.ю. {0} дюйм - - - бар - {0} бар - - - мбар - {0} мбар + дюйм ч. к. ю. + {0} дюйм ч. к. ю. + {0} дюйм ч. к. ю. + ч.ю. {0} дюйм - атм - {0} атм - - - Па - {0} Па - - - гПа - {0} гПа - - - кПа - {0} кПа - - - МПа - {0} МПа + атм + {0} атм + {0} атм + {0} атм - км/схт - {0} км/схт - - - м/ҫ - {0} м/ҫ + км/сех + {0} км/сех + {0} км/сех + {0} км/сех - ми/схт - {0} ми/схт + ми/сех + {0} ми/сех + {0} ми/сех + {0} ми/сех - тĕвĕ - {0} тĕвĕ + уз + {0} уз + {0} уз + {0} уз - Бфт - {0} Бфт - - - К - {0} К + Бфт + {0} Бфт + {0} Бфт + {0} Бфт - крнк-фт - {0} крнк-фт - - - Н⋅м - {0} Н⋅м - - - км³ - {0} км³ - - - м³ - {0} м³ - {0}/м³ - - - см³ - {0} см³ - {0}/см³ - - - ми³ - {0} ми³ - - - ярд³ - {0} ярд³ - - - фт³ - {0} фт³ - - - дюйм³ - {0} дюйм³ + фнтв⋅фт + {0} фнтв⋅фт + {0} фнтв⋅фт + {0} фнтв⋅фт - Мл - {0} Мл - - - гл - {0} гл - - - л - {0} л - {0}/л - - - дл - {0} дл - - - сл - {0} сл - - - мл - {0} мл - - - мпт - {0} мпт + Мл + {0} Мл + {0} Мл + {0} Мл - крк-мтрл - {0} крк-мтрл + м. курка + {0} м. курка + {0} м. курка + {0} м. курка + + + м. шӗвӗ унци + {0} м. шӗвӗ унци + {0} м. шӗвӗ унци + {0} м. шӗвӗ унци - акр-фт - {0} акр-фт + акр-фт + {0} акр-фт + {0} акр-фт + {0} акр-фт - буш. - {0} буш. + бушель + {0} бушель + {0} бушель + {0} бушель - гал. - {0} гал. - {0}/гал. + ам. гал. + {0} ам. гал. + {0} ам. гал. + {0} ам. гал. + {0}/ам. гал. - имп.гал. - {0} имп.гал. - {0}/имп.гал. + имп. гал. + {0} имп. гал. + {0} имп. гал. + {0} имп. гал. + {0}/имп. гал. - кварт - {0} кварт + ам. кварт + {0} ам. кварт + {0} ам. кварт + {0} ам. кварт - пинт - {0} пинт + ам. пинт + {0} ам. пинт + {0} ам. пинт + {0} ам. пинт + + + имп. пинт + {0} имп. пинт + {0} имп. пинт + {0} имп. пинт - чашӑк - {0} чашӑк + ам. курка + {0} ам. курка + {0} ам. курка + {0} ам. курка + + + имп. курка + {0} имп. курка + {0} имп. курка + {0} имп. курка - шӗвӗ унци - {0} шӗвӗ унци + ам. шӗвӗ унци + {0} ам. шӗвӗ унци + {0} ам. шӗвӗ унци + {0} ам. шӗвӗ унци - имп.шӗвӗ унци - {0} импери шӗвӗ унци + имп. шӗвӗ унц. + {0} имп. шӗвӗ унц. + {0} имп. шӗвӗ унц. + {0} имп. шӗвӗ унц. - апт.кшк. - {0} апт.кшк. + апат каш. + {0} апат каш. + {0} апат каш. + {0} апат каш. - ч.кшк. - {0} ч.кшк. - - - барр. - {0} барр. + чей каш. + {0} чей каш. + {0} чей каш. + {0} чей каш. - плк.апат кшк. - {0} плк.апат кшк. + пыл. апат каш. + {0} пыл. апат каш. + {0} пыл. апат каш. + {0} пыл. апат каш. - имп.плк. апат кшк. - {0} имп.плк.апат кшк. + имп. пыл. апат каш. + {0} имп. пыл. апат каш. + {0} имп. пыл. апат каш. + {0} имп. пыл. апат каш. - тмлм - {0} тмлм + тумл. + {0} тумл. + {0} тумл. + {0} тумл. - шĕвĕ др. - {0} шĕвĕ др. - - - чӗркке - {0} чӗркке + шӗвӗ др. + {0} шӗвӗ др. + {0} шӗвӗ др. + {0} шӗвӗ др. - чптм - {0} чптм + чӗпт. + {0} чӗпт. + {0} чӗпт. + {0} чӗпт. - имп.кварт - {0} имп.кварт + имп. кварт + {0} имп. кварт + {0} имп. кварт + {0} имп. кварт + + + ср + {0} ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + {0} Ф + + + Гн + {0} Гн + {0} Гн + {0} Гн + + + См + {0} См + {0} См + {0} См + + + кал-IT + {0} кал-IT + {0} кал-IT + {0} кал-IT + + + БӐВ-IT + {0} БӐВ-IT + {0} БӐВ-IT + {0} БӐВ-IT + + + Бк + {0} Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + {0} Гр + + + кгв + {0} кгв + {0} кгв + {0} кгв + + + род + {0} род + {0} род + {0} род + + + чейн + {0} чейн + {0} чейн + {0} чейн + + + Тл + {0} Тл + {0} Тл + {0} Тл + + + Вб + {0} Вб + {0} Вб + {0} Вб + + + {0} °R + {0} °R + {0} °R + + + икӗ эрн. + {0} икӗ эрн. + {0} икӗ эрн. + {0} икӗ эрн. + + + слаг + {0} слаг + {0} слаг + {0} слаг + + + бенз. тан. + {0} бенз. тан. + {0} бенз. тан. + {0} бенз. тан. + + + рин + {0} рин + {0} рин + {0} рин + + + сун + {0} сун + {0} сун + {0} сун + + + сяку + {0} сяку + {0} сяку + {0} сяку + + + кудзирадзяку + {0} кудзирадзяку + {0} кудзирадзяку + {0} кудзирадзяку + + + кэн + {0} кэн + {0} кэн + {0} кэн + + + дзё + {0} дзё + {0} дзё + {0} дзё + + + ри + {0} ри + {0} ри + {0} ри + + + бу + {0} бу + {0} бу + {0} бу + + + сэ + {0} сэ + {0} сэ + {0} сэ + + + тё + {0} тё + {0} тё + {0} тё + + + косадзи + {0} косадзи + {0} косадзи + {0} косадзи + + + осадзи + {0} осадзи + {0} осадзи + {0} осадзи + + + каппу + {0} каппу + {0} каппу + {0} каппу + + + секи + {0} секи + {0} секи + {0} секи + + + сай + {0} сай + {0} сай + {0} сай + + + то + {0} то + {0} то + {0} то + + + коку + {0} коку + {0} коку + {0} коку - ҫутӑ хврт - {0} ҫутӑ хврт + ҫутӑ + {0} ҫутӑ + {0} ҫутӑ + {0} ҫутӑ + + + фун + {0} фун + {0} фун + {0} фун + + + млрд⁻¹ + {0} млрд⁻¹ + {0} млрд⁻¹ + {0} млрд⁻¹ - ҫрсм - {0} ҫрсм - {0}/ҫӗр + каҫ + {0} каҫ + {0} каҫ + {0} каҫ + {0}/каҫ + + ен + т. е. {0} + ҫ. е. {0} + к. е. {0} + а. е. {0} + @@ -10378,327 +16813,326 @@ CLDR data files are interpreted according to the LDML specification (http://unic - çапла - ҫук + ҫапла:а + ҫук:ҫ - {0} — пурте - {0} — пӗрлӗх - {0} — хупӑ - {0} — анлӑлан - {0} сулахаялла - {0} сылтӑмалла - {0} — истори - {0} — тӗрлӗрен - {0} — ыттисем - сӗрме купӑссем — {0} - {0} штриха - сроклӑ индекс {0} - ҫӳлти индекс {0} - активлӑх - Африка ҫырулӑхӗ - Америка ҫырулӑхӗ - выльӑх - выльӑх е ҫутҫанталӑк - стрелка - ӳт-пӳ - тӳркӗтеслӗх - Брайль шрифчӗпе - ҫурт - пуля е ҫӑлтӑр - хупӑ та уҫӑ сасӑсем - валюта символӗ - тире е соединитель - цифра - дингбат - юмӑҫ символӗ - йӗппи аялалла - йӗппи аялалла ҫӳлелле - Тухӑҫ алфавичӗ - эмодзи - Европа ҫырулӑхӗ - хӗрарӑм - ялав - ялавсем - ҫимелли - формат - форматпа пробелӑсем - экран сарлакӑшӗ - геометри форми - сарлакӑшӗ ҫурри - Хань иероглифӗсем - Радикал (китай иероглифӗсем) - ханча - Ханзи (ансатланнӑ) - Ханзи (йӑлана кӗнӗ) - чӗре - историлле шрифт - идеографи сӑнав палли - Япони канӗ - камбун (китай ҫырӑвӗ) - кандзи (иероглиф) - брелок - стрелка сулахаялла - стрелка сулахаялла сылтӑмалла - саспалли символӗ - пӳлӗнчӗк усӑ курни - арҫын - математика символӗ - Ҫывӑх Хӗвелтухӑҫ чӗлхисем - тӗрлӗрен - хальхи шрифт - модификатор - музыка символӗ - ҫутҫанталӑк - пробелӑсӑр - цифрӑсем - объект - урӑх - мӑшӑр - ҫын - фонетика алфавичӗ - пиктограмма - вырӑн - ӳсентӑран - пунктуаци - стрелка сылтӑмалла - символ е паллӑ - пӗчӗк вариантсем - смайлик - смайлик е ҫын - Кӑнтӑр Азири чӗлхесем - Кӑнтӑр-Хӗвелтухӑҫ Ази чӗлхисем - интервал - спорт - символ - техника символӗ - тонна палли - ҫулҫӳрев - ҫулҫӳрев е вырӑн - стрелоксем ҫӳлелле - вариант - уҫӑ сасӑ - ҫанталӑк - Хӗвеланӑҫ Азири чӗлхесем - пробел + {0} — пурте + {0} — пӗрлӗх + {0} — хупӑ + {0} — анлӑлан + {0} сулахаялла + {0} сылтӑмалла + {0} — истори + {0} — тӗрлӗрен + {0} — ыттисем + сӗрме купӑссем — {0} + {0} штриха + {0} штриха + {0} штриха + сроклӑ индекс {0} + ҫӳлти индекс {0} + активлӑх + Африка ҫырулӑхӗ + Америка ҫырулӑхӗ + выльӑх + выльӑх е ҫутҫанталӑк + стрелка + ӳт-пӳ + тӳркӗтеслӗх + Брайль шрифчӗпе + ҫурт + пуля е ҫӑлтӑр + хупӑ та уҫӑ сасӑсем + валюта символӗ + тире е соединитель + цифра + дингбат + юмӑҫ символӗ + йӗппи аялалла + йӗппи аялалла ҫӳлелле + Тухӑҫ алфавичӗ + эмодзи + Европа ҫырулӑхӗ + хӗрарӑм + ялав + ялавсем + ҫимелли + формат + форматпа пробелӑсем + экран сарлакӑшӗ + геометри форми + сарлакӑшӗ ҫурри + Хань иероглифӗсем + Радикал (китай иероглифӗсем) + ханча + Ханзи (ансатланнӑ) + Ханзи (йӑлана кӗнӗ) + чӗре + историлле шрифт + идеографи сӑнав палли + Япони канӗ + камбун (китай ҫырӑвӗ) + кандзи (иероглиф) + брелок + стрелка сулахаялла + стрелка сулахаялла сылтӑмалла + саспалли символӗ + пӳлӗнчӗк усӑ курни + арҫын + математика символӗ + Ҫывӑх Хӗвелтухӑҫ чӗлхисем + тӗрлӗрен + хальхи шрифт + модификатор + музыка символӗ + ҫутҫанталӑк + пробелӑсӑр + цифрӑсем + объект + урӑх + мӑшӑр + ҫын + фонетика алфавичӗ + пиктограмма + вырӑн + ӳсентӑран + пунктуаци + стрелка сылтӑмалла + символ е паллӑ + пӗчӗк вариантсем + смайлик + смайлик е ҫын + Кӑнтӑр Азири чӗлхесем + Кӑнтӑр-Хӗвелтухӑҫ Ази чӗлхисем + интервал + спорт + символ + техника символӗ + тонна палли + ҫулҫӳрев + ҫулҫӳрев е вырӑн + стрелоксем ҫӳлелле + вариант + уҫӑ сасӑ + ҫанталӑк + Анӑҫ Ази ҫырулӑхӗ + пробел - тайлӑк - оптика виҫи - тайлӑм - сарлакӑшӗ - йывăрăш - тайлӑк - алӑ пусни - текст - титовани - экран (дисплей) - плакат - тайлӑк каялла - тӳрӗ - тайлăклă - экстра-тайлӑк - ультрӑна чӑмӑртанӑ - экстра чӑмӑртанӑ - чӑмӑртанӑ - ҫурри чӑмӑртанӑ - йĕркеллĕ - ҫурри сарлакарах - сарлакарах - экстра сарлакарах - ультрӑна сарлакарах - ҫинҫешке - ҫӑп-ҫӑмӑл - ҫӑмӑл - ҫурри ҫӑмӑл - книги - регуляр - вӑтам - ҫурри ҫуллӑ - ҫуллӑ - экстра ҫуллӑ - хура - питӗ хураскер - вертикаль вак - тӗп интервал - хушма лигатурӑсем - диагональ вак - аҫлӑк номерӗсем - кивӗ стиль цифрисем - йӗрке номерӗсем - пропорци хисепӗсем - пӗчӗккисем тӗп саспаллисем - таблица хисепӗсем - каснӑ ноль + тайлӑк + оптика виҫи + тайлӑм + сарлакӑшӗ + йывăрăш + тайлӑк + алӑ пусни + текст + титовани + экран (дисплей) + плакат + тайлӑк каялла + тӳрӗ + тайлăклă + экстра-тайлӑк + ультрӑна чӑмӑртанӑ + экстра чӑмӑртанӑ + чӑмӑртанӑ + ҫурри чӑмӑртанӑ + йĕркеллĕ + ҫурри сарлакарах + сарлакарах + экстра сарлакарах + ультрӑна сарлакарах + ҫинҫешке + ҫӑп-ҫӑмӑл + ҫӑмӑл + ҫурри ҫӑмӑл + книги + регуляр + вӑтам + ҫурри ҫуллӑ + ҫуллӑ + экстра ҫуллӑ + хура + питӗ хураскер + вертикаль вак + тӗп интервал + хушма лигатурӑсем + диагональ вак + аҫлӑк номерӗсем + кивӗ стиль цифрисем + йӗрке номерӗсем + пропорци хисепӗсем + пӗчӗккисем тӗп саспаллисем + таблица хисепӗсем + каснӑ ноль - und cv + und cv - {title} {given} {given2} {surname} — {generation}, {credentials} + {title} {given} {given2} {surname} — {generation}, {credentials} - {given-informal} {surname} + {given-informal} {surname} - {title} {surname} + {title} {surname} - {given-informal} + {given-informal} - {given-informal-monogram-allCaps}{surname-monogram-allCaps} - - - {title} {given} {given2} {surname} — {generation}, {credentials} + {given-informal-monogram-allCaps}{surname-monogram-allCaps} - {given-informal} {surname} + {given-informal} {surname} - {title} {surname} + {title} {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {given-initial} {given2-initial} {surname} + {given-initial} {given2-initial} {surname} - {given-informal} {surname-initial} + {given-informal} {surname-initial} - {title} {surname} + {title} {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {surname} {title} {given} {given2} {credentials} + {surname} {title} {given} {given2} {credentials} - {surname} {given-informal} + {surname} {given-informal} - {title} {surname} + {title} {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps}{given-informal-monogram-allCaps} + {surname-monogram-allCaps}{given-informal-monogram-allCaps} - {surname} {given} {given2-initial}, {credentials} + {surname} {given} {given2-initial}, {credentials} - {surname} {given-informal} + {surname} {given-informal} - {title} {surname} + {title} {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {surname} {given-initial} {given2-initial} + {surname} {given-initial} {given2-initial} - {surname} {given-initial} + {surname} {given-initial} - {title} {surname} + {title} {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {surname-core}, {given} {given2} {surname-prefix} + {surname-core}, {given} {given2} {surname-prefix} - {surname}, {given-informal} + {surname}, {given-informal} - {surname-core}, {given} {given2-initial} {surname-prefix} + {surname-core}, {given} {given2-initial} {surname-prefix} - {surname}, {given-informal} + {surname}, {given-informal} - {surname-core}, {given-initial} {given2-initial} {surname-prefix} + {surname-core}, {given-initial} {given2-initial} {surname-prefix} - {surname}, {given-informal} + {surname}, {given-informal} - Аталан + Аталан - Илемпи - Корнилова + Илемпи + Корнилова - Константин - Васильевич - Иванов + Константин + Васильевич + Иванов - ∅∅∅ - Николай - Коля - Иванович - ∅∅∅ - Ашмарин - ∅∅∅ - ∅∅∅ - ∅∅∅ + ∅∅∅ + Николай + Николай + Иванович + ∅∅∅ + Ашмарин + ∅∅∅ + ∅∅∅ + ∅∅∅ - Синдбад + Синдбад - Кете - Мюллер + Кете + Мюллер - Цецилия - Хэмиш - Штёбер + Цецилия + Хэмиш + Штёбер - проф., д-р - Ада Корнелия - Неле - Сезар Мартин - фон - Брюль - Гонсалес Доминго - мл. - к.м.н. + проф., д-р + Ада Корнелия + Неле + Сезар Мартин + фон + Брюль + Гонсалес Доминго + мл. + к.м.н. diff --git a/make/data/cldr/common/main/cy.xml b/make/data/cldr/common/main/cy.xml index 7b68a594923..7d5e5fd3d67 100644 --- a/make/data/cldr/common/main/cy.xml +++ b/make/data/cldr/common/main/cy.xml @@ -286,6 +286,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Baffia Cwleneg Cwrdeg + Cwrdeg + Cwrmanjeg Cwmiceg Comi Cernyweg @@ -749,6 +751,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tsieina Colombia Ynys Clipperton + Sarc Costa Rica Ciwba Cabo Verde @@ -889,7 +892,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Polynesia Ffrengig Papua Guinea Newydd Y Philipinau - Pakistan + Pacistan Gwlad Pwyl Saint-Pierre-et-Miquelon Ynysoedd Pitcairn @@ -1009,51 +1012,88 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Fformat Arian Trefn Math o Arian + Cyflwyniad Emoji Cylched Awr (12 vs 24) Arddull Toriad Llinell + Toriadau Llinell o fewn Geiriau System Fesur Rhifau + Toriad Brawddeg ar ôl Byrfodd Calendr Bwdaidd - Calendr Tseina + Bwdaidd + Calendr Tsieineaidd + Tsieineaidd Calendr y Coptiaid + Coptaidd Calendr Dangi + Dangi Calendr Ethiopia + Ethiopaidd Calendr Amete Alem Ethiopia + Amete Alem Ethiopia Calendr Gregori + Gregoraidd Calendr Hebreaidd + Hebreaidd Calendr Cenedlaethol India Calendr Hijri + Hijri Calendr Hijri (tabl, cyfnod sifil) + Hijri (tabl, cyfnod sifil) Calendr Hijri (Umm al-Qura) + Hijri (Umm al-Qura) Calendr ISO-8601 Calendr Japan + Japaneaidd Calendr Persia + Persiaidd Calendr Gweriniaeth Tseina + Gweriniaeth Tseina Fformat Arian Cyfrifeg + Cyfrifeg Fformat Arian Safonol - Trefn Traddodiadol Tsieina - Big5 + Safonol Trefn Geiriadur Trefn Rhagosodedig Unicode + Unicode Rhagosodedig Rheolau trefnu Ewropeaidd - Trefn Symledig Tsieina - GB2312 Trefn Llyfr Ffôn Trefn Pinyin Chwilio at Ddibenion Cyffredinol + Chwilio Trefn Safonol + Safonol Trefn Traddodiadol Trefn Zhuyin + Rhagosodedig + Emoji + Testun System 12 Awr (0–11) + 12 (0–11) System 12 Awr (1–12) + 12 (1–12) System 24 Awr (0–23) + 24 (0–23) System 24 Awr (1–24) + 24 (1–24) Arddull Toriad Llinell Rhydd + Rhydd Arddull Toriad Llinell Arferol + Arferol Arddull Torriad Llinell Caeth + Caeth + Torri’r cyfan + Cadw’r cyfan + Normal + Cadw mewn brawddegau System Fetrig + Metrig System Fesur Imperialaidd + DU System Fesur UDA + UDA Digidau Arabig-Indig Digidau Arabig-Indig Estynedig Rhifolion Armenaidd @@ -1096,6 +1136,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Digidau Thai Digidau Tibetaidd Digidau Vai + Wedi’i ddiffodd + Ymlaen Metrig @@ -1147,6 +1189,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'am' {0} + + {1} 'am' {0} + @@ -1155,6 +1200,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'am' {0} + + {1} 'am' {0} + @@ -1171,11 +1219,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G M/d/y GGGGG + E, M/d/y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a d/M @@ -1532,6 +1581,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'am' {0} + + {1} 'am' {0} + @@ -1540,6 +1592,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'am' {0} + + {1} 'am' {0} + @@ -1548,6 +1603,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1556,6 +1614,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + E, h:mm a @@ -1563,11 +1624,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, h:mm:ss a E, HH:mm:ss y G + M/y G M/d/y GGGGG + E, M/d/y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1601,7 +1663,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h a – h a h – h a @@ -1626,7 +1687,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h a v @@ -2517,33 +2577,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dinas Anhysbys - - Tucumán - Fienna Brwsel - - Eirunepé - - - Cuiabá - - - Belém - Bae Cambridge Ynys y Pasg - - Bogotá - Ynys y Nadolig @@ -2592,9 +2637,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Rhufain - - Enderbury - Kostanay @@ -2671,9 +2713,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Amser Gorllewin Affrica - Amser Safonol Gorllewin Affrica - Amser Haf Gorllewin Affrica + Amser Gorllewin Affrica @@ -3041,6 +3081,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Amser Guyana + + + Amser Safonol Hawaii-Aleutian + + Amser Hawaii-Aleutian @@ -3605,7 +3650,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -5940,6 +5984,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ doler Dwyrain y Caribî doler Dwyrain y Caribî + + guilder Caribïaidd + guilder Caribïaidd + guilder Caribïaidd + guilder Caribïaidd + guilder Caribïaidd + guilder Caribïaidd + guilder Caribïaidd + Uned Arian Cyfred Ewropeaidd uned arian cyfred Ewropeaidd @@ -6075,6 +6128,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ doler Zimbabwe (1980–2008) doler Zimbabwe (1980–2008) + + Zimbabwean Gold + Zimbabwean Gold + Zimbabwean Gold + Zimbabwean Gold + Zimbabwean Gold + Zimbabwean Gold + Zimbabwean Gold + Doler Zimbabwe (2009) doler Zimbabwe (2009) @@ -6380,7 +6442,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmol/L {0} milimôl y litr - + + rhan + {0} rhan + {0} rhan + {0} ran + {0} rhan + {0} rhan + {0} rhan + + rhannau pob miliwn {0} rhan pob miliwn {0} rhan pob miliwn @@ -6416,6 +6487,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ molau + + o glwcos + {0} Glc + {0} o glwcos + {0} Glc + {0} Glc + {0} Glc + {0} Glc + litrau y cilometr {0} L/km @@ -7228,6 +7308,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} milimetr o fercwri + + o fercwri + pwysau y fodfedd sgwar {0} psi @@ -7518,6 +7601,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mc {0} cwpanaid metrig + + owns hylif metrig + {0} fl oz m. + {0} fl oz m. + {0} fl oz m. + {0} fl oz m. + {0} fl oz m. + {0} owns hylif metrig + erw-droedfeddi {0} erw-droedfedd @@ -7646,8 +7738,109 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ chwart Imp + + steradianau + {0} sr + {0} steradian + {0} sr + {0} sr + {0} sr + {0} steradian + + + coulombs + {0} C + {0} coulomb + {0} C + {0} C + {0} C + {0} coulomb + + + ffaradau + {0} F + {0} ffarad + {0} F + {0} F + {0} F + {0} ffarad + + + henrys + {0} H + {0} henry + {0} H + {0} H + {0} H + {0} henry + + + siemensau + {0} S + {0} siemens + {0} S + {0} S + {0} S + {0} siemens + + + calorïau [IT] + {0} cal-IT + {0} calori [IT] + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + becquerel + {0} Bq + {0} becquerel + {0} Bq + {0} Bq + {0} Bq + {0} becquerel + + + sievert + {0} Sv + {0} sievert + {0} Sv + {0} Sv + {0} Sv + {0} sievert + + + gray + {0} Gy + {0} gray + {0} Gy + {0} Gy + {0} Gy + {0} gray + + + grym cilogram + + + teslâu + {0} T + {0} tesla + {0} T + {0} T + {0} T + {0} tesla + + + weberau + {0} Wb + {0} weber + {0} Wb + {0} Wb + {0} Wb + {0} weber + - golau golau golau golau @@ -7655,7 +7848,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ golau {0} golau - + rhannau fesul biliwn ppb {0} rhan fesul biliwn @@ -7664,16 +7857,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} rhan fesul biliwn {0} rhan fesul biliwn - - nosau - {0} noson - {0} noson - {0} noson - {0} noson - {0} noson - {0} noson - {0}/noson - cyfeiriad cardinal {0} i’r dwyrain @@ -7798,7 +7981,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} eitem {0} eitem - + + rhan + {0} rhan + {0} rhan + {0} rhan + {0} rhan + {0} rhan + {0} rhan + + rhan/miliwn @@ -7819,6 +8011,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} môl {0} môl + + Glc + litrau/km @@ -8211,6 +8406,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + o Hg + metrau/eil @@ -8366,6 +8564,89 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} cht Imp. {0} cht Imp. + + {0} sr + {0} sr + {0} sr + {0} sr + {0} sr + {0} sr + + + {0} C + {0} C + {0} C + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + {0} F + {0} F + {0} F + + + {0} H + {0} H + {0} H + {0} H + {0} H + {0} H + + + {0} S + {0} S + {0} S + {0} S + {0} S + {0} S + + + cal-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + {0} Sv + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + {0} Gy + {0} Gy + {0} Gy + {0} Gy + + + {0} T + {0} T + {0} T + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + {0} Wb + {0} Wb + {0} Wb + golau golau @@ -8375,7 +8656,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} golau {0} golau - + rhannau/biliwn @@ -8520,9 +8801,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kt {0}kt + + rhan + {0} rhan + {0} rhan + {0} rhan + {0} rhan + {0} rhan + {0} rhan + % + + Glc + L/km {0}L/km @@ -9160,6 +9453,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmHg {0}mmHg + + o Hg + {0}psi {0}psi @@ -9484,8 +9780,90 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt Imp. {0}qt-Imp. + + {0} sr + {0} sr + {0} sr + {0} sr + {0} sr + {0} sr + + + {0} C + {0} C + {0} C + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + {0} F + {0} F + {0} F + + + {0} H + {0} H + {0} H + {0} H + {0} H + {0} H + + + {0} S + {0} S + {0} S + {0} S + {0} S + {0} S + + + cal-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + {0} Sv + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + {0} Gy + {0} Gy + {0} Gy + {0} Gy + + + {0} T + {0} T + {0} T + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + {0} Wb + {0} Wb + {0} Wb + - golau {0} golau {0} golau {0} golau @@ -9493,7 +9871,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} golau {0} golau - + {0} ppb {0}ppb {0} ppb @@ -9502,14 +9880,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ppb - nosau {0} noson {0}noson {0}noson {0}noson {0}noson {0}noson - {0}/noson {0}dn diff --git a/make/data/cldr/common/main/da.xml b/make/data/cldr/common/main/da.xml index 56c7e15ea39..33673627040 100644 --- a/make/data/cldr/common/main/da.xml +++ b/make/data/cldr/common/main/da.xml @@ -294,6 +294,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurdisk + kurdisk + kurmanji kymyk kutenaj komi @@ -853,6 +855,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kina Colombia Clippertonøen + Sark Costa Rica Cuba Kap Verde @@ -1153,35 +1156,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Numerisk sortering Sorteringsstyrke valuta + emojivisning timeur (12 vs. 24) linjeskift + linjeskift midt i ord målesystem tal + afsluttende tegnsætning efter fork. Tidszone Sprogvariant Privatbrug buddhistisk kalender + buddhistisk kinesisk kalender + kinesisk koptisk kalender + koptisk dangi-kalender + dangi etiopisk kalender + etiopisk etiopisk amete-alem-kalender + etiopisk amete-alem gregoriansk kalender + gregoriansk jødisk kalender + jødisk indisk nationalkalender hijri-kalender + hijri verdslig hijri-kalender + verdslig hijri islamisk kalender (Saudi-Arabien, observation) islamisk kalender (tabellarisk, astronomisk epoke) hijri-kalender (Umm al-Qura) + hijri (Umm al-Qura) ISO-8601-kalender japansk kalender + japansk persisk kalender + persisk kalender for Republikken Kina + Republikken Kina format for regnskabsvaluta + regnskab format for standardvaluta + standard Sortér efter symboler Sortér, og ignorer symboler Sortér efter accenter i normal rækkefølge @@ -1191,22 +1213,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sortér med store bogstaver først Sortér uden forskel på store og små bogstaver Sortér med skelnen mellem store og små bogstaver - sorteringsrækkefølge uforkortet kinesisk - Big5 tidligere sorteringsrækkefølge, kompatibilitet + kompatibilitet sorteringsrækkefølge for ordbog + ordbog Unicode-standardsorteringsrækkefølge + standard-Unicode europæisk sorteringsrækkefølge - sorteringsrækkefølge forkortet kinesisk - GB2312 sorteringsrækkefølge i telefonbøger + telefonbog fonetisk sorteringsrækkefølge + fonetisk pinyin-baseret sorteringsrækkefølge + pinyin generel søgning + søg sortér efter den første konsonant i hangul standardsorteringsrækkefølge + standard stregbaseret sorteringsrækkefølge + streg traditionel sorteringsrækkefølge - sortering efter streger i rodtegn + traditionel + sorteringsrækkefølge efter radikal-strøg + radikal-strøg zhuyin-sorteringsrækkefølge + zhuyin Sortér uden normalisering Sortér Unicode efter første normalisering Sortér efter individuelle cifre @@ -1219,18 +1251,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ fuld bredde halv bredde Numerisk + standard + emoji + tekst 12-timersur (0-11) + 12 (0–11) 12-timersur (1-12) + 12 (1–12) 24-timersur (0-23) + 24 (0–23) 24-timersur (1-24) + 24 (1–24) løst linjeskift + løst normalt linjeskift + normalt hårdt linjeskift + hårdt + bryd alle + behold alle + normal + behold i sætningsdele BGN UNGEGN metersystem + metrisk britisk målesystem + britisk amerikansk målesystem + amerikansk hindu-arabiske tal udvidede hindu-arabiske tal armenske tal @@ -1292,6 +1341,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tibetanske tal Traditionelle tal vai-tal + Fra + Til det metriske system @@ -1354,20 +1405,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - 0. tidsregning - 1. tidsregning - - - 0. tidsr. - 1. tidsr. - - - 0. t. - 1. t. - - @@ -1389,20 +1426,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - 0. tidsregning - 1. tidsregning - - - 0. tidsr. - 1. tidsr. - - - 0. t. - 1. t. - - @@ -1436,6 +1459,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1444,6 +1470,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} kl. {0} + @@ -1467,11 +1496,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h.mm.ss a E HH.mm.ss y G + M/y G d.M.y GGGGG + E, d/M/y G MMM y G d. MMM y G E d. MMM y G - h a h.mm a HH.mm h.mm.ss a @@ -1838,6 +1868,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1846,6 +1879,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1854,6 +1890,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1} 'kl'. {0} + @@ -1862,6 +1901,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1} 'kl'. {0} + h.mm B @@ -1875,11 +1917,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h.mm.ss a E HH.mm.ss y G + M/y G d.M.y GGGGG + E d/M/y G MMM y G d. MMM y G E d. MMM y G - h a h.mm a HH.mm h.mm.ss a @@ -1966,7 +2009,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a–h a - h–h a h.mm a–h.mm a @@ -1988,7 +2030,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a–h a v - h–h a v M–M @@ -2671,9 +2712,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ukendt by - - Tirana - Jerevan @@ -2686,18 +2724,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - São Paulo - Zürich Påskeøen - - Ürümqi - Kap Verde @@ -2751,7 +2783,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bisjkek - Enderbury + Canton Island Comorerne @@ -2878,9 +2910,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Vestafrikansk tid - Vestafrikansk normaltid - Vestafrikansk sommertid + Vestafrikansk tid @@ -3278,6 +3308,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guyana-tid + + + Hawaii-Aleutian-normaltid + + Hawaii-Aleutian-tid @@ -3728,6 +3763,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chuuk-tid + + + Tyrkisk tid + Tyrkisk normaltid + Tyrkisk sommertid + + Turkmensk tid @@ -3891,7 +3933,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -5240,6 +5285,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ østkaribisk dollar østkaribiske dollar + + caribiske gylden + caribiske gylden + caribiske gylden + SDR @@ -5350,6 +5400,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabwisk dollar (1980–2008) Zimbabwiske dollar (1980–2008) + + Zimbabwe Gold + Zimbabwe Gold + Zimbabwe Gold + Zimbabwisk dollar (2009) Zimbabwisk dollar (2009) @@ -5641,7 +5696,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} enheder {0} enheders - + + parter + {0} part + {0} parter + + common parts per million {0} part per million @@ -5675,6 +5735,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} mols + + glukose + {0} glukose + {0} glukose + common liter pr. kilometer @@ -6384,6 +6449,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimeter kviksølv {0} millimeter kviksølvs + + kviksølv + {0} kviksølv + {0} kviksølv + pounds pr. kvadrattomme {0} pound pr. kvadrattomme @@ -6622,6 +6692,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metriske kopper {0} metriske koppers + + metriske flydende ounces + {0} metrisk flydende ounce + {0} metriske flydende ounces + acre-fod {0} acre-fod @@ -6726,7 +6801,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} britisk quart {0} britiske quarts - + + steradianer + {0} steradian + {0} steradianer + + + katal + {0} katal + {0} katal + + + coulomb + {0} coulomb + {0} coulomb + + + farad + {0} farad + {0} farad + + + henry + {0} henry + {0} henry + + + siemens + {0} siemens + {0} siemens + + + international tabelkalorie + {0} calIT + {0} calIT + + + becquerel + {0} becquerel + {0} becquerel + + + sievert + {0} sievert + {0} sievert + + + gray + {0} gray + {0} gray + + + kilopond + {0} kilopond + {0} kilopond + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber + + + lys + {0} lys + {0} lys + + common milliardtedele {0} milliardtedel @@ -6736,7 +6881,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ common - nætter {0} nat {0} nats {0} nætter @@ -6815,6 +6959,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glk + {0} Glk + {0} Glk + l/km {0} l/km @@ -7025,9 +7174,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg - ″ Hg - {0} ″ Hg - {0} ″ Hg + tommer Hg + {0} tomme Hg + {0} tommer Hg km/t @@ -7148,7 +7297,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} britisk qt {0} britiske qt - + + {0} sr + {0} sr + + + kalorie [IT] + {0} calIT + {0} calIT + + + {0} Gy + {0} Gy + + + kp + {0} kp + {0} kp + + + lys + {0} lys + {0} lys + + dele/milliard @@ -7198,11 +7370,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmol/L + + p + {0} p + {0} p + % {0} % {0} % + + Glk + {0} Glk + {0} Glk + {0}mpgUK {0}mpgUK @@ -7281,7 +7463,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kWh/100 km - {0}kWh/100km + {0} kWh/100 km {0} kWh/100 km @@ -7414,11 +7596,28 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} br. qt. {0} br. qt. + + calIT + {0} calIT + {0} calIT + + + {0} Gy + {0} Gy + + + kp + {0} kp + {0} kp + + + lys + {0} lys + {0} lys + - nætter {0}nat {0}nætter - {0}/nat diff --git a/make/data/cldr/common/main/de.xml b/make/data/cldr/common/main/de.xml index 3ca5a3d1ec1..f2638088654 100644 --- a/make/data/cldr/common/main/de.xml +++ b/make/data/cldr/common/main/de.xml @@ -321,6 +321,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bafia Kölsch Kurdisch + Kurdisch + Kurmandschi Kumükisch Kutenai Komi @@ -946,6 +948,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Kolumbien Clipperton-Insel + Sark Costa Rica Kuba Cabo Verde @@ -1224,35 +1227,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sortierung nach Zahlen Sortierstärke Währung + Emojidarstellung Stundenformat (12h/24h) Zeilenumbruchstil + Zeilenumbruch im Wortinneren Maßsystem Ziffern + Satzabbruch nach Abk. Zeitzone Lokale Variante Privatnutzung Buddhistischer Kalender + buddhistisch Chinesischer Kalender + chinesisch Koptischer Kalender + koptisch Dangi-Kalender + Dangi Äthiopischer Kalender + äthiopisch Äthiopischer Amätä-Aläm-Kalender + äthiopisch (Amätä Aläm) Gregorianischer Kalender - Hebräischer Kalender + gregorianisch + Jüdischer Kalender + jüdisch Indischer Nationalkalender - Hidschri-Kalender - Bürgerlicher Hidschri-Kalender (tabellarisch) + Hidschra-Kalender + Hidschra + Hidschra-Kalender (tabellarisch, nicht-astronomisch) + Hidschra (tabellarisch, nicht-astronomisch) Islamischer Kalender (Saudi-Arabien, Beobachtung) Islamischer Kalender (tabellarisch, astronomische Epoche) - Hidschri-Kalender (Umm al-Qura) + Hidschra-Kalender (Umm al-Qura) + Hidschra (Umm al-Qura) ISO-8601-Kalender Japanischer Kalender + japanisch Persischer Kalender + persisch Minguo-Kalender + Minguo Währungsformat (Buchhaltung) + Buchhaltung Währungsformat (Standard) + Standard Symbole sortieren Symbole sortieren ignorieren Akzente normal sortieren @@ -1262,23 +1284,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Großbuchstaben zuerst aufführen Ohne Groß-/Kleinschreibung sortieren Nach Groß-/Kleinschreibung sortieren - Traditionelle chinesische Sortierung (Big5) Vorherige Sortierung, Kompatibilität + Kompatibilität Lexikografische Sortierung + lexikografisch Unicode-Sortierung + Standard-Unicode Emoji-Sortierung Europäische Sortierregeln - Vereinfachte chinesische Sortierung (GB2312) Telefonbuch-Sortierung + Telefonbuch Phonetische Sortierung + phonetisch Pinyin-Sortierung + Pinyin Allgemeine Suche + Suche Suche nach Anfangsbuchstaben des koreanischen Alphabets Standard-Sortierung + Standard Strichfolge + Striche Traditionelle Sortierung + traditionell Radikal-und-Strich-Sortierung + Radikal und Strich Zhuyin-Sortierung + Zhuyin Ohne Normierung sortieren Nach Unicode sortieren Ziffern einzeln sortieren @@ -1291,18 +1323,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Vollbreit Halbbreit Numerisch + Standard + Emoji + Text 12-Stunden-Format (0–11) + 12 (0–11) 12-Stunden-Format (1-12) + 12 (1–12) 24-Stunden-Format (0-23) + 24 (0–23) 24-Stunden-Format (1-24) + 24 (1–24) Lockerer Zeilenumbruch + Locker Normaler Zeilenumbruch + Normal Fester Zeilenumbruch + Fest + Überall erlaubt + Nirgendwo erlaubt + Normal + Wortgruppen erhalten BGN UNGEGN Metrisches System + Metrisch Britisches Maßsystem + Britisch US-Maßsystem + US-amerikanisch Ahom-Ziffern Arabisch-indische Ziffern Erweiterte arabisch-indische Ziffern @@ -1384,6 +1433,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Vai-Ziffern Warang-Citi-Ziffern Wancho-Ziffern + Aus + Ein Internationales (SI) @@ -1404,13 +1455,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [aä b c d e f g h i j k l m n oö p q r s ß t uü v w x y z] [áàăâåãā æ ç éèĕêëē ğ íìĭîïİī ı ñ óòŏôøō œ ş úùŭûū ÿ] [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] + [| ~] [\- ‐‑ – — , ; \: ! ? . … '‘‚ "“„ « » ( ) \[ \] \{ \} § @ * / \& #] + [× | ~] [\: ∶] [''’ ՚ ᾽᾿ ʼ ߴ] - [££ ₤] [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -2094,6 +2146,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'um' {0} + + {1} 'um' {0} + @@ -2102,6 +2157,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'um' {0} + + {1} 'um' {0} + @@ -2119,7 +2177,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + y-MM G d.M.y GGGGG + E, d.M.y G MMM y G d. MMM y G E, d. MMM y G @@ -2127,6 +2187,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH 'Uhr' h:mm a h:mm:ss a + HH 'Uhr' v d.M. E, d.M. d. MMM @@ -2462,6 +2523,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'um' {0} + + {1} 'um' {0} + @@ -2470,6 +2534,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'um' {0} + + {1} 'um' {0} + @@ -2482,25 +2549,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + h 'Uhr' B + E, h 'Uhr' B + E, h:mm 'Uhr' B + E, h:mm:ss 'Uhr' B E, d. + E, h a E h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + MM/y G dd.MM.y G + E, dd.MM.y G MMM y G d. MMM y G E, d. MMM y G - h 'Uhr' a + h a HH 'Uhr' h:mm a h:mm:ss a h:mm:ss a v h:mm a v + h a v + HH 'Uhr' v d.M. E, d.M. - d.MM. + dd.MM. dd.MM. d. MMM E, d. MMM @@ -2511,7 +2587,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ M/y d.M.y E, d.M.y - MM.y + MM/y dd.MM.y MMM y d. MMM y @@ -2574,8 +2650,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d. MMM y – E, d. MMM y G - h 'Uhr' a – h 'Uhr' a - h – h 'Uhr' a + h a – h a + h – h a HH–HH 'Uhr' @@ -2598,10 +2674,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm–HH:mm 'Uhr' v HH:mm–HH:mm 'Uhr' v - - h a – h a v - h–h a v - HH–HH 'Uhr' v @@ -3283,18 +3355,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Unbekannt - - Tirana - Eriwan Wostok - - Córdoba - Wien @@ -3310,21 +3376,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Brunei Darussalam - - São Paulo - Zürich Osterinsel - - Ürümqi - - - Bogotá - Havanna @@ -3340,9 +3397,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Prag - - Büsingen - Dschibuti @@ -3355,9 +3409,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kairo - - El Aaiún - Kanaren @@ -3416,9 +3467,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bischkek - - Enderbury - Komoren @@ -3551,12 +3599,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damaskus - - N’Djamena - - - Lomé - Duschanbe @@ -3610,9 +3652,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Westafrikanische Zeit - Westafrikanische Normalzeit - Westafrikanische Sommerzeit + Westafrikanische Zeit @@ -4015,6 +4055,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guyana-Zeit + + + Hawaii-Aleuten-Normalzeit + + Hawaii-Aleuten-Zeit @@ -4355,7 +4400,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ponape-Zeit + Pohnpei-Zeit @@ -4465,6 +4510,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chuuk-Zeit + + + Türkische Zeit + Türkische Normalzeit + Türkische Sommerzeit + + Turkmenistan-Zeit @@ -4629,7 +4681,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ @@ -5447,7 +5499,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Malediven-Rufiyaa Malediven-Rufiyaa - Malediven-Rupien + Malediven-Rufiyaa Malawi-Kwacha @@ -5897,6 +5949,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ostkaribischer Dollar Ostkaribische Dollar + + Karibischer Gulden + Karibischer Gulden + Karibische Gulden + Sonderziehungsrechte @@ -6005,6 +6062,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Simbabwe-Dollar (1980–2008) + + Simbabwe-Gold + Simbabwe-Gold + Simbabwe-Gold + Simbabwe-Dollar (2009) @@ -6363,7 +6425,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Karat {0} Karat {0} Karat - {0} Karats + {0} Karat {0} Karat {0} Karat {0} Karat @@ -6405,7 +6467,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Elementen {0} Elemente - + + Teile + {0} Teil + {0} Teile + + neuter Millionstel {0} Millionstel @@ -6459,12 +6526,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Mol {0} Mol {0} Mol - {0} Mols + {0} Mol {0} Mol {0} Mol {0} Mol {0} Mol + + Glukose + {0} Glukose + {0} Glukose + masculine Liter pro Kilometer @@ -6530,7 +6602,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Terabytes {0} Terabyte {0} Terabyte - {0} Terabyte + {0} Terabyte {0} Terabyte {0} Terabyte {0} Terabyte @@ -6553,7 +6625,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ neuter Gigabytes {0} Gigabyte - {0} Gigabyte + {0} Gigabyte {0} Gigabyte {0} Gigabyte {0} Gigabyte @@ -6961,7 +7033,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Newton {0} Newton {0} Newton - {0} Newtons + {0} Newton {0} Newton {0} Newton {0} Newton @@ -7590,6 +7662,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Millimeter Quecksilbersäule {0} Millimeter Quecksilbersäule + + Quecksilber + {0} Quecksilber + {0} Quecksilber + Pfund pro Quadratzoll {0} Pfund pro Quadratzoll @@ -7968,6 +8045,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metrischen Tassen {0} metrischen Tassen + + metrische Flüssigunzen + {0} metrische Flüssigunze + {0} metrische Flüssigunzen + {0} Acre-Foot {0} Acre-Feet @@ -8173,7 +8255,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Imp. Quart {0} Imp. Quart - + + Steradiant + {0} Steradiant + {0} Steradiant + + + Katal + {0} Katal + {0} Katal + + + Coulomb + {0} Coulomb + {0} Coulomb + + + Farad + {0} Farad + {0} Farad + + + Henry + {0} Henry + {0} Henry + + + Siemens + {0} Siemens + {0} Siemens + + + Internationale-Tafel-Kalorie + {0} Internationale-Tafel-Kalorie + {0} Internationale-Tafel-Kalorien + + + Becquerel + {0} Becquerel + {0} Becquerel + + + Sievert + {0} Sievert + {0} Sievert + + + Gray + {0} Gray + {0} Gray + + + Kraftkilogramm + {0} Krafatkilogramm + {0} Krafatkilogramm + + + Tesla + {0} Tesla + {0} Tesla + + + Weber + {0} Weber + {0} Weber + + + Lichtgeschwindigkeit + {0}-fache Lichtgeschwindigkeit + {0}-fache Lichtgeschwindigkeit + + neuter Milliardstel {0} Milliardstel @@ -8187,11 +8339,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - Übernachtungen - {0} Übernachtung - {0} Übernachtung - {0} Übernachtung - {0} Übernachtung + {0} Nacht + {0} Nacht + {0} Nacht + {0} Nacht {0} Übernachtungen {0} Übernachtungen {0} Übernachtungen @@ -8253,6 +8404,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Element {0} Elemente + + Teil + {0} Teil + {0} Teil + {0} % {0} % @@ -8265,6 +8421,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + l/km {0} l/km @@ -8361,6 +8520,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Std. + Min. {0} Min. {0} Min. @@ -8390,6 +8550,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} J {0} J + + Newton + kWh/100 km {0} kWh/100 km @@ -8538,6 +8701,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Ta {0} Ta + + fl.oz. m. + {0} fl.oz. m. + {0} fl.oz. m. + Acre-Feet @@ -8562,7 +8730,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ fl oz - {0} fl oz + {0} fl.oz. {0} fl oz @@ -8615,7 +8783,41 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Imp.qt. {0} Imp.qt. - + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + calIT + {0} calIT + {0} calIT + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + Lichtgeschw. + {0}-fache Lichtg. + {0}-fache Lichtg. + + Milliardstel {0} Milliardstel {0} Milliardstel @@ -8683,6 +8885,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Elem. {0} Elem. + + Teil + {0} Teil + {0} Teil + {0}‰ {0}‰ @@ -8691,6 +8898,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mol {0}mol + + Glc + {0}Glc + {0}Glc + {0}l/km {0}l/km @@ -8758,6 +8970,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} T {0} T + + {0}h + {0}h + + + {0}ms + {0} ms + + + {0}μs + {0} μs + A {0}A @@ -8898,6 +9122,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ W + + {0}mmHg + {0}mmHg + + + {0}Hg + {0}Hg + + + {0}psi + {0}psi + {0}°F {0}°F @@ -8913,6 +9149,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ l + + fl.oz. m. + ac ft @@ -8922,6 +9161,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Imp.gal {0}/Imp.gal + + fl.oz. + Im.fl.oz {0} Im.fl.oz @@ -8955,11 +9197,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Imp.qt {0} Imp.qt + + {0}sr + {0}sr + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + calIT + {0}calIT + {0}calIT + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0}T + {0}T + + + {0}Wb + {0}Wb + + + c + {0} c + {0} c + - Nächte {0}Nacht {0}Nächte - {0}/Nacht NOSW diff --git a/make/data/cldr/common/main/de_AT.xml b/make/data/cldr/common/main/de_AT.xml index 2c5005d9184..f3006e8c4a5 100644 --- a/make/data/cldr/common/main/de_AT.xml +++ b/make/data/cldr/common/main/de_AT.xml @@ -111,6 +111,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 + + + ¤ #,##0.00 diff --git a/make/data/cldr/common/main/de_CH.xml b/make/data/cldr/common/main/de_CH.xml index d8c3c358004..08863f8192a 100644 --- a/make/data/cldr/common/main/de_CH.xml +++ b/make/data/cldr/common/main/de_CH.xml @@ -41,9 +41,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mass-System + Buddhistisch + Chinesisch + Koptisch + Äthiopisch + Äthiopisch Amäta Aläm + Gregorianisch + Hebräisch + Japanisch + Persisch Grossbuchstaben zuerst aufführen Ohne Gross-/Kleinschreibung sortieren Nach Gross-/Kleinschreibung sortieren + Lexikografisch + Unicode (Standard) + Phonetisch + Strichfolge + Traditionell britisches Mass-System US Mass-System @@ -73,7 +87,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + M/y G dd.MM.y GGGGG + E, MM.dd.Y G @@ -137,7 +153,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic . - + ' @@ -150,6 +166,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + + + 0 + 0 + ¤ 0 Mio'.' + ¤ 0 Mio'.' + ¤ 00 Mio'.' + ¤ 00 Mio'.' + ¤ 000 Mio'.' + ¤ 000 Mio'.' + ¤ 0 Mrd'.' + ¤ 0 Mrd'.' + ¤ 00 Mrd'.' + ¤ 00 Mrd'.' + ¤ 000 Mrd'.' + ¤ 000 Mrd'.' + ¤ 0 Bio'.' + ¤ 0 Bio'.' + ¤ 00 Bio'.' + ¤ 00 Bio'.' + ¤ 000 Bio'.' + ¤ 000 Bio'.' @@ -173,6 +219,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic São-toméischer Dobra (2018) São-toméischer Dobra (2018) + + Karibischer Gulden + Karibischer Gulden + @@ -184,6 +234,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Quadratfuss {0} Quadratfuss + + Punkte + {0} Punkt + {0} Punkte + + + {0} Mol + {0} Mol + {0} Mol + {0} Mole + {0} Molen + {0} Mole + + + Glucose + {0} Glucose + {0} Glucose + Quartal @@ -194,6 +262,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Fuss {0} pro Fuss + + Quecksilbersäule + {0} Quecksilbersäule + {0} Quecksilbersäule + {0} Beaufort {0} Beaufort @@ -209,18 +282,54 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Kubikfuss {0} Kubikfuss + + {0} Steradiant + {0} Steradianten + + + Coulombs + {0} Coulomb + {0} Coulombs + + + Kalorie [IT] + {0} Kalorie [IT] + {0} Kalorien [IT] + + + Kilogrammkraft + {0} Kilogrammkraft + {0} Kilogrammkraft + + + Punkt + {0} Punkt + {0} Punkte + + + {0} Glc + {0} Glc + Quartal Fuss + + {0} Hg + {0} Hg + {0} Bft {0} Bft + + {0} m. fl. oz. + {0} m. fl. oz. + Dram {0} dr. @@ -235,6 +344,39 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Prise {0} Prise + + {0} kat + {0} kat + + + kcal [IT] + {0} kcal [IT] + {0} kcal [IT] + + + {0} Bq + {0} Bq + + + + + Punkt + {0} Punkt + {0} Punkte + + + {0} m. fl. oz. + {0} m. fl. oz. + + + {0} kat + {0} kat + + + kcal [IT] + {0} kcal [IT] + {0} kcal [IT] + diff --git a/make/data/cldr/common/main/de_LI.xml b/make/data/cldr/common/main/de_LI.xml index 718cb336a1a..a26e00d8e02 100644 --- a/make/data/cldr/common/main/de_LI.xml +++ b/make/data/cldr/common/main/de_LI.xml @@ -31,7 +31,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic . - + ' @@ -44,6 +44,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 + + + ¤ #,##0.00 diff --git a/make/data/cldr/common/main/de_LU.xml b/make/data/cldr/common/main/de_LU.xml index 4ec6b9f5bcb..d80e409bd12 100644 --- a/make/data/cldr/common/main/de_LU.xml +++ b/make/data/cldr/common/main/de_LU.xml @@ -22,11 +22,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - h a - - diff --git a/make/data/cldr/common/main/doi.xml b/make/data/cldr/common/main/doi.xml index b6c9dc75dfb..5f163f3a3b9 100644 --- a/make/data/cldr/common/main/doi.xml +++ b/make/data/cldr/common/main/doi.xml @@ -975,7 +975,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic मिलीमोल फी लीटर - + हिस्से फी दस लक्ख @@ -1499,7 +1499,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic मिलीमोल/लीटर - + हिस्से/दस लक्ख @@ -1942,7 +1942,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic मिलीमोल/ली - + हिफीदल diff --git a/make/data/cldr/common/main/dsb.xml b/make/data/cldr/common/main/dsb.xml index 486cd558ea6..53a8781b067 100644 --- a/make/data/cldr/common/main/dsb.xml +++ b/make/data/cldr/common/main/dsb.xml @@ -42,6 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic aymaršćina azerbajdžanšćina baškiršćina + balučišćina balinezišćina basaa běłorušćina @@ -229,6 +230,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic bafia kelnšćina kurdišćina + kurdišćina + kurmandźišćina kumykšćina komišćina kornišćina @@ -621,6 +624,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic China Kolumbiska Clippertonowa kupa + Sark Kosta Rika Kuba Kap Verde @@ -848,42 +852,81 @@ CLDR data files are interpreted according to the LDML specification (http://unic format płaśidła sortěrowański slěd pjenjeze + pśedstajenje emojija góźinowy cyklus (12 vs 24) system łamanja smužkow + łamanje smužki w słowje system měrow licby + pśetergnjenje sady pó skrotconce buddhistiski kalender + buddhistiski chinski kalender + chinski koptiski kalendaŕ + koptiski dangi kalender + dangiski etiopiski kalender + etiopiski etiopiski amete-alem-kalendaŕ + etiopiski Amete-Alem gregoriański kalender + gregorjaniski žydojski kalender + hebrejski islamski kalender + hijri islamski ciwilny kalendaŕ + islamski ciwilny islamski umalqui-kalendaŕ + islamski Umm al-Qura iso-8601-kalender japański kalender + japański persiski kalender + persiski kalender republiki China + minguo knigływjeźeński format płaśidła + knigływjeźenje standardny format płaśidła + standard sortěrowański slěd pó Unicoźe + standardne unicode-rědowanje powšykne pytanje + pytaj standardny sortěrowański slěd + standardne + default + emoji + tekst 12-góźinowy cyklus (0-11) + 12 (0–11) 12-góźinowy cyklus (1-12) + 12 (1–12) 24-góźinowy cyklus (0-23) + 24 (0–23) 24-góźinowy cyklus (1-24) + 24 (1–24) lichy stil łamanja smužkow + wólny běžny stil łamanja smužkow + normalny kšuty stil łamanja smužkow + kšuty + łam wšykno + zdźarž wšykno + normalne + w sadach metriski system + metriski britiski system měrow + britiski amerikański system měrow + ameriski arabisko-indiske cyfry rozšyrjone arabisko-indiske cyfry armeńske cyfry @@ -924,6 +967,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic thaiske cyfry tibetske cyfry vaiske cyfry + + jo metriski @@ -941,6 +986,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic [áàăâåäãąā æ ç ďđ éèĕêëėęē ğ íìĭîïİī ı ĺľ ňñ òŏôöőøō œ ř ş ß ť úùŭûůüűū ýÿ ż] [A B C Č Ć D E F G H {Ch} I J K Ł L M N O P Q R S Š Ś T U V W X Y Z Ž Ź] [\- ‐‑ – — , ; \: ! ? . … '‘’‚ "“„ « » ( ) \[ \] \{ \} § @ * / \& #] + [\- ‐‑ , . * / † ⚭] @@ -1003,21 +1049,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic - h 'hodź'. B + 'zeg'. h B + E 'zeg'. h B E, d. + E 'zeg'. h a E h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + M/y G d.M.y GGGGG + E, d.M.y G MMM y G d. MMM y G E, d. MMM y G - h 'hodź'. a - HH 'hodź'. + 'zeg'. h a + 'zeg'. HH h:mm a h:mm:ss a + 'zeg'. h a v + 'zeg'. HH v d.M. E, d.M. d. MMM @@ -1365,6 +1417,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'zeger' {0} + + {1} 'zeger' {0} + @@ -1373,6 +1428,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'zeger' {0} + + {1} 'zeger' {0} + @@ -1385,14 +1443,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic + 'zeg'. h B d. + E, 'zeg'. h B E, d. E, h:mm a E, 'zeg'. H:mm E, h:mm:ss a E, HH:mm:ss y G + M/y G d.M.y GGGGG + E, d.M.y G MMM y G d. MMM y G E, d. MMM y G @@ -1404,6 +1466,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic H:mm:ss H:mm:ss v H:mm v + 'zeg'. h a v + 'zeg'. H v d.M. E, d.M. d. MMM @@ -2414,9 +2478,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Biškek - - Enderbury - Komory @@ -2568,9 +2629,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Pódwjacornoafriski cas - Pódwjacornoafriski standardny cas - Pódwjacornoafriski lěśojski cas + Pódwjacornoafriski cas @@ -2935,6 +2994,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyański cas + + + Hawaiisko-aleutski standardny cas + + Hawaiisko-aleutski cas @@ -3524,6 +3588,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + casy + @@ -3535,6 +3602,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -4876,6 +4947,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic pódzajtšnokaribiske dolary pódzajtšnokaribiskich dolarow + + karibiski šesnak + karibiski šesnak + karibiskej šesnaka + karibiske šesnaki + karibiskich šesnakow + CFA-frank (BCEAO) CFA-frank (BCEAO) @@ -4918,6 +4996,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic sambiske kwachy sambiskich kwachow + + simbabwiske złoto + simbabwiske złoto + simbabwiskej złośe + simbabwiske złota + simbabwiskich złotow + ≈{0} @@ -5199,7 +5284,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kuski {0} kuskow - + + źěle + {0} źěl + {0} źěla + {0} źěle + {0} źělow + + milionśiny {0} milionśina {0} milionśinje @@ -5234,6 +5326,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mole {0} molow + + glukoze + {0} glukoze + {0} glukoze + {0} glukoze + {0} glukoze + litry na kilometer {0} liter na kilometer @@ -5948,6 +6047,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} milimetry słupika žywego slobra {0} milimetrow słupika žywego slobra + + žywoslobrowego słupika + {0} žywoslobrowego słupika + {0} žywoslobrowego słupika + {0} žywoslobrowego słupika + {0} žywoslobrowego słupika + punty na kwadratny col {0} punt na kwadratny col @@ -6195,6 +6301,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} metriske taski {0} metriskich taskow + + metriske žydke unce + {0} žydka unca + {0} žydkej uncy + {0} žydke unce + {0} metriskich žydkich uncow + aker-crjeje {0} aker-crjej @@ -6316,6 +6429,97 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} britiske běrtyle {0} britiskich běrtylow + + steradiany + {0} steradian + {0} steradiana + {0} steradiany + {0} steradianow + + + katale + {0} katal + {0} katala + {0} katale + {0} katalow + + + coulomby + {0} coulomb + {0} coulomba + {0} coulomby + {0} coulombow + + + farady + {0} farad + {0} farada + {0} farady + {0} faradow + + + henryje + {0} henry + {0} henryja + {0} henryje + {0} henryjow + + + siemensy + {0} siemens + {0} siemensa + {0} siemense + {0} siemensow + + + kalorije [IT] + {0} kalorija [IT] + {0} kaloriji [IT] + {0} kalorije [IT] + {0} kalorijow [IT] + + + bequerele + {0} bequerel + {0} bequerela + {0} bequerele + {0} bequerelow + + + sieverty + {0} sievert + {0} sieverta + {0} sieverty + {0} sievertow + + + grayje + {0} gray + {0} grayja + {0} grayje + {0} grayjow + + + kilogramy-force + {0} kilogram-force + {0} kilograma-force + {0} kilogramy-force + {0} kilogramow-force + + + tesle + {0} tesla + {0} tesla + {0} tesla + {0} tesla + + + webery + {0} weber + {0} webera + {0} webery + {0} weberow + spěšnosć swětła {0} spěšnosć swětła @@ -6323,7 +6527,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} spěšnosći swětła {0} spěšnosćow swětła - + miliardnina {0} miliardnina {0} miliardninje @@ -6412,6 +6616,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kuse {0} kusow + + źěl + {0} źěl + {0} źěl + {0} źěl + {0} źěl + {0} % {0} % @@ -6430,6 +6641,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ‱ {0} ‱ + + Glc + {0} Glc + {0} Glc + {0} Glc + {0} Glc + l/km {0} l/km @@ -6597,6 +6815,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} PS {0} PS + + {0} Hg + {0} Hg + {0} Hg + {0} Hg + mph {0} mph @@ -6665,6 +6889,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic mc + + m. fl oz + {0} m. fl oz + {0} m. fl oz + {0} m. fl oz + {0} m. fl oz + gal {0} gal @@ -6754,6 +6985,86 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} šćipki {0} šćipkow + + steradian + {0} sr + {0} sr + {0} sr + {0} sr + + + {0} kat + {0} kat + {0} kat + {0} kat + + + {0} C + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + {0} F + + + {0} H + {0} H + {0} H + {0} H + + + {0} S + {0} S + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + {0} kgf + {0} kgf + + + {0} T + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + {0} Wb + spěšnosć sw. {0} spěšnosć sw. @@ -6761,7 +7072,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} spěšnosći sw. {0} spěšnosćow sw. - + nano {0} nano {0} nano @@ -6853,7 +7164,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} c {0} c - + n {0} n {0} n diff --git a/make/data/cldr/common/main/dua.xml b/make/data/cldr/common/main/dua.xml index 547640b7b05..8a48674d70b 100644 --- a/make/data/cldr/common/main/dua.xml +++ b/make/data/cldr/common/main/dua.xml @@ -311,6 +311,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/dv.xml b/make/data/cldr/common/main/dv.xml index 77f725c086e..c474c98c4cf 100644 --- a/make/data/cldr/common/main/dv.xml +++ b/make/data/cldr/common/main/dv.xml @@ -134,6 +134,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + + + ¤ #,##,##0.00 + #,##,##0.00 diff --git a/make/data/cldr/common/main/dyo.xml b/make/data/cldr/common/main/dyo.xml index baa17a6108f..9b42bafd14a 100644 --- a/make/data/cldr/common/main/dyo.xml +++ b/make/data/cldr/common/main/dyo.xml @@ -421,6 +421,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/dz.xml b/make/data/cldr/common/main/dz.xml index 85f7fb24bfe..eb96ad0f81a 100644 --- a/make/data/cldr/common/main/dz.xml +++ b/make/data/cldr/common/main/dz.xml @@ -592,7 +592,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd @@ -1582,9 +1582,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ནུབ་ཕྱོགས་ཨཕ་རི་ཀཱ་ཆུ་ཚོད - ནུབ་ཕྱོགས་ཨཕ་རི་ཀཱ་ཚད་ལྡན་ཆུ་ཚོད - ནུབ་ཕྱོགས་ཨཕ་རི་ཀཱ་བྱཱར་དུས་ཆུ་ཚོད + ནུབ་ཕྱོགས་ཨཕ་རི་ཀཱ་ཆུ་ཚོད @@ -1859,6 +1857,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic གུ་ཡ་ན་ཆུ་ཚོད + + + ཧ་ཝའི་-ཨེ་ལིའུ་ཤེན་ཚད་ལྡན་ཆུ་ཚོད + + ཧ་ཝའི་-ཨེ་ལིའུ་ཤེན་ཆུ་ཚོད diff --git a/make/data/cldr/common/main/ee.xml b/make/data/cldr/common/main/ee.xml index cbfdedbb836..f79d4ba617b 100644 --- a/make/data/cldr/common/main/ee.xml +++ b/make/data/cldr/common/main/ee.xml @@ -730,10 +730,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic japantɔwo ƒe kalenda persiatɔwo ƒe kalenda china repɔbliktɔwo ƒe kalenda tso 1912 - blema chinatɔwo ƒe ɖoɖomɔ nu nuɖoɖo ɖe nyagɔmeɖegbalẽ ƒe ɖoɖomɔ nu nuɖoɖo ɖe unicode ƒe ɖoɖo nu - chinagbe yeye ƒe ɖoɖomɔ nu fonegbalẽ me ɖoɖomɔ nu pinyin ɖoɖomɔ nu nudidi hena zazã gbadza @@ -1904,9 +1902,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ireland nutome gaƒoƒo me - - Enderbury - Macau @@ -1963,14 +1958,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic - West Africa game - West Africa nutome gaƒoƒo me - West Africa dzomeŋɔli gaƒoƒo me + West Africa game - WAT WAT - WAST @@ -2316,7 +2307,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Greenwich gaƒoƒo me + Greenwich gaƒoƒo @@ -2343,6 +2334,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyana gaƒoƒo me + + + Hawaii-Aleutia nutome gaƒoƒo me + + Hawaii-Aleutia gaƒoƒo me @@ -2778,6 +2774,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Chuuk gaƒoƒo me + + + Tɛrki gaƒoƒome + Tɛrki gaƒoƒoɖoanyime + Tɛrki dzomeŋɔli gaƒoƒome + + Turkmenistan gaƒoƒo me diff --git a/make/data/cldr/common/main/el.xml b/make/data/cldr/common/main/el.xml index b4843307d3a..f20ad945fe6 100644 --- a/make/data/cldr/common/main/el.xml +++ b/make/data/cldr/common/main/el.xml @@ -292,6 +292,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Μπάφια Κολωνικά Κουρδικά + Κουρδικά + Κουρμάντζι Κουμγιούκ Κουτενάι Κόμι @@ -370,6 +372,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Έρζια Μαζαντεράνι Ναούρου + Μιν Ναν Ναπολιτανικά Νάμα Νορβηγικά Μποκμάλ @@ -824,6 +827,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Κίνα Κολομβία Νήσος Κλίπερτον + Σαρκ Κόστα Ρίκα Κούβα Πράσινο Ακρωτήριο @@ -1101,35 +1105,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Αριθμητική ταξινόμηση Ισχύς ταξινόμησης Νόμισμα + Παρουσίαση emoji Κύκλος ωρών (12 ή 24) Στιλ αλλαγής γραμμών + Αλλαγή γραμμής ανάμεσα σε λέξεις Σύστημα μέτρησης Αριθμοί + Τέλος πρότασης μετά από σύντμηση Ζώνη ώρας Παραλλαγή τοπικών ρυθμίσεων Ιδιωτική χρήση Βουδιστικό ημερολόγιο + Βουδιστικό Κινεζικό ημερολόγιο + Κινεζικό Κοπτικό ημερολόγιο + Κοπτικό Κορεατικό ημερολόγιο ντάνγκι + Ντάνγκι Αιθιοπικό ημερολόγιο + Αιθιοπικό Αιθιοπικό ημερολόγιο Άμετ Άλεμ + Αιθιοπικό Άμετ Άλεμ Γρηγοριανό ημερολόγιο + Γρηγοριανό Εβραϊκό ημερολόγιο + Εβραϊκό Ινδικό εθνικό ημερολόγιο Ημερολόγιο Εγίρας + Εγίρα Ημερολόγιο Εγίρας (σε μορφή πίνακα, αστικό εποχής) + Εγίρα (σε μορφή πίνακα, αστικό εποχής) Ισλαμικό ημερολόγιο (Σαουδική Αραβία, θέαση) Ισλαμικό ημερολόγιο (δομημένο, αστρονομική εποχή) Ημερολόγιο Εγίρας (Umm al-Qura) + Εγίρα (Umm al-Qura) Ημερολόγιο ISO-8601 Ιαπωνικό ημερολόγιο + Ιαπωνικό Περσικό ημερολόγιο + Περσικό Ημερολόγιο της Δημοκρατίας της Κίνας + Δημοκρατίας της Κίνας Λογιστική μορφή νομίσματος + Λογιστική Τυπική μορφή νομίσματος + Τυπική Ταξινόμηση συμβόλων Ταξινόμηση με αγνόηση συμβόλων Κανονικά ταξινόμηση τόνων @@ -1139,22 +1162,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ταξινόμηση κεφαλαίων χαρακτήρων πρώτα Ταξινόμηση με διάκριση χαρακτήρων Ταξινόμηση χαρακτήρων διάκρισης - Σειρά ταξινόμησης Παραδοσιακών Κινεζικών - Big5 Προηγούμενη σειρά ταξινόμησης, για συμβατότητα + Συμβατότητα Σειρά ταξινόμησης λεξικού + Λεξικό Προεπιλεγμένη σειρά ταξινόμησης Unicode + Προεπιλεγμένη σειρά Unicode Ευρωπαϊκοί κανόνες ταξινόμησης - Σειρά ταξινόμησης Απλοποιημένων Κινεζικών - GB2312 Σειρά ταξινόμησης τηλεφωνικού καταλόγου + Τηλεφωνικός κατάλογος Φωνητική σειρά ταξινόμησης + Φωνητική Σειρά ταξινόμησης Πινγίν + Πινγίν Αναζήτηση γενικού τύπου + Αναζήτηση Αναζήτηση κατά αρχικό σύμφωνο Χανγκούλ Τυπική σειρά ταξινόμησης + Τυπική Σειρά ταξινόμησης κινήσεων + Κίνηση Παραδοσιακή σειρά ταξινόμησης + Παραδοσιακή Σειρά ταξινόμησης ριζικής αρίθμησης + Ριζική αρίθμηση Σειρά ταξινόμησης Τζουγίν + Τζουγίν Ταξινόμηση χωρίς κανονικοποίηση Κανονικοποιημένη ταξινόμηση Unicode Μεμονωμένη ταξινόμηση ψηφίων @@ -1167,18 +1200,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Πλήρους πλάτους Μισού πλάτους Αριθμητικό + Προεπιλογή + Emoji + Κείμενο 12ωρο σύστημα (0–11) + 12 (0–11) 12ωρο σύστημα (1–12) + 12 (1–12) 24ωρο σύστημα (0–23) + 24 (0–23) 24ωρο σύστημα (1–24) + 24 (1–24) Χαλαρό στιλ αλλαγής γραμμών + Χαλαρό Κανονικό στιλ αλλαγής γραμμών + Κανονικό Στενό στιλ αλλαγής γραμμών + Στενό + Διαχωρισμός όλων + Διατήρηση όλων + Κανονικό + Διατήρηση σε φράσεις Μεταγραφή BGN ΗΠΑ Μεταγραφή GEGN ΟΗΕ Μετρικό σύστημα + Μετρικό Αγγλοσαξονικό σύστημα μέτρησης + Αγγλοσαξονικό Αμερικανικό σύστημα μέτρησης + Αμερικανικό Αραβικο-ινδικά ψηφία Εκτεταμένα αραβικο-ινδικά ψηφία Αρμενικά αριθμητικά @@ -1223,6 +1273,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Θιβετανικά ψηφία Παραδοσιακά αριθμητικά Ψηφία Βάι + Απενεργοποίηση + Ενεργοποίηση Μετρικό @@ -1250,9 +1302,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1353,13 +1402,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM-y G d/M/y GGGGG + E, dd-MM-y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a + h a (vvvv) + HH'h' (vvvv) d/M E, d/M d MMM @@ -1425,7 +1477,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a h:mm a – h:mm a @@ -1439,7 +1490,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M–M @@ -1766,14 +1816,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm:ss a y G d/M/y GGGGG + E, dd-MM-y G LLL y G d MMM y G E d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v + HH:mm:ss (vvvv) h:mm a v + HH:mm (vvvv) + HH'h' (vvvv) d/M E d/M MMM @@ -1844,7 +1897,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a h:mm a – h:mm a @@ -1858,7 +1910,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M–M @@ -2937,6 +2988,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Νήσος Πάσχα + + Κοϊάικε + Πούντα Αρένας @@ -3202,9 +3256,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Πνομ Πενχ - Έντερμπερι - - Καντών @@ -3849,6 +3900,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Χαράρε + + + Ώρα Άκρε + Χειμερινή ώρα Άκρε + Θερινή ώρα Άκρε + + Ώρα Αφγανιστάν @@ -3871,9 +3929,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ώρα Δυτικής Αφρικής - Χειμερινή ώρα Δυτικής Αφρικής - Θερινή ώρα Δυτικής Αφρικής + Ώρα Δυτικής Αφρικής @@ -4250,6 +4306,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ώρα Γουιάνας + + + Χειμερινή ώρα Χαβάης-Αλεούτιων Νήσων + + Ώρα Χαβάης-Αλεούτιων Νήσων @@ -4688,6 +4749,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ώρα Τσουκ + + + Ώρα Τουρκίας + Χειμερινή ώρα Τουρκίας + Θερινή ώρα Τουρκίας + + Ώρα Τουρκμενιστάν @@ -4764,9 +4832,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ώρα Αικατερίνμπουργκ - Χειμερινή ώρα Αικατερίνμπουργκ - Θερινή ώρα Αικατερίνμπουργκ + Ώρα Αικατερινούπολης + Χειμερινή ώρα Αικατερινούπολης + Θερινή ώρα Αικατερινούπολης @@ -4847,7 +4915,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -6194,6 +6265,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ δολάριο Ανατολικής Καραϊβικής δολάρια Ανατολικής Καραϊβικής + + γκίλντα Καραϊβικής + γκίλντα Καραϊβικής + γκίλντες Καραϊβικής + Ειδικά Δικαιώματα Ανάληψης ειδικό δικαίωμα ανάληψης @@ -6297,6 +6373,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ δολάριο Ζιμπάμπουε δολάρια Ζιμπάμπουε + + Χρυσός της Ζιμπάμπουε + Χρυσός της Ζιμπάμπουε + Χρυσός της Ζιμπάμπουε + Δολάριο Ζιμπάμπουε (2009) @@ -6635,7 +6716,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} στοιχεία {0} στοιχείων - + + μέρη + {0} μέρος + {0} μέρη + + neuter μέρη ανά εκατομμύριο {0} μέρος ανά εκατομμύριο @@ -6675,6 +6761,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ neuter + + γλυκόζης + {0} γλυκόζης + {0} γλυκόζης + neuter λίτρα ανά χιλιόμετρο @@ -7334,8 +7425,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} καντέλα {0} καντέλα {0} καντέλας - {0} καντέλα - {0} καντέλα + {0} καντέλες + {0} καντέλες {0} καντέλων @@ -7516,6 +7607,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} χιλιοστόμετρα στήλης υδραργύρου {0} χιλιοστόμετρων στήλης υδραργύρου + + χιλιοστόμετρο στήλης υδραργύρου + {0} στήλης υδραργύρου + {0} στήλης υδραργύρου + λίβρες ανά τετραγωνική ίντσα {0} λίβρα ανά τετραγωνική ίντσα @@ -7809,6 +7905,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} μετρικά κύπελλα {0} μετρικών κύπελλων + + μετρική ουγγιά υγρών + {0} μετρική ουγγιά υγρών + {0} μετρικές ουγγιές υγρών + ακρ-πόδια {0} ακρ-πόδι @@ -7905,9 +8006,73 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} αγγλοσαξονικό τέταρτο του γαλονιού {0} αγγλοσαξονικά τέταρτα του γαλονιού + + στερακτίνια + {0} στερακτίνιο + {0} στερακτίνια + + + κατάλ + {0} κατάλ + {0} κατάλ + + + κουλόμπ + {0} κουλόμπ + {0} κουλόμπ + + + φαράντ + {0} φαράντ + {0} φαράντ + + + ανρί + {0} ανρί + {0} ανρί + + + ζίμενς + {0} ζίμενς + {0} ζίμενς + + + θερμίδες ΙΤ + {0} θερμίδα IT + {0} θερμίδες IT + + + μπεκερέλ + {0} μπεκερέλ + {0} μπεκερέλ + + + sievert + {0} sievert + {0} sievert + + + γκρέυ + {0} γκρέυ + {0} γκρέυ + + + χιλιόγραμμα δύναμης + {0} χιλιόγραμμο δύναμης + {0} χιλιόγραμμα δύναμης + + + τέσλα + {0} τέσλα + {0} τέσλα + + + βέμπερ + {0} βέμπερ + {0} βέμπερ + neuter - φως {0} φως {0} φως φωτός @@ -7915,7 +8080,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} φως {0} φωτός - + neuter μέρη στο δισεκατομμύριο {0} μέρος στο δισεκατομμύριο @@ -8136,7 +8301,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} στοιχείο {0} στοιχεία - + + μέρος + {0} μέρος + {0} μέρη + + μέρη/εκατ. @@ -8153,6 +8323,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} μολ {0} μολ + + Glc + λίτρα/χλμ. {0} λίτρο/χλμ. @@ -8567,6 +8740,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} μετρ. κύπελλο {0} μετρ. κύπελλα + + μ. ουγγιά υγρ. + μ. ουγγιά υγρ. + {0} μ. ουγγιές υγρ. + ακρ πόδια {0} ακρ πδ @@ -8664,12 +8842,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} αγγλ. τέτ. γαλ. {0} αγγλ. τέτ. γαλ. + + {0} kat + {0} kat + + + cal-IT + φως {0} φως {0} φως - + μέρη/δισεκατομμύριο @@ -8801,7 +8986,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ τ. ίντσες - + + μέρος + {0} μέρος + {0} μέρη + + ppm @@ -8813,6 +9003,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Glc + λ/χλμ {0} λ/χλμ @@ -9054,6 +9247,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} μ. κύπ. {0} μ. κύπ. + + μ. ουγγιά υγρ. + {0} μ. ουγγιά υγρ. + {0} μ. ουγγιές υγρ. + ακρ πδ @@ -9074,16 +9272,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ δρ. όγκου + + {0} kat + {0} kat + + + cal-IT + φώς - {0} φως - {0} φως - - νύχτ. - {0} νύχτ. - {0} νύχτ. - {0}/νύχτ. + + ppb σημεία diff --git a/make/data/cldr/common/main/en.xml b/make/data/cldr/common/main/en.xml index ae1e61a78df..31114de0f39 100644 --- a/make/data/cldr/common/main/en.xml +++ b/make/data/cldr/common/main/en.xml @@ -100,6 +100,7 @@ annotations. Tibetan Bishnupriya Bakhtiari + Luri Bakhtiari Breton Braj Brahui @@ -132,6 +133,8 @@ annotations. Cheyenne Chickasaw Central Kurdish + Kurdish + Central Kurdish, Central Kurdish, Sorani Chilcotin @@ -312,6 +315,7 @@ annotations. Tyap Makonde Kabuverdianu + Qʼeqchiʼ Kenyang Koro Kongo @@ -346,6 +350,8 @@ annotations. Bafia Colognian Kurdish + Kurdish + Kurmanji Kumyk Kutenai Komi @@ -474,6 +480,7 @@ annotations. Oji-Cree Western Ojibwa Okanagan + Colville Salish Oromo Odia Ossetic @@ -493,6 +500,7 @@ annotations. Palatine German Phoenician Pali + Pāli Pijin Polish Piedmontese @@ -544,6 +552,8 @@ annotations. Sindhi Sassarese Sardinian Southern Kurdish + Kurdish + Southern Northern Sami Sami, Northern Seneca @@ -615,7 +625,7 @@ annotations. Tigre Tiv Turkmen - Tokelau + Tokelauan Tsakhur Tagalog Klingon @@ -721,6 +731,7 @@ annotations. + @@ -869,6 +880,7 @@ annotations. + @@ -889,6 +901,7 @@ annotations. + @@ -899,6 +912,7 @@ annotations. + @@ -1284,7 +1298,7 @@ annotations. Oseacco/Osojane dialect Oxford English Dictionary spelling Pamaka dialect - Pinyin Romanization + Pinyin romanization Polytonic Computer Revised Orthography @@ -1300,7 +1314,7 @@ annotations. Unified Revised Orthography Unifon phonetic alphabet Valencian - Wade-Giles Romanization + Wade-Giles romanization Calendar @@ -1317,15 +1331,15 @@ annotations. Currency Transform Destination Dictionary Break Exclusions - Emoji Presentation Style + Emoji Presentation First day of week Mixed-in Hour Cycle (12 vs 24) Input Method Keyboard Highest Ignored - Line Break Style - Line Breaks In Words Setting + CJK Line Break + Line Breaks within Words Transform Rules Measurement System Measurement Unit @@ -1333,7 +1347,7 @@ annotations. Region For Supplemental Data Transform Source Region Subdivision - Sentence Break Suppressions Type + Sentence Break After Abbr. Transform Machine Translated Time Zone @@ -1343,25 +1357,47 @@ annotations. Buddhist Calendar + Buddhist Chinese Calendar + Chinese Coptic Calendar + Coptic Dangi Calendar + Dangi Ethiopic Calendar + Ethiopic Ethiopic Amete Alem Calendar + Ethiopic Amete Alem Gregorian Calendar + Gregorian Hebrew Calendar + Hebrew Indian National Calendar + Indian National Hijri Calendar + Hijri Hijri Calendar (tabular, civil epoch) + Hijri (tabular, civil epoch) Hijri Calendar (Saudi Arabia, sighting) + + Hijri, Saudi Arabia sighting Hijri Calendar (tabular, astronomical epoch) + Hijri (tabular, astronomical epoch) Hijri Calendar (Umm al-Qura) - ISO-8601 Calendar + Hijri (Umm al-Qura) + Gregorian Calendar (ISO 8601 Weeks) + ISO 8601 Weeks + Gregorian Japanese Calendar + Japanese Persian Calendar + Persian Minguo Calendar + Minguo Accounting Currency Format + Accounting Standard Currency Format + Standard Sort Symbols Sort Ignoring Symbols Sort Accents Normally @@ -1371,23 +1407,36 @@ annotations. Sort Uppercase First Sort Case Insensitive Sort Case Sensitive - Traditional Chinese Sort Order - Big5 Previous Sort Order, for compatibility + Compatibility Dictionary Sort Order + Dictionary Default Unicode Sort Order + Default Unicode Emoji Sort Order + Emoji European Ordering Rules - Simplified Chinese Sort Order - GB2312 + European rules Phonebook Sort Order + Phonebook Phonetic Sort Order + Phonetic Pinyin Sort Order + Pinyin General-Purpose Search + Search Search By Hangul Initial Consonant + Korean initial consonant Standard Sort Order + Standard Stroke Sort Order + Stroke Traditional Sort Order + Traditional Radical-Stroke Sort Order + Radical-Stroke Zhuyin Sort Order + Zhuyin Sort Without Normalization Sort Unicode Normalized Sort Digits Individually @@ -1425,21 +1474,28 @@ annotations. To Titlecase To Uppercase To Zawgyi Myanmar Encoding - Use Default Presentation For Emoji Characters - Prefer Emoji Presentation For Emoji Characters - Prefer Text Presentation For Emoji Characters - First Day of Week Is Friday - First Day of Week Is Monday - First Day of Week Is Saturday - First Day of Week Is Sunday - First Day of Week Is Thursday - First Day of Week Is Tuesday - First Day of Week Is Wednesday + Default Presentation For Emoji + Default + Emoji Presentation For Emoji + Emoji + Text Presentation For Emoji + Text + First day of week: Friday + First day of week: Monday + First day of week: Saturday + First day of week: Sunday + First day of week: Thursday + First day of week: Tuesday + First day of week: Wednesday Hybrid 12 Hour System (0–11) + 12 (0–11) 12 Hour System (1–12) + 12 (1–12) 24 Hour System (0–23) + 24 (0–23) 24 Hour System (1–24) + 24 (1–24) Handwriting Input Method Pinyin Input Method Unspecified Input Method @@ -1474,16 +1530,42 @@ annotations. Vietnamese VIQR Keyboard Windows Keyboard Ignore Symbols affects spaces, punctuation, all symbols + + Shift Spaces, punctuation, all symbols Ignore Symbols affects spaces and punctuation only + Shift spaces, punctuation Ignore Symbols affects spaces only + Shift spaces, punctuation Ignore Symbols affects spaces, punctuation, non-currency symbols + Shift spaces, punctuation, non-currency symbols Loose Line Break Style + Loose Normal Line Break Style + Normal Strict Line Break Style + Strict Allow Line Breaks In All Words + Break all Prevent Line Breaks In All Words + Keep all Normal Line Breaks For Words + Normal Prevent Line Breaks In Phrases + Keep in phrases Encylopedia Aethiopica Transliteration US ALA-LOC Transliteration Beta Maṣāḥǝft Transliteration @@ -1517,8 +1599,11 @@ annotations. Hex transform using XML syntax Hex transform using XML decimal syntax Metric System + Metric Imperial Measurement System + UK US Measurement System + US Celsius Fahrenheit Kelvin @@ -1527,8 +1612,10 @@ annotations. Arabic-Indic Digits Extended Arabic-Indic Digits X Arabic-Indic Digits + Extended Arabic-Indic Armenian Numerals Armenian Lowercase Numerals + Armenian lowercase Balinese Digits Bangla Digits Bhaiksuki Digits @@ -1540,29 +1627,38 @@ annotations. Dives Akuru Digits Ethiopic Numerals Financial Numerals + Financial Full-Width Digits + Full-width Garay Digits Georgian Numerals Gunjala Gondi digits Masaram Gondi digits Greek Numerals Greek Lowercase Numerals + Greek lowercase Gujarati Digits Gurung Khema Digits Gurmukhi Digits Chinese Calendar Day-of-Month Numerals + Han-character day-of-month numbering for traditional calendars Chinese Decimal Numerals + Positional decimal system using Chinese number ideographs as digits Simplified Chinese Numerals Simplified Chinese Financial Numerals + Simplified Chinese financial Traditional Chinese Numerals Traditional Chinese Financial Numerals + Traditional Chinese financial Hebrew Numerals Pahawh Hmong Digits Nyiakeng Puachue Hmong Digits Javanese Digits Japanese Numerals Japanese Financial Numerals + Japanese financial Japanese Calendar Gannen Year Numerals + Japanese first-year Gannen numbering Kayah Li Digits Kawi Digits Khmer Digits @@ -1570,15 +1666,21 @@ annotations. Kirat Rai Digits Tai Tham Hora Digits Tai Tham Tham Digits + Tai Tham Tham (ecclesiastical) Lao Digits Western Digits Lepcha Digits Limbu Digits Mathematical Bold Digits + Mathematical bold Mathematical Double-Struck Digits + Mathematical double-struck Mathematical Monospace Digits + Mathematical monospace Mathematical Sans-Serif Bold Digits + Mathematical sans-serif bold Mathematical Sans-Serif Digits + Mathematical sans-serif Malayalam Digits Modi Digits Mongolian Digits @@ -1586,11 +1688,16 @@ annotations. Meetei Mayek Digits Myanmar Digits Myanmar Eastern Pwo Karen Digits + Myanmar Eastern Pwo Karen Myanmar Pao Digits + Myanmar Pao Myanmar Shan Digits + Myanmar Shan Myanmar Tai Laing Digits + Myanmar Tai Laing Nag Mundari Digits Native Digits + Native digits Newa Digits N’Ko Digits Ol Chiki Digits @@ -1598,11 +1705,15 @@ annotations. Odia Digits Osmanya Digits Outlined Digits + Outlined Hanifi Rohingya digits Roman Numerals + Roman uppercase Roman Lowercase Numerals + Roman lowercase Saurashtra Digits Segmented Digits + Segmented Sharada Digits Khudawadi Digits Sinhala Lith Digits @@ -1613,12 +1724,15 @@ annotations. New Tai Lue Digits Traditional Tamil Numerals Tamil Digits + Modern Tamil Telugu Digits Thai Digits Tibetan Digits Tirhuta Digits Tangsa Digits + Tolong Siki Digits Traditional Numerals + Traditional numerals Vai Digits Warang Citi Digits Wancho Digits @@ -1630,9 +1744,12 @@ annotations. From Publishing Punctuation To ASCII From Zawgyi Myanmar Encoding Sentence Breaks Without Abbreviation Handling + Off Suppress Sentence Breaks After Standard Abbreviations + On Unspecified Machine Translation POSIX Compliant Locale + POSIX variant Metric @@ -1671,8 +1788,9 @@ annotations. [a b c d e f g h i j k l m n o p q r s t u v w x y z] [áàăâåäãā æ ç éèĕêëē íìĭîïī ñ óòŏôöøō œ úùŭûüū ÿ] [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] - [\- ‑ , . % ‰ + 0 1 2 3 4 5 6 7 8 9] + [\- ‑ , . % ‰ + − 0 1 2 3 4 5 6 7 8 9] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [\- ‐‑ , . /] @@ -1820,6 +1938,9 @@ annotations. {1} 'at' {0} + + {1} 'at' {0} + @@ -1828,6 +1949,9 @@ annotations. {1} 'at' {0} + + {1} 'at' {0} + @@ -1845,9 +1969,12 @@ annotations. h:mm:ss B d ccc + E h B E h:mm B E h:mm:ss B d E + E h a + E h a E h:mm a E h:mm a E HH:mm @@ -1870,6 +1997,9 @@ annotations. h:mm:ss a h:mm:ss a HH:mm:ss + h a v + h a v + HH'h' v L M/d E, M/d @@ -2002,6 +2132,16 @@ annotations. + + + + Anno Martyrum + + + AM + + + @@ -2024,7 +2164,7 @@ annotations. - M/d/y GGGGG + M/d/y G GGGGGyMd @@ -2037,6 +2177,9 @@ annotations. {1} 'at' {0} + + {1} 'at' {0} + @@ -2045,6 +2188,9 @@ annotations. {1} 'at' {0} + + {1} 'at' {0} + @@ -2053,6 +2199,9 @@ annotations. {1}, {0} + + {1}, {0} + @@ -2061,6 +2210,9 @@ annotations. {1}, {0} + + {1}, {0} + h B @@ -2068,9 +2220,12 @@ annotations. h:mm:ss B d ccc + E h B E h:mm B E h:mm:ss B d E + E h a + E h a E h:mm a E h:mm a E HH:mm @@ -2078,7 +2233,9 @@ annotations. E h:mm:ss a E HH:mm:ss y G - M/d/y GGGGG + M/y G + M/d/y G + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -2091,6 +2248,9 @@ annotations. h:mm:ss a h:mm:ss a HH:mm:ss + h a v + h a v + HH'h' v L M/d E, M/d @@ -2101,9 +2261,9 @@ annotations. mm:ss y G y G - M/y GGGGG - M/d/y GGGGG - E, M/d/y GGGGG + M/y G + M/d/y G + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -2143,21 +2303,21 @@ annotations. y – y G - M/y GGGGG – M/y GGGGG - M/y – M/y GGGGG - M/y – M/y GGGGG + M/y G – M/y G + M/y – M/y G + M/y – M/y G - M/d/y – M/d/y GGGGG - M/d/y GGGGG – M/d/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG + M/d/y – M/d/y G + M/d/y G – M/d/y G + M/d/y – M/d/y G + M/d/y – M/d/y G - E, M/d/y – E, M/d/y GGGGG - E, M/d/y GGGGG – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG + E, M/d/y – E, M/d/y G + E, M/d/y G – E, M/d/y G + E, M/d/y – E, M/d/y G + E, M/d/y – E, M/d/y G MMM y G – MMM y G @@ -2234,18 +2394,18 @@ annotations. y – y G - M/y – M/y GGGGG - M/y – M/y GGGGG + M/y – M/y G + M/y – M/y G - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG + M/d/y – M/d/y G + M/d/y – M/d/y G + M/d/y – M/d/y G - E, M/d/y – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG + E, M/d/y – E, M/d/y G + E, M/d/y – E, M/d/y G + E, M/d/y – E, M/d/y G MMM – MMM y G @@ -2631,6 +2791,9 @@ annotations. {1} 'at' {0} + + {1} 'at' {0} + @@ -2639,6 +2802,9 @@ annotations. {1} 'at' {0} + + {1} 'at' {0} + @@ -2647,6 +2813,9 @@ annotations. {1}, {0} + + {1}, {0} + @@ -2655,6 +2824,9 @@ annotations. {1}, {0} + + {1}, {0} + h B @@ -2662,9 +2834,12 @@ annotations. h:mm:ss B d ccc + E h B E h:mm B E h:mm:ss B d E + E h a + E h a E h:mm a E h:mm a E HH:mm @@ -2672,7 +2847,9 @@ annotations. E h:mm:ss a E HH:mm:ss y G + M/y G M/d/y G + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -2691,6 +2868,9 @@ annotations. h:mm a v h:mm a v HH:mm v + h a v + h a v + HH'h' v L M/d E, M/d @@ -3157,8 +3337,13 @@ annotations. + + Anno Hegirae + Before Hijrah + AH + BH @@ -3179,7 +3364,7 @@ annotations. - M/d/y GGGGG + M/d/y G @@ -3189,7 +3374,9 @@ annotations. ccc d E y G - M/d/y GGGGG + M/y G + M/d/y G + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -3202,9 +3389,9 @@ annotations. MMMM d y G y G - M/y GGGGG - M/d/y GGGGG - E, M/d/y GGGGG + M/y G + M/d/y G + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -3241,6 +3428,89 @@ annotations. + + + + {1} 'at' {0} + + + {1} 'at' {0} + + + {1} 'at' {0} + + + + + {1} 'at' {0} + + + {1} 'at' {0} + + + {1} 'at' {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + d + ccc + d E + EEEE d + y G + M/y GGGGG + M/d/y GGGGG + E, M/d/y GGGGG + MMM y G + MMM d, y G + E, MMM d, y G + EEEE, MMM d, y G + L + M/d + E, M/d + EEEE, M/d + LLL + MMM d + E, MMM d + EEEE, MMM d + MMMM d + y G + y G + M/y GGGGG + M/d/y GGGGG + E, M/d/y GGGGG + EEEE, MMMM d, y G + MM y GGGGG + MMM y G + MMM d, y G + E, MMM d, y G + EEEE, MMMM d, y G + MMMM y G + QQQ y G + QQQQ y G + + @@ -3911,20 +4181,40 @@ annotations. {0} Daylight Time {0} Standard Time {1} ({0}) - - - HST - HST - HDT - - Coordinated Universal Time - Unknown City + Unknown Location + + + Rothera Station + + + Palmer Land + + + Troll Station + + + Showa Station + + + Mawson Station + + + Vostok Station + + + Casey Station + + + Dumont d’Urville Station + + + McMurdo Station Macquarie Island @@ -3941,6 +4231,15 @@ annotations. Christmas Island + + Galápagos Islands + + + Canaries + + + Faroes + British Summer Time @@ -3951,12 +4250,48 @@ annotations. Irish Standard Time + + Chagos Archipelago + + + Canton Island + + + Comoros + + + Aktau + Kostanay + + Kyzylorda + + + Kwajalein Atoll + + + Mexico City + Norfolk Island + + Chatham Islands + + + Marquesas Islands + + + Pitcairn Islands + + + Kerguelen Islands + + + Midway Atoll + Wake Island @@ -3992,9 +4327,7 @@ annotations. - West Africa Time - West Africa Standard Time - West Africa Summer Time + West Africa Time @@ -4422,6 +4755,14 @@ annotations. Guyana Time + + + Hawaii-Aleutian Standard Time + + + HST + + Hawaii-Aleutian Time @@ -4443,9 +4784,9 @@ annotations. - Hovd Time - Hovd Standard Time - Hovd Summer Time + Khovd Time + Khovd Standard Time + Khovd Summer Time @@ -4777,9 +5118,9 @@ annotations. - Qyzylorda Time - Qyzylorda Standard Time - Qyzylorda Summer Time + Kyzylorda Time + Kyzylorda Standard Time + Kyzylorda Summer Time @@ -4877,6 +5218,13 @@ annotations. Chuuk Time + + + Türkiye Time + Türkiye Standard Time + Türkiye Summer Time + + Turkmenistan Time @@ -5042,6 +5390,12 @@ annotations. + + {0}⁄{1} + {0} {1} + {0}⁠{1} + sometimes + @@ -5866,9 +6220,9 @@ annotations. KES - Kyrgystani Som - Kyrgystani som - Kyrgystani soms + Kyrgyz Som + Kyrgyz som + Kyrgyz soms KGS @@ -6823,12 +7177,12 @@ annotations. {0}+ - {0} day - {0} days - Take the {0}rd right. - Take the {0}st right. - Take the {0}th right. - Take the {0}nd right. + {0} day + {0} days + Take the {0}rd right. + Take the {0}st right. + Take the {0}th right. + Take the {0}nd right. @@ -7055,7 +7409,12 @@ annotations. {0} item {0} items - + + parts + {0} part + {0} parts + + parts per million {0} part per million {0} parts per million @@ -7080,6 +7439,11 @@ annotations. {0} mole {0} moles + + of glucose + {0} of glucose + {0} of glucose + liters per kilometer {0} liter per kilometer @@ -7617,6 +7981,11 @@ annotations. {0} millimeter of mercury {0} millimeters of mercury + + of mercury + {0} of mercury + {0} of mercury + pounds-force per square inch {0} pound-force per square inch @@ -7795,6 +8164,11 @@ annotations. {0} metric cup {0} metric cups + + metric fluid ounces + {0} metric fluid ounce + {0} metric fluid ounces + acre-feet {0} acre-foot @@ -7827,11 +8201,21 @@ annotations. {0} pint {0} pints + + pints Imperial + {0} pint Imperial + {0} pints Imperial + cups {0} cup {0} cups + + cups Imperial + {0} cup Imperial + {0} cups Imperial + fluid ounces {0} fluid ounce @@ -7892,17 +8276,202 @@ annotations. {0} Imp. quart {0} Imp. quarts + + steradians + {0} steradian + {0} steradians + + + katals + {0} katal + {0} katals + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + calories [IT] + {0} calorie [IT] + {0} calories [IT] + + + British thermal units [IT] + {0} British thermal unit [IT] + {0} British thermal units [IT] + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + kilograms-force + {0} kilogram-force + {0} kilograms-force + + + rods + {0} rod + {0} rods + + + chains + {0} chain + {0} chains + + + teslas + {0} tesla + {0} teslas + + + webers + {0} weber + {0} webers + + + rankines + {0} rankine + {0} rankines + + + fortnights + {0} fortnight + {0} fortnights + + + slugs + {0} slug + {0} slugs + of gasoline equivalent {0} of gasoline equivalent {0} of gasoline equivalent + + rin [JP] + {0} rin [JP] + {0} rin [JP] + + + sun [JP] + {0} sun [JP] + {0} sun [JP] + + + shaku [JP] + {0} shaku [JP] + {0} shaku [JP] + + + shaku [cloth, JP] + {0} shaku [cloth, JP] + {0} shaku [cloth, JP] + + + ken [JP] + {0} ken [JP] + {0} ken [JP] + + + jo [JP] + {0} jo [JP] + {0} jo [JP] + + + ri [JP] + {0} ri [JP] + {0} ri [JP] + + + bu [JP] + {0} bu [JP] + {0} bu [JP] + + + se [JP] + {0} se [JP] + {0} se [JP] + + + cho [JP] + {0} cho [JP] + {0} cho [JP] + + + kosaji [JP] + {0} kosaji [JP] + {0} kosaji [JP] + + + osaji [JP] + {0} osaji [JP] + {0} osaji [JP] + + + cup [JP] + {0} cup [JP] + {0} cup [JP] + + + shaku [volume, JP] + {0} shaku [volume, JP] + {0} shaku [volume, JP] + + + sai [JP] + {0} sai [JP] + {0} sai [JP] + + + to [JP] + {0} to [JP] + {0} to [JP] + + + koku [JP] + {0} koku [JP] + {0} koku [JP] + light {0} light {0} light - + + fun [JP] + {0} fun [JP] + {0} fun [JP] + + parts per billion {0} part per billion {0} parts per billion @@ -8144,7 +8713,12 @@ annotations. {0} item {0} items - + + part + {0} part + {0} part + + parts/million {0} ppm {0} ppm @@ -8169,6 +8743,11 @@ annotations. {0} mol {0} mol + + Glc + {0} Glc + {0} Glc + liters/km {0} L/km @@ -8706,6 +9285,11 @@ annotations. {0} mmHg {0} mmHg + + of Hg + {0} of Hg + {0} of Hg + psi {0} psi @@ -8884,6 +9468,11 @@ annotations. {0} mc {0} mc + + fl oz m. + {0} fl oz m. + {0} fl oz m. + acre ft {0} ac ft @@ -8915,11 +9504,21 @@ annotations. {0} pt {0} pt + + pt Imp. + {0} pt Imp. + {0} pt Imp. + cups {0} c {0} c + + cup Imp + {0} cup Imp. + {0} cup Imp. + fl oz {0} fl oz @@ -8980,17 +9579,202 @@ annotations. {0} qt-Imp. {0} qt-Imp. + + sr + {0} sr + {0} sr + + + kat + {0} kat + {0} kat + + + C + {0} C + {0} C + + + F + {0} F + {0} F + + + H + {0} H + {0} H + + + S + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + BTU-IT + {0} BTU-IT + {0} BT-IT + + + Bq + {0} Bq + {0} Bq + + + Sv + {0} Sv + {0} Sv + + + Gy + {0} Gy + {0} Gy + + + kgf + {0} kgf + {0} kgf + + + rd + {0} rd + {0} rd + + + ch + {0} ch + {0} ch + + + T + {0} T + {0} T + + + Wb + {0} Wb + {0} Wb + + + °R + {0} °R + {0} °R + + + fw + {0} fw + {0} fw + + + slug + {0} slug + {0} slug + gas-equiv {0} gas-equiv {0} gas-equiv + + rin [JP] + {0} rin [JP] + {0} rin [JP] + + + sun [JP] + {0} sun [JP] + {0} sun [JP] + + + shaku [JP] + {0} shaku [JP] + {0} shaku [JP] + + + shaku [cloth, JP] + {0} shaku [cloth, JP] + {0} shaku [cloth, JP] + + + ken [JP] + {0} ken [JP] + {0} ken [JP] + + + jo [JP] + {0} jo [JP] + {0} jo [JP] + + + ri [JP] + {0} ri [JP] + {0} ri [JP] + + + bu [JP] + {0} bu [JP] + {0} bu [JP] + + + se [JP] + {0} se [JP] + {0} se [JP] + + + cho [JP] + {0} cho [JP] + {0} cho [JP] + + + kosaji [JP] + {0} kosaji [JP] + {0} kosaji [JP] + + + osaji [JP] + {0} osaji [JP] + {0} osaji [JP] + + + cup [JP] + {0} cup [JP] + {0} cup [JP] + + + shaku [vol, JP] + {0} shaku [vol, JP] + {0} shaku [vol, JP] + + + sai [JP] + {0} sai [JP] + {0} sai [JP] + + + to [JP] + {0} to [JP] + {0} to [JP] + + + koku [JP] + {0} koku [JP] + {0} koku [JP] + light {0} light {0} light - + + fun [JP] + {0} fun [JP] + {0} fun [JP] + + parts/billion {0} ppb {0} ppb @@ -9230,7 +10014,12 @@ annotations. {0}item {0}items - + + part + {0} part + {0} part + + ppm {0}ppm {0}ppm @@ -9255,6 +10044,11 @@ annotations. {0}mol {0}mol + + Glc + {0} Glc + {0} Glc + L/km {0}L/km @@ -9792,6 +10586,11 @@ annotations. {0}mmHg {0}mmHg + + of Hg + {0} of Hg + {0} of Hg + psi {0}psi @@ -9970,6 +10769,11 @@ annotations. {0}mc {0}mc + + fl oz m. + {0} fl oz m. + {0} fl oz m. + acre ft {0}ac ft @@ -9988,8 +10792,8 @@ annotations. Imp gal - {0}galIm - {0}galIm + {0}gal-Im + {0}gal-Im {0}/galIm @@ -10002,11 +10806,21 @@ annotations. {0}pt {0}pt + + pt Imp. + {0} pt Imp. + {0} pt Imp. + cup {0}c {0}c + + cup Imp + {0} cup Imp. + {0} cup Imp. + fl oz {0}fl oz @@ -10067,17 +10881,202 @@ annotations. {0}qt-Imp. {0}qt-Imp. + + sr + {0} sr + {0} sr + + + kat + {0} kat + {0} kat + + + C + {0} C + {0} C + + + F + {0} F + {0} F + + + H + {0} H + {0} H + + + S + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + BTU-IT + {0} BTU-IT + {0} BT-IT + + + Bq + {0} Bq + {0} Bq + + + Sv + {0} Sv + {0} Sv + + + Gy + {0} Gy + {0} Gy + + + kgf + {0} kgf + {0} kgf + + + rd + {0} rd + {0} rd + + + ch + {0} ch + {0} ch + + + T + {0} T + {0} T + + + Wb + {0} Wb + {0} Wb + + + °R + {0} °R + {0} °R + + + fw + {0} fw + {0} fw + + + slug + {0} slug + {0} slug + gas-equiv {0}gas-equiv {0}gas-equiv + + rin [JP] + {0} rin [JP] + {0} rin [JP] + + + sun [JP] + {0} sun [JP] + {0} sun [JP] + + + shaku [JP] + {0} shaku [JP] + {0} shaku [JP] + + + shaku [cloth, JP] + {0} shaku [cloth, JP] + {0} shaku [cloth, JP] + + + ken [JP] + {0} ken [JP] + {0} ken [JP] + + + jo [JP] + {0} jo [JP] + {0} jo [JP] + + + ri [JP] + {0} ri [JP] + {0} ri [JP] + + + bu [JP] + {0} bu [JP] + {0} bu [JP] + + + se [JP] + {0} se [JP] + {0} se [JP] + + + cho [JP] + {0} cho [JP] + {0} cho [JP] + + + kosaji [JP] + {0} kosaji [JP] + {0} kosaji [JP] + + + osaji [JP] + {0} osaji [JP] + {0} osaji [JP] + + + cup [JP] + {0} cup [JP] + {0} cup [JP] + + + shaku [vol, JP] + {0} shaku [vol, JP] + {0} shaku [vol, JP] + + + sai [JP] + {0} sai [JP] + {0} sai [JP] + + + to [JP] + {0} to [JP] + {0} to [JP] + + + koku [JP] + {0} koku [JP] + {0} koku [JP] + light {0}light {0}light - + + fun [JP] + {0} fun [JP] + {0} fun [JP] + + ppb {0}ppb {0}ppb diff --git a/make/data/cldr/common/main/en_001.xml b/make/data/cldr/common/main/en_001.xml index b538c4a2de7..1449bda6c0e 100644 --- a/make/data/cldr/common/main/en_001.xml +++ b/make/data/cldr/common/main/en_001.xml @@ -164,6 +164,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d dd/MM/y GGGGG + E, dd/MM/y G d MMM y G E, d MMM y G LL @@ -323,7 +324,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d - d/M/y G + dd/MM/y G + E, dd/MM/y G d MMM y G E, d MMM y G dd/MM @@ -460,14 +462,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E d dd/MM/y GGGGG + E, dd/MM/y G d MMM y G E, d MMM y G + LL dd/MM E dd/MM d MMM E d MMM d MMMM + MM/y GGGGG dd/MM/y GGGGG E, dd/MM/y GGGGG d MMM y G @@ -475,6 +481,128 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + + EEEE, d MMMM y G + + + + + d MMMM y G + + + + + d MMM y G + + + + + dd/MM/y GGGGG + GGGGGyMMdd + + + + + + E d + dd/MM/y GGGGG + d MMM y G + E, d MMM y G + LL + dd/MM + E, dd/MM + d MMM + E, d MMM + d MMMM + MM/y GGGGG + dd/MM/y GGGGG + E, dd/MM/y GGGGG + d MMM y G + E, d MMM y G + + + + d–d + + + y–y G + + + dd/MM/y – dd/MM/y GGGGG + dd/MM/y GGGGG – dd/MM/y GGGGG + dd/MM/y – dd/MM/y GGGGG + dd/MM/y – dd/MM/y GGGGG + + + E, dd/MM/y – E, dd/MM/y GGGGG + E, dd/MM/y GGGGG – E, dd/MM/y GGGGG + E, dd/MM/y – E, dd/MM/y GGGGG + E, dd/MM/y – E, dd/MM/y GGGGG + + + d–d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G + + + E, d MMM – E, d MMM y G + E, d MMM y G – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G + + + M–M + + + dd/MM – dd/MM + dd/MM – dd/MM + + + E dd/MM – E dd/MM + E dd/MM – E dd/MM + + + d–d MMM + d MMM – d MMM + + + E d – E d MMM + E d MMM – E d MMM + + + y–y G + + + MM/y – MM/y GGGGG + MM/y – MM/y GGGGG + + + dd/MM/y – dd/MM/y GGGGG + dd/MM/y – dd/MM/y GGGGG + dd/MM/y – dd/MM/y GGGGG + + + E, dd/MM/y – E, dd/MM/y GGGGG + E, dd/MM/y – E, dd/MM/y GGGGG + E, dd/MM/y – E, dd/MM/y GGGGG + + + d–d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G + + + E, d – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G + + + + @@ -778,28 +906,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - ∅∅∅ - ∅∅∅ - ∅∅∅ - - St Barthélemy St John’s - - Enderbury - St Kitts - - Aktau - St Lucia @@ -854,6 +969,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ∅∅∅ + + + ∅∅∅ + + ∅∅∅ diff --git a/make/data/cldr/common/main/en_150.xml b/make/data/cldr/common/main/en_150.xml index 412dd61dbb2..d895be5ea9c 100644 --- a/make/data/cldr/common/main/en_150.xml +++ b/make/data/cldr/common/main/en_150.xml @@ -71,9 +71,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 diff --git a/make/data/cldr/common/main/en_AE.xml b/make/data/cldr/common/main/en_AE.xml index 87a19fe34dd..c6dedc7e9dd 100644 --- a/make/data/cldr/common/main/en_AE.xml +++ b/make/data/cldr/common/main/en_AE.xml @@ -286,13 +286,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - ∅∅∅ - ∅∅∅ - ∅∅∅ - - ∅∅∅ @@ -340,6 +333,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ GST + + + ∅∅∅ + + ∅∅∅ diff --git a/make/data/cldr/common/main/en_AT.xml b/make/data/cldr/common/main/en_AT.xml index de4ddc030d3..b5e5c78b5e7 100644 --- a/make/data/cldr/common/main/en_AT.xml +++ b/make/data/cldr/common/main/en_AT.xml @@ -28,9 +28,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 diff --git a/make/data/cldr/common/main/en_AU.xml b/make/data/cldr/common/main/en_AU.xml index 923e42942d0..1336f9887bd 100644 --- a/make/data/cldr/common/main/en_AU.xml +++ b/make/data/cldr/common/main/en_AU.xml @@ -24,11 +24,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic World - St. Barthélemy - St. Kitts & Nevis - St. Lucia - St. Martin - St. Vincent & Grenadines + Antigua and Barbuda + Bosnia and Herzegovina + Ceuta and Melilla + South Georgia and South Sandwich Islands + Heard Island and McDonald Islands + St Kitts and Nevis + St Pierre and Miquelon + Svalbard and Jan Mayen + São Tomé and Príncipe + Turks and Caicos Islands + Trinidad and Tobago + St Vincent and the Grenadines + Wallis and Futuna Upper case / Lower case Ordering @@ -43,50 +51,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - - EEEE d MMMM y G - - - - - d MMMM y G - - - - - d MMM y G - - - - - dd/MM/y GGGGG - - - - - - {1}, {0} - - - - - {1}, {0} - - - - - {1}, {0} - - - - - {1}, {0} - - + E, d/M/y G EEEE d MMM y G EEEE d MMM EEEE d MMMM @@ -154,22 +121,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dec - - - Jan - Feb - Mar - Apr - May - June - July - Aug - Sept - Oct - Nov - Dec - - @@ -335,10 +286,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - E d - LL E, d MMM - MM/y GGGGG @@ -466,6 +414,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + Wallis and Futuna + ACT @@ -501,6 +452,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic China Summer Time + + + French Southern and Antarctic Time + + Japan Time @@ -765,13 +721,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic arcmin. - {0} arcmin. - {0} arcmin. - - - arcsec. - {0} arcsec. - {0} arcsec. mg/dL @@ -794,16 +743,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} L/100 km {0} L/100 km - - miles/gal. US - {0} m.p.g. US - {0} m.p.g. US - - - miles/gal. - {0} m.p.g. - {0} m.p.g. - C {0} C @@ -826,16 +765,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} CM {0} CM - - mm Hg - {0} mm Hg - {0} mm Hg - - - in Hg - - mb {0} mb {0} mb diff --git a/make/data/cldr/common/main/en_CA.xml b/make/data/cldr/common/main/en_CA.xml index 924ad541521..0334e1eb826 100644 --- a/make/data/cldr/common/main/en_CA.xml +++ b/make/data/cldr/common/main/en_CA.xml @@ -164,7 +164,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d/M U-MM-dd d/M/U - d/M/r r-MM r-MM-dd d/M/r @@ -229,7 +228,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - M/d/y GGGGG + M/d/y G d/M/y GGGGG @@ -1030,7 +1029,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {0} Daylight Saving Time Saint-Barthélemy @@ -1043,9 +1041,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saint Lucia - - Rangoon - Saint Helena @@ -1055,197 +1050,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saint Thomas - - - AFT - - - - - Alaska Time - Alaska Standard Time - Alaska Daylight Saving Time - - - - - Central Time - Central Standard Time - Central Daylight Saving Time - - - - - Eastern Time - Eastern Standard Time - Eastern Daylight Saving Time - - - - - ART - - - - - ACWT - ACWST - ACWDT - - - - - AET - AEST - AEDT - - - - - AWST - AWDT - - - - - BST - - - - - BTT - - - - - BRT - BRST - - - - - BNT - - - - - CHAST - CHADT - - - - - CXT - - - - - CCT - - - - - COST - - - - - TLT - - - - - EAST - EASST - - - - - ECT - - - - - FKT - FKST - - French Southern and Antarctic Time - - - GALT - - - - - EGT - - - - - Gulf Time - - - - - GYT - - - - - IST - - - - - ICT - - - - - WITA - - - - - WIT - - - - - WIB - - - - - Iran Time - Iran Standard Time - Iran Daylight Saving Time - - - IRST - IRDT - - - - - MYT - - - - - MVT - - - - - NPT - - NT @@ -1253,32 +1062,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic NDT - - - FNT - - - - - PKT - - - - - PYT - PYST - - - - - PET - - Saint-Pierre-et-Miquelon Time Saint-Pierre-et-Miquelon Standard Time - Saint-Pierre-et-Miquelon Daylight Saving Time + Saint-Pierre-et-Miquelon Daylight Time PMT @@ -1286,24 +1074,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic PMDT - - - American Samoa Time - American Samoa Standard Time - Samoan Time - - - - - UYT - UYST - - - - - VET - - Wallis and Futuna Time @@ -1371,6 +1141,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic US$ + + Cg + unknown currency diff --git a/make/data/cldr/common/main/en_CH.xml b/make/data/cldr/common/main/en_CH.xml index 089854b073e..8a7cf48cef1 100644 --- a/make/data/cldr/common/main/en_CH.xml +++ b/make/data/cldr/common/main/en_CH.xml @@ -110,16 +110,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + ' · ¤ #,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 ¤ #,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 diff --git a/make/data/cldr/common/main/en_EE.xml b/make/data/cldr/common/main/en_EE.xml new file mode 100644 index 00000000000..08b7cc850d1 --- /dev/null +++ b/make/data/cldr/common/main/en_EE.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + , +   + + + diff --git a/make/data/cldr/common/main/en_GB.xml b/make/data/cldr/common/main/en_GB.xml index 2954f553cf4..73df8a91701 100644 --- a/make/data/cldr/common/main/en_GB.xml +++ b/make/data/cldr/common/main/en_GB.xml @@ -15,12 +15,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic Fulah + + + + + Line Breaks Within Words + + + Armenian Lowercase + Full-Width + Greek Lowercase + Simplified Chinese Financial + Traditional Chinese Financial + Japanese Financial + Native Digits + Roman Uppercase + Roman Lowercase + + E, d/M/y G EEEE, d MMM y G E dd/MM E d MMM @@ -126,7 +144,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - dd/MM/y G + E, d/M/y G EEEE, d MMM y G E dd/MM E d MMM @@ -136,15 +154,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic EEEE, d MMMM y + + d – d + EEEE d MMM – EEEE d MMM y G EEEE d MMM y G – EEEE d MMM y G EEEE d MMM – EEEE d MMM y G EEEE d MMM y – EEEE d MMM y G + + M – M + + + d – d MMM + E d MMM – E d MMM + + y – y + + + d – d MMM y + E, d MMM – E, d MMM y @@ -164,12 +197,69 @@ CLDR data files are interpreted according to the LDML specification (http://unic - E d + E, d/M/y G + + + + + + + + EEEE, d MMMM y G + + + + + d MMMM y G + + + + + d MMM y G + + + + + d/M/y GGGGG + + + + + + + {1} 'at' {0} + + + + + {1} 'at' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + d/M/y GGGGG + E, d/M/y GGGGG EEEE, d MMM y G - LL - MM/y GGGGG - EEEE, d MMM y G - EEEE, d MMMM y G + L + d/M + E, d/M + EEEE, d/M + EEEE, d MMM + EEEE, d MMMM + M/y GGGGG + d/M/y GGGGG + E, d/M/y GGGGG + EEEE, d MMMM y G + EEEE, d MMMM y G @@ -180,15 +270,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic BST - - Bahia Banderas - - - Merida - - - Cancun - CET @@ -217,6 +298,92 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + 0k + 0k + 00k + 00k + 000k + 000k + 0m + 0m + 00m + 00m + 000m + 000m + 0bn + 0bn + 00bn + 00bn + 000bn + 000bn + 0tn + 0tn + 00tn + 00tn + 000tn + 000tn + + + + + + + ¤0k + ¤ 0k + ¤0k + ¤ 0k + ¤00k + ¤ 00k + ¤00k + ¤ 00k + ¤000k + ¤ 000k + ¤000k + ¤ 000k + ¤0m + ¤ 0m + ¤0m + ¤ 0m + ¤00m + ¤ 00m + ¤00m + ¤ 00m + ¤000m + ¤ 000m + ¤000m + ¤ 000m + ¤0bn + ¤ 0bn + ¤0bn + ¤ 0bn + ¤00bn + ¤ 00bn + ¤00bn + ¤ 00bn + ¤000bn + ¤ 000bn + ¤000bn + ¤ 000bn + ¤0tn + ¤ 0tn + ¤0tn + ¤ 0tn + ¤00tn + ¤ 00tn + ¤00tn + ¤ 00tn + ¤000tn + ¤ 000tn + ¤000tn + ¤ 000tn + + + + {0} diff --git a/make/data/cldr/common/main/en_GE.xml b/make/data/cldr/common/main/en_GE.xml new file mode 100644 index 00000000000..9c38932c636 --- /dev/null +++ b/make/data/cldr/common/main/en_GE.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + , + + + + + + + + + diff --git a/make/data/cldr/common/main/en_IN.xml b/make/data/cldr/common/main/en_IN.xml index d40501175db..38729d7acf8 100644 --- a/make/data/cldr/common/main/en_IN.xml +++ b/make/data/cldr/common/main/en_IN.xml @@ -12,13 +12,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Bengali - - - - - Bengali Digits Oriya Digits @@ -299,7 +292,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - E d MMM, y G d MMM, y G E, d MMM, y G @@ -321,24 +313,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Kyzylorda - - - Khovd - GST - - - Khovd Time - Khovd Standard Time - Khovd Summer Time - - IST @@ -353,6 +332,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##,##0.### + + + 0 thousand + 0 thousand + 00 thousand + 00 thousand + 0 lakh + 0 lakh + 00 lakh + 00 lakh + 0 crore + 0 crore + 00 crore + 00 crore + 000 crore + 000 crore + 0000 crore + 0000 crore + 00000 crore + 00000 crore + 0 lakh crore + 0 lakh crore + 00 lakh crore + 00 lakh crore + 000 lakh crore + 000 lakh crore + + 0K @@ -393,8 +400,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##,##0.00 - ¤ #,##,##0.00 - #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 @@ -443,10 +450,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + Netherlands Antillean Guilder + Netherlands Antillean Guilders + Kyrgyzstani Som - Kyrgyzstani som - Kyrgyzstani soms + Kyrgyzstani Som + Kyrgyzstani Soms Kazakhstani Tenge @@ -477,9 +488,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Venezuelan bolívars - VEF - VEF - VEF + Venezuelan Bolívar + Venezuelan Bolívars + + + Caribbean Guilder + Caribbean Guilder + Caribbean Guilders + + + Zimbabwean Gold + Zimbabwean Gold diff --git a/make/data/cldr/common/main/en_JP.xml b/make/data/cldr/common/main/en_JP.xml new file mode 100644 index 00000000000..32e77fdbaf3 --- /dev/null +++ b/make/data/cldr/common/main/en_JP.xml @@ -0,0 +1,458 @@ + + + + + + + + + + + + + + + + EEEE, MMMM d, y G + + + + + MMMM d, y G + + + + + MMM d, y G + + + + + GGGGG y/MM/dd + + + + + + E H:mm + E H:mm:ss + G y + GGGGG y/MM/dd + H + H:mm + H:mm:ss + MM/dd + E, MM/dd + G y + G y + GGGGG y/MM + GGGGG y/MM/dd + GGGGG y/MM/dd, E + + + + G y – G y + G y – y + + + GGGGG y/MM – GGGGG y/MM + GGGGG y/MM – y/MM + GGGGG y/MM – y/MM + + + GGGGG y/MM/dd – y/MM/dd + GGGGG y/MM/dd – GGGGG y/MM/dd + GGGGG y/MM/dd – y/MM/dd + GGGGG y/MM/dd – y/MM/dd + + + GGGGG y/MM/dd, E – E, y/MM/dd, E + GGGGG y/MM/dd, E – GGGGG y/MM/dd, E + GGGGG y/MM/dd, E – y/MM/dd, E + GGGGG y/MM/dd, E – E, y/MM/dd, E + + + H – H + + + H:mm – H:mm + H:mm – H:mm + + + H:mm – H:mm v + H:mm – H:mm v + + + H – H v + + + MM/dd – MM/dd + MM/dd – MM/dd + + + E, MM/dd – E, MM/dd + E, MM/dd – E, MM/dd + + + GGGGG y/MM – y/MM + GGGGG y/MM – yMM + + + GGGGG y/MM/dd – y/MM/dd + GGGGG y/MM/dd – y/MM/dd + GGGGG y/MM/dd – y/MM/dd + + + GGGGG y/MM/dd, E – y/MM/dd, E + GGGGG y/MM/dd, E – y/MM/dd, E + GGGGG y/MM/dd, E – y/MM/dd, E + + + + + + + + + EEEE, MMMM d, y + + + + + MMMM d, y + + + + + MMM d, y + + + + + y/MM/dd + yMd + + + + + + + H:mm:ss zzzz + Hmmsszzzz + + + + + H:mm:ss z + Hmmssz + + + + + H:mm:ss + Hmmss + + + + + H:mm + Hmm + + + + + + y/MM/dd G + H + H:mm + H:mm:ss + H:mm:ss v + H:mm v + MM/y + y/MM/dd + E, y/MM/dd + + + + MM/y G – MM/y G + MM/y – MM/y G + MM/y – MM/y G + + + y/MM/dd – y/MM/dd G + y/MM/dd G – y/MM/dd G + y/MM/dd – y/MM/dd G + y/MM/dd – y/MM/dd G + + + E, y/MM/dd – E, y/MM/dd G + E, y/MM/dd G – E, y/MM/dd G + E, y/MM/dd – E, y/MM/dd G + E, y/MM/dd – E, y/MM/dd G + + + MM/y – MM/y + MM/y – MM/y + + + y/MM/dd – y/MM/dd + y/MM/dd – y/MM/dd + y/MM/dd – y/MM/dd + + + E, y/MM/dd – E, y/MM/dd + E, y/MM/dd – E, y/MM/dd + E, y/MM/dd – E, y/MM/dd + + + + + + + + + G y MMMM d, EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + GGGGG y/MM/dd + + + + + + G y + G y MMM d + G y MMM d, E + G y MMMM d, EEEE + G y + GGGGG y/MM + GGGGG y/MM/dd + GGGGG y/MM/dd EEEE + GGGGG y MMMM d, EEEE + GGGGG y MM + G y MMM + G y MMM d + G y MMM d, E + G y MMMM + G y QQQ + G y QQQQ + + + {0} – {1} + + h B – h B + h – h B + + + h:mm B – h:mm B + h:mm – h:mm B + h:mm – h:mm B + + + d – d + + + G y – G y + G y – y + + + G y/MM – G y/MM + G y/MM – y/MM + G y/MM – y/MM + + + G y/MM/dd – y/MM/dd + G y/MM/dd – G y/MM/dd + G y/MM/dd – y/MM/dd + G y/MM/dd – y/MM/dd + + + G y/MM/dd – y/MM/dd, E + G y/MM/dd – G y/MM/dd, E + G y/MM/dd, E – y/MM/dd, E + G y/MM/dd, E – y/MM/dd, E + + + G y MMM – G y MMM + G y MMM – MMM + G y MMM – y MMM + + + G y MMM d – d + G y MMM d – G y MMM d + G y MMM d – MMM d + G y MMM d – y MMM + + + G y MMM d, E – MMM d, E + G y MMM d, E – G y MMM d, E + G y MMM d, E – MMM d, E + G y MMM d, E – y MMM d, E + + + h a – h a + h – h a + + + HH – HH + + + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a + + + H:mm – H:mm + H:mm – H:mm + + + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v + + + H:mm – H:mm v + H:mm – H:mm v + + + h a – h a v + h – h a v + + + H – H v + + + M – M + + + M/d – M/d + M/d – M/d + + + MM/dd, E – MM/dd, E + M/dd, E – MM/dd, E + + + MMM – MMM + + + MMM d – d + MMM d – MMM d + + + E, MMM d – E, MMM d + E, MMM d – E, MMM d + + + y – y + + + y/MM – y/MM + y/MM – y/MM + + + y/MM/dd – y/MM/dd + y/MM/dd – y/MM/dd + y/MM/dd – y/MM/dd + + + y/MM/dd, E – y/MM/dd, E + y/MM/dd, E – y/MM/dd, E + y/MM/dd, E – y/MM/dd, E + + + y MMM – MMM + y MMM – y MMM + + + y MMM d – d + y MMM d – MMM d + y MMM d – y MMM d + + + y MMM d, E – E, MMM d, E + y MMM d, E – MMM d, E + y MMM d, E – y MMM d, E + + + y MMMM – MMMM + y MMMM – y MMMM + + + + + + + + + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + + + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + + + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + + + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + + + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + + + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + + + ∅∅∅ + + + + + ∅∅∅ + ∅∅∅ + ∅∅∅ + + + + + diff --git a/make/data/cldr/common/main/en_LT.xml b/make/data/cldr/common/main/en_LT.xml new file mode 100644 index 00000000000..c5c880fcc95 --- /dev/null +++ b/make/data/cldr/common/main/en_LT.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + , +   + + + diff --git a/make/data/cldr/common/main/en_LV.xml b/make/data/cldr/common/main/en_LV.xml new file mode 100644 index 00000000000..0dede606c74 --- /dev/null +++ b/make/data/cldr/common/main/en_LV.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + , +   + + + diff --git a/make/data/cldr/common/main/en_MH.xml b/make/data/cldr/common/main/en_MH.xml index 7f42c1cf96c..f48bd0b31be 100644 --- a/make/data/cldr/common/main/en_MH.xml +++ b/make/data/cldr/common/main/en_MH.xml @@ -13,13 +13,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - ∅∅∅ - ∅∅∅ - ∅∅∅ - - ∅∅∅ @@ -62,6 +55,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ∅∅∅ + + + ∅∅∅ + + ∅∅∅ diff --git a/make/data/cldr/common/main/en_MP.xml b/make/data/cldr/common/main/en_MP.xml index 43d42252bdd..285ca25a84c 100644 --- a/make/data/cldr/common/main/en_MP.xml +++ b/make/data/cldr/common/main/en_MP.xml @@ -13,13 +13,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - ∅∅∅ - ∅∅∅ - ∅∅∅ - - ∅∅∅ @@ -62,6 +55,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ∅∅∅ + + + ∅∅∅ + + ∅∅∅ diff --git a/make/data/cldr/common/main/en_MV.xml b/make/data/cldr/common/main/en_MV.xml index d6ebe136b06..b851e8ee2b0 100644 --- a/make/data/cldr/common/main/en_MV.xml +++ b/make/data/cldr/common/main/en_MV.xml @@ -97,6 +97,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 #,##0.00 diff --git a/make/data/cldr/common/main/en_NL.xml b/make/data/cldr/common/main/en_NL.xml index 7db1396ef36..e9bc5140768 100644 --- a/make/data/cldr/common/main/en_NL.xml +++ b/make/data/cldr/common/main/en_NL.xml @@ -20,9 +20,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;¤ -#,##0.00 + ¤ #,##0.00;¤ -#,##0.00 ¤ #,##0.00;(¤ #,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/en_PL.xml b/make/data/cldr/common/main/en_PL.xml index f450a26f0fd..61cd8e94f52 100644 --- a/make/data/cldr/common/main/en_PL.xml +++ b/make/data/cldr/common/main/en_PL.xml @@ -20,6 +20,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/en_PT.xml b/make/data/cldr/common/main/en_PT.xml index 83f5062f161..b1868f5d217 100644 --- a/make/data/cldr/common/main/en_PT.xml +++ b/make/data/cldr/common/main/en_PT.xml @@ -20,6 +20,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/en_RO.xml b/make/data/cldr/common/main/en_RO.xml index 26063dc6e4c..360ee380064 100644 --- a/make/data/cldr/common/main/en_RO.xml +++ b/make/data/cldr/common/main/en_RO.xml @@ -20,6 +20,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/en_SI.xml b/make/data/cldr/common/main/en_SI.xml index fa881408603..3cf0f92e428 100644 --- a/make/data/cldr/common/main/en_SI.xml +++ b/make/data/cldr/common/main/en_SI.xml @@ -21,6 +21,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/en_SK.xml b/make/data/cldr/common/main/en_SK.xml index 424e5132db9..d2c3f645ce2 100644 --- a/make/data/cldr/common/main/en_SK.xml +++ b/make/data/cldr/common/main/en_SK.xml @@ -21,6 +21,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/en_Shaw.xml b/make/data/cldr/common/main/en_Shaw.xml index 937d9e50698..7fedd656fc0 100644 --- a/make/data/cldr/common/main/en_Shaw.xml +++ b/make/data/cldr/common/main/en_Shaw.xml @@ -12,20 +12,414 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + + 𐑢𐑻𐑤𐑛 + ·𐑨𐑓𐑮𐑦𐑒𐑩 + ·𐑯𐑹𐑔 𐑩𐑥𐑧𐑮𐑦𐑒𐑩 + ·𐑕𐑬𐑔 𐑩𐑥𐑧𐑮𐑦𐑒𐑩 + ·𐑴𐑖𐑦𐑭𐑯𐑾 + ·𐑕𐑧𐑯𐑑𐑮𐑩𐑤 𐑩𐑥𐑧𐑮𐑦𐑒𐑩 ·𐑩𐑥𐑧𐑮𐑦𐑒𐑩𐑟 + ·𐑯𐑹𐑞𐑼𐑯 𐑩𐑥𐑧𐑮𐑦𐑒𐑩 + ·𐑒𐑨𐑮𐑦𐑚𐑰𐑩𐑯 + ·𐑕𐑳𐑞𐑼𐑯 𐑘𐑫𐑼𐑩𐑐 + 𐑥𐑲𐑒𐑮𐑴𐑯𐑰𐑟𐑩𐑯 𐑮𐑰𐑡𐑩𐑯 + ·𐑱𐑠𐑩 + ·𐑘𐑫𐑼𐑩𐑐 + ·𐑰𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐 + ·𐑯𐑹𐑞𐑼𐑯 𐑘𐑫𐑼𐑩𐑐 + ·𐑢𐑧𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐 + ·𐑤𐑨𐑑𐑦𐑯 𐑩𐑥𐑧𐑮𐑦𐑒𐑩 + ·𐑩𐑕𐑧𐑯𐑖𐑩𐑯 𐑲𐑤𐑩𐑯𐑛 + ·𐑨𐑯𐑛𐑹𐑩 + ·𐑿𐑯𐑲𐑑𐑩𐑛 𐑨𐑮𐑩𐑚 𐑧𐑥𐑦𐑮𐑩𐑑𐑕 + ·𐑨𐑓𐑜𐑨𐑯𐑦𐑕𐑑𐑭𐑯 + ·𐑨𐑙𐑜𐑢𐑦𐑤𐑩 + ·𐑨𐑤𐑚𐑱𐑯𐑾 + ·𐑨𐑙𐑜𐑴𐑤𐑩 + ·𐑨𐑯𐑑𐑸𐑒𐑑𐑦𐑒𐑩 + ·𐑸𐑡𐑩𐑯𐑑𐑰𐑯𐑩 + ·𐑩𐑥𐑧𐑮𐑦𐑒𐑩𐑯 𐑕𐑩𐑥𐑴𐑩 + ·𐑪𐑕𐑑𐑮𐑾 + ·𐑪𐑕𐑑𐑮𐑱𐑤𐑾 + ·𐑨𐑟𐑼𐑚𐑲𐑡𐑭𐑯 + ·𐑚𐑸𐑚𐑱𐑛𐑪𐑕 + ·𐑚𐑨𐑙𐑜𐑤𐑩𐑛𐑧𐑖 + ·𐑚𐑧𐑤𐑡𐑩𐑥 + ·𐑚𐑳𐑤𐑜𐑺𐑾 + ·𐑚𐑸𐑱𐑯 + ·𐑚𐑫𐑮𐑫𐑯𐑛𐑦 + ·𐑚𐑧𐑯𐑦𐑯 + ·𐑚𐑼𐑥𐑿𐑛𐑩 + ·𐑚𐑮𐑵𐑯𐑲 + ·𐑚𐑩𐑤𐑦𐑝𐑾 + ·𐑚𐑮𐑩𐑟𐑦𐑤 + ·𐑚𐑩𐑣𐑭𐑥𐑩𐑟 + ·𐑚𐑵𐑑𐑭𐑯 + ·𐑚𐑪𐑑𐑕𐑢𐑭𐑯𐑩 + ·𐑒𐑨𐑯𐑩𐑛𐑩 + ·𐑒𐑪𐑙𐑜𐑴 - ·𐑒𐑦𐑯𐑖𐑭𐑕𐑩 + ·𐑒𐑪𐑙𐑜𐑴 (𐑛𐑰𐑸𐑕𐑰) + ·𐑕𐑧𐑯𐑑𐑮𐑩𐑤 𐑨𐑓𐑮𐑦𐑒𐑩𐑯 𐑮𐑦𐑐𐑳𐑚𐑤𐑦𐑒 + ·𐑒𐑪𐑙𐑜𐑴 - ·𐑚𐑮𐑭𐑟𐑩𐑝𐑦𐑤 + ·𐑒𐑪𐑙𐑜𐑴 (𐑮𐑦𐑐𐑳𐑚𐑤𐑦𐑒) + ·𐑕𐑢𐑦𐑑𐑕𐑼𐑤𐑩𐑯𐑛 + ·𐑒𐑫𐑒 𐑲𐑤𐑩𐑯𐑛𐑟 + ·𐑗𐑦𐑤𐑦 + ·𐑒𐑨𐑥𐑼𐑵𐑯 + ·𐑗𐑲𐑯𐑩 + ·𐑒𐑩𐑤𐑳𐑥𐑚𐑾 + ·𐑒𐑪𐑕𐑑𐑩 𐑮𐑰𐑒𐑩 + ·𐑒𐑿𐑚𐑩 + ·𐑕𐑲𐑐𐑮𐑩𐑕 + ·𐑗𐑧𐑒𐑾 + ·𐑗𐑧𐑒 𐑮𐑦𐑐𐑳𐑚𐑤𐑦𐑒 + ·𐑡𐑻𐑥𐑩𐑯𐑦 + ·𐑡𐑦𐑚𐑵𐑑𐑦 + ·𐑛𐑧𐑯𐑥𐑸𐑒 + ·𐑛𐑩𐑥𐑦𐑯𐑦𐑒𐑩 + ·𐑛𐑩𐑥𐑦𐑯𐑦𐑒𐑩𐑯 𐑮𐑦𐑐𐑳𐑚𐑤𐑦𐑒 + ·𐑨𐑤𐑡𐑽𐑾 + ·𐑧𐑒𐑢𐑩𐑛𐑹 + ·𐑰𐑡𐑦𐑐𐑑 + ·𐑧𐑮𐑦𐑑𐑮𐑱𐑩 + ·𐑕𐑐𐑱𐑯 + ·𐑰𐑔𐑦𐑴𐑐𐑾 + ·𐑓𐑦𐑯𐑤𐑩𐑯𐑛 + ·𐑓𐑰𐑡𐑰 + ·𐑓𐑷𐑒𐑤𐑨𐑯𐑛 𐑲𐑤𐑩𐑯𐑛𐑟 + ·𐑓𐑷𐑒𐑤𐑨𐑯𐑛 𐑲𐑤𐑩𐑯𐑛𐑟 (·𐑦𐑕𐑤𐑨𐑟 𐑥𐑨𐑤𐑝𐑰𐑯𐑩𐑟) + ·𐑓𐑮𐑭𐑯𐑕 + ·𐑜𐑨𐑚𐑪𐑯 + ·𐑿𐑯𐑲𐑑𐑩𐑛 𐑒𐑦𐑙𐑛𐑩𐑥 + ·𐑿𐑒𐑱 + ·𐑜𐑮𐑩𐑯𐑱𐑛𐑩 + ·𐑡𐑹𐑡𐑩 + ·𐑜𐑭𐑯𐑩 + ·𐑡𐑦𐑚𐑮𐑷𐑤𐑑𐑼 + ·𐑜𐑨𐑥𐑚𐑾 + ·𐑜𐑦𐑯𐑦 + ·𐑜𐑮𐑰𐑕 + ·𐑜𐑢𐑭𐑑𐑩𐑥𐑭𐑤𐑩 + ·𐑜𐑲𐑭𐑯𐑩 + ·𐑣𐑪𐑙 𐑒𐑪𐑙 𐑕.𐑩.𐑮. ·𐑗𐑲𐑯𐑩 + ·𐑣𐑪𐑙 𐑒𐑪𐑙 + ·𐑣𐑪𐑯𐑛𐑘𐑫𐑼𐑩𐑕 + ·𐑒𐑮𐑴𐑱𐑖𐑩 + ·𐑣𐑱𐑑𐑦 + ·𐑣𐑳𐑙𐑜𐑼𐑦 + ·𐑦𐑯𐑛𐑩𐑯𐑰𐑠𐑩 + ·𐑲𐑼𐑤𐑩𐑯𐑛 + ·𐑦𐑟𐑮𐑱𐑤 + ·𐑦𐑯𐑛𐑾 + ·𐑚𐑮𐑦𐑑𐑦𐑖 𐑦𐑯𐑛𐑾𐑯 𐑴𐑖𐑩𐑯 𐑑𐑧𐑮𐑦𐑑𐑼𐑦 + ·𐑦𐑮𐑭𐑒 + ·𐑦𐑮𐑭𐑯 + ·𐑲𐑕𐑤𐑩𐑯𐑛 + ·𐑦𐑑𐑩𐑤𐑦 + ·𐑡𐑩𐑥𐑱𐑒𐑩 + ·𐑡𐑹𐑛𐑩𐑯 + ·𐑡𐑩𐑐𐑨𐑯 + ·𐑒𐑧𐑯𐑘𐑩 + ·𐑒𐑨𐑥𐑚𐑴𐑛𐑾 + ·𐑯𐑹𐑔 𐑒𐑼𐑾 + ·𐑕𐑬𐑔 𐑒𐑼𐑾 + ·𐑒𐑵𐑢𐑱𐑑 + ·𐑤𐑬𐑕 + ·𐑤𐑧𐑚𐑩𐑯𐑪𐑯 + ·𐑤𐑦𐑒𐑑𐑩𐑯𐑕𐑑𐑲𐑯 + ·𐑕𐑮𐑦 𐑤𐑨𐑯𐑒𐑩 + ·𐑤𐑲𐑚𐑽𐑾 + ·𐑤𐑩𐑕𐑵𐑑𐑵 + ·𐑤𐑦𐑔𐑿𐑱𐑯𐑾 + ·𐑤𐑳𐑒𐑕𐑩𐑥𐑚𐑻𐑜 + ·𐑤𐑦𐑚𐑾 + ·𐑥𐑼𐑪𐑒𐑴 + ·𐑥𐑪𐑯𐑩𐑒𐑴 + ·𐑥𐑨𐑛𐑩𐑜𐑨𐑕𐑒𐑼 + ·𐑥𐑸𐑖𐑩𐑤 𐑲𐑤𐑩𐑯𐑛𐑟 + ·𐑯𐑹𐑔 𐑥𐑨𐑕𐑩𐑛𐑴𐑯𐑾 + ·𐑥𐑭𐑤𐑦 + ·𐑥𐑘𐑨𐑯𐑥𐑸 (·𐑚𐑻𐑥𐑩) + ·𐑥𐑪𐑙𐑜𐑴𐑤𐑾 + ·𐑥𐑩𐑒𐑬 𐑒𐑪𐑙 𐑕.𐑩.𐑮. ·𐑗𐑲𐑯𐑩 + ·𐑥𐑩𐑒𐑬 + ·𐑥𐑹𐑦𐑑𐑱𐑯𐑾 + ·𐑥𐑪𐑯𐑑𐑕𐑼𐑨𐑑 + ·𐑥𐑷𐑤𐑑𐑩 + ·𐑥𐑼𐑦𐑖𐑩𐑕 + ·𐑥𐑩𐑤𐑭𐑢𐑦 + ·𐑥𐑧𐑒𐑕𐑦𐑒𐑴 + ·𐑥𐑩𐑤𐑱𐑠𐑩 + ·𐑥𐑴𐑟𐑨𐑥𐑚𐑰𐑒 + ·𐑯𐑩𐑥𐑦𐑚𐑾 + ·𐑯𐑰𐑠𐑺 + ·𐑯𐑲𐑡𐑽𐑾 + ·𐑯𐑦𐑒𐑼𐑭𐑜𐑢𐑩 + ·𐑯𐑧𐑞𐑼𐑤𐑩𐑯𐑛𐑟 + ·𐑯𐑹𐑢𐑱 + ·𐑯𐑦𐑐𐑷𐑤 + ·𐑯𐑭𐑵𐑮𐑵 + ·𐑯𐑿 𐑟𐑰𐑤𐑩𐑯𐑛 + ·𐑭𐑴𐑑𐑾𐑮𐑴𐑩 𐑯𐑿 𐑟𐑰𐑤𐑩𐑯𐑛 + ·𐑴𐑥𐑭𐑯 + ·𐑐𐑨𐑯𐑩𐑥𐑭 + ·𐑐𐑼𐑵 + ·𐑓𐑦𐑤𐑦𐑐𐑰𐑯𐑟 + ·𐑐𐑭𐑒𐑦𐑕𐑑𐑭𐑯 + ·𐑐𐑴𐑤𐑩𐑯𐑛 + ·𐑐𐑨𐑤𐑩𐑕𐑑𐑦𐑯𐑾𐑯 𐑑𐑧𐑮𐑦𐑑𐑼𐑦𐑟 + ·𐑐𐑨𐑤𐑩𐑕𐑑𐑲𐑯 + ·𐑐𐑹𐑗𐑩𐑜𐑩𐑤 + ·𐑐𐑨𐑮𐑩𐑜𐑢𐑲 + ·𐑒𐑳𐑑𐑸 + ·𐑮𐑩𐑥𐑱𐑯𐑾 + ·𐑕𐑻𐑚𐑾 + ·𐑮𐑳𐑖𐑩 + ·𐑮𐑵𐑨𐑯𐑛𐑩 + ·𐑕𐑬𐑛𐑦 𐑼𐑱𐑚𐑾 + ·𐑕𐑱𐑖𐑧𐑤𐑟 + ·𐑕𐑵𐑛𐑨𐑯 + ·𐑕𐑢𐑰𐑛𐑩𐑯 + ·𐑕𐑦𐑙𐑩𐑐𐑹 + ·𐑕𐑤𐑩𐑝𐑨𐑒𐑾 + ·𐑕𐑦𐑺𐑩 𐑤𐑦𐑴𐑯 + ·𐑕𐑨𐑯 𐑥𐑼𐑰𐑯𐑴 + ·𐑕𐑧𐑯𐑦𐑜𐑷𐑤 + ·𐑕𐑩𐑥𐑭𐑤𐑾 + ·𐑕𐑬𐑔 𐑕𐑵𐑛𐑨𐑯 + ·𐑧𐑤 𐑕𐑨𐑤𐑝𐑩𐑛𐑹 + ·𐑕𐑦𐑮𐑾 + ·𐑧𐑕𐑢𐑭𐑑𐑦𐑯𐑦 + ·𐑕𐑢𐑭𐑟𐑦𐑤𐑨𐑯𐑛 + ·𐑗𐑨𐑛 + ·𐑓𐑮𐑧𐑯𐑗 𐑕𐑳𐑞𐑼𐑯 𐑑𐑧𐑮𐑦𐑑𐑼𐑦𐑟 + ·𐑑𐑴𐑜𐑴 + ·𐑑𐑲𐑤𐑨𐑯𐑛 + ·𐑑𐑿𐑯𐑦𐑟𐑾 + ·𐑑𐑪𐑙𐑩 + ·𐑑𐑫𐑼𐑒𐑦𐑘𐑩 + ·𐑑𐑻𐑒𐑦 + ·𐑑𐑲𐑢𐑭𐑯 + ·𐑑𐑨𐑯𐑟𐑩𐑯𐑾 + ·𐑿𐑒𐑮𐑱𐑯 + ·𐑿𐑜𐑨𐑯𐑛𐑩 + ·𐑿𐑧𐑕 𐑬𐑑𐑤𐑲𐑦𐑙 𐑲𐑤𐑩𐑯𐑛𐑟 + ·𐑿𐑯𐑲𐑑𐑩𐑛 𐑕𐑑𐑱𐑑𐑕 + ·𐑿𐑧𐑕 + ·𐑘𐑫𐑼𐑩𐑜𐑢𐑲 + ·𐑝𐑨𐑑𐑦𐑒𐑩𐑯 𐑕𐑦𐑑𐑦 + ·𐑝𐑧𐑯𐑦𐑟𐑢𐑱𐑤𐑩 + ·𐑝𐑦𐑧𐑑𐑯𐑭𐑥 + ·𐑕𐑩𐑥𐑴𐑩 + 𐑕𐑿𐑛𐑴-𐑨𐑒𐑕𐑩𐑯𐑑𐑕 + 𐑕𐑿𐑛𐑴-𐑚𐑲𐑛𐑲 + ·𐑘𐑧𐑥𐑩𐑯 + ·𐑕𐑬𐑔 𐑨𐑓𐑮𐑦𐑒𐑩 + ·𐑟𐑨𐑥𐑚𐑾 + ·𐑟𐑦𐑥𐑚𐑭𐑚𐑢𐑱 + 𐑳𐑯𐑯𐑴𐑯 𐑮𐑰𐑡𐑩𐑯 + + 𐑤𐑱𐑑 𐑥𐑦𐑛𐑩𐑤 𐑓𐑮𐑧𐑯𐑗 𐑑 1606 + 𐑻𐑤𐑦 𐑥𐑪𐑛𐑼𐑯 𐑓𐑮𐑧𐑯𐑗 + + + 𐑒𐑨𐑤𐑦𐑯𐑛𐑼 + 𐑒𐑳𐑮𐑩𐑯𐑕𐑦 𐑓𐑹𐑥𐑨𐑑 + 𐑕𐑹𐑑 𐑹𐑛𐑼 + 𐑒𐑳𐑮𐑩𐑯𐑕𐑦 + 𐑬𐑼 𐑕𐑲𐑒𐑩𐑤 (12 𐑹 24) + 𐑤𐑲𐑯 𐑚𐑮𐑱𐑒𐑕 𐑭𐑓𐑑𐑼 𐑢𐑻𐑛𐑟 + 𐑥𐑧𐑠𐑼𐑥𐑩𐑯𐑑 𐑕𐑦𐑕𐑑𐑩𐑥 + 𐑯𐑳𐑥𐑚𐑼𐑟 + 𐑕𐑧𐑯𐑑𐑩𐑯𐑕 𐑚𐑮𐑱𐑒 𐑭𐑓𐑑𐑼 𐑩𐑚𐑮. + + + 𐑜𐑮𐑦𐑜𐑹𐑾𐑯 𐑒𐑨𐑤𐑦𐑯𐑛𐑼 + 𐑜𐑮𐑦𐑜𐑹𐑾𐑯 + 𐑩𐑒𐑬𐑯𐑑𐑦𐑙 𐑒𐑳𐑮𐑩𐑯𐑕𐑦 𐑓𐑹𐑥𐑨𐑑 + 𐑩𐑒𐑬𐑯𐑑𐑦𐑙 + 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 𐑒𐑳𐑮𐑩𐑯𐑕𐑦 𐑓𐑹𐑥𐑨𐑑 + 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 + 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 + 12 𐑬𐑼 𐑕𐑦𐑕𐑑𐑩𐑥 (0–11) + 12 (0–11) + 12 𐑬𐑼 𐑕𐑦𐑕𐑑𐑩𐑥 (1–12) + 12 (1–12) + 24 𐑬𐑼 𐑕𐑦𐑕𐑑𐑩𐑥 (0–23) + 24 (0–23) + 24 𐑬𐑼 𐑕𐑦𐑕𐑑𐑩𐑥 (1–24) + 24 (1–24) + 𐑚𐑮𐑱𐑒 𐑷𐑤 + 𐑒𐑰𐑐 𐑷𐑤 + 𐑯𐑹𐑥𐑩𐑤 + 𐑒𐑰𐑐 𐑦𐑯 𐑓𐑮𐑱𐑟𐑩𐑟 + 𐑥𐑧𐑑𐑮𐑦𐑒 𐑕𐑦𐑕𐑑𐑩𐑥 + 𐑥𐑧𐑑𐑮𐑦𐑒 + 𐑦𐑥𐑐𐑽𐑾𐑤 𐑥𐑧𐑠𐑼𐑥𐑩𐑯𐑑 𐑕𐑦𐑕𐑑𐑩𐑥 + 𐑿𐑒𐑱 + 𐑿𐑧𐑕 𐑥𐑧𐑠𐑼𐑥𐑩𐑯𐑑 𐑕𐑦𐑕𐑑𐑩𐑥 + 𐑿𐑧𐑕 + 𐑢𐑧𐑕𐑑𐑼𐑯 𐑛𐑦𐑡𐑦𐑑𐑕 + 𐑪𐑓 + 𐑪𐑯 + 𐑥𐑧𐑑𐑮𐑦𐑒 + 𐑿𐑒𐑱 + 𐑿𐑧𐑕 + + 𐑤𐑨𐑙𐑜𐑢𐑦𐑡: {0} + 𐑕𐑒𐑮𐑦𐑐𐑑: {0} + 𐑮𐑰𐑡𐑩𐑯: {0} + [𐑐 𐑑 𐑒 𐑓 𐑔 𐑕 𐑖 𐑗 𐑘 𐑙 𐑚 𐑛 𐑜 𐑝 𐑞 𐑟 𐑠 𐑡 𐑢 𐑣 𐑤 𐑥 𐑦 𐑧 𐑨 𐑩 𐑪 𐑫 𐑬 𐑭 𐑮 𐑯 𐑰 𐑱 𐑲 𐑳 𐑴 𐑵 𐑶 𐑷 𐑸 𐑹 𐑺 𐑻 𐑼 𐑽 𐑾 𐑿] [𐑐 𐑑 𐑒 𐑓 𐑔 𐑕 𐑖 𐑗 𐑘 𐑙 𐑚 𐑛 𐑜 𐑝 𐑞 𐑟 𐑠 𐑡 𐑢 𐑣 𐑤 𐑥 𐑦 𐑧 𐑨 𐑩 𐑪 𐑫 𐑬 𐑭 𐑮 𐑯 𐑰 𐑱 𐑲 𐑳 𐑴 𐑵 𐑶 𐑷 𐑸 𐑹 𐑺 𐑻 𐑼 𐑽 𐑾 𐑿] + [\- ‐‑ – — , ; \: ! ? . … ' ‹ › « » ( ) \[ \] § @ * / \& # † ‡ ′ ″] + + + + « + » + + + + + + EEEE, d MMMM y G + + + + + d MMMM y G + + + + + d MMM y G + + + + + dd/MM/y GGGGG + + + + + + + {1}, {0} + + + {1} 𐑨𐑑 {0} + + + {1} 𐑨𐑑 {0} + + + + + {1}, {0} + + + {1} 𐑨𐑑 {0} + + + {1} 𐑨𐑑 {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + E d + y G + dd/MM/y GGGGG + LLL y G + d MMM y G + E, d MMM y G + dd/MM + E dd/MM + d MMM + E d MMM + d MMMM + y G + y G + MM/y GGGGG + dd/MM/y GGGGG + E, dd/MM/y GGGGG + LLL y G + d MMM y G + E, d MMM y G + LLLL y G + QQQ y G + QQQQ y G + + + + h – h B + + + h:mm – h:mm B + h:mm – h:mm B + + + y G – y G + y–y G + + + + @@ -43,6 +437,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic ·𐑯𐑴 ·𐑛𐑭 + + 𐑡 + 𐑓 + 𐑥 + 𐑱 + 𐑥 + 𐑡 + 𐑡 + 𐑷 + 𐑕 + 𐑪 + 𐑯 + 𐑛 + ·𐑡𐑨𐑙𐑘𐑭𐑢𐑺𐑰 ·𐑓𐑧𐑚𐑘𐑵𐑢𐑺𐑰 @@ -59,6 +467,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + ·𐑡𐑨𐑯 + ·𐑓𐑧𐑚 + ·𐑥𐑸𐑗 + ·𐑱𐑐𐑮 + ·𐑥𐑱 + ·𐑡𐑵𐑯 + ·𐑡𐑵𐑤 + ·𐑷𐑜 + ·𐑕𐑧𐑐 + ·𐑪𐑒𐑑 + ·𐑯𐑴𐑝 + ·𐑛𐑦𐑕 + 𐑡 𐑓 @@ -73,6 +495,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𐑯 𐑛 + + ·𐑡𐑨𐑯𐑿𐑼𐑦 + ·𐑓𐑧𐑚𐑮𐑵𐑼𐑦 + ·𐑥𐑸𐑗 + ·𐑱𐑐𐑮𐑩𐑤 + ·𐑥𐑱 + ·𐑡𐑵𐑯 + ·𐑡𐑩𐑤𐑲 + ·𐑷𐑜𐑩𐑕𐑑 + ·𐑕𐑧𐑐𐑑𐑧𐑥𐑚𐑼 + ·𐑪𐑒𐑑𐑴𐑚𐑼 + ·𐑯𐑴𐑝𐑧𐑥𐑚𐑼 + ·𐑛𐑦𐑕𐑧𐑥𐑚𐑼 + @@ -148,6 +584,231 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𐑨 + + + + EEEE, d MMMM y + + + + + d MMMM y + + + + + d MMM y + + + + + dd/MM/y + + + + + + + HH:mm:ss zzzz + + + + + HH:mm:ss z + + + + + HH:mm:ss + + + + + HH:mm + + + + + + + {1}, {0} + + + {1} 𐑨𐑑 {0} + + + {1} 𐑨𐑑 {0} + + + + + {1}, {0} + + + {1} 𐑨𐑑 {0} + + + {1} 𐑨𐑑 {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + E d + y G + dd/MM/y G + LLL y G + d MMM y G + E, d MMM y G + dd/MM + E dd/MM + d MMM + E d MMM + d MMMM + 𐑢𐑰𐑒 W 𐑝 LLLL + 𐑢𐑰𐑒 W 𐑝 LLLL + MM/y + dd/MM/y + E, dd/MM/y + LLL y + d MMM y + E, d MMM y + LLLL y + QQQ y + QQQQ y + 𐑢𐑰𐑒 w 𐑝 Y + 𐑢𐑰𐑒 w 𐑝 Y + + + + h – h B + + + h:mm – h:mm B + h:mm – h:mm B + + + y G – y G + y – y G + + + M/y G – M/y G + M/y – M/y G + M/y – M/y G + + + dd/MM/y – dd/MM/y G + dd/MM/y G – dd/MM/y G + dd/MM/y – dd/MM/y G + dd/MM/y – dd/MM/y G + + + E, dd/MM/y – E, dd/MM/y G + E, dd/MM/y G – E, dd/MM/y G + E, dd/MM/y – E, dd/MM/y G + E, dd/MM/y – E, dd/MM/y G + + + LLL y G – MMM y G + LLL – MMM y G + LLL y – MMM y G + + + d – d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G + + + E, d MMM – E, d MMM y G + E, d MMM y G – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G + + + h:mm – h:mm a + h:mm – h:mm a + + + h:mm – h:mm a v + h:mm – h:mm a v + + + M – M + + + dd/MM – dd/MM + dd/MM – dd/MM + + + E dd/MM – E dd/MM + E dd/MM – E dd/MM + + + LLL–MMM + + + d–d MMM + d MMM – d MMM + + + E d MMM – E d MMM + E d MMM – E d MMM + + + MM/y – MM/y + MM/y – MM/y + + + dd/MM/y – dd/MM/y + dd/MM/y – dd/MM/y + dd/MM/y – dd/MM/y + + + E, dd/MM/y – E, dd/MM/y + E, dd/MM/y – E, dd/MM/y + E, dd/MM/y – E, dd/MM/y + + + LLL – MMM y + LLL y – MMM y + + + d–d MMM y + d MMM – d MMM y + d MMM y – d MMM y + + + E, d MMM – E, d MMM y + E, d MMM – E, d MMM y + E, d MMM y – E, d MMM y + + + LLLL – MMMM y + LLLL y – MMMM y + + + @@ -156,15 +817,160 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𐑘𐑽 + 𐑤𐑭𐑕𐑑 𐑘𐑽 + 𐑞𐑦𐑕 𐑘𐑽 + 𐑯𐑧𐑒𐑕𐑑 𐑘𐑽 + + 𐑦𐑯 {0} 𐑘𐑽 + 𐑦𐑯 {0} 𐑘𐑽𐑟 + + + {0} 𐑘𐑽 𐑩𐑜𐑴 + {0} 𐑘𐑽𐑟 𐑩𐑜𐑴 + + + + 𐑤𐑭𐑕𐑑 𐑘𐑽 + 𐑞𐑦𐑕 𐑘𐑽 + 𐑯𐑧𐑒𐑕𐑑 𐑘𐑽 + + 𐑦𐑯 {0} 𐑘𐑽 + 𐑦𐑯 {0} 𐑘𐑽𐑕 + + + {0} 𐑘𐑽 𐑩𐑜𐑴 + {0} 𐑘𐑽𐑕 𐑩𐑜𐑴 + + + + 𐑤𐑭𐑕𐑑 𐑘𐑽 + 𐑯𐑧𐑒𐑕𐑑 𐑘𐑽 + + 𐑦𐑯 {0} 𐑘𐑽 + 𐑦𐑯 {0} 𐑘𐑽𐑕 + + + {0} 𐑘𐑽 𐑩𐑜𐑴 + {0} 𐑘𐑽𐑕 𐑩𐑜𐑴 + + + + 𐑤𐑭𐑕𐑑 𐑒𐑢𐑹𐑑𐑼 + 𐑞𐑦𐑕 𐑒𐑢𐑹𐑑𐑼 + 𐑯𐑧𐑒𐑕𐑑 𐑒𐑢𐑹𐑑𐑼 + + 𐑦𐑯 {0} 𐑒𐑢𐑹𐑑𐑼 + 𐑦𐑯 {0} 𐑒𐑢𐑹𐑑𐑼𐑟 + + + {0} 𐑒𐑢𐑹𐑑𐑼 𐑩𐑜𐑴 + {0} 𐑒𐑢𐑹𐑑𐑼𐑟 𐑩𐑜𐑴 + + + + + 𐑦𐑯 {0} 𐑒𐑢𐑑 + 𐑦𐑯 {0} 𐑒𐑢𐑑 + + + {0} 𐑒𐑢𐑑 𐑩𐑜𐑴 + {0} 𐑒𐑢𐑑 𐑩𐑜𐑴 + 𐑥𐑭𐑙𐑔 + 𐑤𐑭𐑕𐑑 𐑥𐑳𐑯𐑔 + 𐑞𐑦𐑕 𐑥𐑳𐑯𐑔 + 𐑯𐑧𐑒𐑕𐑑 𐑥𐑳𐑯𐑔 + + 𐑦𐑯 {0} 𐑥𐑳𐑯𐑔 + 𐑦𐑯 {0} 𐑥𐑳𐑯𐑔𐑕 + + + {0} 𐑥𐑳𐑯𐑔 𐑩𐑜𐑴 + {0} 𐑥𐑳𐑯𐑔𐑕 𐑩𐑜𐑴 + + + + 𐑤𐑭𐑕𐑑 𐑥𐑳 + 𐑞𐑦𐑕 𐑥𐑳 + 𐑯𐑧𐑒𐑕𐑑 𐑥𐑳 + + 𐑦𐑯 {0} 𐑥𐑳 + 𐑦𐑯 {0} 𐑥𐑳 + + + {0} 𐑥𐑳 𐑩𐑜𐑴 + {0} 𐑥𐑳 𐑩𐑜𐑴 + 𐑢𐑰𐑒 + 𐑤𐑭𐑕𐑑 𐑢𐑰𐑒 + 𐑞𐑦𐑕 𐑢𐑰𐑒 + 𐑯𐑧𐑒𐑕𐑑 𐑢𐑰𐑒 + + 𐑦𐑯 {0} 𐑢𐑰𐑒 + 𐑦𐑯 {0} 𐑢𐑰𐑒𐑕 + + + {0} 𐑢𐑰𐑒 𐑩𐑜𐑴 + {0} 𐑢𐑰𐑒𐑕 𐑩𐑜𐑴 + + 𐑞 𐑢𐑰𐑒 𐑝 {0} + + + 𐑤𐑭𐑕𐑑 𐑢 + 𐑞𐑦𐑕 𐑢 + 𐑯𐑧𐑒𐑕𐑑 𐑢 + + 𐑦𐑯 {0} 𐑢 + 𐑦𐑯 {0} 𐑢 + + + {0} 𐑢 𐑩𐑜𐑴 + {0} 𐑢 𐑩𐑜𐑴 + 𐑛𐑱 + 𐑘𐑧𐑕𐑑𐑩𐑛𐑱 + 𐑑𐑩𐑛𐑱 + 𐑑𐑩𐑥𐑪𐑮𐑴 + + 𐑦𐑯 {0} 𐑛𐑱 + 𐑦𐑯 {0} 𐑛𐑱𐑟 + + + {0} 𐑛𐑱 𐑩𐑜𐑴 + {0} 𐑛𐑱𐑟 𐑩𐑜𐑴 + + + + 𐑘𐑧𐑕𐑑𐑩𐑛𐑱 + 𐑑𐑩𐑛𐑱 + 𐑑𐑩𐑥𐑪𐑮𐑴 + + 𐑦𐑯 {0} 𐑛𐑱 + 𐑦𐑯 {0} 𐑛𐑱𐑕 + + + {0} 𐑛𐑱 𐑩𐑜𐑴 + {0} 𐑛𐑱𐑕 𐑩𐑜𐑴 + + + + 𐑘𐑧𐑕𐑑𐑩𐑛𐑱 + 𐑑𐑩𐑛𐑱 + 𐑑𐑩𐑥𐑪𐑮𐑴 + + 𐑦𐑯 {0} 𐑛𐑱 + 𐑦𐑯 {0} 𐑛𐑱𐑕 + + + {0} 𐑛𐑱 𐑩𐑜𐑴 + {0} 𐑛𐑱𐑕 𐑩𐑜𐑴 + 𐑛𐑱 𐑝 𐑞 𐑢𐑰𐑒 @@ -174,12 +980,105 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𐑬𐑮 + 𐑞𐑦𐑕 𐑬𐑼 + + 𐑦𐑯 {0} 𐑬𐑼 + 𐑦𐑯 {0} 𐑬𐑼𐑟 + + + {0} 𐑬𐑼 𐑩𐑜𐑴 + {0} 𐑬𐑼𐑟 𐑩𐑜𐑴 + + + + 𐑞𐑦𐑕 𐑬𐑼 + + 𐑦𐑯 {0} 𐑬𐑼 + 𐑦𐑯 {0} 𐑬𐑼𐑕 + + + {0} 𐑬𐑼 𐑩𐑜𐑴 + {0} 𐑬𐑼𐑕 𐑩𐑜𐑴 + + + + 𐑞𐑦𐑕 𐑬𐑼 + + 𐑦𐑯 {0} 𐑬𐑼 + 𐑦𐑯 {0} 𐑬𐑼𐑕 + + + {0} 𐑬𐑼 𐑩𐑜𐑴 + {0} 𐑬𐑼𐑕 𐑩𐑜𐑴 + 𐑥𐑦𐑙𐑦𐑑 + 𐑞𐑦𐑕 𐑥𐑦𐑯𐑦𐑑 + + 𐑦𐑯 {0} 𐑥𐑦𐑯𐑦𐑑 + 𐑦𐑯 {0} 𐑥𐑦𐑯𐑦𐑑𐑕 + + + {0} 𐑥𐑦𐑯𐑦𐑑 𐑩𐑜𐑴 + {0} 𐑥𐑦𐑯𐑦𐑑𐑕 𐑩𐑜𐑴 + + + + 𐑞𐑦𐑕 𐑥𐑦𐑯𐑦𐑑 + + 𐑦𐑯 {0} 𐑥𐑦𐑯 + 𐑦𐑯 {0} 𐑥𐑦𐑯 + + + {0} 𐑥𐑦𐑯 𐑩𐑜𐑴 + {0} 𐑥𐑦𐑯 𐑩𐑜𐑴 + + + + 𐑞𐑦𐑕 𐑥𐑦𐑯𐑦𐑑 + + 𐑦𐑯 {0} 𐑥𐑦𐑯 + 𐑦𐑯 {0} 𐑥𐑦𐑯 + + + {0} 𐑥𐑦𐑯 𐑩𐑜𐑴 + {0} 𐑥𐑦𐑯 𐑩𐑜𐑴 + 𐑕𐑧𐑒𐑭𐑙𐑛 + 𐑯𐑬 + + 𐑦𐑯 {0} 𐑕𐑧𐑒𐑩𐑯𐑛 + 𐑦𐑯 {0} 𐑕𐑧𐑒𐑩𐑯𐑛𐑟 + + + {0} 𐑕𐑧𐑒𐑩𐑯𐑛 𐑩𐑜𐑴 + {0} 𐑕𐑧𐑒𐑩𐑯𐑛𐑟 𐑩𐑜𐑴 + + + + 𐑯𐑬 + + 𐑦𐑯 {0} 𐑕𐑧𐑒 + 𐑦𐑯 {0} 𐑕𐑧𐑒 + + + {0} 𐑕𐑧𐑒 𐑩𐑜𐑴 + {0} 𐑕𐑧𐑒 𐑩𐑜𐑴 + + + + 𐑯𐑬 + + 𐑦𐑯 {0} 𐑕𐑧𐑒 + 𐑦𐑯 {0} 𐑕𐑧𐑒 + + + {0} 𐑕𐑧𐑒 𐑩𐑜𐑴 + {0} 𐑕𐑧𐑒 𐑩𐑜𐑴 + 𐑟𐑴𐑯 @@ -188,13 +1087,576 @@ CLDR data files are interpreted according to the LDML specification (http://unic ·𐑜𐑥𐑑{0} ·𐑜𐑥𐑑 + 𐑜𐑥𐑑+? {0} 𐑑𐑲𐑥 + {0} 𐑛𐑱𐑤𐑲𐑑 𐑑𐑲𐑥 + {0} 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 𐑑𐑲𐑥 + + + 𐑒𐑴𐑹𐑛𐑦𐑯𐑱𐑑𐑩𐑛 𐑿𐑯𐑦𐑝𐑻𐑕𐑩𐑤 𐑑𐑲𐑥 + + + 𐑿𐑑𐑰𐑒𐑰 + + + + 𐑳𐑯𐑯𐑴𐑯 𐑤𐑴𐑒𐑱𐑖𐑩𐑯 + + + + 𐑚𐑮𐑦𐑑𐑦𐑖 𐑕𐑳𐑥𐑼 𐑑𐑲𐑥 + + + + + 𐑲𐑮𐑦𐑖 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 𐑑𐑲𐑥 + + + + + 𐑕𐑧𐑯𐑑𐑮𐑩𐑤 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑑𐑲𐑥 + 𐑕𐑧𐑯𐑑𐑮𐑩𐑤 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 𐑑𐑲𐑥 + 𐑕𐑧𐑯𐑑𐑮𐑩𐑤 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑕𐑳𐑥𐑼 𐑑𐑲𐑥 + + + 𐑕𐑘𐑑 + 𐑕𐑘𐑑 + 𐑕𐑘𐑕𐑑 + + + + + 𐑰𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑑𐑲𐑥 + 𐑰𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 𐑑𐑲𐑥 + 𐑰𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑕𐑳𐑥𐑼 𐑑𐑲𐑥 + + + 𐑰𐑘𐑑 + 𐑰𐑘𐑑 + 𐑰𐑘𐑕𐑑 + + + + + 𐑓𐑻𐑞𐑼-𐑰𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑑𐑲𐑥 + + + + + 𐑢𐑧𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑑𐑲𐑥 + 𐑢𐑧𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑕𐑑𐑨𐑯𐑛𐑼𐑛 𐑑𐑲𐑥 + 𐑢𐑧𐑕𐑑𐑼𐑯 𐑘𐑫𐑼𐑩𐑐𐑾𐑯 𐑕𐑳𐑥𐑼 𐑑𐑲𐑥 + + + 𐑢𐑘𐑑 + 𐑢𐑘𐑑 + 𐑢𐑘𐑕𐑑 + + + + + 𐑜𐑮𐑧𐑯𐑦𐑗 𐑥𐑰𐑯 𐑑𐑲𐑥 + + + 𐑜𐑥𐑑 + + + + + + + 0 𐑔𐑬𐑟𐑩𐑯𐑛 + 0 𐑔𐑬𐑟𐑩𐑯𐑛 + 00 𐑔𐑬𐑟𐑩𐑯𐑛 + 00 𐑔𐑬𐑟𐑩𐑯𐑛 + 000 𐑔𐑬𐑟𐑩𐑯𐑛 + 000 𐑔𐑬𐑟𐑩𐑯𐑛 + 0 𐑥𐑦𐑤𐑘𐑩𐑯 + 0 𐑥𐑦𐑤𐑘𐑩𐑯 + 00 𐑥𐑦𐑤𐑘𐑩𐑯 + 00 𐑥𐑦𐑤𐑘𐑩𐑯 + 000 𐑥𐑦𐑤𐑘𐑩𐑯 + 000 𐑥𐑦𐑤𐑘𐑩𐑯 + 0 𐑚𐑦𐑤𐑘𐑩𐑯 + 0 𐑚𐑦𐑤𐑘𐑩𐑯 + 00 𐑚𐑦𐑤𐑘𐑩𐑯 + 00 𐑚𐑦𐑤𐑘𐑩𐑯 + 000 𐑚𐑦𐑤𐑘𐑩𐑯 + 000 𐑚𐑦𐑤𐑘𐑩𐑯 + 0 𐑑𐑮𐑦𐑤𐑾𐑯 + 0 𐑑𐑮𐑦𐑤𐑾𐑯 + 00 𐑑𐑮𐑦𐑤𐑾𐑯 + 00 𐑑𐑮𐑦𐑤𐑾𐑯 + 000 𐑑𐑮𐑦𐑤𐑾𐑯 + 000 𐑑𐑮𐑦𐑤𐑾𐑯 + + + + + + + ¤#,##0.00 + + + ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) + + + + + + 𐑚𐑼𐑥𐑿𐑛𐑩𐑯 𐑛𐑪𐑤𐑼 + + + 𐑒𐑩𐑯𐑱𐑛𐑾𐑯 𐑛𐑪𐑤𐑼 + + + 𐑗𐑧𐑒 𐑒𐑩𐑮𐑵𐑯𐑩 + + + 𐑛𐑱𐑯𐑦𐑖 𐑒𐑮𐑴𐑯𐑩 + + + 𐑚𐑮𐑦𐑑𐑦𐑖 𐑐𐑬𐑯𐑛 + + + 𐑣𐑳𐑙𐑜𐑺𐑾𐑯 𐑓𐑪𐑮𐑦𐑯𐑑 + + + 𐑲𐑕𐑤𐑨𐑯𐑛𐑦𐑒 𐑒𐑮𐑴𐑯𐑩 + + + 𐑥𐑧𐑒𐑕𐑦𐑒𐑩𐑯 𐑐𐑱𐑕𐑴 + + + 𐑕𐑢𐑰𐑛𐑦𐑖 𐑒𐑮𐑴𐑯𐑩 + + + 𐑿𐑧𐑕 𐑛𐑪𐑤𐑼 + + + + {0}+ + + + {0} 𐑛𐑱 + {0} 𐑛𐑱𐑟 + 𐑑𐑱𐑒 𐑞 {0}𐑔 𐑮𐑲𐑑. + + + + + + 𐑛𐑧𐑒𐑱𐑛𐑟 + {0} 𐑛𐑧𐑒𐑱𐑛 + {0} 𐑛𐑧𐑒𐑱𐑛𐑟 + + + 𐑘𐑽𐑟 + {0} 𐑘𐑽 + {0} 𐑘𐑽𐑟 + {0} 𐑐𐑻 𐑘𐑽𐑟 + + + 𐑬𐑼𐑟 + + + 𐑥𐑦𐑯𐑦𐑑𐑕 + {0} 𐑥𐑦𐑯𐑦𐑑 + {0} 𐑥𐑦𐑯𐑦𐑑𐑕 + {0} 𐑐𐑻 𐑥𐑦𐑯𐑦𐑑 + + + 𐑕𐑧𐑒𐑩𐑯𐑛𐑟 + {0} 𐑕𐑧𐑒𐑩𐑯𐑛 + {0} 𐑕𐑧𐑒𐑩𐑯𐑛𐑟 + {0} 𐑐𐑻 𐑕𐑧𐑒𐑩𐑯𐑛 + + + 𐑒𐑦𐑤𐑪𐑥𐑦𐑑𐑼𐑟 + {0} 𐑒𐑦𐑤𐑪𐑥𐑦𐑑𐑼 + {0} 𐑒𐑦𐑤𐑪𐑥𐑦𐑑𐑼𐑟 + {0} 𐑐𐑻 𐑒𐑦𐑤𐑪𐑥𐑦𐑑𐑼 + + + 𐑥𐑦𐑑𐑼𐑟 + {0} 𐑥𐑦𐑑𐑼 + {0} 𐑥𐑦𐑑𐑼𐑟 + {0} 𐑐𐑻 𐑥𐑦𐑑𐑼𐑟 + + + 𐑛𐑧𐑕𐑦𐑥𐑦𐑑𐑼𐑟 + {0} 𐑛𐑧𐑕𐑦𐑥𐑦𐑑𐑼 + {0} 𐑛𐑧𐑕𐑦𐑥𐑦𐑑𐑼𐑟 + + + 𐑕𐑧𐑯𐑑𐑦𐑥𐑰𐑑𐑼𐑟 + {0} 𐑕𐑧𐑯𐑑𐑦𐑥𐑰𐑑𐑼 + {0} 𐑕𐑧𐑯𐑑𐑦𐑥𐑰𐑑𐑼𐑟 + {0} 𐑐𐑻 𐑕𐑧𐑯𐑑𐑦𐑥𐑰𐑑𐑼 + + + 𐑥𐑦𐑤𐑦𐑥𐑰𐑑𐑼𐑟 + {0} 𐑥𐑦𐑤𐑦𐑥𐑰𐑑𐑼 + {0} 𐑥𐑦𐑤𐑦𐑥𐑰𐑑𐑼𐑟 + + + 𐑥𐑲𐑒𐑮𐑴𐑥𐑰𐑑𐑼𐑟 + {0} 𐑥𐑲𐑒𐑮𐑴𐑥𐑰𐑑𐑼 + {0} 𐑥𐑲𐑒𐑮𐑴𐑥𐑰𐑑𐑼𐑟 + + + 𐑯𐑨𐑯𐑴𐑥𐑦𐑑𐑼𐑟 + {0} 𐑯𐑨𐑯𐑴𐑥𐑦𐑑𐑼 + {0} 𐑯𐑨𐑯𐑴𐑥𐑦𐑑𐑼𐑟 + + + 𐑐𐑰𐑒𐑴𐑥𐑦𐑑𐑼𐑟 + {0} 𐑐𐑰𐑒𐑴𐑥𐑦𐑑𐑼 + {0} 𐑐𐑰𐑒𐑴𐑥𐑦𐑑𐑼𐑟 + + + 𐑥𐑲𐑤𐑟 + {0} 𐑥𐑲𐑤 + {0} 𐑥𐑲𐑤𐑟 + + + 𐑘𐑸𐑛𐑟 + {0} 𐑘𐑸𐑛 + {0} 𐑘𐑸𐑛𐑟 + + + 𐑓𐑰𐑑 + {0} 𐑓𐑫𐑑 + {0} 𐑓𐑰𐑑 + {0} 𐑐𐑻 𐑓𐑫𐑑 + + + 𐑦𐑯𐑗𐑩𐑟 + {0} 𐑦𐑯𐑗 + {0} 𐑦𐑯𐑗𐑩𐑟 + {0} 𐑐𐑻 𐑦𐑯𐑗 + + + 𐑕𐑒𐑨𐑯𐑛𐑦𐑯𐑱𐑝𐑾𐑯 𐑥𐑲𐑤 + {0} 𐑕𐑒𐑨𐑯𐑛𐑦𐑯𐑱𐑝𐑾𐑯 𐑥𐑲𐑤 + {0} 𐑕𐑒𐑨𐑯𐑛𐑦𐑯𐑱𐑝𐑾𐑯 𐑥𐑲𐑤𐑟 + + + 𐑒𐑸𐑛𐑦𐑯𐑩𐑤 𐑛𐑦𐑮𐑧𐑒𐑖𐑩𐑯 + {0} 𐑰𐑕𐑑 + {0} 𐑯𐑹𐑔 + {0} 𐑕𐑬𐑔 + {0} 𐑢𐑧𐑕𐑑 + + + + + 𐑛𐑧𐑒 + {0} 𐑛𐑧𐑒 + {0} 𐑛𐑧𐑒 + + + 𐑘𐑽𐑟 + {0}/𐑘 + + + 𐑬𐑼𐑟 + + + 𐑥𐑦𐑯𐑟 + {0} 𐑥𐑦𐑯 + {0} 𐑥𐑦𐑯𐑟 + {0}/𐑥𐑦𐑯 + + + 𐑕𐑧𐑒𐑕 + {0} 𐑕𐑧𐑒 + {0} 𐑕𐑧𐑒𐑕 + {0}/𐑕 + + + 𐑥𐑲𐑤𐑟 + {0} 𐑥𐑲 + {0} 𐑥𐑲 + + + 𐑘𐑸𐑛𐑟 + {0} 𐑘𐑛 + {0} 𐑘𐑛 + + + 𐑓𐑰𐑑 + {0} 𐑓𐑑 + {0} 𐑓𐑑 + {0}/𐑓𐑑 + + + 𐑦𐑯𐑗𐑩𐑟 + {0} 𐑦𐑯 + {0} 𐑦𐑯 + {0}/𐑦𐑯 + + + 𐑛𐑦𐑮𐑧𐑒𐑖𐑩𐑯 + {0} 𐑰 + {0} 𐑯 + {0} 𐑕 + {0} 𐑢 + + + + + 𐑛𐑧𐑒 + {0}𐑛𐑧𐑒 + {0}𐑛𐑧𐑒 + + + {0}𐑘 + {0}𐑘 + {0}/𐑘 + + + 𐑬𐑼 + + + 𐑥𐑦𐑯 + {0}𐑥 + {0}𐑥 + {0}/𐑥𐑦𐑯 + + + 𐑕𐑧𐑒 + {0}𐑕 + {0}𐑕 + {0}/𐑕 + + + {0}𐑥𐑲 + {0}𐑥𐑲 + + + 𐑘𐑛 + {0}𐑘𐑛 + {0}𐑘𐑛 + + + 𐑓𐑑 + {0}′ + {0}′ + {0}/𐑓𐑑 + + + 𐑦𐑯 + {0}″ + {0}″ + {0}/𐑦𐑯 + + + 𐑛𐑦𐑮𐑧𐑒𐑖𐑩𐑯 + {0}𐑰 + {0}𐑯 + {0}𐑕 + {0}𐑢 + + + + + + {0} 𐑯 {1} + {0} 𐑯 {1} + + + {0} 𐑹 {1} + {0} 𐑹 {1} + + + {0} {1} + {0} {1} + {0} {1} + {0} {1} + + 𐑘𐑧𐑕:𐑘 𐑯𐑴:𐑯 + + und en + informal + {0} + {0}{1} + + ·{title} {given} {given2} {surname} {generation}, {credentials} + + + ·{given-informal} {surname} + + + ·{title} {surname} + + + ·{given-informal} + + + ·{given-monogram-allCaps}{given2-monogram-allCaps}{surname-monogram-allCaps} + + + ·{given-informal-monogram-allCaps}{surname-monogram-allCaps} + + + ·{given} {given2-initial} {surname} {generation}, {credentials} + + + ·{given-informal} {surname} + + + ·{title} {surname} + + + ·{given-informal} + + + ·{surname-monogram-allCaps} + + + ·{given-informal-monogram-allCaps} + + + ·{given-initial}{given2-initial} {surname} + + + ·{given-informal} {surname-initial} + + + ·{title} {surname} + + + ·{given-informal} + + + ·{surname-monogram-allCaps} + + + ·{given-informal-monogram-allCaps} + + + ·{surname} {title} {given} {given2} {generation}, {credentials} + + + ·{surname} {given-informal} + + + ·{title} {surname} + + + ·{given-informal} + + + ·{surname-monogram-allCaps}{given-monogram-allCaps}{given2-monogram-allCaps} + + + ·{surname-monogram-allCaps}{given-informal-monogram-allCaps} + + + ·{surname} {given} {given2-initial} {generation}, {credentials} + + + ·{surname} {given-informal} + + + ·{title} {surname} + + + ·{given-informal} + + + ·{surname-monogram-allCaps} + + + ·{given-informal-monogram-allCaps} + + + ·{surname} {given-initial}{given2-initial} + + + ·{surname} {given-initial} + + + ·{title} {surname} + + + ·{given-informal} + + + ·{surname-monogram-allCaps} + + + ·{given-informal-monogram-allCaps} + + + ·{surname-core}, {given} {given2} {surname-prefix} + + + ·{surname}, {given-informal} + + + ·{surname-core}, {given} {given2-initial} {surname-prefix} + + + ·{surname}, {given-informal} + + + ·{surname-core}, {given-initial}{given2-initial} {surname-prefix} + + + ·{surname}, {given-informal} + + + 𐑟𐑩𐑯𐑛𐑱𐑩 + + + 𐑲𐑮𐑰𐑯 + 𐑨𐑛𐑤𐑼 + + + 𐑥𐑺𐑦 𐑕𐑵 + 𐑣𐑱𐑥𐑦𐑖 + 𐑢𐑪𐑑𐑕𐑩𐑯 + + + 𐑥𐑮 + 𐑚𐑻𐑑𐑦 + 𐑣𐑧𐑯𐑮𐑦 𐑮𐑪𐑚𐑼𐑑 + ∅∅∅ + 𐑢𐑵𐑕𐑑𐑼 + ∅∅∅ + 𐑡𐑼 + 𐑥-𐑐 + + + 𐑕𐑦𐑯𐑚𐑨𐑛 + + + 𐑒𐑧𐑑𐑩 + 𐑥𐑦𐑤𐑼 + + + 𐑑𐑕𐑧𐑑𐑕𐑰𐑤𐑾 + 𐑣𐑱𐑥𐑦𐑖 + + + 𐑐𐑮𐑓 𐑛𐑼 + 𐑝𐑪𐑯 + 𐑚𐑮𐑰𐑤 + 𐑜𐑪𐑯𐑔𐑭𐑤𐑧𐑔 𐑛𐑪𐑥𐑦𐑙𐑜𐑴 + 𐑡𐑼 + 𐑥-𐑛 𐑛𐑛𐑕 + + diff --git a/make/data/cldr/common/main/en_UA.xml b/make/data/cldr/common/main/en_UA.xml new file mode 100644 index 00000000000..9e70011d6fb --- /dev/null +++ b/make/data/cldr/common/main/en_UA.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + , +   + + + diff --git a/make/data/cldr/common/main/en_US_POSIX.xml b/make/data/cldr/common/main/en_US_POSIX.xml index ce9b24ed41b..5e05f78e337 100644 --- a/make/data/cldr/common/main/en_US_POSIX.xml +++ b/make/data/cldr/common/main/en_US_POSIX.xml @@ -45,6 +45,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ 0.00 + ¤ 0.00 + 0.00 diff --git a/make/data/cldr/common/main/eo.xml b/make/data/cldr/common/main/eo.xml index e774c2af1ab..250a1dbeef7 100644 --- a/make/data/cldr/common/main/eo.xml +++ b/make/data/cldr/common/main/eo.xml @@ -14,530 +14,573 @@ CLDR data files are interpreted according to the LDML specification (http://unic afara abĥaza - aĉea - dangba - adigea + aĉea + dangba + adigea afrikansa - ajnua - akana - aleuta - sud-altaja + ajnua + akana + aleuta + sud-altaja amhara - aragona - angika + aragona + angika + araba levantenia araba - araba moderna norma - mapuĉa - arapaha - araba naĝda + araba moderna norma + mapuĉa + arapaha + araba naĝda asama - astura - atikameka - avara - avadhia + astura + atikameka + avara + avadhia ajmara azerbajĝana - azera + azera baŝkira - balia - basaa + baluĉa + balia + basaa belorusa - bemba - benaa + bemba + batavia + benaa bulgara - harjana - boĝpura - bislamo - edoa - siksika - aniia - bambara + harjana + boĝpura + Bislamo + edoa + nigrapieda + aniia + bambara bengala tibeta + baĥtiara bretona - bodoa - bosna - buĝia - bilena + bodoa + bosna + burjata + buĝia + bilena kataluna - kajuga - ĉakma - ĉeĉena - cebua - kiga - ĉamora - ĉuka - maria - ĉakta - ĉipevajana - ĉeroka - ĉejena - sorana - kurda, sorana - kurda centra - ĉilkotina + kajuga + ĉakma + ĉeĉena + cebua + kigaa + ĉamora + ĉuuka + maria + ĉaktaa + ĉipevajana + ĉeroka + ĉejena + kurda centra + kurda, centra + kurda, sorana + ĉilkotina korsika - miĉifa - kria jakob-golfa suda - kria preria - kria jakob-golfa norda - kria alka - algonkena (Norda Karolino) + kopta + miĉifa + kria jakob-golfa suda + kria preria + kria jakob-golfa norda + kria alka + algonkena (Norda Karolino) ĉeĥa - kria marĉa - malnovslava - ĉuvaŝa + kria marĉa + malnovslava + ĉuvaŝa kimra dana - dakotaa - dargva - taitaa + dakota + dargva + taitaa germana - germana aŭstra - germana svisa - dogriba - zarmaa - dogra - malsuprasoraba - dualaa - maldiva - djola - dzonko - dazaa - embua - evea - ibibioefika - ekaĝuka + germana aŭstra + germana svisa + dogriba + zarmaa + dogra + malsuprasoraba + dualaa + maldiva + djola + Dzonko + dazaa + embua + evea + efika + ekaĝuka greka angla - angla aŭstralia - angla kanada - angla brita - angla usona + angla aŭstralia + angla kanada + angla brita + angla usona Esperanto hispana - hispana amerika - hispana eŭropa - hispana meksika + hispana amerika + hispana eŭropa + hispana meksika estona eŭska - eunda + eunda persa - daria - fula + fula finna - filipina + filipina fiĝia feroa - fonua + fonua franca - franca kanada - franca svisa - kaĵun-franca - nord-frisa - friula - okcident-frisa + franca kanada + franca svisa + kaĵun-franca + nord-frisa + friula + okcident-frisa irlanda - gaa - skot-gaela - geeza - kiribata + skot-gaela + geeza + kiribata galega gvarania - gorontala - svisgermana + gorontala + svisgermana guĝarata - gusia - manksa - gviĉina + gusia + manksa + gviĉina haŭsa - haida + haida havaja - sud-haida + sud-haida hebrea - hinda - hiligajnona - mjaŭa + hindia + hindia (latina) + hinglish + hiligajnona + hmonga + verd-hmonga kroata - suprasoraba + suprasoraba haitia kreola hungara - hupa - halkomelema + hupa + halkomelema armena - herera - Interlingvao - ibana - ibibia + herera + Interlingvao + ibana + ibibia indonezia - Interlingveo - igba - jia - eskima - inuvialuktuna - iloka - inguŝa - Ido + Interlingveo + igba + jia + injupiaka + inuvialuktuna + iloka + inguŝa + Ido islanda itala - inuita + inuktituta japana - Loĵbano - kimaĉame + Loĵbano + ĉaga (Kimaĉame) java kartvela - kabila - kaĉina - kambaa - kabarda - makonda - kaboverda kreola - malinka (Koro) - kainganga + karakalpaka + kabila + kaĉina + kambaa + kabarda + makonda + kaboverda kreola + kekĉia + malinka (Koro) + kainganga kasia - kikuja - kuanjama + kikuja + kuanjama kazaĥa gronlanda - kalenĝina + kalenĝina kmera - kimbunda + kimbunda kanara korea - konkana - kpelea - kanura - karaĉaj-balkara - karela - kuruksa + konkana + kpelea + kanura + karaĉaj-balkara + karela + kuruksa kaŝmira - ŝambaa - kolonja + ŝambaa + kolonja kurda - kumika - komia - kornvala + kurda + kurmanĉa + kumika + komia + kornvala kirgiza - latino - judhispana - rangia + Latino + judhispana + rangia luksemburga - lezga - ganda - limburga - ligura - lilueta - lakota - lombarda + lezga + ganda + limburga + ligura + lilueta + lakota + ladina + lombarda lingala laŭa - luiziana kreola - lozia - nord-lura + luiziana kreola + lozia + nord-lura litova - katanga-luba - kasaja-luba - lundaa - lua - luhia + latgala + katanga-luba + kasaja-luba + lundaa + lua + luhia latva - madura - magaha - majtila - makasara - masaja - mokŝa - mendea - merua - maŭrica kreola + laza + madura + magaha + majtila + makasara + masaja + mokŝa + mendea + merua + maŭricia kreola malagasa - makua (Meetto) - marŝala + makua (Meetto) + marŝala maoria - mikmaka - minankabaŭa + mikmaka + minankabaŭa makedona malajalama mongola - manipura - inua - mohoka - mosia + manipura + inua + mohoka + mosia marata malaja malta - mundanga - pluraj lingvoj - krika - miranda + mundanga + pluraj lingvoj + krika + miranda + blank-hmonga birma - erzja - mazandarana + erzja + mazandarana naura - napola - nama + napola + nama dannorvega - nord-matabela - platgermana + nord-matabela + platgermana nepala - nevara - ndonga - niasa - niua + nevara + ndonga + niasa + niua nederlanda - flandra + flandra novnorvega norvega - nogaja - N’Ko - sud-matabela - nord-sota - nuera - navaha - njanĝa - njankora + nogaja + N’Ko + sud-matabela + nord-sota + nuera + navaha + njanĝa + njankora okcitana - oĝibva nordokcidenta - oĝibva centra - oĝibva okcidenta - okanagana + oĝibva nordokcidenta + oĝibva centra + oĝibva okcidenta + okanagana oroma - orijo - oseta + Orijo + oseta panĝaba - pangasina - pampanga - Papiamento - palaŭa - niĝeria piĝino - piĵina + pangasina + pampanga + Papiamento + palaŭa + niĝeria piĝino + palia + Piĵino pola + piemonta malesita-pasamakvodja - prusa - paŝtua + prusa + paŝtua portugala - portugala brazila - portugala eŭropa + portugala brazila + portugala eŭropa keĉua - raĝastana - rapanuia - maoria kukinsula - rohinĝa + kiĉea + raĝastana + rapanuia + maoria kukinsula + rohinĝa + rifa romanĉa burunda rumana - kiromba + moldava + ĉaga (Kirombo) rusa - arumana + arumana ruanda - rua - sanskrito - sandavea - jakuta - samburua - santala - gambaja - sarda - sicilia - skota + ĉaga (Rwa) + Sanskrito + sandavea + jakuta + samburua + santala + gambaja + sangua + sarda + sicilia + skota sinda - nord-samea + sud-kurda + nord-samea sangoa - serbo-Kroata - ŝelha - ŝana + ĵemajtia + serbokroata + ŝelha + ŝana sinhala + sidama slovaka + saraika slovena - sud-laŝucida + sud-laŝucida samoa - anar-samea - skolt-samea + sud-samea + lule-samea + anar-samea + skolt-samea ŝona - soninka + soninka somala albana serba - surinama + surinama svazia + saha sota - saliŝa nord-markola + saliŝa nord-markola sunda - sukuma + sukuma sveda svahila - maorea - siria - silezi-pola + komora + siria + silezi-pola tamila - sud-tuĉona + sud-tuĉona telugua - temna - tesa - tetuna + temna + tesa + tetuna taĝika - tagiŝa + tagiŝa taja - taltana + taltana tigraja - tigrea + tigrea turkmena tagaloga - klingona - tlingita + klingona + tlingita cvana - tongana - Tokipono - Tokpisino + tonga + Tokipono + Tokpisino turka - sedeka + sedeka + torvalia conga tatara - nord-tuĉona - tumbuka - tuvala - tahitia - tuva - tamaziĥta mez-atlasa - udmurta + nord-tuĉona + tumbuka + tuvala + tahitia + tuva + tamaziĥta mez-atlasa + udmurta ujgura ukraina - ovimbunda + ovimbunda nekonata lingvo - urduo + Urduo uzbeka - vaja - vendaa - venecia + vaja + vendaa + venecia vjetnama - makua - Volapuko - kivunja - valona - germana valza - varaja + makua + Volapuko + ĉaga (Kivunjo) + valona + germana valza + velajtaa + varaja volofa - vua - kalmuka + vua + kalmuka ksosa - kangra + kangra soga - jida + judgermana joruba - nengatua - kantona - ĉina kantona + nengatua + kantona + ĉina kantona ĝuanga - tamaziĥta maroka norma + tamaziĥta maroka norma ĉina - ĉina, normlingvo + ĉina, normlingvo ĉina simpligita - ĉina normlingvo simpligita + ĉina normlingvo simpligita ĉina tradicia - ĉina normlingvo tradicia + ĉina normlingvo tradicia zulua - zunjia + zunjia nelingvaĵo - zazaa + zazaa - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mondo - Afriko - Nordameriko - Sudameriko - Oceanio - Okcidenta Afriko - Centra Ameriko - Orienta Afriko - Norda Afriko - Centra Afriko - Suda Afriko - Amerikoj - Norda Ameriko - Kariba regiono - Orienta Azio - Suda Azio - Sud-orienta Azio - Suda Eŭropo - Aŭstralazio - Melanezio - Mikronezia regiono - Polinezio - Azio - Centra Azio - Okcidenta Azio - Eŭropo - Orienta Eŭropo - Norda Eŭropo - Okcidenta Eŭropo - Subsahara Afriko - Latinameriko - Ascension + Afriko + Nordameriko + Sudameriko + Oceanio + Okcidenta Afriko + Centra Ameriko + Orienta Afriko + Norda Afriko + Centra Afriko + Suda Afriko + Amerikoj + Norda Ameriko + Kariba regiono + Orienta Azio + Suda Azio + Sud-orienta Azio + Suda Eŭropo + Aŭstralazio + Melanezio + Mikronezia regiono + Polinezio + Azio + Centra Azio + Okcidenta Azio + Eŭropo + Orienta Eŭropo + Norda Eŭropo + Okcidenta Eŭropo + Subsahara Afriko + Latinameriko + Ascension Andoro Unuiĝintaj Arabaj Emirlandoj Afganujo - Antigvo kaj Barbudo + Antigvo kaj Barbudo Angvilo Albanujo Armenujo Angolo Antarkto Argentino - Usona Samoo + Usona Samoo Aŭstrujo Aŭstralio Arubo - Alando + Alando Azerbajĝano - Bosnujo kaj Hercegovino + Bosnujo kaj Hercegovino Barbado Bangladeŝo Belgujo @@ -546,25 +589,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic Barejno Burundo Benino - Sankta Bartolomeo + Sankta Bartolomeo Bermudoj Brunejo Bolivio - Kariba Nederlando + Kariba Nederlando Brazilo Bahamoj Butano - Buvetinsulo + Buvetinsulo Bocvano Belorusujo Belizo Kanado - Kokosinsuloj - Kongo Kinŝasa - Demokratia Respubliko Kongo - Centr-Afrika Respubliko - Kongo Brazavila - Respubliko Kongo + Kokosinsuloj + Kongo Kinŝasa + Demokratia Respubliko Kongo + Centr-Afriko + Kongo Brazavila + Respubliko Kongo Svisujo Ebur-Bordo Kukinsuloj @@ -572,46 +615,46 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kameruno Ĉinujo Kolombio - Klipertono - Sark + Klipertono + Sark Kostariko Kubo - Kaboverdo - Kuracao - Kristnaskinsulo + Kaboverdo + Kuracao + Kristnaskinsulo Kipro Ĉeĥujo - Ĉeĥa Respubliko + Ĉeĥa Respubliko Germanujo - Diego Garcia + Diego Garcia Ĝibutio Danujo Dominiko - Domingo + Dominika Respubliko Alĝerio - Ceŭto kaj Melilo + Ceŭto kaj Melilo Ekvadoro Estonujo - Egiptujo + Egiptujo Okcidenta Saharo Eritreo Hispanujo Etiopujo - Eŭropa Unio - Eŭrozono + Eŭropa Unio + Eŭrozono Finnlando - Fiĝoj - Falklandoj + Fiĝio + Falklandoj Mikronezio Ferooj Francujo Gabono Unuiĝinta Reĝlando - Britujo + Britujo Grenado Kartvelujo - Franca Gviano - Gernezejo + Franca Gujano + Gernezejo Ganao Ĝibraltaro Gronlando @@ -625,44 +668,44 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gvamo Gvineo-Bisaŭo Gujano - Honkongo + Honkongo (SAR de Ĉinujo) Herda kaj Makdonaldaj Insuloj Honduro Kroatujo Haitio Hungarujo - Kanarioj + Kanarioj Indonezio Irlando Israelo - Mankinsulo + Manksinsulo Hindujo - Brita Hindoceana Teritorio - Ĉagos-arĥipelago + Brita Hindoceana Teritorio + Ĉagos-arĥipelago Irako Irano Islando Italujo - Ĵerzejo + Ĵerzejo Jamajko Jordanio Japanujo Kenjo - Kirgizujo + Kirgizujo Kamboĝo Kiribato Komoroj - Sankta Kristoforo kaj Neviso - Nord-Koreo - Sud-Koreo + Sankta Kristoforo kaj Neviso + Nord-Koreujo + Sud-Koreujo Kuvajto - Kejmanoj - Kazaĥujo + Kajmana Insularo + Kazaĥujo Laoso Libano - Sankta Lucio + Sankta Lucio Liĥtenŝtejno - Srilanko + Srilanko Liberio Lesoto Litovujo @@ -672,19 +715,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Maroko Monako Moldavujo - Montenegro - Saint-Martin + Montenegro + Saint-Martin Madagaskaro Marŝaloj - Nord-Makedonujo + Nord-Makedonujo Malio - Birmo + Birmo Mongolujo - Makao + Makao (SAR de Ĉinujo) Nord-Marianoj Martiniko - Maŭritanujo - Moncerato + Maŭritanio + Moncerato Malto Maŭricio Maldivoj @@ -712,143 +755,242 @@ CLDR data files are interpreted according to the LDML specification (http://unic Filipinoj Pakistano Pollando - Sankta Piero kaj Mikelono + Sankta Piero kaj Mikelono Pitkarna Insulo - Puertoriko - Palestino + Puertoriko + Palestinaj teritorioj Portugalujo - Palaŭo + Palaŭo Paragvajo Kataro - malproksimaj insuletoj de Oceanio + malproksimaj insuletoj de Oceanio Reunio Rumanujo - Serbujo + Serbujo Rusujo Ruando - Sauda Arabujo + Sauda Arabujo Salomonoj Sejŝeloj Sudano Svedujo Singapuro - Sankta Heleno + Sankta Heleno Slovenujo - Svalbardo kaj Janmajeno + Svalbardo kaj Janmajeno Slovakujo - Sieraleono - Sanmarino + Sieraleono + Sanmarino Senegalo Somalujo Surinamo - Sud-Sudano - Santomeo kaj Principeo + Sud-Sudano + Santomeo kaj Principeo Salvadoro - Sint-Maarten + Sint-Maarten Sirio Svazilando - Tristan da Cunha - Turkoj kaj Kajkoj + Tristan da Cunha + Turkoj kaj Kajkoj Ĉado - Francaj Sudaj Teritorioj - Togolando + Francaj Sudaj Teritorioj + Togolando Tajlando Taĝikujo - Tokelao - Orienta Timoro + Tokelao + Orienta Timoro Turkmenujo Tunizio Tongo Turkujo - Turkio Trinidado kaj Tobago Tuvalo Tajvano Tanzanio - Ukrainujo + Ukrainujo Ugando Usonaj malgrandaj insuloj - Unuiĝintaj Nacioj + Unuiĝintaj Nacioj Usono Urugvajo Uzbekujo Vatikano - Sankta Vincento kaj Grenadinoj + Sankta Vincento kaj Grenadinoj Venezuelo Britaj Virgulininsuloj Usonaj Virgulininsuloj - Vjetnamo + Vjetnamujo Vanuatuo Valiso kaj Futuno Samoo - pseŭdo-supersignoj - pseŭdo-inversdirekta - Kosovo + pseŭdo-supersignoj + pseŭdo-inversdirekta + Kosovo Jemeno Majoto Sud-Afriko Zambio Zimbabvo - nekonata regiono + nekonata regiono - Arkaika - h-sistemo - x-sistemo + Arkaika + h-sistemo + x-sistemo - kalendaro - formo de valuto - ordigo - valuto + kalendaro + formo de valuto + ordigo + valuto + vidigo de miensimboloj + horloĝa sistemo (12- aŭ 24-hora) + stilo de linisalto + linisalto ene vortoj + mezur-sistemo + ciferoj + frazfino post mallongigo - budhaisma kalendaro - ĉina kalendaro - kopta kalendaro - korea kalendaro - etiopa kalendaro - gregoria kalendaro - juda kalendaro - islama kalendaro - tabela islama kalendaro - islama kalendaro (Umm al-Qura) - kalendaro ISO-8601 - japana kalendaro - persa kalendaro - kalendaro de Respubliko Ĉinujo - norma ordigo laŭ Unikodo - ĝeneral-uza serĉo - norma ordigo - eŭropaj ciferoj + budaisma kalendaro + budaisma + ĉina kalendaro + ĉina + kopta kalendaro + kopta + korea kalendaro + korea + etiopa kalendaro + etiopa + etiopa kalendaro (Amete Alem) + etiopa Amete Alem + gregoria kalendaro + gregoria + juda kalendaro + juda + islama kalendaro + islama + tabela islama kalendaro + tabela islama + islama kalendaro (Umm al-Qura) + islama Umm al-Qura + gregoria kalendaro (jaro unue) + japana kalendaro + japana + persa kalendaro + persa + kalendaro de Respubliko Ĉinujo + respublik-ĉina + kontista formo de valuto + kontista + norma formo de valuto + norma + norma ordigo laŭ Unikodo + norma laŭ Unikodo + ĝeneral-uza serĉo + serĉa + norma ordigo + norma + norma + miensimboloj + teksto + 12-hora sistemo (0–11) + 12 (0–11) + 12-hora sistemo (1–12) + 12 (1–12) + 24-hora sistemo (0–23) + 24 (0–23) + 24-hora sistemo (1–24) + 24 (1–24) + milda stilo de linisalto + milda + norma stilo de linisalto + norma + malmilda stilo de linisalto + malmilda + rompi ĉiujn + konservi ĉiujn + norma + konservi en frazoj + metra sistemo + metra + brita mezur-sistemo + brita + usona mezur-sistemo + usona + hind-arabaj ciferoj + hind-arabaj ciferoj etenditaj + armenaj ciferoj + armenaj ciferoj minusklaj + bengalaj ciferoj + ĉakmaj ciferoj + devanagaraj ciferoj + etiopaj ciferoj + ciferoj plenlarĝaj + kartvelaj ciferoj + grekaj ciferoj + grekaj ciferoj minusklaj + guĝarataj ciferoj + gurmukaj ciferoj + ĉinaj dekumaj ciferoj + simpligit-ĉinaj ciferoj + simpligit-ĉinaj financaj ciferoj + tradici-ĉinaj ciferoj + tradic-ĉinaj financaj ciferoj + hebreaj ciferoj + javaj ciferoj + japanaj ciferoj + japanaj financaj ciferoj + kmeraj ciferoj + kanaraj ciferoj + laŭaj ciferoj + eŭropaj ciferoj + malajalamaj ciferoj + manipuraj ciferoj + birmaj ciferoj + orijaj ciferoj + romaj ciferoj + romaj ciferoj minusklaj + tamilaj tradiciaj ciferoj + tamilaj ciferoj + teluguaj ciferoj + tajaj ciferoj + tibetaj ciferoj + vajaj ciferoj + ne + jes - metra - brita - usona + metra + brita + usona - Lingvo: {0} - Skribsistemo: {0} - Regiono: {0} + Lingvo: {0} + Skribsistemo: {0} + Regiono: {0} [a b c ĉ d e f g ĝ h ĥ i j ĵ k l m n o p r s ŝ t u ŭ v z] [q w x y] - [A B C Ĉ D E F G Ĝ H Ĥ I J Ĵ K L M N O P R S Ŝ T U Ŭ V Z] + [A B C Ĉ D E F G Ĝ H Ĥ I J Ĵ K L M N O P R S Ŝ T U V Z] [  , % ‰ + − 0 1 2 3 4 5 6 7 8 9] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] \{ \} /] - {0}… - …{0} + {0}… + …{0} + + « + » + - EEEE, 'la' d-'a' 'de' MMMM y G + EEEE, 'la' d-'a' 'de' MMMM y G @@ -865,104 +1007,125 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd - {1} {0} + {1} {0} - {1} 'je' {0} + {1} 'je' {0} + + + {1} 'je' {0} - {1} {0} + {1} {0} - {1} 'je' {0} + {1} 'je' {0} + + + {1} 'je' {0} - {1} {0} + {1} {0} + + + {1}, {0} + + + {1}, {0} - {1} {0} + {1} {0} - y G - d MMM y G - MMM y G - d MMM y G - E, d MMM y G - E, dd-MM - d MMM - E, d MMM - d MMMM - y G - y G - M y GGGGG - y-MM-dd GGGGG - E, y-MM-dd GGGGG - MMM y G - d MMM y G - E, d MMM y G - MMMM y G - QQQ 'de' y G - QQQQ 'de' y G + E h:mm a + E h:mm:ss a + y G + d MMM y G + E, d MMM y G + MMM y G + d MMM y G + E, d MMM y G + h:mm a + h:mm:ss a + HH'H' v + E, dd-MM + d MMM + E, d MMM + d MMMM + y G + y G + M y GGGGG + y-MM-dd GGGGG + E, y-MM-dd GGGGG + MMM y G + d MMM y G + E, d MMM y G + MMMM y G + QQQ 'de' y G + QQQQ 'de' y G + + h – h B + - h:mm – h:mm B - h:mm – h:mm B + h:mm – h:mm B + h:mm – h:mm B - d – d + d – d - y G – y G - y – y G + y G – y G + y – y G - MMM y GGGGG – MMM y GGGGG - MMM – MMM y GGGGG - MMM y – MMM y GGGGG + MMM y GGGGG – MMM y GGGGG + MMM – MMM y GGGGG + MMM y – MMM y GGGGG - d – d MMM y GGGGG - d MMM y GGGGG – d MMM y GGGGG - d MMM – d MMM y GGGGG - d MMM y – d MMM y GGGGG + d – d MMM y GGGGG + d MMM y GGGGG – d MMM y GGGGG + d MMM – d MMM y GGGGG + d MMM y – d MMM y GGGGG - E, d – E, d MMM y GGGGG - E, d MMM y GGGGG – E, d MMM y GGGGG - E, d MMM – E, d MMM y GGGGG - E, d MMM y – E, d MMM y GGGGG + E, d – E, d MMM y GGGGG + E, d MMM y GGGGG – E, d MMM y GGGGG + E, d MMM – E, d MMM y GGGGG + E, d MMM y – E, d MMM y GGGGG - MMM y G – MMM y G - MMM – MMM y G - MMM y – MMM y G + MMM y G – MMM y G + MMM – MMM y G + MMM y – MMM y G - d MMM – d MMM y G - d MMM y G – d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G + d MMM – d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E, d – E, d MMM y G - E, d MMM y G – E, d MMM y G - E, d MMM – E, d MMM y G - E, d MMM y – E, d MMM y G + E, d – E, d MMM y G + E, d MMM y G – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G h–h a @@ -979,61 +1142,57 @@ CLDR data files are interpreted according to the LDML specification (http://unic h–h a v - M – M - - - MM-dd – MM-dd - MM-dd – MM-dd + M – M - E, MM-dd – E, MM-dd - E, MM-dd – E, MM-dd + E, MM-dd – E, MM-dd + E, MM-dd – E, MM-dd - MMM – MMM + MMM – MMM - d – d MMM - d MMM – d MMM + d – d MMM + d MMM – d MMM - E, d – E, d MMM - E, d MMM – E, d MMM + E, d – E, d MMM + E, d MMM – E, d MMM - y – y G + y – y G - y-MM – y-MM GGGGG - y-MM – y-MM GGGGG + y-MM – y-MM GGGGG + y-MM – y-MM GGGGG - y-MM-dd – y-MM-dd GGGGG - y-MM-dd – y-MM-dd GGGGG - y-MM-dd – y-MM-dd GGGGG + y-MM-dd – y-MM-dd GGGGG + y-MM-dd – y-MM-dd GGGGG + y-MM-dd – y-MM-dd GGGGG - E, y-MM-dd – E, y-MM-dd GGGGG - E, y-MM-dd – E, y-MM-dd GGGGG - E, y-MM-dd – E, y-MM-dd GGGGG + E, y-MM-dd – E, y-MM-dd GGGGG + E, y-MM-dd – E, y-MM-dd GGGGG + E, y-MM-dd – E, y-MM-dd GGGGG - MMM – MMM y G - MMM y – MMM y G + MMM – MMM y G + MMM y – MMM y G - d – d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G + d – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E, d – E, d MMM y G - E, d MMM – E, d MMM y G - E, d MMM y – E, d MMM y G + E, d – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G - MMMM – MMMM y G - MMMM y – MMMM y G + MMMM – MMMM y G + MMMM y – MMMM y G @@ -1072,18 +1231,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic - J - F - M - A - M - J - J - A - S - O - N - D + J + F + M + A + M + J + J + A + S + O + N + D @@ -1110,29 +1269,29 @@ CLDR data files are interpreted according to the LDML specification (http://unic - d - l - m - m - ĵ - v - s + d + l + m + m + ĵ + v + s - 1. jk. - 2. jk. - 3. jk. - 4. jk. + 1. jk. + 2. jk. + 3. jk. + 4. jk. - 1-a jarkvarono - 2-a jarkvarono - 3-a jarkvarono - 4-a jarkvarono + 1-a jarkvarono + 2-a jarkvarono + 3-a jarkvarono + 4-a jarkvarono @@ -1143,35 +1302,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic ptm - a - p + a + p - a - p + a + p - antaŭ nia erao - antaŭ Kristo - de nia erao - post Kristo + antaŭ nia erao + antaŭ Kristo + de nia erao + post Kristo - a.n.e. - a.K. - n.e. - p.K. + a.n.e. + a.K. + n.e. + p.K. - EEEE, 'la' d-'a' 'de' MMMM y + EEEE, 'la' d-'a' 'de' MMMM y @@ -1196,203 +1355,209 @@ CLDR data files are interpreted according to the LDML specification (http://unic - HH:mm:ss zzzz + HH:mm:ss zzzz Hmsszzzz - HH:mm:ss z + HH:mm:ss z - HH:mm:ss + HH:mm:ss - HH:mm + HH:mm - {1} {0} + {1} {0} - {1} 'je' {0} + {1} 'je' {0} + + + {1} 'je' {0} - {1} {0} + {1} {0} - {1} 'je' {0} + {1} 'je' {0} + + + {1} 'je' {0} - {1} {0} + {1}, {0} + + + {1}, {0} + + + {1}, {0} - {1} {0} + {1} {0} - y G - d MMM y G - MMM y G - d MMM y G - E, d MMM y G - E, MM-dd - MMM - d MMM - E, d MMM - d MMMM - W-'a' 'semajno' 'de' MMMM - W-'a' 'semajno' 'de' MMMM - E, y-MM-dd - MMM y - d MMM y - E, d MMM y - MMMM y - QQQ y - QQQQ 'de' y - w-'a' 'semajno' 'de' Y - w-'a' 'semajno' 'de' Y + E h:mm a + E h:mm:ss a + y G + d MMM y G + E, d MMM y G + MMM y G + d MMM y G + E, d MMM y G + HH'H' + h:mm a + h:mm:ss a + h:mm:ss a v + h:mm a v + HH'H' v + E, MM-dd + MMM + d MMM + E, d MMM + d MMMM + W-'a' 'semajno' 'de' MMMM + W-'a' 'semajno' 'de' MMMM + E, y-MM-dd + MMM y + d MMM y + E, d MMM y + MMMM y + QQQ y + QQQQ 'de' y + w-'a' 'semajno' 'de' Y + w-'a' 'semajno' 'de' Y - d – d + d – d - y G – y G - y – y G + y G – y G + y – y G - MMM y G – MMM y G - MMM – MMM y G - MMM y – MMM y G + MMM y G – MMM y G + MMM – MMM y G + MMM y – MMM y G - d – d MMM y G - d MMM y G – d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G + d – d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E, d – E, d MMM y G - E, d MMM y G – E, d MMM y G - E, d MMM – E, d MMM y G - E, d MMM y – E, d MMM y G + E, d – E, d MMM y G + E, d MMM y G – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G - MMM y G – MMM y G - MMM – MMM y G - MMM y – MMM y G + MMM y G – MMM y G + MMM – MMM y G + MMM y – MMM y G - d – d MMM y G - d MMM y G – d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G + d – d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E, d – E, d MMM y G - E, d MMM y G – E, d MMM y G - E, d MMM – E, d MMM y G - E, d MMM y – E, d MMM y G + E, d – E, d MMM y G + E, d MMM y G – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G - h a – h a - h – h a + h – h a - HH – HH + HH – HH - h:mm a – h:mm a - h:mm – h:mm a - h:mm – h:mm a + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a - HH:mm – HH:mm - HH:mm – HH:mm + HH:mm – HH:mm + HH:mm – HH:mm - h:mm a – h:mm a v - h:mm – h:mm a v - h:mm – h:mm a v + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v - HH:mm – HH:mm v - HH:mm – HH:mm v + HH:mm – HH:mm v + HH:mm – HH:mm v - h a – h a v - h – h a v + h – h a v - HH – HH v - - - MM-dd – MM-dd - MM-dd – MM-dd + HH–HH'H' v - E, MM-dd – E, MM-dd - E, MM-dd – E, MM-dd + E, MM-dd – E, MM-dd + E, MM-dd – E, MM-dd - MMM–MMM + MMM–MMM - d – d MMM - d MMM – d MMM + d – d MMM + d MMM – d MMM - E, d – E, d MMM - E, d MMM – E, d MMM + E, d – E, d MMM + E, d MMM – E, d MMM - y – y - - - y-MM – y-MM - y-MM – y-MM - - - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd + y – y - E, y-MM-dd – E, y-MM-dd - E, y-MM-dd – E, y-MM-dd - E, y-MM-dd – E, y-MM-dd + E, y-MM-dd – E, y-MM-dd + E, y-MM-dd – E, y-MM-dd + E, y-MM-dd – E, y-MM-dd - MMM – MMM y - MMM y – MMM y + MMM – MMM y + MMM y – MMM y - d–d MMM y - d MMM – d MMM y - d MMM y – d MMM y + d–d MMM y + d MMM – d MMM y + d MMM y – d MMM y - E, d – E, d MMM y - E, d MMM – E, d MMM y - E, d MMM y – E, d MMM y + E, d – E, d MMM y + E, d MMM – E, d MMM y + E, d MMM y – E, d MMM y - MMMM – MMMM y - MMMM y – MMMM y + MMMM – MMMM y + MMMM y – MMMM y @@ -1400,2371 +1565,2357 @@ CLDR data files are interpreted according to the LDML specification (http://unic - erao + erao - jaro - pasinta jaro - nuna jaro - venonta jaro + jaro + pasinta jaro + nuna jaro + venonta jaro - post {0} jaro - post {0} jaroj + post {0} jaro + post {0} jaroj - antaŭ {0} jaro - antaŭ {0} jaroj + antaŭ {0} jaro + antaŭ {0} jaroj - pasinta j. - nuna j. - venonta j. + pasinta j. + nuna j. + venonta j. - post {0} j. - post {0} j. + post {0} j. + post {0} j. - antaŭ {0} j. - antaŭ {0} j. + antaŭ {0} j. + antaŭ {0} j. - jarkvarono - pasinta jarkvarono - nuna jarkvarono - venonta jarkvarono + jarkvarono + pasinta jarkvarono + nuna jarkvarono + venonta jarkvarono - post {0} jarkvarono - post {0} jarkvaronoj + post {0} jarkvarono + post {0} jarkvaronoj - antaŭ {0} jarkvarono - antaŭ {0} jarkvaronoj + antaŭ {0} jarkvarono + antaŭ {0} jarkvaronoj - jk. + jk. - post {0} jk. - post {0} jk. + post {0} jk. + post {0} jk. - antaŭ {0} jk. - antaŭ {0} jk. + antaŭ {0} jk. + antaŭ {0} jk. - monato - pasinta monato - nuna monato - venonta monato + monato + pasinta monato + nuna monato + venonta monato - post {0} monato - post {0} monatoj + post {0} monato + post {0} monatoj - antaŭ {0} monato - antaŭ {0} monatoj + antaŭ {0} monato + antaŭ {0} monatoj - mon. - pasinta mon. - nuna mon. - venonta mon. + mon. + pasinta mon. + nuna mon. + venonta mon. - post {0} mon. - post {0} mon. + post {0} mon. + post {0} mon. - antaŭ {0} mon. - antaŭ {0} mon. + antaŭ {0} mon. + antaŭ {0} mon. - semajno - pasinta semajno - nuna semajno - venonta semajno + semajno + pasinta semajno + nuna semajno + venonta semajno - post {0} semajno - post {0} semajnoj + post {0} semajno + post {0} semajnoj - antaŭ {0} semajno - antaŭ {0} semajnoj + antaŭ {0} semajno + antaŭ {0} semajnoj - la semajno de {0} + la semajno de {0} - sem. - pasinta sem. - nuna sem. - venonta sem. + sem. + pasinta sem. + nuna sem. + venonta sem. - post {0} sem. - post {0} sem. + post {0} sem. + post {0} sem. - antaŭ {0} sem. - antaŭ {0} sem. + antaŭ {0} sem. + antaŭ {0} sem. - sem. de {0} + sem. de {0} - semajno de monato + semajno de monato - sem. de mon. + sem. de mon. - tago - hieraŭ - hodiaŭ - morgaŭ + tago + hieraŭ + hodiaŭ + morgaŭ - post {0} tago - post {0} tagoj + post {0} tago + post {0} tagoj - antaŭ {0} tago - antaŭ {0} tagoj + antaŭ {0} tago + antaŭ {0} tagoj - t. + t. + hier. + hod. + morg. - post {0} t. - post {0} t. + post {0} t. + post {0} t. - antaŭ {0} t. - antaŭ {0} t. + antaŭ {0} t. + antaŭ {0} t. - tago de jaro + tago de jaro + + + jartago - t. de j. + jartago - tago de semajno + tago de semajno - semajntago + semajntago - st. + st. - semajntago de monato + semajntago de monato - st. de monato + st. de monato + + + st. de mon. - pasinta dimanĉo - ĉi tiu dimanĉo - venonta dimanĉo + pasinta dimanĉo + ĉi tiu dimanĉo + venonta dimanĉo - post {0} dimanĉo - post {0} dimanĉoj + post {0} dimanĉo + post {0} dimanĉoj - antaŭ {0} dimanĉo - antaŭ {0} dimanĉoj + antaŭ {0} dimanĉo + antaŭ {0} dimanĉoj - pasinta di. - ĉi tiu di. - venonta di. + pasinta di. + ĉi tiu di. + venonta di. - post {0} di. - post {0} di. + post {0} di. + post {0} di. - antaŭ {0} di. - antaŭ {0} di. + antaŭ {0} di. + antaŭ {0} di. - pasinta d. - nuna d. - venonta d. + pasinta d. + nuna d. + venonta d. - post {0} d. - post {0} d. + post {0} d. + post {0} d. - antaŭ {0} d. - antaŭ {0} d. + antaŭ {0} d. + antaŭ {0} d. - pasinta lundo - ĉi tiu lundo - venonta lundo + pasinta lundo + ĉi tiu lundo + venonta lundo - post {0} lundo - post {0} lundoj + post {0} lundo + post {0} lundoj - antaŭ {0} lundo - antaŭ {0} lundoj + antaŭ {0} lundo + antaŭ {0} lundoj - pasinta lu. - ĉi tiu lu. - venonta lu. + pasinta lu. + ĉi tiu lu. + venonta lu. - post {0} lu. - post {0} lu. + post {0} lu. + post {0} lu. - antaŭ {0} lu. - antaŭ {0} lu. + antaŭ {0} lu. + antaŭ {0} lu. - pasinta l. - nuna l. - venonta l. + pasinta l. + nuna l. + venonta l. - post {0} l. - post {0} l. + post {0} l. + post {0} l. - antaŭ {0} l. - antaŭ {0} l. + antaŭ {0} l. + antaŭ {0} l. - pasinta mardo - ĉi tiu mardo - venonta mardo + pasinta mardo + ĉi tiu mardo + venonta mardo - post {0} mardo - post {0} mardoj + post {0} mardo + post {0} mardoj - antaŭ {0} mardo - antaŭ {0} mardoj + antaŭ {0} mardo + antaŭ {0} mardoj - pasinta ma. - ĉi tiu ma. - venonta ma. + pasinta ma. + ĉi tiu ma. + venonta ma. - post {0} ma. - post {0} ma. + post {0} ma. + post {0} ma. - antaŭ {0} ma. - antaŭ {0} ma. + antaŭ {0} ma. + antaŭ {0} ma. - pasinta ma. - nuna ma. - venonta ma. + pasinta ma. + nuna ma. + venonta ma. - pasinta merkredo - ĉi tiu merkredo - venonta merkredo + pasinta merkredo + ĉi tiu merkredo + venonta merkredo - post {0} merkredo - post {0} merkredoj + post {0} merkredo + post {0} merkredoj - antaŭ {0} merkredo - antaŭ {0} merkredoj + antaŭ {0} merkredo + antaŭ {0} merkredoj - pasinta me. - ĉi tiu me. - venonta me. + pasinta me. + ĉi tiu me. + venonta me. - post {0} me. - post {0} me. + post {0} me. + post {0} me. - antaŭ {0} me. - antaŭ {0} me. + antaŭ {0} me. + antaŭ {0} me. - pasinta me. - nuna me. - venonta me. + pasinta me. + nuna me. + venonta me. - pasinta ĵaŭdo - ĉi tiu ĵaŭdo - venonta ĵaŭdo + pasinta ĵaŭdo + ĉi tiu ĵaŭdo + venonta ĵaŭdo - post {0} ĵaŭdo - post {0} ĵaŭdoj + post {0} ĵaŭdo + post {0} ĵaŭdoj - antaŭ {0} ĵaŭdo - antaŭ {0} ĵaŭdoj + antaŭ {0} ĵaŭdo + antaŭ {0} ĵaŭdoj - pasinta ĵa. - ĉi tiu ĵa. - venonta ĵa. + pasinta ĵa. + ĉi tiu ĵa. + venonta ĵa. - post {0} ĵa. - post {0} ĵa. + post {0} ĵa. + post {0} ĵa. - antaŭ {0} ĵa. - antaŭ {0} ĵa. + antaŭ {0} ĵa. + antaŭ {0} ĵa. - pasinta ĵ. - nuna ĵ. - venonta ĵ. + pasinta ĵ. + nuna ĵ. + venonta ĵ. - post {0} ĵ. - post {0} ĵ. + post {0} ĵ. + post {0} ĵ. - antaŭ {0} ĵ. - antaŭ {0} ĵ. + antaŭ {0} ĵ. + antaŭ {0} ĵ. - pasinta vendredo - ĉi tiu vendredo - venonta vendredo + pasinta vendredo + ĉi tiu vendredo + venonta vendredo - post {0} vendredo - post {0} vendredoj + post {0} vendredo + post {0} vendredoj - antaŭ {0} vendredo - antaŭ {0} vendredoj + antaŭ {0} vendredo + antaŭ {0} vendredoj - pasinta ve. - ĉi tiu ve. - venonta ve. + pasinta ve. + ĉi tiu ve. + venonta ve. - post {0} ve. - post {0} ve. + post {0} ve. + post {0} ve. - antaŭ {0} ve. - antaŭ {0} ve. + antaŭ {0} ve. + antaŭ {0} ve. - pasinta v. - nuna v. - venonta v. + pasinta v. + nuna v. + venonta v. - post {0} v. - post {0} v. + post {0} v. + post {0} v. - antaŭ {0} v. - antaŭ {0} v. + antaŭ {0} v. + antaŭ {0} v. - pasinta sabato - ĉi tiu sabato - venonta sabato + pasinta sabato + ĉi tiu sabato + venonta sabato - post {0} sabato - post {0} sabatoj + post {0} sabato + post {0} sabatoj - antaŭ {0} sabato - antaŭ {0} sabatoj + antaŭ {0} sabato + antaŭ {0} sabatoj - pasinta sa. - ĉi tiu sa. - venonta sa. + pasinta sa. + ĉi tiu sa. + venonta sa. - post {0} sa. - post {0} sa. + post {0} sa. + post {0} sa. - antaŭ {0} sa. - antaŭ {0} sa. + antaŭ {0} sa. + antaŭ {0} sa. - pasinta s. - nuna s. - venonta s. + pasinta s. + nuna s. + venonta s. - post {0} s. - post {0} s. + post {0} s. + post {0} s. - antaŭ {0} s. - antaŭ {0} s. + antaŭ {0} s. + antaŭ {0} s. - tagotempo + tagtempo - mateno / posttagmezo / vespero + tagtempo + + + tagtempo - horo - nuna horo + horo + nuna horo - post {0} horo - post {0} horoj + post {0} horo + post {0} horoj - antaŭ {0} horo - antaŭ {0} horoj + antaŭ {0} horo + antaŭ {0} horoj - h + h - post {0} h - post {0} h + post {0} h + post {0} h - antaŭ {0} h - antaŭ {0} h + antaŭ {0} h + antaŭ {0} h - minuto - nuna minuto + minuto + nuna minuto - post {0} minuto - post {0} minutoj + post {0} minuto + post {0} minutoj - antaŭ {0} minuto - antaŭ {0} minutoj + antaŭ {0} minuto + antaŭ {0} minutoj - min. + min. - post {0} min. - post {0} min. + post {0} min. + post {0} min. - antaŭ {0} min. - antaŭ {0} min. + antaŭ {0} min. + antaŭ {0} min. - min + min - post {0} min - post {0} min + post {0} min + post {0} min - antaŭ {0} min - antaŭ {0} min + antaŭ {0} min + antaŭ {0} min - sekundo - nun + sekundo + nun - post {0} sekundo - post {0} sekundoj + post {0} sekundo + post {0} sekundoj - antaŭ {0} sekundo - antaŭ {0} sekundoj + antaŭ {0} sekundo + antaŭ {0} sekundoj - sek. + sek. - post {0} sek. - post {0} sek. + post {0} sek. + post {0} sek. - antaŭ {0} sek. - antaŭ {0} sek. + antaŭ {0} sek. + antaŭ {0} sek. - s + s - post {0} s - post {0} s + post {0} s + post {0} s - antaŭ {0} s - antaŭ {0} s + antaŭ {0} s + antaŭ {0} s - horzono + horzono - zono + zono - UTC{0} - UTC - tempo de {0} - somera tempo de {0} - norma tempo de {0} + UTC{0} + UTC + UTC+? + tempo: {0} + {0} (somera tempo) + {0} (norma tempo) - universala tempo kunordigita + universala tempo kunordigita - nekonata urbo + nekonata loko - Andoro + Andoro - Dubajurbo + Dubajurbo - Kabulo + Kabulo - Antigvo + Antigvo - Angvilo + Angvilo - Tirano + Tirano - Erevano + Erevano - Luando - - - Showa - - - Río Gallegos + Luando - Saltaurbo - - - Tucumán + Saltaurbo - Kordobo + Kordobo - Bonaero + Bonaero - Pagopago + Pagopago - Vieno + Vieno - Perto + Perto - Darvino + Darvino - Adelajdo + Adelajdo - Melburno + Melburno - Hobarto + Hobarto - Sidnejo + Sidnejo - Brisbano + Brisbano - Makvora insulo + Makvora insulo - Arubo + Arubo - Bakuo + Bakuo - Barbado + Barbado - Dako + Dako - Bruselo + Bruselo - Vagaduguo + Vagaduguo - Sofio + Sofio - Barejno + Barejno - Buĵumburo + Buĵumburo - Portonovo + Portonovo - Sankta Bartolomeo + Sankta Bartolomeo - Bermudoj + Bermudoj - Brunejo - - - Eirunepé + Brunejo - Manaŭso - - - Cuiabá - - - Santarém + Manaŭso - Belemo - - - Araguaína + Belemo - Sanpaŭlo + Sanpaŭlo - Bahio + Bahio - Fortalezo - - - Maceió - - - Fernando de Noronha + Fortalezo - Nasaŭo + Nasaŭo - Timbuo + Timbuo - Gaborono + Gaborono - Minsko + Minsko - Belizo + Belizo - Vankuvero + Vankuvero - Edmontono + Edmontono - Kembriĝa Golfo + Kembriĝa Golfo - Vinipego + Vinipego - Ikaluito + Ikaluito - Monktono + Monktono - Halifakso + Halifakso - Kokosinsuloj + Kokosinsuloj - Kinŝaso + Kinŝaso - Lubumbaŝo + Lubumbaŝo - Bango + Bango - Brazavilo + Brazavilo - Zuriko + Zuriko - Abiĝano + Abiĝano - Rarotongo + Rarotongo - Paskinsulo + Paskinsulo - Dualao + Dualao - Urumĉio + Urumĉio - Ŝanhajo + Ŝanhajo - Bogoto + Bogoto - Kostariko + Kostariko - Havano + Havano - Kaboverdo + Kaboverdo - Kuracao + Kuracao - Kristnaskinsulo + Kristnaskinsulo - Nikozio + Nikozio - Prago + Prago - Büsingen am Hochrhein + Büsingen am Hochrhein - Berlino + Berlino - Ĝibutio + Ĝibutio - Kopenhago + Kopenhago - Dominiko + Dominiko - Sankta Domingo + Sankta Domingo - Alĝero + Alĝero - Galapagoj + Galapagoj - Talino + Talino - Kairo + Kairo - Ajuno + Ajuno - Asmero + Asmero - Kanarioj + Kanarioj - Ceŭto + Ceŭto - Madrido + Madrido - Adisabebo + Adisabebo - Helsinko + Helsinko - Fiĝio + Fiĝio - Stanlejo + Stanlejo - Ĉuuk + Ĉuuk - Ponape + Ponape - Ferooj + Ferooj - Parizo + Parizo - Librevilo + Librevilo - brita somera tempo + brita somera tempo - Londono + Londono - Grenado + Grenado - Tbiliso + Tbiliso - Kajeno + Kajeno - Gernezejo + Gernezejo - Akrao + Akrao - Ĝibraltaro + Ĝibraltaro - Qaanaaq + Qaanaaq - Nuko + Nuko - Banjulo + Banjulo - Konakrio + Konakrio - Gvadelupo + Gvadelupo - Ateno + Ateno - Sud-Georgio + Sud-Georgio - Gvatemalo + Gvatemalo - Gvamo + Gvamo - Bisaŭo + Bisaŭo - Gujano + Gujano - Honkongo + Honkongo - Tegucigalpo + Tegucigalpo - Zagrebo + Zagrebo - Portoprinco + Portoprinco - Budapeŝto + Budapeŝto - Ĝakarto + Ĝakarto - irlanda norma tempo + irlanda norma tempo - Dublino + Dublino - Jerusalemo + Jerusalemo - Mankinsulo + Manksinsulo - Kolkato + Kolkato - Ĉagosoj + Ĉagosoj - Bagdado + Bagdado - Teherano + Teherano - Rejkjaviko + Rejkjaviko - Romo + Romo - Ĵerzejo + Ĵerzejo - Jamajko + Jamajko - Amano + Amano - Tokio + Tokio - Najrobio + Najrobio - Biŝkeko + Biŝkeko - Pnompeno + Pnompeno + + + Kanton-insulo - Taravo + Taravo - Komoroj + Komoroj - Sankta Kristoforo + Sankta Kristoforo - Pjongjango + Pjongjango - Seulo + Seulo - Kuvajto + Kuvajto - Kajmanoj + Kajmanoj - Aktau + Aktau - Oralo + Oralo - Atirau + Atirau - Aktobe + Aktobe - Kostanaj + Kostanaj - Kizilordo + Kizilordo - Almato + Almato - Vjentiano + Vjentiano - Bejruto + Bejruto - Sankta Lucio + Sankta Lucio - Vaduzo + Vaduzo - Kolombo + Kolombo - Monrovio + Monrovio - Maseruo + Maseruo - Vilno + Vilno - Luksemburgo + Luksemburgo - Rigo + Rigo - Tripolo + Tripolo - Kazablanko + Kazablanko - Monako + Monako - Kiŝinevo + Kiŝinevo - Podgorico + Podgorico - Marigoto + Marigoto - Skopjo + Skopjo - Ranguno + Ranguno - Ĥovd + Ĥovd - Ulanbatoro + Ulanbatoro - Makao + Makao - Saipano + Saipano - Martiniko + Martiniko - Nuakŝoto + Nuakŝoto - Moncerato + Moncerato - Malto + Malto - Maŭricio + Maŭricio - Maldivoj - - - Mazatlán + Maldivoj - Monterejo + Monterejo - Meksikurbo + Meksikurbo - Merido + Merido - Kankuno + Kankuno - Kualalumpuro + Kualalumpuro - Vindhuko + Vindhuko - Numeo + Numeo - Niamejo + Niamejo - Norfolkinsulo + Norfolkinsulo - Lagoso + Lagoso - Managvo + Managvo - Amsterdamo + Amsterdamo - Katmanduo + Katmanduo - Nauro + Nauro - Niuo + Niuo - Ĉathamo + Ĉathamo - Aŭklando + Aŭklando - Maskato + Maskato - Panamo + Panamo - Limo + Limo - Tahitio + Tahitio - Markizinsuloj + Markizinsuloj - Manilo + Manilo - Karaĉio + Karaĉio - Varsovio + Varsovio - Mikelono + Mikelono - Pitkarna Insulo + Pitkarna Insulo - Puertoriko + Puertoriko - Gazao + Gazao - Hebrono + Hebrono - Acoroj + Acoroj - Madejro + Madejro - Lisbono + Lisbono - Palaŭo + Palaŭo - Asunciono + Asunciono - Kataro + Kataro - Reunio + Reunio - Bukareŝto + Bukareŝto - Beogrado + Beogrado - Kaliningrado + Kaliningrado - Moskvo + Moskvo - Volgogrado + Volgogrado - Astraĥano + Astraĥano - Uljanovsko + Uljanovsko - Jekaterinburgo + Jekaterinburgo - Omsko + Omsko - Novosibirsko + Novosibirsko - Novokuznecko + Novokuznecko - Krasnojarsko + Krasnojarsko - Irkutsko + Irkutsko - Ĉita + Ĉita - Jakutsko + Jakutsko - Vladivostoko + Vladivostoko - Ĥandiga + Ĥandiga - Saĥaleno + Saĥaleno - Ustnero + Ustnero - Srednekolimsk + Srednekolimsk - Kamĉatko + Kamĉatko - Anadir + Anadir - Kigalo + Kigalo - Riado - - - Mahé + Riado - Ĥartumo + Ĥartumo - Stokholmo + Stokholmo - Singapuro + Singapuro - Sankta Heleno + Sankta Heleno - Ljubljano + Ljubljano - Longjerurbo + Longjerurbo - Bratislavo + Bratislavo - Fritaŭno + Fritaŭno - Sanmarino + Sanmarino - Dakaro + Dakaro - Mogadiŝo + Mogadiŝo - Ĝubao + Ĝubao - Santomeo + Santomeo - Salvadoro + Salvadoro - Damasko + Damasko - Mbabano + Mbabano - Granda Turko + Granda Turko - Niĝameno + Niĝameno - Kergelenoj + Kergelenoj - Lomeo + Lomeo - Bankoko + Bankoko - Duŝanbeo + Duŝanbeo - Dilo + Dilo - Aŝĥabado + Aŝĥabado - Tunizo + Tunizo - Istanbulo + Istanbulo - Portospeno + Portospeno - Funafutio + Funafutio - Tajpeo + Tajpeo - Daresalamo + Daresalamo - Kievo + Kievo - Simferopolo + Simferopolo - Kampalo + Kampalo - Midvejinsuloj + Midvejinsuloj - Vejkinsulo + Vejkinsulo - Losanĝeleso + Losanĝeleso - Fenikso + Fenikso - Denvero + Denvero - Beulah, Norda Dakoto + Beulah, Norda Dakoto - New Salem, Norda Dakoto + New Salem, Norda Dakoto - Center, Norda Dakoto + Center, Norda Dakoto - Ĉikago + Ĉikago - Vincennes, Indianao + Vincennes, Indianao - Petersburg, Indianao + Petersburg, Indianao - Tell City, Indianao + Tell City, Indianao - Knox, Indianao + Knox, Indianao - Winamac, Indianao + Winamac, Indianao - Marengo, Indianao + Marengo, Indianao - Indianapolo, Indianao + Indianapolo, Indianao - Vevay, Indianao + Vevay, Indianao - Monticello, Kentukio + Monticello, Kentukio - Detrojto + Detrojto - Novjorko + Nov-Jorko - Samarkando + Samarkando - Taŝkento + Taŝkento - Vatikano + Vatikano - Sankta Vincento + Sankta Vincento - Karakaso + Karakaso - Sankta Tomaso + Sankta Tomaso - Hoĉimino + Hoĉimino - Valiso + Valiso - Apio + Apio - Adeno + Adeno - Majoto + Majoto - Johanesburgo + Johanesburgo - Lusako + Lusako - Harareo + Harareo - afgana tempo + afgana tempo - centrafrika tempo + centrafrika tempo - orientafrika tempo + orientafrika tempo - sudafrika tempo + sudafrika tempo - okcidentafrika tempo - okcidentafrika norma tempo - okcidentafrika somera tempo + okcidentafrika tempo - alaska tempo - alaska norma tempo - alaska somera tempo + alaska tempo + alaska norma tempo + alaska somera tempo - amazonia tempo - amazonia norma tempo - amazonia somera tempo + amazona tempo + amazona norma tempo + amazona somera tempo - centra nordamerika tempo - centra nordamerika norma tempo - centra nordamerika somera tempo + centra nordamerika tempo + centra nordamerika norma tempo + centra nordamerika somera tempo - orienta nordamerika tempo - orienta nordamerika norma tempo - orienta nordamerika somera tempo + orienta nordamerika tempo + orienta nordamerika norma tempo + orienta nordamerika somera tempo - montara nordamerika tempo - montara nordamerika norma tempo - montara nordamerika somera tempo + montara nordamerika tempo + montara nordamerika norma tempo + montara nordamerika somera tempo - pacifika nordamerika tempo - pacifika nordamerika norma tempo - pacifika nordamerika somera tempo + pacifika nordamerika tempo + pacifika nordamerika norma tempo + pacifika nordamerika somera tempo - tempo: Apio - Apio (norma tempo) - Apio (somera tempo) + samoa tempo + samoa norma tempo + samoa somera tempo - araba tempo - araba norma tempo - araba somera tempo + araba tempo + araba norma tempo + araba somera tempo - argentina tempo - argentina norma tempo - argentina somera tempo + argentina tempo + argentina norma tempo + argentina somera tempo - okcident-argentina tempo - okcident-argentina norma tempo - okcident-argentina somera tempo + okcident-argentina tempo + okcident-argentina norma tempo + okcident-argentina somera tempo - armena tempo - armena norma tempo - armena somera tempo + armena tempo + armena norma tempo + armena somera tempo - atlantika nordamerika tempo - atlantika nordamerika norma tempo - atlantika nordamerika somera tempo + atlantika nordamerika tempo + atlantika nordamerika norma tempo + atlantika nordamerika somera tempo - centra aŭstralia tempo - centra aŭstralia norma tempo - centra aŭstralia somera tempo + centra aŭstralia tempo + centra aŭstralia norma tempo + centra aŭstralia somera tempo - centrokcidenta aŭstralia tempo - centrokcidenta aŭstralia norma tempo - centrokcidenta aŭstralia somera tempo + centrokcidenta aŭstralia tempo + centrokcidenta aŭstralia norma tempo + centrokcidenta aŭstralia somera tempo - orienta aŭstralia tempo - orienta aŭstralia norma tempo - orienta aŭstralia somera tempo + orienta aŭstralia tempo + orienta aŭstralia norma tempo + orienta aŭstralia somera tempo - okcidenta aŭstralia tempo - okcidenta aŭstralia norma tempo - okcidenta aŭstralia somera tempo + okcidenta aŭstralia tempo + okcidenta aŭstralia norma tempo + okcidenta aŭstralia somera tempo - azerbajĝana tempo - azerbajĝana norma tempo - azerbajĝana somera tempo + azerbajĝana tempo + azerbajĝana norma tempo + azerbajĝana somera tempo - tempo: Acoroj - Acoroj (norma tempo) - Acoroj (somera tempo) + tempo: Acoroj + Acoroj (norma tempo) + Acoroj (somera tempo) - bangladeŝa tempo - bangladeŝa norma tempo - bangladeŝa somera tempo + bangladeŝa tempo + bangladeŝa norma tempo + bangladeŝa somera tempo - butana tempo + butana tempo - bolivia tempo + bolivia tempo - brazilja tempo - brazilja norma tempo - brazilja somera tempo + brazilja tempo + brazilja norma tempo + brazilja somera tempo - bruneja tempo + bruneja tempo - kaboverda tempo - kaboverda norma tempo - kaboverda somera tempo + kaboverda tempo + kaboverda norma tempo + kaboverda somera tempo - ĉamora tempo + ĉamora tempo - ĉathama tempo - ĉathama norma tempo - ĉathama somera tempo + ĉathama tempo + ĉathama norma tempo + ĉathama somera tempo - ĉilia tempo - ĉilia norma tempo - ĉilia somera tempo + ĉilia tempo + ĉilia norma tempo + ĉilia somera tempo - ĉina tempo - ĉina norma tempo - ĉina somera tempo + ĉina tempo + ĉina norma tempo + ĉina somera tempo - kristnaskinsula tempo + kristnaskinsula tempo - kokosinsula tempo + kokosinsula tempo - kolombia tempo - kolombia norma tempo - kolombia somera tempo + kolombia tempo + kolombia norma tempo + kolombia somera tempo - kukinsula tempo - kukinsula norma tempo - kukinsula somera tempo + kukinsula tempo + kukinsula norma tempo + kukinsula somera tempo - tempo: Kubo - Kubo (norma tempo) - Kubo (somera tempo) + tempo: Kubo + Kubo (norma tempo) + Kubo (somera tempo) - tempo: Davis + tempo: Davis - tempo: Dumont d’Urville + tempo: Dumont d’Urville - orient-timora tempo + orient-timora tempo - paskinsula tempo - paskinsula norma tempo - paskinsula somera tempo + paskinsula tempo + paskinsula norma tempo + paskinsula somera tempo - ekvadora tempo + ekvadora tempo - centreŭropa tempo - centreŭropa norma tempo - centreŭropa somera tempo + centreŭropa tempo + centreŭropa norma tempo + centreŭropa somera tempo - orienteŭropa tempo - orienteŭropa norma tempo - orienteŭropa somera tempo + orienteŭropa tempo + orienteŭropa norma tempo + orienteŭropa somera tempo - ekstrem-orienteŭropa tempo + ekstrem-orienteŭropa tempo - okcidenteŭropa tempo - okcidenteŭropa norma tempo - okcidenteŭropa somera tempo + okcidenteŭropa tempo + okcidenteŭropa norma tempo + okcidenteŭropa somera tempo - falklanda tempo - falklanda norma tempo - falklanda somera tempo + falklanda tempo + falklanda norma tempo + falklanda somera tempo - fiĝia tempo - fiĝia norma tempo - fiĝia somera tempo + fiĝia tempo + fiĝia norma tempo + fiĝia somera tempo - tempo: Franca Gujano + tempo: Franca Gujano - tempo: Francaj Sudaj Teritorioj + tempo: Francaj Sudaj Teritorioj - galapaga tempo + galapaga tempo - tempo: Gambier + tempo: Gambier - kartvela tempo - kartvela norma tempo - kartvela somera tempo + kartvela tempo + kartvela norma tempo + kartvela somera tempo - gilbertinsula tempo + gilbertinsula tempo - universala tempo kunordigita + universala tempo kunordigita - orienta gronlanda tempo - orienta gronlanda norma tempo - orienta gronlanda somera tempo + orienta gronlanda tempo + orienta gronlanda norma tempo + orienta gronlanda somera tempo - okcidenta gronlanda tempo - okcidenta gronlanda norma tempo - okcidenta gronlanda somera tempo + okcidenta gronlanda tempo + okcidenta gronlanda norma tempo + okcidenta gronlanda somera tempo - arabgolfa norma tempo + arabgolfa norma tempo - gujana tempo + gujana tempo + + + + + Havajo-Aleutoj (norma tempo) - tempo: Havajo-Aleutoj - Havajo-Aleutoj (norma tempo) - Havajo-Aleutoj (somera tempo) + tempo: Havajo-Aleutoj + Havajo-Aleutoj (norma tempo) + Havajo-Aleutoj (somera tempo) - honkonga tempo - honkonga norma tempo - honkonga somera tempo + honkonga tempo + honkonga norma tempo + honkonga somera tempo - ĥovda tempo - ĥovda norma tempo - ĥovda somera tempo + ĥovda tempo + ĥovda norma tempo + ĥovda somera tempo - hinda norma tempo + hinda norma tempo - hindoceana tempo + hindoceana tempo - hindoĉina tempo + hindoĉina tempo - centr-indonezia tempo + centr-indonezia tempo - orient-indonezia tempo + orient-indonezia tempo - okcident-indonezia tempo + okcident-indonezia tempo - irana tempo - irana norma tempo - irana somera tempo + irana tempo + irana norma tempo + irana somera tempo - irkutska tempo - irkutska norma tempo - irkutska somera tempo + irkutska tempo + irkutska norma tempo + irkutska somera tempo - israela tempo - israela norma tempo - israela somera tempo + israela tempo + israela norma tempo + israela somera tempo - japana tempo - japana norma tempo - japana somera tempo + japana tempo + japana norma tempo + japana somera tempo - kazaĥa tempo + kazaĥa tempo - orient-kazaĥa tempo + orient-kazaĥa tempo - okcident-kazaĥa tempo + okcident-kazaĥa tempo - korea tempo - korea norma tempo - korea somera tempo + korea tempo + korea norma tempo + korea somera tempo - tempo: Kosrae + tempo: Kosrae - krasnojarska tempo - krasnojarska norma tempo - krasnojarska somera tempo + krasnojarska tempo + krasnojarska norma tempo + krasnojarska somera tempo - kirgiza tempo + kirgiza tempo - tempo: Liniaj Insuloj + tempo: Liniaj Insuloj - tempo: Lord Howe - Lord Howe (norma tempo) - Lord Howe (somera tempo) + tempo: Lord Howe + Lord Howe (norma tempo) + Lord Howe (somera tempo) - magadana tempo - magadana norma tempo - magadana somera tempo + magadana tempo + magadana norma tempo + magadana somera tempo - malajzia tempo + malajzia tempo - maldiva tempo + maldiva tempo - markizinsula tempo + markizinsula tempo - marŝalinsula tempo + marŝalinsula tempo - maŭricia tempo - maŭricia norma tempo - maŭricia somera tempo + maŭricia tempo + maŭricia norma tempo + maŭricia somera tempo - tempo: Mawson + tempo: Mawson - pacifika meksika tempo - pacifika meksika norma tempo - pacifika meksika somera tempo + pacifika meksika tempo + pacifika meksika norma tempo + pacifika meksika somera tempo - ulanbatora tempo - ulanbatora norma tempo - ulanbatora somera tempo + ulanbatora tempo + ulanbatora norma tempo + ulanbatora somera tempo - moskva tempo - moskva norma tempo - moskva somera tempo + moskva tempo + moskva norma tempo + moskva somera tempo - birma tempo + birma tempo - naura tempo + naura tempo - nepala tempo + nepala tempo - novkaledonia tempo - novkaledonia norma tempo - novkaledonia somera tempo + novkaledonia tempo + novkaledonia norma tempo + novkaledonia somera tempo - novzelanda tempo - novzelanda norma tempo - novzelanda somera tempo + novzelanda tempo + novzelanda norma tempo + novzelanda somera tempo - tempo: Novlando - Novlando (norma tempo) - Novlando (somera tempo) + tempo: Novlando + Novlando (norma tempo) + Novlando (somera tempo) - niua tempo + niua tempo - norfolkinsula tempo - norfolkinsula norma tempo - norfolkinsula somera tempo + norfolkinsula tempo + norfolkinsula norma tempo + norfolkinsula somera tempo - tempo: Fernando de Noronha - Fernando de Noronha (norma tempo) - Fernando de Noronha (somera tempo) + tempo: Fernando de Noronha + Fernando de Noronha (norma tempo) + Fernando de Noronha (somera tempo) - novosibirska tempo - novosibirska norma tempo - novosibirska somera tempo + novosibirska tempo + novosibirska norma tempo + novosibirska somera tempo - omska tempo - omska norma tempo - omska somera tempo + omska tempo + omska norma tempo + omska somera tempo - pakistana tempo - pakistana norma tempo - pakistana somera tempo + pakistana tempo + pakistana norma tempo + pakistana somera tempo - palaŭa tempo + palaŭa tempo - tempo: Papuo-Nov-Gvineo + tempo: Papuo-Nov-Gvineo - paragvaja tempo - paragvaja norma tempo - paragvaja somera tempo + paragvaja tempo + paragvaja norma tempo + paragvaja somera tempo - perua tempo - perua norma tempo - perua somera tempo + perua tempo + perua norma tempo + perua somera tempo - filipina tempo - filipina norma tempo - filipina somera tempo + filipina tempo + filipina norma tempo + filipina somera tempo - feniksinsula tempo + feniksinsula tempo - tempo: Sankta Piero kaj Mikelono - Sankta Piero kaj Mikelono (norma tempo) - Sankta Piero kaj Mikelono (somera tempo) + tempo: Sankta Piero kaj Mikelono + Sankta Piero kaj Mikelono (norma tempo) + Sankta Piero kaj Mikelono (somera tempo) - pitkarninsula tempo + pitkarninsula tempo - tempo: Ponape + tempo: Ponape - pjongjanga tempo + nord-korea tempo - tempo: Reunio + tempo: Reunio - tempo: Rothera + tempo: Rothera - saĥalena tempo - saĥalena norma tempo - saĥalena somera tempo + saĥalena tempo + saĥalena norma tempo + saĥalena somera tempo - samoa tempo - samoa norma tempo - samoa somera tempo + uson-samoa tempo + uson-samoa norma tempo + uson-samoa somera tempo - sejŝela tempo + sejŝela tempo - singapura norma tempo + singapura norma tempo - tempo: Salomonoj + tempo: Salomonoj - tempo: Sud-Georgio + tempo: Sud-Georgio - surinama tempo + surinama tempo - tempo: Showa + tempo: Showa - tahitia tempo + tahitia tempo - tajpea tempo - tajpea norma tempo - tajpea somera tempo + tajvana tempo + tajvana norma tempo + tajvana somera tempo - taĝika tempo + taĝika tempo - tokelaa tempo + tokelaa tempo - tonga tempo - tonga norma tempo - tonga somera tempo + tonga tempo + tonga norma tempo + tonga somera tempo - tempo: Ĉuuk + tempo: Ĉuuk - turkmena tempo - turkmena norma tempo - turkmena somera tempo + turkmena tempo + turkmena norma tempo + turkmena somera tempo - tuvala tempo + tuvala tempo - urugvaja tempo - urugvaja norma tempo - urugvaja somera tempo + urugvaja tempo + urugvaja norma tempo + urugvaja somera tempo - uzbeka tempo - uzbeka norma tempo - uzbeka somera tempo + uzbeka tempo + uzbeka norma tempo + uzbeka somera tempo - vanuatua tempo - vanuatua norma tempo - vanuatua somera tempo + vanuatua tempo + vanuatua norma tempo + vanuatua somera tempo - venezuela tempo + venezuela tempo - vladivostoka tempo - vladivostoka norma tempo - vladivostoka somera tempo + vladivostoka tempo + vladivostoka norma tempo + vladivostoka somera tempo - volgograda tempo - volgograda norma tempo - volgograda somera tempo + volgograda tempo + volgograda norma tempo + volgograda somera tempo - tempo: Vostok + tempo: Vostok - vejkinsula tempo + vejkinsula tempo - tempo: Valiso kaj Futuno + tempo: Valiso kaj Futuno - jakutska tempo - jakutska norma tempo - jakutska somera tempo + jakutska tempo + jakutska norma tempo + jakutska somera tempo - jekaterinburga tempo - jekaterinburga norma tempo - jekaterinburga somera tempo + jekaterinburga tempo + jekaterinburga norma tempo + jekaterinburga somera tempo - jukonia tempo + jukonia tempo @@ -3772,837 +3923,869 @@ CLDR data files are interpreted according to the LDML specification (http://unic , -   - - + + - 0 mil - 0 mil - 00 mil - 00 mil - 000 mil - 000 mil - 0 miliono - 0 milionoj - 00 miliono - 00 milionoj - 000 miliono - 000 milionoj - 0 miliardo - 0 miliardoj - 00 miliardo - 00 miliardoj - 000 miliardo - 000 miliardoj - 0 duiliono - 0 duilionoj - 00 duiliono - 00 duilionoj - 000 duiliono - 000 duilionoj + 0 mil + 0 mil + 00 mil + 00 mil + 000 mil + 000 mil + 0 miliono + 0 miliono + 00 milionoj + 00 milionoj + 000 milionoj + 000 milionoj + 0 miliardo + 0 miliardoj + 00 miliardoj + 00 miliardoj + 000 miliardoj + 000 miliardoj + 0 duiliono + 0 duilionoj + 00 duilionoj + 00 duilionoj + 000 duilionoj + 000 duilionoj - 0k - 0k - 00k - 00k - 000k - 000k + 0k + 0k + 00k + 00k + 000k + 000k - #,##0.00 ¤ + #,##0.00 ¤ + #,##0.00 ¤ - #,##0.00 ¤ + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) + + + 0k ¤ + 0k ¤ + 00k ¤ + 00k ¤ + 000k ¤ + 000k ¤ + 0M ¤ + 0M ¤ + 00M ¤ + 00M ¤ + 000M ¤ + 000M ¤ + 0G ¤ + 0G ¤ + 00G ¤ + 00G ¤ + 000G ¤ + 000G ¤ + 0T ¤ + 0T ¤ + 00T ¤ + 00T ¤ + 000T ¤ + 000T ¤ + + + {0} ¤¤ - dirhamo de Unuiĝintaj Arabaj Emirlandoj - UAE-dirhamo - UAE-dirhamoj + dirhamo de Unuiĝintaj Arabaj Emirlandoj + UAE-dirhamo + UAE-dirhamoj - afgana afganio - afgana afganio - afganaj afganioj + afgana afganio + afgana afganio + afganaj afganioj - albana leko - albana leko - albanaj lekoj + albana leko + albana leko + albanaj lekoj - armena dramo - armena dramo - armenaj dramoj + armena dramo + armena dramo + armenaj dramoj - nederlandantila guldeno - nederlandantila guldeno - nederlandantilaj guldenoj + nederlandantila guldeno + nederlandantila guldeno + nederlandantilaj guldenoj - angola kvanzo - angola kvanzo - angolaj kvanzoj + angola kvanzo + angola kvanzo + angolaj kvanzoj - argentina peso - argentina peso - argentinaj pesoj + argentina peso + argentina peso + argentinaj pesoj - aŭstralia dolaro - aŭstralia dolaro - aŭstraliaj dolaroj - AUD + aŭstralia dolaro + aŭstralia dolaro + aŭstraliaj dolaroj + AUD - aruba guldeno - aruba guldeno - arubaj guldenoj + aruba floreno + aruba floreno + arubaj florenoj - azerbajĝana manato - azerbajĝana manato - azerbajĝanaj manatoj + azerbajĝana manato + azerbajĝana manato + azerbajĝanaj manatoj - konvertebla marko de Bosnujo kaj Hercegovino - konvertebla marko - konverteblaj markoj + konvertebla marko de Bosnujo kaj Hercegovino + konvertebla marko + konverteblaj markoj - barbada dolaro - barbada dolaro - barbadaj dolaroj + barbada dolaro + barbada dolaro + barbadaj dolaroj - bangladeŝa tako - bangladeŝa tako - bangladeŝaj takoj + bangladeŝa tako + bangladeŝa tako + bangladeŝaj takoj - bulgara levo - bulgara levo - bulgaraj levoj + bulgara levo + bulgara levo + bulgaraj levoj - barejna dinaro - barejna dinaro - barejnaj dinaroj + barejna dinaro + barejna dinaro + barejnaj dinaroj - burunda franko - burunda franko - burundaj frankoj + burunda franko + burunda franko + burundaj frankoj - bermuda dolaro - bermuda dolaro - bermudaj dolaroj + bermuda dolaro + bermuda dolaro + bermudaj dolaroj - bruneja dolaro - bruneja dolaro - brunejaj dolaroj + bruneja dolaro + bruneja dolaro + brunejaj dolaroj - bolivia bolivjano - bolivia bolivjano - boliviaj bolivjanoj + bolivia bolivjano + bolivia bolivjano + boliviaj bolivjanoj - brazila realo - brazila realo - brazilaj realoj - BRL + brazila realo + brazila realo + brazilaj realoj + BRL - bahama dolaro - bahama dolaro - bahamaj dolaroj + bahama dolaro + bahama dolaro + bahamaj dolaroj - butana ngultrumo - butana ngultrumo - butanaj ngultrumoj + butana ngultrumo + butana ngultrumo + butanaj ngultrumoj - bocvana pulao - bocvana pulao - bocvanaj pulaoj + bocvana pulao + bocvana pulao + bocvanaj pulaoj - belorusa rublo - belorusa rublo - belorusaj rubloj + belorusa rublo + belorusa rublo + belorusaj rubloj - beliza dolaro - beliza dolaro - belizaj dolaroj + beliza dolaro + beliza dolaro + belizaj dolaroj - kanada dolaro - kanada dolaro - kanadaj dolaroj - CAD + kanada dolaro + kanada dolaro + kanadaj dolaroj + CAD - konga franko - konga franko - kongaj frankoj + konga franko + konga franko + kongaj frankoj - svisa franko - svisa franko - svisaj frankoj + svisa franko + svisa franko + svisaj frankoj - ĉilia peso - ĉilia peso - ĉiliaj pesoj + ĉilia peso + ĉilia peso + ĉiliaj pesoj - ĉina juano (eksterlanda uzo) - ĉina juano (eksterlande) - ĉinaj juanoj (eksterlande) + ĉina juano (eksterlanda uzo) + ĉina juano (eksterlande) + ĉinaj juanoj (eksterlande) - ĉinaj juanoj - ĉina juano - ĉinaj juanoj - CNY + ĉinaj juanoj + ĉina juano + ĉinaj juanoj + CNY - kolombia peso - kolombia peso - kolombiaj pesoj + kolombia peso + kolombia peso + kolombiaj pesoj - kostarika kolumbo - kostarika kolumbo - kostarikaj kolumboj + kostarika kolumbo + kostarika kolumbo + kostarikaj kolumboj - konvertebla kuba peso - konvertebla kuba peso - konverteblaj kubaj pesoj + konvertebla kuba peso + konvertebla kuba peso + konverteblaj kubaj pesoj - kuba peso - kuba peso - kubaj pesoj + kuba peso + kuba peso + kubaj pesoj - kaboverda eskudo - kaboverda eskudo - kaboverdaj eskudoj + kaboverda eskudo + kaboverda eskudo + kaboverdaj eskudoj - ĉeĥa krono - ĉeĥa krono - ĉeĥaj kronoj + ĉeĥa krono + ĉeĥa krono + ĉeĥaj kronoj - ĝibutia franko - ĝibutia franko - ĝibutiaj frankoj + ĝibutia franko + ĝibutia franko + ĝibutiaj frankoj - dana krono - dana krono - danaj kronoj + dana krono + dana krono + danaj kronoj - dominika peso - dominika peso - dominikaj pesoj + dominika peso + dominika peso + dominikaj pesoj - alĝeria dinaro - alĝeria dinaro - alĝeriaj dinaroj + alĝeria dinaro + alĝeria dinaro + alĝeriaj dinaroj - egipta pundo - egipta pundo - egiptaj pundoj + egipta pundo + egipta pundo + egiptaj pundoj - eritrea nakfo - eritrea nakfo - eritreaj nakfoj + eritrea nakfo + eritrea nakfo + eritreaj nakfoj - etiopa birro - etiopa birro - etiopaj birroj + etiopa birro + etiopa birro + etiopaj birroj - eŭro - eŭro - eŭroj + eŭro + eŭro + eŭroj - fiĝia dolaro - fiĝia dolaro - fiĝiaj dolaroj + fiĝia dolaro + fiĝia dolaro + fiĝiaj dolaroj - falklanda pundo - falklanda pundo - falklandaj pundoj + falklanda pundo + falklanda pundo + falklandaj pundoj - brita pundo - brita pundo - britaj pundoj - GBP + brita pundo + brita pundo + britaj pundoj + GBP - kartvela lario - kartvela lario - kartvelaj larioj + kartvela lario + kartvela lario + kartvelaj larioj - ganaa cedio - ganaa cedio - ganaaj cedioj + ganaa cedio + ganaa cedio + ganaaj cedioj + - ĝibraltara pundo - ĝibraltara pundo - ĝibraltaraj pundoj + ĝibraltara pundo + ĝibraltara pundo + ĝibraltaraj pundoj - gambia dalasio - gambia dalasio - gambiaj dalasioj + gambia dalasio + gambia dalasio + gambiaj dalasioj - gvinea franko - gvinea franko - gvineaj frankoj + gvinea franko + gvinea franko + gvineaj frankoj - gvatemala kecalo - gvatemala kecalo - gvatemalaj kecaloj + gvatemala kecalo + gvatemala kecalo + gvatemalaj kecaloj - gujana dolaro - gujana dolaro - gujanaj dolaroj + gujana dolaro + gujana dolaro + gujanaj dolaroj - honkonga dolaro - honkonga dolaro - honkongaj dolaroj - HKD + honkonga dolaro + honkonga dolaro + honkongaj dolaroj + HKD - hondura lempiro - hondura lempiro - honduraj lempiroj + hondura lempiro + hondura lempiro + honduraj lempiroj - kroata kunao - kroata kunao - kroataj kunaoj + kroata kunao + kroata kunao + kroataj kunaoj - haitia gurdo - haitia gurdo - haitiaj gurdoj + haitia gurdo + haitia gurdo + haitiaj gurdoj - hungara forinto - hungara forinto - hungaraj forintoj + hungara forinto + hungara forinto + hungaraj forintoj - indonezia rupio - indonezia rupio - indoneziaj rupioj + indonezia rupio + indonezia rupio + indoneziaj rupioj - israela nova siklo - israela nova siklo - israelaj novaj sikloj - ILS + israela nova siklo + israela nova siklo + israelaj novaj sikloj + ILS - hinda rupio - hinda rupio - hindaj rupioj - INR + hinda rupio + hinda rupio + hindaj rupioj + INR - iraka dinaro - iraka dinaro - irakaj dinaroj + iraka dinaro + iraka dinaro + irakaj dinaroj - irana rialo - irana rialo - iranaj rialoj + irana rialo + irana rialo + iranaj rialoj - islanda krono - islanda krono - islandaj kronoj + islanda krono + islanda krono + islandaj kronoj - jamajka dolaro - jamajka dolaro - jamajkaj dolaroj + jamajka dolaro + jamajka dolaro + jamajkaj dolaroj - jordania dinaro - jordania dinaro - jordaniaj dinaroj + jordania dinaro + jordania dinaro + jordaniaj dinaroj - japana eno - japana eno - japanaj enoj - JPY + japana eno + japana eno + japanaj enoj + JPY - kenja ŝilingo - kenja ŝilingo - kenjaj ŝilingoj + kenja ŝilingo + kenja ŝilingo + kenjaj ŝilingoj - kirgiza somo - kirgiza somo - kirgizaj somoj + kirgiza somo + kirgiza somo + kirgizaj somoj - kamboĝa rielo - kamboĝa rielo - kamboĝaj rieloj + kamboĝa rielo + kamboĝa rielo + kamboĝaj rieloj - komora franko - komora franko - komoraj frankoj + komora franko + komora franko + komoraj frankoj - nordkorea vono - nordkorea vono - nordkoreaj vonoj + nordkorea vono + nordkorea vono + nordkoreaj vonoj - sudkorea vono - sudkorea vono - sudkoreaj vonoj - KRW + sudkorea vono + sudkorea vono + sudkoreaj vonoj + KRW - kuvajta dinaro - kuvajta dinaro - kuvajtaj dinaroj + kuvajta dinaro + kuvajta dinaro + kuvajtaj dinaroj - kajmana dolaro - kajmana dolaro - kajmanaj dolaroj + kajmana dolaro + kajmana dolaro + kajmanaj dolaroj - kazaĥa tengo - kazaĥa tengo - kazaĥaj tengoj + kazaĥa tengo + kazaĥa tengo + kazaĥaj tengoj - laosa kipo - laosa kipo - laosaj kipoj + laosa kipo + laosa kipo + laosaj kipoj - libana liro - libana liro - libanaj liroj + libana liro + libana liro + libanaj liroj - srilanka rupio - srilanka rupio - srilankaj rupioj - + srilanka rupio + srilanka rupio + srilankaj rupioj + - liberia dolaro - liberia dolaro - liberiaj dolaroj + liberia dolaro + liberia dolaro + liberiaj dolaroj - lesota lotio - lesota lotio - lesotaj lotioj + lesota lotio + lesota lotio + lesotaj lotioj - libia dinaro - libia dinaro - libiaj dinaroj + libia dinaro + libia dinaro + libiaj dinaroj - maroka dirhamo - maroka dirhamo - marokaj dirhamoj + maroka dirhamo + maroka dirhamo + marokaj dirhamoj - moldava leo - moldava leo - moldavaj leoj + moldava leo + moldava leo + moldavaj leoj - madagaskara ariaro - madagaskara ariaro - madagaskaraj ariaroj + madagaskara ariaro + madagaskara ariaro + madagaskaraj ariaroj - makedona denaro - makedona denaro - makedonaj denaroj + makedona denaro + makedona denaro + makedonaj denaroj - birma kjato - birma kjato - birmaj kjatoj + birma kjato + birma kjato + birmaj kjatoj - mongola tugriko - mongola tugriko - mongolaj tugrikoj + mongola tugriko + mongola tugriko + mongolaj tugrikoj - makaa patako - makaa patako - makaaj patakoj + makaa patako + makaa patako + makaaj patakoj - maŭritania uguijao - maŭritania uguijao - maŭritaniaj uguijaoj + maŭritania uguijao + maŭritania uguijao + maŭritaniaj uguijaoj - maŭricia rupio - maŭricia rupio - maŭriciaj rupioj - + maŭricia rupio + maŭricia rupio + maŭriciaj rupioj + - maldiva rufijao - maldiva rufijao - maldivaj rufijaoj + maldiva rufijao + maldiva rufijao + maldivaj rufijaoj - malavia kvaĉo - malavia kvaĉo - malaviaj kvaĉoj + malavia kvaĉo + malavia kvaĉo + malaviaj kvaĉoj - meksika peso - meksika peso - meksikaj pesoj - MXN + meksika peso + meksika peso + meksikaj pesoj + MXN - malajzia ringito - malajzia ringito - malajziaj ringitoj + malajzia ringito + malajzia ringito + malajziaj ringitoj - mozambika metikalo - mozambika metikalo - mozambikaj metikaloj + mozambika metikalo + mozambika metikalo + mozambikaj metikaloj - namibia dolaro - namibia dolaro - namibiaj dolaroj + namibia dolaro + namibia dolaro + namibiaj dolaroj - niĝeria najro - niĝeria najro - niĝeriaj najroj + niĝeria najro + niĝeria najro + niĝeriaj najroj - nikaragva kordovo - nikaragva kordovo - nikaragvaj kordovoj + nikaragva kordovo + nikaragva kordovo + nikaragvaj kordovoj - norvega krono - norvega krono - norvegaj kronoj + norvega krono + norvega krono + norvegaj kronoj - nepala rupio - nepala rupio - nepalaj rupioj - + nepala rupio + nepala rupio + nepalaj rupioj + - novzelanda dolaro - novzelanda dolaro - novzelandaj dolaroj - NZD + novzelanda dolaro + novzelanda dolaro + novzelandaj dolaroj + NZD - omana rialo - omana rialo - omanaj rialoj + omana rialo + omana rialo + omanaj rialoj - panama balboo - panama balboo - panamaj balbooj + panama balboo + panama balboo + panamaj balbooj - perua suno - perua suno - peruaj sunoj + perua suno + perua suno + peruaj sunoj - papuonovgvinea kinao - papuonovgvinea kinao - papuonovgvineaj kinaoj + papuonovgvinea kinao + papuonovgvinea kinao + papuonovgvineaj kinaoj - filipina peso - filipina peso - filipinaj pesoj - PHP + filipina peso + filipina peso + filipinaj pesoj + PHP - pakistana rupio - pakistana rupio - pakistanaj rupioj - + pakistana rupio + pakistana rupio + pakistanaj rupioj + - pola zloto - pola zloto - polaj zlotoj + pola zloto + pola zloto + polaj zlotoj - paragvaja gvaranio - paragvaja gvaranio - paragvajaj gvaranioj + paragvaja gvaranio + paragvaja gvaranio + paragvajaj gvaranioj - katara rialo - katara rialo - kataraj rialoj + katara rialo + katara rialo + kataraj rialoj - rumana leo - rumana leo - rumanaj leoj + rumana leo + rumana leo + rumanaj leoj - serba dinaro - serba dinaro - serbaj dinaroj + serba dinaro + serba dinaro + serbaj dinaroj - rusa rublo - rusa rublo - rusaj rubloj + rusa rublo + rusa rublo + rusaj rubloj - ruanda franko - ruanda franko - ruandaj frankoj + ruanda franko + ruanda franko + ruandaj frankoj - sauda rialo - sauda rialo - saudaj rialoj + sauda rialo + sauda rialo + saudaj rialoj - salomona dolaro - salomona dolaro - salomonaj dolaroj + salomona dolaro + salomona dolaro + salomonaj dolaroj - sejŝela rupio - sejŝela rupio - sejŝelaj rupioj + sejŝela rupio + sejŝela rupio + sejŝelaj rupioj - sudana pundo - sudana pundo - sudanaj pundoj + sudana pundo + sudana pundo + sudanaj pundoj - sveda krono - sveda krono - svedaj kronoj + sveda krono + sveda krono + svedaj kronoj - singapura dolaro - singapura dolaro - singapuraj dolaroj + singapura dolaro + singapura dolaro + singapuraj dolaroj - sankthelena pundo - sankthelena pundo - sankthelenaj pundoj + sankthelena pundo + sankthelena pundo + sankthelenaj pundoj - sieraleona leono - sieraleona leono - sieraleonaj leonoj + sieraleona leono + sieraleona leono + sieraleonaj leonoj - sieraleona leono (1964–2022) - sieraleona leono (1964–2022) - sieraleonaj leonoj (1964–2022) + sieraleona leono (1964–2022) + sieraleona leono (1964–2022) + sieraleonaj leonoj (1964–2022) - somala ŝilingo - somala ŝilingo - somalaj ŝilingoj + somala ŝilingo + somala ŝilingo + somalaj ŝilingoj - surinama dolaro - surinama dolaro - surinamaj dolaroj + surinama dolaro + surinama dolaro + surinamaj dolaroj - sudsudana pundo - sudsudana pundo - sudsudanaj pundoj + sudsudana pundo + sudsudana pundo + sudsudanaj pundoj - santomea dobro - santomea dobro - santomeaj dobroj + santomea dobro + santomea dobro + santomeaj dobroj - siria pundo - siria pundo - siriaj pundoj + siria pundo + siria pundo + siriaj pundoj - svazilanda liliagenio - svazia lilangenio - svaziaj lilangenioj + svazilanda liliagenio + svazia lilangenio + svaziaj lilangenioj - taja bahto - taja bahto - tajaj bahtoj + taja bahto + taja bahto + tajaj bahtoj - taĝika somonio - taĝika somonio - taĝikaj somonioj + taĝika somonio + taĝika somonio + taĝikaj somonioj - turkmena manato - turkmena manato - turkmenaj manatoj + turkmena manato + turkmena manato + turkmenaj manatoj - tunizia dinaro - tunizia dinaro - tuniziaj dinaroj + tunizia dinaro + tunizia dinaro + tuniziaj dinaroj - tonga paangao - tonga paangao - tongaj paangaoj + tonga paangao + tonga paangao + tongaj paangaoj - turka liro - turka liro - turkaj liroj + turka liro + turka liro + turkaj liroj + TRY - trinidada dolaro - trinidada dolaro - trinidadaj dolaroj + trinidada dolaro + trinidada dolaro + trinidadaj dolaroj - tajvana nova dolaro - tajvana nova dolaro - tajvanaj novaj dolaroj - TWD - NT$ + tajvana nova dolaro + tajvana nova dolaro + tajvanaj novaj dolaroj + TWD - tanzania ŝilingo - tanzania ŝilingo - tanzaniaj ŝilingoj + tanzania ŝilingo + tanzania ŝilingo + tanzaniaj ŝilingoj - ukraina hrivno - ukraina hrivno - ukrainaj hrivnoj + ukraina hrivno + ukraina hrivno + ukrainaj hrivnoj - uganda ŝilingo - uganda ŝilingo - ugandaj ŝilingoj + uganda ŝilingo + uganda ŝilingo + ugandaj ŝilingoj - usona dolaro - usona dolaro - usonaj dolaroj - USD + usona dolaro + usona dolaro + usonaj dolaroj + USD - urugvaja peso - urugvaja peso - urugvajaj pesoj + urugvaja peso + urugvaja peso + urugvajaj pesoj - uzbeka somo - uzbeka somo - uzbekaj somoj + uzbeka somo + uzbeka somo + uzbekaj somoj - venezuela bolivaro - venezuela bolivaro - venezuelaj bolivaroj + venezuela bolivaro + venezuela bolivaro + venezuelaj bolivaroj - vjetnama dongo - vjetnama dongo - vjetnamaj dongoj - VND + vjetnama dongo + vjetnama dongo + vjetnamaj dongoj + VND - vanuatua vatuo - vanuatua vatuo - vanuatuaj vatuoj + vanuatua vatuo + vanuatua vatuo + vanuatuaj vatuoj - samoa talao - samoa talao - samoaj talaoj + samoa talao + samoa talao + samoaj talaoj - ekvatorafrika franko - ekvatorafrika franko - ekvatorafrikaj frankoj - XAF + ekvatorafrika franko + ekvatorafrika franko + ekvatorafrikaj frankoj + XAF arĝento @@ -4614,292 +4797,622 @@ CLDR data files are interpreted according to the LDML specification (http://unic eŭropa monunuo - orientkariba dolaro - orientkariba dolaro - orientkaribaj dolaroj - XCD + orientkariba dolaro + orientkariba dolaro + orientkaribaj dolaroj + XCD + + + kariba guldeno + kariba guldeno + karibaj guldenoj + XCG franca ora franko - okcidentafrika franko - okcidentafrika franko - okcidentafrikaj frankoj - XOF + okcidentafrika franko + okcidentafrika franko + okcidentafrikaj frankoj + XOF paladio - pacifika franko - pacifika franko - pacifikaj frankoj - XPF + pacifika franko + pacifika franko + pacifikaj frankoj + XPF plateno - nekonata monunuo - (nekunata monunuo) - (nekonata monunuo) + nekonata monunuo + (nekunata monunuo) + (nekonata monunuo) - jemena rialo - jemena rialo - jemenaj rialoj + jemena rialo + jemena rialo + jemenaj rialoj - sudafrika rando - sudafrika rando - sudafrikaj randoj + sudafrika rando + sudafrika rando + sudafrikaj randoj - zambia kvaĉo - zambia kvaĉo - zambiaj kvaĉoj + zambia kvaĉo + zambia kvaĉo + zambiaj kvaĉoj + + + zimbabva oro + zimbabva oro + zimbabvaj oroj - ≈{0} + ≈{0} - {0} tago - {0} tagoj - Turniĝu al {0}-a dekstro. + {0} tago + {0} tagoj + Turniĝu al {0}-a dekstro. + + deci{0} + + + centi{0} + + + mili{0} + + + mikro{0} + + + nano{0} + + + piko{0} + + + femto{0} + + + ato{0} + + + zepto{0} + + + jokto{0} + + + ronto{0} + + + kvekto{0} + + + deka{0} + + + hekto{0} + + + kilo{0} + + + mega{0} + + + giga{0} + + + tera{0} + + + peta{0} + + + eksa{0} + + + zeta{0} + + + jota{0} + + + rona{0} + + + kveta{0} + + + kibi{0} + + + mebi{0} + + + gibi{0} + + + tebi{0} + + + pebi{0} + + + eksbi{0} + + + zebi{0} + + + jobi{0} + - po {0} por {1} + po {0} je {1} + + + kvadrat{0} + kvadrat{0} + + + kub{0} + kub{0} - {0} oble {1} + {0}-{1} + + tera akcelo + {0} tera akcelo + {0} teraj akceloj + + + metroj en kvadrata sekundo + po {0} metro en kvadratsekundo + po {0} metroj en kvadratsekundo + + + rivoluoj + {0} rivoluo + {0} rivoluoj + + + radianoj + {0} radiano + {0} radianoj + + + gradoj + {0} grado + {0} gradoj + + + arkminutoj + {0} arkminuto + {0} arkminutoj + + + arksekundoj + {0} arksekundo + {0} arksekundoj + - kvadrataj kilometroj - {0} kvadrata kilometro - {0} kvadrataj kilometroj + kvadrataj kilometroj + {0} kvadratkilometro + {0} kvadratkilometroj + po {0} sur kvadratkilometro - hektaroj - {0} hektaro - {0} hektaroj + hektaroj + {0} hektaro + {0} hektaroj - kvadrataj metroj - {0} kvadrata metro - {0} kvadrataj metroj + kvadrataj metroj + {0} kvadratmetro + {0} kvadratmetroj + po {0} sur kvadratmetro - kvadrataj centimetroj - {0} kvadrata centimetro - {0} kvadrataj centimetroj + kvadrataj centimetroj + {0} kvadratcentimetro + {0} kvadratcentimetroj + po {0} sur kvadratcentimetro - kvadrataj mejloj - {0} kvadrata mejlo - {0} kvadrataj mejloj + kvadrataj mejloj + {0} kvadratmejlo + {0} kvadratmejloj + po {0} sur kvadratmejlo - akreoj - {0} akreo - {0} akreoj + akreoj + {0} akreo + {0} akreoj - kvadrataj jardoj - {0} kvadrata jardo - {0} kvadrataj jardoj + kvadrataj jardoj + {0} kvadratjardo + {0} kvadratjardoj - kvadrataj futoj - {0} kvadrata futo - {0} kvadrataj futoj + kvadrataj futoj + {0} kvadratfuto + {0} kvadratfutoj - kvadrataj coloj - {0} kvadrata colo - {0} kvadrataj coloj + kvadrataj coloj + {0} kvadratcolo + {0} kvadratcoloj + po {0} sur kvadratcolo + + + karatoj + {0} karato + {0} karatoj + + + miligramoj en decilitro + po {0} miligramo en decilitro + po {0} miligramoj en decilitro + + + milimoloj en litro + po {0} milimolo en litro + po {0} milimoloj en litro + + + ekzempleroj + {0} ekzemplero + {0} ekzempleroj + + + miliononoj + {0} milionono + {0} miliononoj + + + centonoj + {0} centono + {0} centonoj + + + milonoj + {0} milono + {0} milonoj + + + dekmilonoj + {0} dekmilono + {0} dekmilonoj + + + moloj + {0} molo + {0} moloj + + + da glukozo + {0} da glukozo + {0} da glukozo + + + litroj por kilometro + po {0} litro por kilometro + po {0} litroj por kilometro + + + litroj por 100 kilometroj + po {0} litro por 100 kilometroj + po {0} litroj por 100 kilometroj + + + petabitokoj + {0} petabitoko + {0} petabitokoj - terabajtoj - {0} terabajto - {0} terabajtoj + terabitokoj + {0} terabitoko + {0} terabitokoj - terabitoj - {0} terabito - {0} terabitoj + terabitoj + {0} terabito + {0} terabitoj - gigabajtoj - {0} gigabajto - {0} gigabajtoj + gigabitokoj + {0} gigabitoko + {0} gigabitokoj - gigabitoj - {0} gigabito - {0} gigabitoj + gigabitoj + {0} gigabito + {0} gigabitoj - megabajtoj - {0} megabajto - {0} megabajtoj + megabitokoj + {0} megabitoko + {0} megabitokoj - megabitoj - {0} megabito - {0} megabitoj + megabitoj + {0} megabito + {0} megabitoj - kilobajtoj - {0} kilobajto - {0} kilobajtoj + kilobitokoj + {0} kilobitoko + {0} kilobitokoj - kilobitoj - {0} kilobito - {0} kilobitoj + kilobitoj + {0} kilobito + {0} kilobitoj - bajtoj - {0} bajto - {0} bajtoj + bitokoj + {0} bitoko + {0} bitokoj - bitoj - {0} bito - {0} bitoj + bitoj + {0} bito + {0} bitoj - jarcentoj - {0} jarcento - {0} jarcentoj + jarcentoj + {0} jarcento + {0} jarcentoj - jardekoj - {0} jardeko - {0} jardekoj + jardekoj + {0} jardeko + {0} jardekoj - jaroj - {0} jaro - {0} jaroj - po {0} por jaro + jaroj + {0} jaro + {0} jaroj + po {0} en jaro + + + jarkvaronoj + {0} jarkvarono + {0} jarkvaronoj + po {0} en jarkvarono - monatoj - {0} monato - {0} monatoj + monatoj + {0} monato + {0} monatoj + po {0} en monato - semajnoj - {0} semajno - {0} semajnoj + semajnoj + {0} semajno + {0} semajnoj + po {0} en semajno - tagoj - {0} tago - {0} tagoj + tagoj + {0} tago + {0} tagoj + po {0} en tago - horoj - {0} horo - {0} horoj - {0} por horo + horoj + {0} horo + {0} horoj + po {0} en horo - minutoj - {0} minuto - {0} minutoj + minutoj + {0} minuto + {0} minutoj + po {0} en minuto - sekundoj - {0} sekundo - {0} sekundoj - {0} por sekundo + sekundoj + {0} sekundo + {0} sekundoj + po {0} en sekundo - milisekundoj - {0} milisekundo - {0} milisekundoj + milisekundoj + {0} milisekundo + {0} milisekundoj + + + mikrosekundoj + {0} mikrosekundo + {0} mikrosekundoj + + + nanosekundoj + {0} nanosekundo + {0} nanosekundoj + + + amperoj + {0} ampero + {0} amperoj + + + miliamperoj + {0} miliampero + {0} miliamperoj + + + omoj + {0} omo + {0} omoj + + + voltoj + {0} volto + {0} voltoj + + + kilokalorioj + {0} kilokalorio + {0} kilokalorioj + + + kalorioj + {0} kalorio + {0} kalorioj + + + kiloĵuloj + {0} kiloĵulo + {0} kiloĵuloj + + + ĵuloj + {0} ĵulo + {0} ĵuloj + + + kilovathoroj + {0} kilovathoro + {0} kilovathoroj + + + elektronvoltoj + {0} elektronvolto + {0} elektronvoltoj + + + neŭtonoj + {0} neŭtono + {0} neŭtonoj + + + kilovathoroj por 100 kilometroj + po {0} kilovathoro por 100 kilometroj + po {0} kilovathoroj por 100 kilometroj + + + gigahercoj + {0} gigaherco + {0} gigahercoj + + + megahercoj + {0} megaherco + {0} megahercoj + + + kilohercoj + {0} kiloherco + {0}kilohercoj + + + hercoj + {0} herco + {0} hercoj + + + terradiusoj + {0} terradiuso + {0} terradiusoj - kilometroj - {0} kilometro - {0} kilometroj + kilometroj + {0} kilometro + {0} kilometroj + po {0} en kilometro - metroj - {0} metro - {0} metroj + metroj + {0} metro + {0} metroj + po {0} en metro - decimetroj - {0} decimetro - {0} decimetroj + decimetroj + {0} decimetro + {0} decimetroj - centimetroj - {0} centimetro - {0} centimetroj + centimetroj + {0} centimetro + {0} centimetroj + po {0} en centimetro - milimetroj - {0} milimetro - {0} milimetroj + milimetroj + {0} milimetro + {0} milimetroj - mikrometroj - {0} mikrometro - {0} mikrometroj + mikrometroj + {0} mikrometro + {0} mikrometroj - nanometroj - {0} nanometro - {0} nanometroj + nanometroj + {0} nanometro + {0} nanometroj - pikometroj - {0} pikometro - {0} pikometroj + pikometroj + {0} pikometro + {0} pikometroj - mejloj - {0} mejlo - {0} mejloj + mejloj + {0} mejlo + {0} mejloj - jardoj - {0} jardo - {0} jardoj + jardoj + {0} jardo + {0} jardoj - futoj - {0} futo - {0} futoj + futoj + {0} futo + {0} futoj + po {0} en futo - coloj - {0} colo - {0} coloj + coloj + {0} colo + {0} coloj + po {0} en colo - parsekoj - {0} parseko - {0} parsekoj + parsekoj + {0} parseko + {0} parsekoj - lumjaroj - {0} lumjaro - {0} lumjaroj + lumjaroj + {0} lumjaro + {0} lumjaroj - astronomiaj unuoj - {0} astronomia unuo - {0} astronomiaj unuoj + astronomiaj unuoj + {0} astronomia unuo + {0} astronomiaj unuoj stadioj @@ -4912,311 +5425,1740 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} klaftoj - marmejloj - {0} marmejlo - {0} marmejloj + marmejloj + {0} marmejlo + {0} marmejloj + + + skandinavaj mejloj + {0} skandinava mejlo + {0} skandinavaj mejloj + + + punktoj tipografiaj + {0} punkto tipografia + {0} punktoj tipografiaj + + + sunradiusoj + {0} sunradiuso + {0} sunradiusoj + + + luksoj + {0} lukso + {0} luksoj + + + kandeloj + {0} kandelo + {0} kandeloj + + + lumenoj + {0} lumeno + {0} lumenoj + + + tunoj + {0} tuno + {0} tunoj - kilogramoj - {0} kilogramo - {0} kilogramoj + kilogramoj + {0} kilogramo + {0} kilogramoj + po {0} je kilogramo - gramoj - {0} gramo - {0} gramoj + gramoj + {0} gramo + {0} gramoj + po {0} je gramo + + + miligramoj + {0} miligramo + {0} miligramoj + + + mikrogramoj + {0} mikrogramo + {0} mikrogramoj + + + mallongaj tunoj + {0} mallonga tuno + {0} mallongaj tunoj + + + funtoj + {0} funto + {0} funtoj + po {0} je funto + + + uncoj + {0} unco + {0} uncoj + po {0} je unco + + + uncoj trojaj + {0} unco troja + {0} uncoj trojaj + + + karatoj + {0} karato + {0} karatoj + + + daltonoj + {0} daltono + {0} daltonoj + + + termasoj + {0} termaso + {0} termasoj + + + sunmasoj + {0} sunmaso + {0} sunmasoj + + + granoj + {0} grano + {0} granoj + + + gigavatoj + {0} gigavato + {0} gigavatoj + + + megavatoj + {0} megavato + {0} megavatoj + + + kilovatoj + {0} kilovato + {0} kilovatoj + + + vatoj + {0} vato + {0} vatoj + + + milivatoj + {0} milivato + {0} milivatoj + + + ĉevalpovoj + {0} ĉevalpovo + {0} ĉevalpovoj + + + milimetroj da hidrargo + {0} milimetro da hidrargo + {0} milimetroj da hidrargo + + + da hidrargo + {0} da hidrargo + {0} da hidrargo + + + funtfortoj sur kvadratcolo + {0} funtforto sur kvadratcolo + {0} funtfortoj sur kvadratcolo + + + coloj da hidrargo + {0} colo da hidrargo + {0} coloj da hidrargo + + + baroj + {0} baro + {0} baroj + + + milibaroj + {0} milibaro + {0} milibaroj + + + atmosferoj + {0} atmosfero + {0} atmosferoj + + + paskaloj + {0} paskalo + {0} paskaloj + + + hektopaskaloj + {0} hektopaskalo + {0} hektopaskaloj + + + kilopaskaloj + {0} kilopaskalo + {0} kilopaskaloj + + + megapaskaloj + {0} megapaskalo + {0} megapaskaloj - kilometroj en horo - {0} kilometro en horo - {0} kilometroj en horo + kilometroj en horo + {0} kilometro en horo + {0} kilometroj en horo + + + metroj en sekundo + po {0} metro en sekundo + po {0} metroj en sekundo + + + mejloj en horo + po {0} mejlo en horo + po {0} mejloj en horo + + + nodoj + {0} nodo + {0} nodoj + + + boforta skalo + {0} grado laŭ boforta skalo + {0} gradoj laŭ boforta skalo + + + gradoj de temperaturo + {0} grado de temperaturo + {0} gradoj de temperaturo - gradoj celsiaj - {0} grado celsia - {0} gradoj celsiaj + gradoj celsiaj + {0} grado celsia + {0} gradoj celsiaj + + + gradoj farenhejtaj + {0} grado farenhejta + {0} gradoj farenhejtaj + + + kelvinoj + {0} kelvino + {0} kelvinoj + + + neŭtono-metroj + {0} neŭtono-metro + {0} neŭtono-metroj + + + kubaj kilometroj + {0} kubkilometro + {0} kubkilometroj + + + kubaj metroj + {0} kubmetro + {0} kubmetroj + po {0} en kubmetro + + + kubaj centimetroj + {0} kubcentimetro + {0} kubcentimetroj + po {0} en kubcentimetro + + + megalitroj + {0} megalitro + {0} megalitroj + + + hektolitroj + {0} hektolitro + {0} hektolitroj - litroj - {0} litro - {0} litroj + litroj + {0} litro + {0} litroj + po {0} en litro + + + decilitroj + {0} decilitro + {0} decilitroj + + + centilitroj + {0} centilitro + {0} centilitroj + + + mililitroj + {0} mililitro + {0} mililitroj + + + duonkvartoj metraj + {0} duonkvarto metra + {0} duonkvartoj metraj + + + kvaronkvartoj metraj + {0} kvaronkvarto metra + {0} kvaronkvartoj metraj + + + fluiduncoj metraj + {0} fluidunco metra + {0} fluiduncoj metraj + + + kvaronkvartoj usonaj + {0} kvaronkvarto usona + {0} kvaronkvartoj usonaj + + + steradianoj + {0} steradiano + {0} steradianoj + + + kataloj + {0} katalo + {0} kataloj + + + kulomboj + {0} kulombo + {0} kulomboj + + + faradoj + {0} farado + {0} faradoj + + + henroj + {0} henro + {0} henroj + + + simensoj + {0} simenso + {0} simensoj + + + kalorioj [IT] + {0} kalorio [IT] + {0} kalorioj [IT] + + + bekereloj + {0} bekerelo + {0} bekereloj + + + sivertoj + {0} siverto + {0} sivertoj + + + grajoj + {0} grajo + {0} grajoj + + + kilogramfortoj + {0} kilogramforto + {0} kilogramfortoj + + + tesloj + {0} teslo + {0} tesloj + + + veberoj + {0} vebero + {0} veberoj + + + lum + {0} lum + {0} lum + + + miliardonoj + {0} miliardono + {0} miliardonoj - noktoj - {0} nokto - {0} noktoj - po {0} por nokto + noktoj + {0} nokto + {0} noktoj + po {0} en nokto - direkto - {0} oriente - {0} norde - {0} sude - {0} okcidente + mond-direkto + {0} oriente + {0} norde + {0} sude + {0} okcidente + + g₀ + {0} g₀ + {0} g₀ + + + {0} m/s² + {0} m/s² + + + riv. + {0} riv. + {0} riv. + + + {0} rad + {0} rad + + + ° + + + + + + + + + {0} km² + {0} km² + - ha + ha + {0} ha + {0} ha + + + {0} m² + {0} m² + + + {0} cm² + {0} cm² + + + {0} mi² + {0} mi² + + + akreoj + {0} akreo + {0} akreoj + + + {0} yd² + {0} yd² + + + {0} ft² + {0} ft² + + + {0} in² + {0} in² + + + karatoj + {0} kt + {0} kt + + + mg/dl + {0} mg/dl + {0} mg/dl + + + mmol/l + {0} mmol/l + {0} mmol/l + + + ekz. + {0} ekz. + {0} ekz. + + + {0} ppm + {0} ppm + + + {0} % + {0} % + + + {0} ‰ + {0} ‰ + + + {0} ‱ + {0} ‱ + + + {0} mol + {0} mol + + + Glc + + + l/km + {0} l/km + {0} l/km + + + l/100 km + {0} l/100 km + {0} l/100 km + + + {0} PB + {0} PB + + + {0} TB + {0} TB + + + {0} Tb + {0} Tb + + + {0} GB + {0} GB + + + {0} Gb + {0} Gb + + + {0} MB + {0} MB + + + {0} Mb + {0} Mb + + + {0} kB + {0} kB + + + {0} kb + {0} kb + + + B + {0} B + {0} B + + + b + {0} b + {0} b - jarcent. - {0} jarcent. - {0} jarcent. + jc. + {0} jc. + {0} jc. - jardek. - {0} jardek. - {0} jardek. + jd. + {0} jd. + {0} jd. - j. - {0} j. - {0} j. - {0}/j. + a + {0} a + {0} a + {0}/a + + + jk-onoj + {0} jk-ono + {0} jk-onoj + {0}/jk-ono - monato + mon. {0} mon. {0} mon. + {0}/mon. - semajno + sem. + {0} sem. + {0} sem. + {0}/sem. - tago - {0} t. - {0} t. + tagoj + {0} d + {0} d - horo - {0} h. - {0} h. - {0}/h. + h + {0} h + {0} h - minuto - {0} m. - {0} m. + {0} min + {0} min - sekundo - {0} s. - {0} s. - {0}/s. + s + {0} s + {0} s - milisekundo - {0} ms. - {0} ms. + {0} ms + {0} ms + + + {0} μs + {0} μs + + + {0} ns + {0} ns + + + A + {0} A + {0} A + + + {0} mA + {0} mA + + + Ω + {0} Ω + {0} Ω + + + V + {0} V + {0} V + + + {0} kcal + {0} kcal + + + {0} cal + {0} cal + + + {0} kJ + {0} kJ + + + J + {0} J + {0} J + + + {0} kWh + {0} kWh + + + {0} eV + {0} eV + + + {0} N + {0} N + + + kWh/100 km + {0} kWh/100 km + {0} kWh/100 km + + + {0} GHz + {0} GHz + + + {0} MHz + {0} MHz + + + {0} kHz + {0} kHz + + + {0} Hz + {0} Hz + + + {0} R⊕ + {0} R⊕ + + + {0} km + {0} km - m + m + {0} m + {0} m + + + {0} dm + {0} dm + + + {0} cm + {0} cm + + + {0} mm + {0} mm + + + {0} μm + {0} μm + + + {0} nm + {0} nm + + + {0} pm + {0} pm + + + {0} mi + {0} mi + + + {0} yd + {0} yd + + + {0} ft + {0} ft + + + {0} in + {0} in + + + {0} pc + {0} pc - lj - {0} lj - {0} lj + lj + {0} lj + {0} lj + + + {0} au + {0} au + + + {0} nmi + {0} nmi + + + {0} smi + {0} smi + + + punktoj + {0} punkto + {0} punktoj + + + {0} R☉ + {0} R☉ + + + {0} lx + {0} lx + + + {0} cd + {0} cd + + + {0} lm + {0} lm + + + {0} t + {0} t + + + {0} kg + {0} kg - g + g + {0} g + {0} g + + + {0} mg + {0} mg + + + {0} μg + {0} μg + + + m-l. tunoj + {0} m-l. tuno + {0} m-l. tunoj + + + {0} lb + {0} lb + + + {0} oz + {0} oz + + + {0} oz t + {0} oz t + + + karatoj + {0} ct + {0} ct + + + daltonoj + {0} Da + {0} Da + + + {0} M⊕ + {0} M⊕ + + + {0} M☉ + {0} M☉ + + + granoj + {0} gr + {0} gr + + + {0} GW + {0} GW + + + {0} MW + {0} MW + + + {0} kW + {0} kW + + + W + {0} W + {0} W + + + {0} mW + {0} mW + + + ĈP + {0} ĈP + {0} ĈP + + + mmHg + {0} mmHg + {0} mmHg + + + da Hg + {0} da Hg + {0} da Hg + + + lbf/in² + {0} lbf/in² + {0} lbf/in² + + + {0} inHg + {0} inHg + + + {0} bar + {0} bar + + + {0} mbar + {0} mbar + + + {0} atm + {0} atm + + + {0} Pa + {0} Pa + + + {0} hPa + {0} hPa + + + {0} kPa + {0} kPa + + + {0} MPa + {0} MPa + + + {0} km/h + {0} km/h + + + {0} m/s + {0} m/s + + + {0} mi/h + {0} mi/h + + + nodoj + {0} nodo + {0} nodoj + + + {0} Bft + {0} Bft + + + {0} ° + {0} ° - {0} °C - {0} °C + {0} °C + {0} °C + + + {0} °F + {0} °F + + + {0} K + {0} K + + + {0} N⋅m + {0} N⋅m + + + {0} km³ + {0} km³ + + + {0} m³ + {0} m³ + + + {0} cm³ + {0} cm³ + + + Ml + {0} Ml + {0} Ml + + + hl + {0} hl + {0} hl - L - {0} L - {0} L + l + {0} l + {0} l + + + dl + {0} dl + {0} dl + + + cl + {0} cl + {0} cl + + + ml + {0} ml + {0} ml + + + duonkvartoj metraj + {0} duonkvarto metra + {0} duonkvartoj metraj + + + kvaronkvartoj metraj + {0} kvaronkvarto metra + {0} kvaronkvartoj metraj + + + fl oz m. + {0} fl oz m. + {0} fl oz m. + + + kvaronkvartoj usonaj + {0} kvaronkvarto usona + {0} kvaronkvartoj usonaj + + + cal [IT] + {0} cal [IT] + {0} cal [IT] + + + lum + {0} lum + {0} lum + + + {0} ppb + {0} ppb - nokt. - {0} nokt. - {0} nokt. - {0}/nokto + nokt. + {0} nokt. + {0} nokt. + {0}/nokto - direkto - {0} E - {0} N - {0} S - {0} W + direkto + {0} E + {0} N + {0} S + {0} W + + g₀ + {0} g₀ + {0} g₀ + + + {0} m/s² + {0} m/s² + + + riv. + {0} riv. + {0} riv. + + + {0} rad + {0} rad + + + ° + + + + + + + - {0}km² - {0}km² + {0} km² + {0} km² - {0}ha - {0}ha + {0} ha + {0} ha - {0}m² - {0}m² + {0} m² + {0} m² - {0}cm² - {0}cm² + {0} cm² + {0} cm² + + + {0} mi² + {0} mi² + + + akreoj + {0} akreo + {0} akreoj + + + {0} yd² + {0} yd² + + + {0} ft² + {0} ft² + + + {0} in² + {0} in² + + + {0} kt + {0} kt + + + mg/dl + {0} mg/dl + {0} mg/dl + + + mmol/l + {0} mmol/l + {0} mmol/l + + + ekz. + {0} ekz. + {0} ekz. + + + {0} ppm + {0} ppm + + + {0} % + {0} % + + + {0} ‰ + {0} ‰ + + + {0} ‱ + {0} ‱ + + + {0} mol + {0} mol + + + Glc + + + l/km + {0} l/km + {0} l/km + + + l/100 km + {0} l/100 km + {0} l/100 km + + + {0} PB + {0} PB + + + {0} TB + {0} TB + + + {0} Tb + {0} Tb + + + {0} GB + {0} GB + + + {0} Gb + {0} Gb + + + {0} MB + {0} MB + + + {0} Mb + {0} Mb + + + {0} kB + {0} kB + + + {0} kb + {0} kb + + + B + {0} B + {0} B + + + b + {0} b + {0} b - jc. - {0} jc. - {0} jc. + jc. + {0} jc. + {0} jc. - jd. - {0} jd. - {0} jd. + jd. + {0} jd. + {0} jd. - a - {0} a - {0} a - {0}/a + a + {0} a + {0} a + {0}/a + + + jk-onoj + {0} jk-ono + {0} jk-onoj + {0}/jk-ono + + + mon. + {0}/mon. + + + sem. + {0} sem. + {0} sem. + {0}/sem. - t. - {0}t. - {0}t. + d + {0} d + {0} d - h. - {0}h. - {0}h. + h + {0} h + {0} h + {0}/h - m. - {0}m. - {0}m. + min + {0} min + {0} min - s. - {0}s. - {0}s. + s + {0} s + {0} s + {0}/s - ms. - {0}ms. - {0}ms. + ms + {0} ms + {0} ms + + + {0} μs + {0} μs + + + {0} ns + {0} ns + + + A + {0} A + {0} A + + + {0} mA + {0} mA + + + Ω + {0} Ω + {0} Ω + + + V + {0} V + {0} V + + + {0} kcal + {0} kcal + + + {0} cal + {0} cal + + + {0} kJ + {0} kJ + + + J + {0} J + {0} J + + + {0} kWh + {0} kWh + + + {0} eV + {0} eV + + + {0} N + {0} N + + + kWh/100 km + {0} kWh/100 km + {0} kWh/100 km + + + {0} GHz + {0} GHz + + + {0} MHz + {0} MHz + + + {0} kHz + {0} kHz + + + {0} Hz + {0} Hz + + + {0} R⊕ + {0} R⊕ - {0}km - {0}km + {0} km + {0} km - {0}m - {0}m + {0} m + {0} m - {0}dm - {0}dm + {0} dm + {0} dm - {0}cm - {0}cm + {0} cm + {0} cm - {0}mm - {0}mm + {0} mm + {0} mm - {0}μm - {0}μm + {0} μm + {0} μm - {0}nm - {0}nm + {0} nm + {0} nm - {0}pm - {0}pm + {0} pm + {0} pm + + + {0} mi + {0} mi + + + {0} yd + {0} yd + + + {0} ft + {0} ft + + + {0} in + {0} in - {0}pc - {0}pc + {0} pc + {0} pc - {0}lj - {0}lj + {0} lj + {0} lj - {0}au - {0}au + {0} au + {0} au + + + {0} nmi + {0} nmi + + + {0} smi + {0} smi + + + pt. + {0} pt. + {0} pt. + + + {0} R☉ + {0} R☉ + + + {0} lx + {0} lx + + + {0} cd + {0} cd + + + {0} lm + {0} lm + + + {0} t + {0} t - {0}kg - {0}kg + {0} kg + {0} kg - {0}g - {0}g + {0} g + {0} g + + + {0} mg + {0} mg + + + {0} μg + {0} μg + + + m-l. tunoj + {0} m-l. tuno + {0} m-l. tunoj + + + {0} lb + {0} lb + + + {0} oz + {0} oz + + + {0} oz t + {0} oz t + + + ct + {0} ct + {0} ct + + + {0} Da + {0} Da + + + {0} M⊕ + {0} M⊕ + + + {0} M☉ + {0} M☉ + + + gr + {0} gr + {0} gr + + + {0} GW + {0} GW + + + {0} MW + {0} MW + + + {0} kW + {0} kW + + + W + {0} W + {0} W + + + {0} mW + {0} mW + + + ĈP + {0} ĈP + {0} ĈP + + + mmHg + {0} mmHg + {0} mmHg + + + da Hg + {0} da Hg + {0} da Hg + + + lbf/in² + {0} lbf/in² + {0} lbf/in² + + + {0} inHg + {0} inHg + + + {0} bar + {0} bar + + + {0} mbar + {0} mbar + + + {0} atm + {0} atm + + + {0} Pa + {0} Pa + + + {0} hPa + {0} hPa + + + {0} kPa + {0} kPa + + + {0} MPa + {0} MPa - {0}km/h - {0}km/h + {0} km/h + {0} km/h + + + {0} m/s + {0} m/s + + + {0} mi/h + {0} mi/h + + + nd. + {0} nd. + {0} nd. + + + {0} Bft + {0} Bft + + + {0} ° + {0} ° - {0}°C - {0}°C + {0} °C + {0} °C + + + {0} °F + {0} °F + + + {0} K + {0} K + + + {0} N⋅m + {0} N⋅m + + + {0} km³ + {0} km³ + + + {0} m³ + {0} m³ + + + {0} cm³ + {0} cm³ + + + Ml + {0} Ml + {0} Ml + + + hl + {0} hl + {0} hl - {0}L - {0}L + l + {0} l + {0} l - - n. - {0} n. - {0} n. - {0}/n. + + dl + {0} dl + {0} dl + + + cl + {0} cl + {0} cl + + + ml + {0} ml + {0} ml + + + duonkvartoj m. + {0} duonkvarto m. + {0} duonkvartoj m. + + + kvaronkvartoj m. + {0} kvaronkvarto m. + {0} kvaronkvartoj m. + + + fl oz m. + {0} fl oz m. + {0} fl oz m. + + + kvaronkvartoj us. + {0} kvaronkvarto us. + {0} kvaronkvartoj us. + + + cal [IT] + {0} cal [IT] + {0} cal [IT] + + + lum + {0} lum + {0} lum + + + {0} ppb + {0} ppb - - direkto - - {0} kaj {1} - {0} kaj {1} + {0} kaj {1} + {0} kaj {1} - {0} aŭ {1} - {0} aŭ {1} - - - {0} aŭ {1} - {0} aŭ {1} - - - {0} aŭ {1} - {0} aŭ {1} + {0} aŭ {1} + {0} aŭ {1} - {0}, {1} - {0}, {1} + {0}, {1} + {0}, {1} - {0} k {1} - {0} k {1} + {0} k {1} + {0} k {1} - {0} {1} - {0} {1} - {0} {1} - {0} {1} + {0} {1} + {0} {1} + {0} {1} + {0} {1} - {0}, {1} - {0}, {1} + {0}, {1} + {0}, {1} - jes:j - ne:n + jes:j + ne:n diff --git a/make/data/cldr/common/main/es.xml b/make/data/cldr/common/main/es.xml index 3ef6d339a66..d65824d006c 100644 --- a/make/data/cldr/common/main/es.xml +++ b/make/data/cldr/common/main/es.xml @@ -294,6 +294,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurdo + kurdo + kurmanji kumyk kutenai komi @@ -821,6 +823,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Colombia Isla Clipperton + Sark Costa Rica Cuba Cabo Verde @@ -1097,33 +1100,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ orden numérico intensidad de orden moneda + presentación del emoji ciclo horario (12 o 24 horas) estilo de salto de línea + salto de línea en palabras sistema de medición números + salto de oración después de abreviatura zona horaria variante local uso privado calendario budista + budista calendario chino + chino calendario cóptico + cóptico calendario dangi + dangi calendario etíope + etíope calendario etíope Amete Alem + etíope Amete Alem calendario gregoriano + gregoriano calendario hebreo + hebreo calendario nacional hindú calendario hijri + hijri calendario hijri tabular + hijri tabular calendario hijri Umm al-Qura + hijri Umm al-Qura calendario ISO-8601 calendario japonés + japonés calendario persa + persa calendario de la República de China + de la República de China formato de moneda de contabilidad + contabilidad formato de moneda estándar + estándar Ordenar símbolos Ordenar ignorando símbolos Ordenar acentos normalmente @@ -1133,22 +1155,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordenar empezando por mayúsculas Ordenar sin distinguir entre mayúsculas y minúsculas Ordenar distinguiendo entre mayúsculas y minúsculas - orden del chino tradicional - Big5 orden anterior, para compatibilidad + compatibilidad orden de diccionario + diccionario orden predeterminado de Unicode + predeterminado de Unicode reglas de ordenación europeas - orden del chino simplificado - GB2312 orden de listín telefónico + listín telefónico orden fonético + fonético orden pinyin + pinyin búsqueda de uso general + búsqueda Buscar por consonante inicial de hangul orden estándar + estándar orden de los trazos + trazos orden tradicional + tradicional orden de trazos radicales + trazos radicales orden zhuyin + zhuyin Ordenar sin normalización Ordenar con normalización Unicode Ordenar dígitos individualmente @@ -1161,18 +1193,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ancho completo ancho medio Numérico + predeterminado + emoji + texto sistema de 12 horas (0–11) + 12 (0–11) sistema de 12 horas (1–12) + 12 (1–12) sistema de 24 horas (0–23) + 24 (0–23) sistema de 24 horas (1–24) + 24 (1–24) estilo de salto de línea flexible + flexible estilo de salto de línea normal + normal estilo de salto de línea estricto + estricto + dividir todas + conservar todas + normal + conservar en sintagmas transliteración USBGN transliteración UNGEGN sistema métrico + métrico sistema imperial + británico sistema estadounidense + estadounidense dígitos indoarábigos dígitos indoarábigos extendidos números en armenio @@ -1217,6 +1266,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dígitos en tibetano Números tradicionales dígitos en vai + desactivado + activado métrico @@ -1267,9 +1318,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1408,11 +1456,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1} 'a' 'las' {0} + {1}, {0} + + {1} 'a' 'las' {0} + @@ -1429,16 +1483,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G d/M/y GGGGG + E, d/M/y G MMM y G d MMM y G E, d MMM y G MMMM 'de' y G d 'de' MMMM 'de' y G E, d 'de' MMMM 'de' y G - h a h:mm a h:mm:ss a + H 'h' v d/M E, d/M d MMM @@ -1500,7 +1556,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a h:mm a – h:mm a @@ -1522,7 +1577,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M–M @@ -1794,6 +1848,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1} 'a' 'las' {0} + @@ -1812,14 +1869,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, h:mm:ss a E, H:mm:ss y G - d/M/y GGGGG + M/y G + d/M/y G + E, d/M/y G MMM y G d MMM y G E, d MMM y G MMMM 'de' y G d 'de' MMMM 'de' y G E, d 'de' MMMM 'de' y G - h a H h:mm a H:mm @@ -1831,6 +1889,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm:ss (vvvv) h:mm a v H:mm v + H 'h' v d/M E, d/M d/M @@ -1895,10 +1954,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM – E, d MMM y G E, d MMM y – E, d MMM y G - - h a – h a - h–h a - H–H @@ -1920,10 +1975,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm–H:mm v H:mm–H:mm v - - h a – h a v - h–h a v - H–H v @@ -2671,21 +2722,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Anguila - - Tirana - Ereván - - Río Gallegos - - - Tucumán - - - Córdoba - Viena @@ -2725,36 +2764,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Brunéi - - Eirunepé - Río Branco Manaos - - Cuiabá - - - Santarém - Belén - - Araguaína - - - São Paulo - Bahía - - Maceió - Timbu @@ -2779,15 +2800,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Duala - - Ürümqi - Shanghái - - Bogotá - La Habana @@ -2815,21 +2830,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Argel - - Galápagos - Tallin El Cairo - - El Aaiún - - - Canarias - Adís Abeba @@ -2921,7 +2927,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tokio - Enderbury + Isla Kanton Comoras @@ -2992,12 +2998,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maldivas - - Mazatlán - - - Ciudad de México - Numea @@ -3091,9 +3091,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riad - - Mahé - Jartum @@ -3124,9 +3121,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Yamena - - Lomé - Dusambé @@ -3225,9 +3219,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - hora de África occidental - hora estándar de África occidental - hora de verano de África occidental + hora de África occidental @@ -3621,6 +3613,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ hora de Guyana + + + hora estándar de Hawái-Aleutianas + + hora de Hawái-Aleutianas @@ -4071,6 +4068,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ hora de Chuuk + + + Hora de Turquía + Hora estándar de Turquía + Hora de verano de Turquía + + hora de Turkmenistán @@ -4234,7 +4238,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -4245,24 +4252,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 00 mil ¤ 000 mil ¤ 000 mil ¤ - 0 M¤ - 0 M¤ - 00 M¤ - 00 M¤ - 000 M¤ - 000 M¤ - 0000 M¤ - 0000 M¤ - 00 mil M¤ - 00 mil M¤ - 000 mil M¤ - 000 mil M¤ - 0 B¤ - 0 B¤ - 00 B¤ - 00 B¤ - 000 B¤ - 000 B¤ + 0 M ¤ + 0 M ¤ + 00 M ¤ + 00 M ¤ + 000 M ¤ + 000 M ¤ + 0000 M ¤ + 0000 M ¤ + 00 mil M ¤ + 00 mil M ¤ + 000 mil M ¤ + 000 mil M ¤ + 0 B ¤ + 0 B ¤ + 00 B ¤ + 00 B ¤ + 000 B ¤ + 000 B ¤ @@ -5631,6 +5638,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dólar de Zimbabue + + oro zimbabuense + oro zimbabuense + oro zimbabuense + dólar zimbabuense @@ -5884,7 +5896,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - + + partes + {0} parte + {0} partes + + feminine partes por millón {0} parte por millón @@ -5911,6 +5928,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} moles + + de glucosa + {0} de glucosa + {0} de glucosa + masculine litros por kilómetro @@ -6536,6 +6558,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milímetro de mercurio {0} milímetros de mercurio + + de mercurio + {0} de mercurio + {0} de mercurio + libras por pulgada cuadrada {0} libra por pulgada cuadrada @@ -6744,6 +6771,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} taza métrica {0} tazas métricas + + onzas líquidas métricas + {0} onza líquida métrica + {0} onzas líquidas métricas + acres-pies {0} acre-pie @@ -6855,13 +6887,75 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} cuarto imperial {0} cuartos imperiales + + estereorradianes + {0} estereorradián + {0} estereorradianes + + + katales + {0} katal + {0} katales + + + culombios + {0} culombio + {0} culombios + + + faradios + {0} faradio + {0} faradios + + + henrios + {0} henrio + {0} henrios + + + siemens + {0} siemens + {0} siemens + + + calorías [IT] + {0} caloría [IT] + {0} calorías [IT] + + + bequereles + {0} bequerel + {0} bequereles + + + siéverts + {0} siévert + {0} siéverts + + + grais + {0} gray + {0} grais + + + kilogramos fuerza + {0} kilogramo fuerza + {0} kilogramos fuerza + + + teslas + {0} tesla + {0} teslas + + + webers + {0} weber + {0} webers + feminine - luz - {0} luz - {0} luz - + feminine partes por millardo {0} parte por millardo @@ -6869,9 +6963,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - noches - {0} noche - {0} noches {0} por noche @@ -6920,6 +7011,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ítem {0} ítems + + parte + {0} parte + {0} partes + por ciento {0} % @@ -6935,6 +7031,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + l/km {0} l/km @@ -7124,6 +7223,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + de Hg + {0} de Hg + {0} de Hg + {0} °C {0} °C @@ -7252,12 +7356,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt imp. {0} qt imp. + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} kgf + {0} kgf + luz {0} luz {0} luz - + partes/millardo @@ -7359,7 +7472,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ít {0}ít - + + parte + {0} parte + {0} partes + + {0}ppm {0}ppm @@ -7380,6 +7498,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mol {0}mol + + Glc + {0}l/km {0}l/km @@ -7810,6 +7931,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmHg {0}mmHg + + de Hg + {0} de Hg + {0} de Hg + {0}psi {0}psi @@ -8021,20 +8147,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt imp {0}qt imp + + cal-IT + - luz {0}luz {0}luz - + {0}ppb {0}ppb - noches {0}noche {0}noches - {0}/noche {0}E @@ -8356,7 +8482,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {surname} {surname2}, {title} {given} {given2} - {surname} {surname2}, {given-informal} + {surname}, {given-informal} {surname} {surname2}, {given-informal} diff --git a/make/data/cldr/common/main/es_419.xml b/make/data/cldr/common/main/es_419.xml index 1c73bc6db40..641447db5df 100644 --- a/make/data/cldr/common/main/es_419.xml +++ b/make/data/cldr/common/main/es_419.xml @@ -23,17 +23,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ vasco alemán de la alta edad antigua griego clásico - gujarati haitiano cabardiano karachái-bálkaro - cachemiro + kurmanyi genovés malabar manipuri ndebele del sur sesotho del norte - panyabí prusiano antiguo pashtún retorrománico @@ -41,7 +39,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ árabe (Chad) sami del sur sesotho del sur - swahili swahili (Congo) siríaco tetun @@ -95,10 +92,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ orden normalizado + presentación de emojis + saltos de línea entre palabras calendario islámico (Arabia Saudita) calendario islámico tabular + calendario chino ordenar símbolos ordenar ignorando símbolos ordenar acentos normalmente @@ -108,11 +108,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ordenar empezando por mayúsculas ordenar sin distinguir entre mayúsculas y minúsculas ordenar distinguiendo entre mayúsculas y minúsculas + unicode predeterminado reglas de orden europeas orden de agenda telefónica + agenda telefónica + fonética + trazo + trazo radical + introducir saltos + conservar todos + conservar en frases dígitos en tirh números traducionales dígitos en Warang Citi + no + Alfabeto: {0} @@ -394,12 +404,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d MMM – E d MMM 'de' y G E d MMM 'de' y – E d MMM 'de' y G - - h a–h a - - - h:mm a–h:mm a v - h a–h a v @@ -571,12 +575,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ día hábil del mes - - - en {0} domingo - en {0} domingos - - a.m./p.m. @@ -589,9 +587,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ hora universal coordinada - - ciudad desconocida - Nasáu @@ -601,9 +596,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Santiago - - Büsingen - Islas Canarias @@ -779,7 +771,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 + ¤ #,##0.00 + + + ¤ #,##0.00 @@ -788,14 +783,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ 0 K ¤0 K ¤ 0 K - ¤00 K - ¤ 00 K - ¤00 K - ¤ 00 K - ¤000 K - ¤ 000 K - ¤000 K - ¤ 000 K + ¤00 k + ¤ 00 k + ¤00 k + ¤ 00 k + ¤000 k + ¤ 000 k + ¤000 k + ¤ 000 k ¤0 M ¤ 0 M ¤0 M @@ -812,14 +807,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ 0000 M ¤0000 M ¤ 0000 M - ¤00 MRD - ¤ 00 MRD - ¤00 MRD - ¤ 00 MRD - ¤000 MRD - ¤ 000 MRD - ¤000 MRD - ¤ 000 MRD + ¤00 mil M + ¤ 00 mil M + ¤00 mil M + ¤ 00 mil M + ¤000 mil M + ¤ 000 mil M + ¤000 mil M + ¤ 000 mil M ¤0 B ¤ 0 B ¤0 B @@ -924,6 +919,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} unidad de fuerza gravitacional {0} unidades de fuerza gravitacional + + {0} parte + {0} partes + amperes {0} ampere @@ -992,7 +991,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} onza fluida {0} onzas fluidas - + + {0} siemens + {0} siemens + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + partes por mil millones {0} parte por mil millones {0} partes por mil millones @@ -1007,6 +1020,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ grados + + {0} parte + {0} parte + {0} mpg imp. {0} mpg imp. @@ -1084,6 +1101,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} hp {0} hp + + fl oz m + {0} fl oz m + {0} fl oz m + pintas {0} pt @@ -1103,17 +1125,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} cdta. {0} cdtas. + + partes/mil millones + {0} ppmm + {0} ppmm + metros² + + {0}parte + {0}parte + + + {0}Glc + {0}Glc + a. {0}a. @@ -1140,10 +1175,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}thm EE.UU. {0}thm EE.UU. - - {0} kWh/100km - {0} kWh/100km - {0}p {0}p @@ -1180,14 +1211,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}hp {0}hp - - B {0} - B {0} + + {0}de Hg + {0}de Hg {0}ml {0}ml + + fl oz m + {0}fl oz m + {0}fl oz m + {0} ac ft {0}ac ft @@ -1201,9 +1237,62 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}bbl {0}bbl - - {0} luz - {0} luz + + {0}sr + {0}sr + + + {0}kat + {0}kat + + + {0}C + {0}C + + + {0}F + {0}F + + + {0}H + {0}H + + + {0}S + {0}S + + + {0}cal-IT + {0}cal-IT + + + {0}Bq + {0}Bq + + + {0}Sv + {0}Sv + + + {0}Gy + {0}Gy + + + {0}kgf + {0}kgf + + + {0}T + {0}T + + + {0}Wb + {0}Wb + + + ppmm + {0}ppmm + {0}ppmm {0} noche @@ -1216,67 +1305,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} — Extendido {0} — Histórico {0} — Miscelánea - Símbolos de escritura — {0} - Símbolos de escritura de África - Símbolos de escritura de América - animal - naturaleza y animales - flecha - cuerpo - Cuadro de dibujo - edificio - Jamo consonántico - símbolos de monedas - Guion/conector - dígitos - Flechas hacia arriba y hacia abajo - Símbolos de escritura de Europa - femenino - bandera - banderas - Formato - formato y espacio duro - Variantes de formato de ancho completo - Formas geométricas + Cuadros de dibujo Variantes de formato de ancho medio - caracteres Han - Radicales Han Hanzi (simplificado) Hanzi (tradicional) - corazón - Símbolos de escritura históricos Kana japonés - tecla mayus - Flechas hacia la derecha y hacia la izquierda - símbolos con letras - uso limitado - Símbolos de escritura de Oriente Medio - Miscelánea - sistemas de escritura modernos - Modificador - naturaleza - sin espaciado - otros - Asociado - persona - alfabeto fonético - lugar - planta - señal o símbolo - Variantes de formato pequeño - Caras sonrientes - sistemas de escritura de Asia del Sur - sistemas de escritura de Asia Sudoriental - deporte - símbolo - marcas tonales - viaje - viajes y destinos - variantes - Jamo vocálico - clima - sistemas de escritura de Asia Occidental - espacio duro + Clima ancho diff --git a/make/data/cldr/common/main/es_AR.xml b/make/data/cldr/common/main/es_AR.xml index 03b6e24afba..eb90b063702 100644 --- a/make/data/cldr/common/main/es_AR.xml +++ b/make/data/cldr/common/main/es_AR.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof @@ -181,9 +179,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH:mm–HH:mm HH:mm–HH:mm - - h:mm a – h:mm a v - HH:mm–HH:mm v HH:mm–HH:mm v @@ -309,6 +304,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;(¤ #,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/es_BO.xml b/make/data/cldr/common/main/es_BO.xml index 645549fbcf5..89cb92dfd07 100644 --- a/make/data/cldr/common/main/es_BO.xml +++ b/make/data/cldr/common/main/es_BO.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof diff --git a/make/data/cldr/common/main/es_CL.xml b/make/data/cldr/common/main/es_CL.xml index f5c2f863db9..63b6af9f5e6 100644 --- a/make/data/cldr/common/main/es_CL.xml +++ b/make/data/cldr/common/main/es_CL.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof @@ -301,6 +299,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/es_CO.xml b/make/data/cldr/common/main/es_CO.xml index 2919b0a070f..c36b3901eb4 100644 --- a/make/data/cldr/common/main/es_CO.xml +++ b/make/data/cldr/common/main/es_CO.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof @@ -66,7 +64,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d MMM 'de' y G - {0} ‘al’ {1} + {0} al {1} d 'a' d @@ -265,7 +263,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic d 'de' MMM 'de' y - {0} ‘al’ {1} + {0} al {1} d 'a' d diff --git a/make/data/cldr/common/main/es_CR.xml b/make/data/cldr/common/main/es_CR.xml index 693ace12f91..b11058c94be 100644 --- a/make/data/cldr/common/main/es_CR.xml +++ b/make/data/cldr/common/main/es_CR.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof diff --git a/make/data/cldr/common/main/es_DO.xml b/make/data/cldr/common/main/es_DO.xml index 99a314f62e4..752562a350f 100644 --- a/make/data/cldr/common/main/es_DO.xml +++ b/make/data/cldr/common/main/es_DO.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof @@ -142,6 +140,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/es_EC.xml b/make/data/cldr/common/main/es_EC.xml index a813242deaa..9b00018403c 100644 --- a/make/data/cldr/common/main/es_EC.xml +++ b/make/data/cldr/common/main/es_EC.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof @@ -212,6 +210,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/es_GQ.xml b/make/data/cldr/common/main/es_GQ.xml index 556267534f4..eaacd908006 100644 --- a/make/data/cldr/common/main/es_GQ.xml +++ b/make/data/cldr/common/main/es_GQ.xml @@ -16,6 +16,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 + ¤ #,##0.00 + + + ¤ #,##0.00 diff --git a/make/data/cldr/common/main/es_GT.xml b/make/data/cldr/common/main/es_GT.xml index 9137c3bd3d5..8f3924b4f7b 100644 --- a/make/data/cldr/common/main/es_GT.xml +++ b/make/data/cldr/common/main/es_GT.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof diff --git a/make/data/cldr/common/main/es_HN.xml b/make/data/cldr/common/main/es_HN.xml index 9be7f572ca7..ac4278011e4 100644 --- a/make/data/cldr/common/main/es_HN.xml +++ b/make/data/cldr/common/main/es_HN.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof diff --git a/make/data/cldr/common/main/es_MX.xml b/make/data/cldr/common/main/es_MX.xml index be625c9581e..6046b9fc4ee 100644 --- a/make/data/cldr/common/main/es_MX.xml +++ b/make/data/cldr/common/main/es_MX.xml @@ -51,11 +51,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic sotho septentrional ojibwa del noroeste ojibwa del oeste - punyabí árabe chadiano lushootseed del sur siswati - suajili suajili del Congo siriaco tutchone del sur @@ -86,7 +84,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic calendario minguo + minguo orden de clasificación de Unicode predeterminado + fonético + trazos + trazos radicales + dividir todo + conservar todo dígitos en gujarati dígitos en manipuri dígitos ol chiki @@ -268,9 +272,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH:mm–HH:mm HH:mm–HH:mm - - h:mm a – h:mm a v - HH:mm–HH:mm v HH:mm–HH:mm v @@ -400,10 +401,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic el domingo pasado este domingo el domingo próximo - - dentro de {0} domingo - dentro de {0} domingos - el lunes pasado @@ -448,7 +445,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic en {0} h - en {0} n + en {0} h @@ -592,50 +589,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 0 k¤ - 0 k ¤ - 0 k¤ - 0 k ¤ - 00 k¤ - 00 k ¤ - 00 k¤ - 00 k ¤ - 000 k¤ - 000 k ¤ - 000 k¤ - 000 k ¤ - 0 M¤ - 0 M ¤ - 0 M¤ - 0 M ¤ - 00 M¤ - 00 M ¤ - 00 M¤ - 00 M ¤ - 000 M¤ - 000 M ¤ - 000 M¤ - 000 M ¤ - 0000 M¤ - 0000 M ¤ - 0000 M¤ - 0000 M ¤ - 00 MRD ¤ - 00 MRD ¤ - 000 MRD ¤ - 000 MRD ¤ - 0 B¤ - 0 B ¤ - 0 B¤ - 0 B ¤ - 00 B¤ - 00 B ¤ - 00 B¤ - 00 B ¤ - 000 B¤ - 000 B ¤ - 000 B¤ - 000 B ¤ + ¤0 k + ¤ 0 k + ¤0 k + ¤ 0 k @@ -948,30 +905,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} atm {0}atm + + {0} cal-IT + {0} cal-IT + {0} — Históricos {0} — Varios mujer - Formato y espacio duro tecla - Símbolos con letras - Uso limitado hombre - Sistemas de escritura modernos - Otros - Alfabeto fonético - Símbolos de señales/estándar cara sonriente - Sistemas de escritura de Asia Sudoriental - Símbolos - Marcas tonales - Viajes y destinos - Variantes tiempo - Sistemas de escritura de Asia Occidental - Espacio duro mediana diff --git a/make/data/cldr/common/main/es_NI.xml b/make/data/cldr/common/main/es_NI.xml index 068c1766308..ab947f3752b 100644 --- a/make/data/cldr/common/main/es_NI.xml +++ b/make/data/cldr/common/main/es_NI.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof diff --git a/make/data/cldr/common/main/es_PA.xml b/make/data/cldr/common/main/es_PA.xml index 76ae5a0e0eb..4a2742aa13e 100644 --- a/make/data/cldr/common/main/es_PA.xml +++ b/make/data/cldr/common/main/es_PA.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof diff --git a/make/data/cldr/common/main/es_PE.xml b/make/data/cldr/common/main/es_PE.xml index aa0c0b9ab24..6ea4973ddd3 100644 --- a/make/data/cldr/common/main/es_PE.xml +++ b/make/data/cldr/common/main/es_PE.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof diff --git a/make/data/cldr/common/main/es_PY.xml b/make/data/cldr/common/main/es_PY.xml index 33fb2a11578..622cfe2bcb6 100644 --- a/make/data/cldr/common/main/es_PY.xml +++ b/make/data/cldr/common/main/es_PY.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof @@ -179,6 +177,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;¤ -#,##0.00 + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/es_US.xml b/make/data/cldr/common/main/es_US.xml index 98d53c4b12d..988aceeb3f0 100644 --- a/make/data/cldr/common/main/es_US.xml +++ b/make/data/cldr/common/main/es_US.xml @@ -44,6 +44,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ingusetio cabilio karachay-balkar + kurdo kurmanyi ligur creole de Luisiana lorí del norte @@ -100,11 +101,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic Islas menores alejadas de EE. UU. + calendario coreano + coreano + chino + predeterminado Unicode + fonético + sistema piyin + trazos + trazos radicales + sistema zhuyin + emoticón + dividir todo + mantener todo + regular + mantener en frases dígitos chakma dígitos en gujarati dígitos javaneses dígitos meetei mayek dígitos ol chiki + desactivado + activado imperial @@ -124,6 +141,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic + MM-y G + E, dd-MM-y G E, d/M/y GGGGG @@ -150,7 +169,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 1er trimestre 2.º trimestre - 3.º trimestre + 3er trimestre 4.º trimestre @@ -234,6 +253,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic E HH:mm E h:mm:ss a E HH:mm:ss + MM-y G + E, dd-MM-y G d MMM y G HH:mm:ss (vvvv) d/MM @@ -259,9 +280,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH:mm–HH:mm HH:mm–HH:mm - - h:mm a – h:mm a v - HH:mm–HH:mm v HH:mm–HH:mm v @@ -316,12 +334,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic día sem. de m - - - dentro de {0} domingo - dentro de {0} domingos - - el mie. pasado este mié. @@ -333,11 +345,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - HST - HST - HDT - Honolulu @@ -476,6 +483,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de las islas Gilbert + + + HST + + HAT @@ -543,26 +555,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤00 B - ¤ 00 B - ¤00 B - ¤ 00 B - ¤000 B - ¤ 000 B - ¤000 B - ¤ 000 B - ¤0 T - ¤ 0 T - ¤0 T - ¤ 0 T - ¤00 T - ¤ 00 T - ¤00 T - ¤ 00 T - ¤000 T - ¤ 000 T - ¤000 T - ¤ 000 T + ¤00 K + ¤ 00 K + ¤00 K + ¤ 00 K + ¤000 K + ¤ 000 K + ¤000 K + ¤ 000 K @@ -618,6 +618,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwacha zambiano kwachas zambianos + + oro de Zimbabue + {0}a @@ -629,12 +632,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic centí{0} + + picó{0} + ronto {0} quecto {0} + + partes por millón + {0} parte por millón + {0} partes por millón + por ciento @@ -721,6 +732,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} libra fuerza-pie {0} libra fuerza-pies + + onza líquida métrica + acres-pies {0} acre-pie @@ -736,18 +750,73 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} dracma fluida {0} dreacmas fluidas + + estereorradián + + + katal + + + culombio + + + faradio + + + henrio + + + simens + {0} siemens + {0} siemens + + + caloría IT + {0} caloría IT + {0} calorías IT + + + sievert + + + gray + + + kilopondio + {0} kilopondio + {0} kilopondios + + + tesla + + + weber + - {0} luz + {0} de luces {0} luces + + parte por millón + {0} ppm + {0} ppm + + + {0} partes/millón + {0} pts./M + % + + {0} Glc + {0} Glc + byte @@ -838,12 +907,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} fl dracma {0} fl dracmas - - {0} luz - {0} de luces + + {0} F + {0} F - - partes/mil millones + + cal. IT + {0} cal. IT + {0} cal. IT + + + kp + {0} kp + {0} kp + + + {0} de luces + {0} de luces @@ -855,6 +935,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} arcsec {0}″ + + ppm + {0} ppm + {0} ppm + + + {0} Glc + {0} Glc + a {0}a @@ -897,6 +986,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mil {0}mil + + {0} de Hg + {0} de Hg + B @@ -912,6 +1005,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}bsh {0}bsh + + {0} F + {0}F + + + cal. IT + {0} cal. IT + {0} cal. IT + + + kp + {0} kp + {0} kp + {0}luz {0}luces diff --git a/make/data/cldr/common/main/es_UY.xml b/make/data/cldr/common/main/es_UY.xml index 75541c40b19..e0261af496f 100644 --- a/make/data/cldr/common/main/es_UY.xml +++ b/make/data/cldr/common/main/es_UY.xml @@ -126,6 +126,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;(¤ #,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/es_VE.xml b/make/data/cldr/common/main/es_VE.xml index ef44a1f55d9..c80f7c7b09e 100644 --- a/make/data/cldr/common/main/es_VE.xml +++ b/make/data/cldr/common/main/es_VE.xml @@ -19,9 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic euskera griego antiguo sotho septentrional - punyabí siswati - suajili suajili del Congo setswana wolof @@ -169,6 +167,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/et.xml b/make/data/cldr/common/main/et.xml index 714746ef2db..1298eceea4c 100644 --- a/make/data/cldr/common/main/et.xml +++ b/make/data/cldr/common/main/et.xml @@ -302,7 +302,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kaingangi khasi saka - koyra chiini + koiratšiini khovari kikuju kõrmandžki @@ -330,6 +330,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölni kurdi + kurdi + kurmandži kumõki kutenai komi @@ -471,7 +473,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pennsylvania saksa mennoniidisaksa vanapärsia - Pfalzi + pfaltsi foiniikia paali pijini @@ -527,7 +529,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sena seri sölkupi - koyraboro senni + koiraborosenni sango vanaiiri žemaidi @@ -565,6 +567,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sukuma susu sumeri + sunvari rootsi suahiili Kongo suahiili @@ -613,7 +616,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tumbuka tuvalu tvii - taswaqi + tasavaki tahiti tõva tamasikti @@ -691,6 +694,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + @@ -711,6 +716,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -729,6 +735,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -743,6 +750,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -761,6 +769,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -779,7 +788,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + @@ -792,6 +803,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -800,12 +812,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + @@ -826,6 +840,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -846,6 +861,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -855,7 +871,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -962,7 +981,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hiina Colombia Clippertoni saar - Sark + Sark Costa Rica Kuuba Roheneemesaared @@ -1179,7 +1198,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Wallis ja Futuna Samoa pseudo-aktsent - pseudo-Bidi + pseudobidi Kosovo Jeemen Mayotte @@ -1245,35 +1264,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ numbrite järjestus järjestuskaalud vääring + Emoji esitlus 12 või 24 tunni süsteem reavahetuse laad + reavahetus sõnade vahel mõõdustik numbrid + lause poolitamine pärast lühendit ajavöönd lokaadi variant erakasutus budistlik kalender + budistlik Hiina kalender + Hiina kopti kalender + kopti dangi kalender + dangi Etioopia kalender + Etioopia Etioopia amete alemi kalender + Etioopia amete alemi Gregoriuse kalender + Gregoriuse juudi kalender + juudi India rahvuslik kalender hidžra kalender + hidžra hidžra kalender (tabelkalender, ilmalik) + hidžra (tabelkalender, ilmalik) hidžra kalender (Saudi Araabia, vaatluspõhine) hidžra kalender (tabelkalender, astronoomiline ajastu) hidžra kalender (Umm al-Qurá) + hidžra (Umm al-Qurá) ISO-8601 kalender Jaapani kalender + Jaapani Pärsia kalender + Pärsia Hiina Vabariigi kalender + Hiina Vabariigi arvelduse rahavorming + arveldus standardne rahavorming + standardne järjesta sümbolid eira järjestuses sümboleid diakriitikud tavajärjestuses @@ -1283,19 +1321,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ suurtäht järjestuses eespool tõstutundetu järjestus tõstutundlik järjestus - hiina traditsiooniline sortimisjärjestus (Big5) varasem sortimisjärjestus (ühilduvuse jaoks) sõnastiku sortimisjärjestus Unicode’i vaikejärjestus + vaike-Unicode emoji sortimisjärjestus Euroopa järjestusreeglid - hiina lihtsustatud sortimisjärjestus (GB2312) telefoniraamatu sortimisjärjestus foneetiline sortimisjärjestus pinyin’i sortimisjärjestus üldeesmärgiline otsing + otsing otsing korea alguskonsonandi järgi standardne järjestus + standardne kriipsude sortimisjärjestus traditsiooniline sortimisjärjestus võtmete-kriipsude sortimisjärjestus @@ -1312,18 +1351,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ täislaius poollaius Numbriline + vaikeväärtus + Emotikon + tekst 12-tunnine süsteem (0–11) + 12 (0–11) 12-tunnine süsteem (1–12) + 12 (1–12) 24-tunnine süsteem (0–23) + 24 (0–23) 24-tunnine süsteem (1–24) + 24 (1–24) paindlik reavahetuse laad + paindlik harilik reavahetuse laad + harilik jäik reavahetuse laad + jäik + vaheta kõik + jäta kõik + harilik + jäta fraasid transkriptsioon (BGN) transkriptsioon (UNGEGN) meetermõõdustik + meetriline inglise mõõdustik + ÜK USA mõõdustik + USA ahomi numbrid idaaraabia numbrid laiendatud idaaraabia numbrid @@ -1340,12 +1396,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ etioopia numbrid finantsnumbrid täislaiusega numbrid + garai numbrid gruusia numbrid Gūnjāla gondi numbrid Masarami gondi numbrid kreeka numbrid väiketähelised kreeka numbrid gudžarati numbrid + gurungi numbrid gurmukhi numbrid hiina kümnendnumbrid lihtsustatud hiina keele numbrid @@ -1354,6 +1412,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ traditsioonilise hiina keele finantsnumbrid heebrea numbrid phahau-hmongi numbrid + Chervangi numbrid jaava numbrid jaapani numbrid jaapani finantsnumbrid @@ -1361,6 +1420,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kaavi numbrid khmeeri numbrid kannada numbrid + kirat-rai numbrid tai tham hora numbrid tai tham tham numbrid lao numbrid @@ -1379,6 +1439,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kohalikud numbrid nkoo numbrid santali numbrid + bhumidži numbrid oria numbrid osmani numbrid rohingja numbrid @@ -1390,6 +1451,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sinhala lithi numbrid sora numbrid sunda numbrid + sunvari numbrid taakri numbrid uue tai-lõõ numbrid traditsioonilised tamili numbrid @@ -1399,10 +1461,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tiibeti numbrid tirhuta numbrid tase numbrid + tolong-siki numbrid traditsioonilised numbrid vai numbrid hoo numbrid vantšo numbrid + välja lülitatud + sisse lülitatud meetermõõdustik @@ -1534,11 +1599,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M.y G d.MM.y GGGGG + E, d.M.y G MMM y G d. MMM y G E, d. MMMM y G - h a h:mm a h:mm:ss a H:mm:ss @@ -1603,9 +1669,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d. MMM y G – E, d. MMM E, d. MMM y G – E, d. MMM y - - h–h a - h:mm–h:mm a h:mm–h:mm a @@ -1615,9 +1678,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h–h a v - M–M @@ -1909,11 +1969,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM.y G d.MM.y GGGGG + E, dd.MM.y G MMM y G d. MMM y G E, d. MMMM y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1921,7 +1982,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ M d.M E, d.M - MMMM + MMM d. MMM E, d. MMM d. MMMM @@ -1980,10 +2041,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d. MMM – E, d. MMM y G E, d. MMM y – E, d. MMM y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1994,10 +2051,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - dd.MM–dd.MM dd.MM–dd.MM @@ -2603,21 +2656,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ määramata linn - - Tirana - Jerevan - - Río Gallegos - - - Tucumán - - - Córdoba - Viin @@ -2636,27 +2677,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - Eirunepé - - - Cuiabá - - - Santarém - - - Belém - - - Araguaína - - - São Paulo - - - Maceió - Saint John’s @@ -2669,12 +2689,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Lihavõttesaar - - Ürümqi - - - Bogotá - Havanna @@ -2690,9 +2704,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Praha - - Büsingen - Berliin @@ -2702,15 +2713,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Alžiir - - Galápagos - Kairo - - El Aaiún - Kanaari saared @@ -2776,9 +2781,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Biškek - Enderbury - - Abariringa @@ -2814,27 +2816,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riia - - Chișinău - Macau Maldiivid - - Mazatlán - Bahia Banderas México - - Nouméa - Katmandu @@ -2904,9 +2897,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ar-Riyāḑ - - Mahé - Hartum @@ -2922,12 +2912,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damaskus - - N’Djamena - - - Lomé - Dušanbe @@ -2993,9 +2977,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Lääne-Aafrika aeg - Lääne-Aafrika standardaeg - Lääne-Aafrika suveaeg + Lääne-Aafrika aeg @@ -3390,6 +3372,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guyana aeg + + + Hawaii-Aleuudi standardaeg + + Hawaii-Aleuudi aeg @@ -3840,6 +3827,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chuuki aeg + + + Türgi aeg + Türgi standardaeg + Türgi suveaeg + + Türkmenistani aeg @@ -3999,9 +3993,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + #,##0.00 #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -4564,7 +4561,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Iisraeli seekel (1980–1985) Iisraeli seekel (1980–1985) - Iisraeli seekelit (1980–1985) + Iisraeli seeklit (1980–1985) Iisraeli uus seekel @@ -5277,6 +5274,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ida-Kariibi dollar Ida-Kariibi dollarit + + Kariibi kulden + Kariibi kulden + Kariibi kuldnat + Rahvusvahelise Valuutafondi arvestusühik @@ -5333,8 +5335,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Jugoslaavia kõva dinaar (1966–1990) - Jugoslaavia kõva dinaar (1966–1990) - Jugoslaavia kõva dinaar (1966–1990) Jugoslaavia uus dinaar (1994–2002) @@ -5374,6 +5374,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabwe dollar (1980–2008) Zimbabwe dollarit (1980–2008) + + Zimbabwe kuld + Zimbabwe kuld + Zimbabwe kulda + Zimbabwe dollar (2009) Zimbabwe dollar (2009) @@ -5599,7 +5604,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimool liitri kohta {0} millimooli liitri kohta - + + osa + {0} osa + {0} osa + + osa miljoni kohta {0} osa miljoni kohta {0} osa miljoni kohta @@ -5623,6 +5633,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mool {0} mooli + + glükoosi + {0} glükoosi + {0} glükoosi + liitrid kilomeetri kohta {0} liiter kilomeetri kohta @@ -6121,6 +6136,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimeeter elavhõbedasammast {0} millimeetrit elavhõbedasammast + + elavhõbedasammast + {0} elavhõbedasammast + {0} elavhõbedasammast + naelad ruuttolli kohta {0} nael ruuttolli kohta @@ -6292,6 +6312,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} meetriline tass {0} meetrilist tassi + + vedelikuunts m + {0} vedelikuunts m + {0} vedelikuuntsi m + aakerjalad {0} aakerjalg @@ -6372,15 +6397,80 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} inglise kvart {0} inglise kvarti - + + steradiaan + {0} steradiaan + {0} steradiaani + + + katal + {0} katal + {0} katalit + + + kulon + {0} kulon + {0} kulonit + + + farad + {0} farad + {0} faradit + + + henri + {0} henri + {0} henrit + + + siimens + {0} siimens + {0} siimensit + + + kalorid [IT] + {0} kalor [IT] + {0} kalorit [IT] + + + bekrellid + {0} bekrell + {0} bekrelli + + + siivert + {0} siivert + {0} siivertit + + + greid + {0} grei + {0} greid + + + jõukilogramm + {0} jõukilogramm + {0} jõukilogrammi + + + tesla + {0} tesla + {0} teslat + + + veeber + {0} veeber + {0} veebrit + + + valgus + {0} valgus + {0} valgust + + miljardikosa - {0} miljardikosa - {0} miljardikosa - ööd - {0} öö - {0} ööd {0} öö kohta @@ -6452,7 +6542,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} üksus {0} üksust - + + osa + {0} osa + {0} osa + + osa/miljon @@ -6461,6 +6556,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mool + + Glc + {0} Glc + {0} Glc + l/km {0} l/km @@ -6691,6 +6791,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} hj {0} hj + + {0} Hg + {0} Hg + in Hg {0} in Hg @@ -6751,6 +6855,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ml {0} ml + + {0} fl oz m + {0} fl oz m + aakerjalg @@ -6820,7 +6928,65 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ingl kvart {0} ingl kvarti - + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + + valgus + {0} valgus + {0} valgust + + osakesed/miljard {0} miljardikosa {0} miljardikosa @@ -6844,9 +7010,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} aaker {0} aakrit + + osa + {0} osa + {0} osa + mol + + Glc + {0} l/100km {0} l/100km @@ -6927,6 +7101,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ liiter + + {0} fl oz m + {0} fl oz m + {0} gal Im {0} gal Im @@ -6951,11 +7129,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt Imp. {0} qt Imp. - - ööd - {0} öö - {0} ööd - {0}/öö + + cal-IT + + + valgus + {0} valg. + {0} valg. {0} E diff --git a/make/data/cldr/common/main/eu.xml b/make/data/cldr/common/main/eu.xml index e44c764a817..5230ca91424 100644 --- a/make/data/cldr/common/main/eu.xml +++ b/make/data/cldr/common/main/eu.xml @@ -44,6 +44,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ aimara azerbaijanera baxkirera + balutxera baliera basaa bielorrusiera @@ -230,6 +231,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafiera koloniera kurduera + kurduera + kurmanjia kumykera komiera kornubiera @@ -747,6 +750,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Txina Kolonbia Clipperton uhartea + Sark Costa Rica Kuba Cabo Verde @@ -1096,35 +1100,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zenbakizko ordena Ordenaren sendotasuna Moneta + Emojien aurkezpena Ordu-zikloa (12 vs 24) Lerro-jauziaren estiloa + Hitz barruko lerro-jauziak Neurketa-sistema Zenbakiak + Laburtzapenen ondorengo lerro-jauzia Ordu-zona Eskualdeko ezarpenen aldaera Erabilera pribatua Egutegi budista + Budista Txinatar egutegia + Txinatarra Egutegi koptoa + Koptoa Dangi egutegia + Dangia Egutegi etiopiarra + Etiopiarra Amete Alem egutegi etiopiarra + Amete Alem etiopiarra Egutegi gregoriarra + Gregoriarra Hebrear egutegia + Hebrearra Indiar egutegia Egutegi islamiarra + Islamiarra Egutegi islamiarra (taula-formakoa, garai zibilekoa) + Islamiarra (taula-formakoa, garai zibilekoa) Islamiar egutegia (Saudi Arabia, ikuspegiak) Islamiar egutegia (taula-formakoa, gai astronomikokoa) Egutegi islamiarra (Umm al-Qura) + Islamiarra (Umm al-Qura) ISO-8601 egutegia Japoniar egutegia + Japoniarra Egutegi persiarra + Persiarra Minguo egutegia + Minguoa Kontabilitateko moneta-formatua + Kontabilitatea Moneta-formatu estandarra + Estandarra Ordenatu ikurrak Ordenatu ikurrei ez ikusi eginda Ordenatu azentuak modu normalean @@ -1134,19 +1157,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordenatu maiuskulak lehenik Ordenatu maiuskulak eta minuskulak bereizi gabe Ordenatu maiuskulak eta minuskulak bereizita - Txinera tradizionalaren alfabetoa-Big5 Aurreko hurrenkera, bateragarria izateko Hurrenkera alfabetikoa Unicode hurrenkera lehenetsia + Unicode lehenetsia Emojien hurrenkera Europako ordenatzeko arauak - Txinera sinplifikatuaren alfabetoa -GB2312 Telefonoen zerrenda Ordenatzeko irizpide fonetikoa Pinyin hurrenkera Bilaketa orokorra + Bilaketa Bilatu hangularen lehen kontsonantearen arabera Ordenatzeko irizpide estandarra + Estandarra Tarteen araberako hurrenkera Tradizionala Radical trazuen hurrenkera @@ -1163,18 +1187,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zabalera osoko karaktere-bihurketa Zabalera erdiko karaktere-bihurketa Zenbakizko bihurketa + Lehenetsia + Emojia + Testua 12 orduko sistema (0–11) + 12 (0–11) 12 orduko sistema (1–12) + 12 (1–12) 24 orduko sistema (0–23) + 24 (0–23) 24 orduko sistema (1–24) + 24 (1–24) Lerro-jauziaren estilo malgua + Malgua Lerro-jauziaren estilo arrunta + Arrunta Lerro-jauziaren estilo zorrotza + Zorrotza + Hautsi denak + Mantendu denak + Arrunta + Mantendu esaldietan US BGN transliterazioa UN GEGN transliterazioa Sistema metrikoa + Metrikoa Neurketa-sistema inperiala + Erresuma Batua Neurketa-sistema anglosaxoia + AEB Ahom digituak Digitu arabiar-hindikoak Digitu arabiar-hindiko hedatuak @@ -1260,6 +1301,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Vai digituak Warang Citi digituak Wancho digituak + Aktibatuta + Desaktibatuta Sistema metrikoa @@ -1459,7 +1502,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - GGGGG y-MM-dd + G y-MM-dd @@ -1494,17 +1537,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h('r')('a')'k' B h:mm B h:mm:s + E B h E B h:mm E B h:mm:ss d, EEEE E h:mm a E h:mm:ss a G. 'aroko' y. 'urtea' + G. 'aroko' y-MM y-MM-dd (GGGGG) + G 'aroko' y-MM-dd, E G. 'aroko' y('e')'ko' MMMM G. 'aroko' y('e')'ko' MMMM d G. 'aroko' y('e')'ko' MMMM d, EEEE - h a h:mm a h:mm:ss a MM/dd @@ -1887,14 +1932,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h E B h:mm E B h:mm:ss E h:mm a E h:mm:ss a + G y/M + G y/M/d, E G y. 'urteko' MMM G y. 'urteko' MMM d('a') G y. 'urteko' MMM d('a'), E - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1949,10 +1996,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G y, MMM d('a'), E – MMM d('a'), E G y, MMM d('a'), E – G y, MMM d('a'), E - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1963,10 +2006,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -2522,11 +2561,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} (udako ordua) {0} aldeko ordu estandarra - - HST - HST - HDT - Honolulu @@ -2540,18 +2574,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Aingira - - Tirana - Erevan - - Tucumán - - - Córdoba - Viena @@ -2567,24 +2592,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - Eirunepé - - - Cuiabá - - - Santarém - - - Araguaína - - - São Paulo - - - Maceió - Saint John’s @@ -2600,9 +2607,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Duala - - Ürümqi - Habana @@ -2615,9 +2619,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Praga - - Büsingen - Djibuti @@ -2704,9 +2705,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bixkek - - Enderbury - Saint Kitts @@ -2746,9 +2744,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Monako - - Khovd - Ulan Bator @@ -2767,9 +2762,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maldivak - - Mazatlán - Mexiko Hiria @@ -2839,9 +2831,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riad - - Mahé - Khartum @@ -2928,9 +2917,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Afrikako mendebaldeko ordua - Afrikako mendebaldeko ordu estandarra - Afrikako mendebaldeko udako ordua + Afrikako mendebaldeko ordua @@ -3366,6 +3353,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guyanako ordua + + + Hawaii-Aleutiar uharteetako ordu estandarra + + + HAST + + Hawaii-Aleutiar uharteetako ordua @@ -3978,13 +3973,162 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -4018,6 +4162,167 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ¤¤ + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤;(#,##0.00 ¤) + + + pezeta andorratarra @@ -5396,6 +5701,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dolar ekikaribear dolar ekikaribear + + florin karibetarra + florin karibetarra + florin karibetarra + igorpen-eskubide berezia igorpen-eskubide berezi @@ -5522,6 +5832,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dolar zimbabwetar (1980–2008) dolar zimbabwetar (1980–2008) + + urre zimbabwetarra + urre zimbabwetarra + urre zimbabwetarra + dolar zimbabwetarra (2009) dolar zimbabwetar (2009) @@ -5743,7 +6058,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ elementuak - + + zatiak + {0} zati + {0} zati + + zati milioi bakoitzeko {0} zati milioi bakoitzeko {0} zati milioi bakoitzeko @@ -5761,6 +6081,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ molak + + glukosa-unitateak + {0} glukosa-unitate + {0} glukosa-unitate + litro kilometro bakoitzeko {0} litro kilometro bakoitzeko @@ -6228,6 +6553,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} merkurio-milimetro {0} merkurio-milimetro + + merkurio-unitateak + {0} merkurio-unitate + {0} merkurio-unitate + libra hazbete karratuko {0} libra hazbete karratuko @@ -6381,6 +6711,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ katilu metrikoak + + likido-ontza metrikoak + {0} likido-ontza metriko + {0} likido-ontza metriko + {0} bushel {0} bushel @@ -6426,20 +6761,78 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} laurden inperial {0} laurden inperial - - argia - {0} argi - {0} argi + + estereorradianak + {0} estereorradian + {0} estereorradian - + + katalak + {0} katal + {0} katal + + + coulombak + {0} coulomb + {0} coulomb + + + faradak + {0} farad + {0} farad + + + henryak + {0} henry + {0} henry + + + siemensak + {0} siemens + {0} siemens + + + kaloriak [IT] + {0} kaloria [IT] + {0} kaloria [IT] + + + becquerelak + {0} becquerel + {0} becquerel + + + sievertak + {0} sievert + {0} sievert + + + grayak + {0} gray + {0} gray + + + kilopondak + {0} kilopond + {0} kilopond + + + teslak + {0} tesla + {0} tesla + + + weberrak + {0} weber + {0} weber + + zati mila milioiko {0} zati mila milioiko {0} zati mila milioiko gauak - {0} gau - {0} gau {0} gau bakoitzeko @@ -6497,7 +6890,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} elementu {0} elementu - + + zati + {0} zati + {0} zati + + zati/milioi @@ -6515,6 +6913,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mola + + glukosa-unitate + {0} glukosa-unitate + {0} glukosa-unitate + l/km {0} l/km @@ -6727,6 +7130,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ W + + merkurio-unitate + {0} merkurio-unitate + {0} merkurio-unitate + mb {0} mb @@ -6811,6 +7219,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} katilukada metriko {0} katilukada metriko + + likido-ontza metriko + {0} likido-ontza metriko + {0} likido-ontza metriko + akre-oin {0} akre-oin @@ -6897,12 +7310,75 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ pinch-a + + estereorradian + {0} sr + {0} sr + + + katal + {0} katal + {0} katal + + + coulomb + {0} coulomb + {0} coulomb + + + farad + {0} farad + {0} farad + + + henry + {0} henry + {0} henry + + + siemens + {0} siemens + {0} siemens + + + kaloria [IT] + {0} kaloria [IT] + {0} kaloria [IT] + + + becquerel + {0} becquerel + {0} becquerel + + + sievert + {0} sievert + {0} sievert + + + gray + {0} gray + {0} gray + + + kilopond + {0} kilopond + {0} kilopond + + + tesla + {0} tesla + {0} tesla + + + weber + argia {0} argi {0} argi - + zati / mila milioi {0} zati / m. m. {0} zati / m. m. @@ -6937,6 +7413,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmol/l + + zati + {0} zati + {0} zati + + + glukosa-unitate + {0} Glc + {0} Glc + {0} m/g brit. {0} m/g brit. @@ -7021,6 +7507,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} M☉ {0} M☉ + + merkurio-unitate + {0} Hg unitate + {0} Hg unitate + {0} atm {0} atm @@ -7055,6 +7546,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mc {0}mc + + likido-ontza metriko + {0}ac ft {0}ac ft @@ -7091,21 +7585,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}dsp-Imp {0}dsp-Imp + + estereorradian + {0} sr + {0} sr + + + katal + {0} kat + {0} kat + + + coulomb + {0} C + {0} C + + + farad + {0} F + {0} F + + + henry + {0} H + {0} H + + + siemens + {0} S + {0} S + + + kaloria [IT] + {0} cal [IT] + {0} cal [IT] + + + becquerel + {0} Bq + {0} Bq + + + sievert + {0} Sv + {0} Sv + + + gray + {0} Gy + {0} Gy + + + kilopond + {0} kgf + {0} kgf + + + tesla + {0} T + {0} T + + + weber + - argia {0} a. {0} a. - + zati / m. m. {0} zati / m. m. {0} zati / m. m. - gau {0} g. {0} g. - {0}/gau diff --git a/make/data/cldr/common/main/ewo.xml b/make/data/cldr/common/main/ewo.xml index 1d3f17dc49e..086685603ed 100644 --- a/make/data/cldr/common/main/ewo.xml +++ b/make/data/cldr/common/main/ewo.xml @@ -575,6 +575,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/fa.xml b/make/data/cldr/common/main/fa.xml index 9fda3578343..db32ab50b4e 100644 --- a/make/data/cldr/common/main/fa.xml +++ b/make/data/cldr/common/main/fa.xml @@ -297,6 +297,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ بافیایی کولش کردی + کردی + کرمانجی کومیکی کوتنی کومیایی @@ -822,6 +824,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ چین کلمبیا جزایر کلیپرتون + سارک کاستاریکا کوبا کیپ‌ورد @@ -1079,35 +1082,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ مرتب‌سازی عددی قدرت مرتب‌سازی واحد پول + نمایش اموجی دور ساعت (۱۲ در مقابل ۲۴) شیوهٔ سطرشکنی + شکست خط داخل کلمات دستگاه اندازه‌گیری اعداد + شکست جمله پس از مخفف منطقهٔ زمانی متغیر محلی استفادهٔ خصوصی تقویم بودایی + بودایی تقویم چینی + چینی تقویم قبطی + قبطی تقویم دانگی + دانگی تقویم اتیوپیایی + اتیوپیایی تقویم اتیوپیایی عامت عالم + عامت عالم اتیوپیایی تقویم میلادی + میلادی تقویم عبری + عبری تقویم ملی هند تقویم هجری قمری + هجری تقویم هجری قمری جدولی مدنی + هجری (جدولی، دوران مدنی) قویم هجری قمری هلالی عربستان سعودی تقویم هجری قمری جدولی نجومی + هجری (جدولی، دوران نجومی) تقویم هجری قمری ام‌القری + هجری (ام‌القری) تقویم ایزو ۸۶۰۱ تقویم ژاپنی + ژاپنی تقویم هجری شمسی + ایرانی تقویم جمهوری چین (تایوان) + جمهوری چین قالب حسابداری واحد پول + حسابداری قالب استاندارد واحد پول + استاندارد مرتب‌سازی نمادها مرتب‌سازی با نادیده گرفتن نمادها مرتب‌سازی آکسان‌ها به صورت معمولی @@ -1117,19 +1140,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ مرتب‌سازی بر اساس حرف بزرگ در ابتدا مرتب‌سازی بدون توجه به کوچک و بزرگی حروف مرتب‌سازی با حساسیت به اندازه حروف - ترتیب چینی سنتی - Big5 ترتیب پیشین، برای سازگاری ترتیب فرهنگ لغت ترتیب پیش‌فرض یونی‌کد + یونی‌کد پیش‌فرض ترتیب ایموجی قوانین ترتیب اروپایی - ترتیب چینی ساده‌شده - GB2312 ترتیب دفتر تلفن مرتب کردن بر اساس آوایی ترتیب پین‌یین جستجوی عمومی + جستجو جستجو با صامت اول هانگول ترتیب استاندارد + استاندارد ترتیب حرکتی ترتیب سنتی ترتیب رادیکالی-حرکتی @@ -1146,18 +1170,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ تمام‌عرض نیم‌عرض سیستم اعداد + پیش‌فرض + اموجی + پیامک سیستم ۱۲ ساعته (۰ تا ۱۱) + ۱۲ ساعته (۰ تا ۱۱) سیستم ۱۲ ساعته (۱ تا ۱۲) + ۱۲ ساعته (۱ تا ۱۲) سیستم ۲۴ ساعته (۰ تا ۲۳) + ۲۴ ساعته (۰ تا ۲۳) سیستم ۲۴ ساعته (۱ تا ۲۴) + ۲۴ ساعته (۱ تا ۲۴) شیوهٔ سطرشکنی سهل‌گیرانه + سهل‌گیرانه شیوهٔ سطرشکنی عادی + عادی شیوهٔ سطرشکنی سخت‌گیرانه + سخت‌گیرانه + شکست همه + حفظ همه + عادی + حفظ در عبارات ترانویسی انجمن نام‌های جغرافیایی ایالات متحده ترانویسی گروه نام‌های جغرافیایی سازمان ملل دستگاه متریک + متریک سیستم اندازه‌گیری انگلیسی + انگلیسی سیستم اندازه‌گیری امریکایی + امریکایی ارقام عربی ارقام فارسی اعداد ارمنی @@ -1209,6 +1250,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ارقام تبتی سیستم اعداد سنتی ارقام وایی + خاموش + روشن متریک @@ -1231,7 +1274,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [ـ\u200C\u200D\u200E\u200F َ ِ ُ ْ ٖ ٰ إ ك ىي] [آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی] [\u200E , ٫ ٬ . % ٪ ‰ ؉ + − 0۰ 1۱ 2۲ 3۳ 4۴ 5۵ 6۶ 7۷ 8۸ 9۹] + [{<LRM>} ٤ ٥ ٦] [\- ‐‑ ، ٫ ٬ ؛ \: ! ؟ . … ‹ › « » ( ) \[ \] * / \\] + [_ — @ / #] + [\- ‐‑ . /] ؟ [,,﹐︐ ، ٫ 、﹑、︑] @@ -1297,20 +1343,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - قبل از حلول مسیح - بعد از حلول مسیح - - - قبل از مسیح - پس از مسیح - - - ق.م. - ب.م. - - @@ -1383,7 +1415,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E H:mm E H:mm:ss y G + y/M G M/d/y GGGGG + E، y/M/d G MMM y G d MMM y G E d MMM y G @@ -1391,6 +1425,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm (Z) H:mm H:mm:ss + سHH v M/d E M/d d LLL @@ -1821,7 +1856,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E H:mm E H:mm:ss y G + y/M G y/M/d GGGGG + E، y/M/d G MMM y G d MMM y G E d MMM y G @@ -1831,6 +1868,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm:ss H:mm:ss v H:mm v + سHH v M/d E M/d d LLL @@ -1982,7 +2020,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E y/M/d تا E y/M/d - LLL تا MMM y + MMM تا MMM y MMM y تا MMM y @@ -1996,7 +2034,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d MMM y تا E d MMM y - LLLL تا MMMM y + MMMM تا MMMM y MMMM y تا MMMM y @@ -2164,6 +2202,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + y/M G + E، y/M/d G HH:mm (Z) mm:ss y/M G @@ -2448,26 +2488,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} یکشنبه قبل - - - {0} یکشنبه بعد - {0} یکشنبه بعد - - - {0} یکشنبه قبل - {0} یکشنبه قبل - - - - - {0} یکشنبه بعد - {0} یکشنبه بعد - - - {0} یکشنبه قبل - {0} یکشنبه قبل - - دوشنبهٔ گذشته این دوشنبه @@ -2481,26 +2501,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} دوشنبه قبل - - - {0} دوشنبه بعد - {0} دوشنبه بعد - - - {0} دوشنبه قبل - {0} دوشنبه قبل - - - - - {0} دوشنبه بعد - {0} دوشنبه بعد - - - {0} دوشنبه قبل - {0} دوشنبه قبل - - سه‌شنبهٔ گذشته این سه‌شنبه @@ -2514,26 +2514,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} سه‌شنبه قبل - - - {0} سه‌شنبه بعد - {0} سه‌شنبه بعد - - - {0} سه‌شنبه قبل - {0} سه‌شنبه قبل - - - - - {0} سه‌شنبه بعد - {0} سه‌شنبه بعد - - - {0} سه‌شنبه قبل - {0} سه‌شنبه قبل - - چهارشنبهٔ گذشته این چهارشنبه @@ -2547,26 +2527,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} چهارشنبه قبل - - - {0} چهارشنبه بعد - {0} چهارشنبه بعد - - - {0} چهارشنبه قبل - {0} چهارشنبه قبل - - - - - {0} چهارشنبه بعد - {0} چهارشنبه بعد - - - {0} چهارشنبه قبل - {0} چهارشنبه قبل - - پنجشنبهٔ گذشته این پنجشنبه @@ -2580,26 +2540,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} پنجشنبه قبل - - - {0} پنجشنبه بعد - {0} پنجشنبه بعد - - - {0} پنجشنبه قبل - {0} پنجشنبه قبل - - - - - {0} پنجشنبه بعد - {0} پنجشنبه بعد - - - {0} پنجشنبه قبل - {0} پنجشنبه قبل - - جمعهٔ گذشته این جمعه @@ -2613,26 +2553,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} جمعه قبل - - - {0} جمعه بعد - {0} جمعه بعد - - - {0} جمعه قبل - {0} جمعه قبل - - - - - {0} جمعه بعد - {0} جمعه بعد - - - {0} جمعه قبل - {0} جمعه قبل - - شنبهٔ گذشته این شنبه @@ -2646,26 +2566,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} شنبه قبل - - - {0} شنبه بعد - {0} شنبه بعد - - - {0} شنبه قبل - {0} شنبه قبل - - - - - {0} شنبه بعد - {0} شنبه بعد - - - {0} شنبه قبل - {0} شنبه قبل - - ق.ظ/ب.ظ @@ -2713,6 +2613,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ‎+HH:mm;‎−HH:mm {0} گرینویچ گرینویچ + گرینویچ+؟ وقت {0} وقت تابستانی {0} وقت عادی {0} @@ -3069,6 +2970,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ایستر + + کویهایکیو + پونتا آرناس @@ -3334,9 +3238,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ پنوم‌پن - اندربری - - کانتون @@ -4006,9 +3907,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - وقت غرب افریقا - وقت عادی غرب افریقا - وقت تابستانی غرب افریقا + وقت غرب افریقا @@ -4377,6 +4276,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ وقت گویان + + + وقت عادی هاوایی‐الوشن + + وقت هاوایی‐الوشن @@ -4827,6 +4731,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ وقت چوئوک + + + وقت ترکیه + وقت عادی ترکیه + وقت تابستانی ترکیه + + وقت ترکمنستان @@ -4998,55 +4909,66 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ‎¤#,##0.00 + ‎¤ #,##0.00 ‎#,##0.00 + + ‎¤ #,##0.00 + ‎¤#,##0.00 + ‎¤ #,##0.00 ‎#,##0.00 + + ‎¤ #,##0.00;‎(¤ #,##0.00) + ‎#,##0.00;‎(#,##0.00) + ‎¤ #,##0.00 - ‎#,##0.00 + ‎¤ #,##0.00 + ‎#,##0.00 ‎¤ #,##0.00;‎(¤ #,##0.00) - #,##0.00;(#,##0.00) + ‎¤ #,##0.00;‎(¤ #,##0.00) + ‎#,##0.00;‎(#,##0.00) - 0 هزار ¤ - 0 هزار ¤ - 00 هزار ¤ - 00 هزار ¤ - 000 هزار ¤ - 000 هزار ¤ - 0 میلیون ¤ - 0 میلیون ¤ - 00 میلیون ¤ - 00 میلیون ¤ - 000 میلیون ¤ - 000 میلیون ¤ - 0 میلیارد ¤ - 0 میلیارد ¤ - 00 میلیارد ¤ - 00 میلیارد ¤ - 000 میلیارد ¤ - 000 میلیارد ¤ - 0 هزارمیلیارد ¤ - 0 هزارمیلیارد ¤ - 00 هزارمیلیارد ¤ - 00 هزارمیلیارد ¤ - 000 هزارمیلیارد ¤ - 000 هزارمیلیارد ¤ + ‎¤ 0 هزار + ‎¤ 0 هزار + ‎¤ 00 هزار + ‎¤ 00 هزار + ‎¤ 000 هزار + ‎¤ 000 هزار + ‎¤ 0 میلیون + ‎¤ 0 میلیون + ‎¤ 00 میلیون + ‎¤ 00 میلیون + ‎¤ 000 میلیون + ‎¤ 000 میلیون + ‎¤ 0 میلیارد + ‎¤ 0 میلیارد + ‎¤ 00 میلیارد + ‎¤ 00 میلیارد + ‎¤ 000 میلیارد + ‎¤ 000 میلیارد + ‎¤ 0 تریلیون + ‎¤ 0 تریلیون + ‎¤ 00 تریلیون + ‎¤ 00 تریلیون + ‎¤ 000 تریلیون + ‎¤ 000 تریلیون @@ -5125,8 +5047,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ لو بلغارستان - لو بلغارستان - لو بلغارستان دینار بحرین @@ -5323,8 +5243,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ شِکِل جدید اسرائیل - شِکِل جدید اسرائیل - شِکِل جدید اسرائیل روپیهٔ هند @@ -5546,8 +5464,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ زلوتی لهستان - زلوتی لهستان - زلوتی لهستان اسکودوی پرتغال @@ -5737,6 +5653,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ دلار شرق کارائیب $EC + + گیلدر کارائیب + گیلدر کارائیب + گیلدر کارائیب + فرانک طلای فرانسه @@ -5783,6 +5704,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ دلار زیمبابوه (۱۹۸۰ تا ۲۰۰۸) + + طلای زیمبابوه + طلای زیمبابوه + طلای زیمبابوه + دلار زیمبابوه (۲۰۰۹) @@ -5845,10 +5771,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} کیلومتر مربع {0} در کیلومتر مربع - - {0} هکتار - {0} هکتار - {0} متر مربع {0} متر مربع @@ -5875,7 +5797,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} میلی‌مول در لیتر {0} میلی‌مول در لیتر - + + پارت + {0} پارت + {0} پارت + + بخش در میلیون {0} بخش در میلیون {0} بخش در میلیون @@ -5892,6 +5819,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ده‌هزارم {0} ده‌هزارم + + گلوکز + {0} گلوکز + {0} گلوکز + لیتر در کیلومتر {0} لیتر در کیلومتر @@ -6088,9 +6020,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ میلی‌گرم - - میکروگرم - {0} جرم زمین {0} جرم زمین @@ -6108,6 +6037,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} میلی‌متر جیوه {0} میلی‌متر جیوه + + جیوه + {0} جیوه + {0} جیوه + {0} پوند در اینچ مربع {0} پوند در اینچ مربع @@ -6197,6 +6131,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} سانتی‌لیتر {0} سانتی‌لیتر + + اونس مایع متریک + {0} اونس مایع متریک + {0} اونس مایع متریک + {0} در گالن امپریال @@ -6231,15 +6170,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} درم {0} درم - - بخش در بیلیون + + استرادیان + {0} استرادیان + {0} استرادیان + + + کاتال + {0} کاتال + {0} کاتال + + + کولن + {0} کولن + {0} کولن + + + فاراد + {0} فاراد + {0} فاراد + + + هنری + {0} هنری + {0} هنری + + + زیمنس + {0} زیمنس + {0} زیمنس + + + کالری [IT] + {0} کالری [IT] + {0} کالری [IT] + + + بکرل + {0} بکرل + {0} بکرل + + + سیورت + {0} سیورت + {0} سیورت + + + گری + {0} گری + {0} گری + + + کیلوگرم-نیرو + {0} کیلوگرم-نیرو + {0} کیلوگرم-نیرو + + + تسلا + {0} تسلا + {0} تسلا + + + وبر + {0} وبر + {0} وبر + + + نور + {0} نوری + {0} نوری + + {0} بخش در بیلیون {0} بخش در بیلیون - شب - {0} شب - {0} شب {0} در شب @@ -6451,7 +6456,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} مورد {0} مورد - + + پارت + {0} پارت + {0} پارت + + بخش/میلیون @@ -6470,6 +6480,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} مول {0} مول + + گلوکز + {0} گلوکز + {0} گلوکز + لیتر/کیلومتر {0} ل./ک.م. @@ -6825,6 +6840,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} لوکس {0} لوکس + + شمع + {0} شمع + {0} شمع + + + لومن + {0} لومن + {0} لومن + تابندگی خورشید {0} ☉L @@ -6941,6 +6966,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} م‌م جیوه {0} م‌م جیوه + + جیوه + {0} جیوه + {0} جیوه + پوند در اینچ مربع {0}‎ psi @@ -7103,6 +7133,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} پیمانهٔ متریک {0} پیمانهٔ متریک + + {0} fl oz m. + {0} fl oz m. + جریب فوت {0} جریب فوت @@ -7200,7 +7234,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} کوارت انگلیسی {0} کوارت انگلیسی - + + استرادیان + {0} استرادیان + {0} استرادیان + + + کاتال + {0} کاتال + {0} کاتال + + + کولن + {0} کولن + {0} کولن + + + فاراد + {0} فاراد + {0} فاراد + + + هنری + {0} هنری + {0} هنری + + + زیمنس + {0} زیمنس + {0} زیمنس + + + کالری-IT + {0} کالری-IT + {0} کالری-IT + + + بکرل + {0} بکرل + {0} بکرل + + + سیورت + {0} سیورت + {0} سیورت + + + گری + {0} گری + {0} گری + + + کیلوگرم-نیرو + {0} کیلوگرم-نیرو + {0} کیلوگرم-نیرو + + + تسلا + {0} تسلا + {0} تسلا + + + وبر + {0} وبر + {0} وبر + + + نور + {0} نوری + {0} نوری + + بخش در بیلیون @@ -7329,6 +7433,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ m/s² + + {0}rad + {0}rad + {0}° {0}° @@ -7383,17 +7491,40 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}دونوم {0}دونوم + + {0}kt + {0}kt + + + {0}mmol/L + {0}mmol/L + {0}مورد {0}مورد - + + پارت + {0} پارت + {0}پارت + + {0}ppm {0}ppm ٪ + + گلوکز + + + L/۱۰۰km + + + {0}mpg + {0}mpg + {0}m/gUK {0}m/gUK @@ -7513,9 +7644,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}Btu {0}Btu - - {0}ک.وا.س/۱۰۰ ک.م - {0} ک.وا.س/۱۰۰ ک.م + + {0}lbf + {0}lbf + + + {0}N + {0}N GHz @@ -7660,6 +7795,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}R☉ {0}R☉ + + {0}lx + {0}lx + + + شمع + {0}cd + {0}cd + + + لومن + {0}lm + {0}lm + {0}t {0}t @@ -7751,6 +7900,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}hp {0}hp + + جیوه + {0}inHg {0}inHg @@ -7771,6 +7923,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}hPa {0}hPa + + {0}MPa + {0}MPa + km/hr @@ -7803,6 +7959,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}K {0}K + + {0}lbf⋅ft + {0}lbf⋅ft + + + N⋅m + {0}N⋅m + {0}N⋅m + {0}km³ {0}km³ @@ -7871,10 +8036,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}fl oz Im {0}fl oz Im - - {0} ق.غ.خ - {0} ق.غ.خ - ق.چ.خ {0}ق.چ. @@ -7898,14 +8059,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt-Imp. {0}qt-Imp. - - بخش در بیلیون + + کاتال - - شب - {0} شب - {0} شب - {0}/شب + + کولن + + + هنری + + + کالری-IT + + + گری + + + تسلا + + + وبر + + + نور + {0}نوری + {0}نوری + + + {0}ppb + {0}ppb diff --git a/make/data/cldr/common/main/fa_AF.xml b/make/data/cldr/common/main/fa_AF.xml index 9c1de9f280d..34ec9d9f8e3 100644 --- a/make/data/cldr/common/main/fa_AF.xml +++ b/make/data/cldr/common/main/fa_AF.xml @@ -341,6 +341,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 + + + ¤ #,##0.00;‎(¤ #,##0.00) + #,##0.00;‎(#,##0.00) @@ -348,9 +354,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00;‎(¤ #,##0.00) + ¤ #,##0.00;‎(¤ #,##0.00) + #,##0.00;‎(#,##0.00) diff --git a/make/data/cldr/common/main/ff.xml b/make/data/cldr/common/main/ff.xml index b512e61f302..08465b83c01 100644 --- a/make/data/cldr/common/main/ff.xml +++ b/make/data/cldr/common/main/ff.xml @@ -579,6 +579,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/ff_Adlm.xml b/make/data/cldr/common/main/ff_Adlm.xml index 17ac848f28c..d136fea6e2c 100644 --- a/make/data/cldr/common/main/ff_Adlm.xml +++ b/make/data/cldr/common/main/ff_Adlm.xml @@ -1416,11 +1416,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 𞤢𞤣𞤮 𞤁𞤢𞤴𞤢𞤳𞤭𞤤𞤼𞤭𞤴𞤢𞥄𞤲 𞤩𞤢𞥄𞤱𞤮 𞤁𞤢𞤴𞤢𞤳𞤭𞤤𞤼𞤭𞤴𞤢𞥄𞤲 - 𞤀𞤁 𞤇𞤁 @@ -1565,13 +1563,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - - 𞤘𞤋𞤈𞥐 - - - @@ -3267,13 +3258,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 {0} 𞤐𞤶𞤢𞤥𞤲𞤣𞤭 𞤕𞤫𞥅𞤯𞤵 {0} 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤢𞤱𞤪𞤵𞤲𞥋𞤣𞤫 - - - 𞤑𞤖𞤖 - 𞤑𞤖𞤖 - 𞤑𞤕𞤖 - - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤭𞤤𞥆𞤢𞤲𞤳𞤮𞥅𞤪𞤫 𞤊𞤮𞤲𞤣𞤢𞥄𞤲𞤣𞤫 @@ -3892,9 +3876,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤆𞤢𞤲𞤮𞤥-𞤆𞤫𞤲 - 𞤉𞤲𞤣𞤫𞤪𞤦𞤵𞥅𞤪𞤭 - - 𞤑𞤢𞤲𞤼𞤮𞤲 @@ -4568,9 +4549,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤀𞤬𞤪𞤭𞤳𞤢𞥄 - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤢𞤱𞤪𞤵𞤲𞥋𞤣𞤫 𞤖𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤀𞤬𞤪𞤭𞤳𞤢𞥄 - 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤕𞤫𞥅𞤯𞤵 𞤖𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤀𞤬𞤪𞤭𞤳𞤢𞥄 + 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤀𞤬𞤪𞤭𞤳𞤢𞥄 @@ -4958,6 +4937,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤘𞤢𞤴𞤢𞤲𞤢𞥄 + + + 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤢𞤱𞤪𞤵𞤲𞥋𞤣𞤫 𞤖𞤢𞤱𞤢𞥄𞤴𞤭𞥅-𞤀𞤤𞤮𞤧𞤭𞤴𞤢𞤲 + + 𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤢𞤱𞤢𞥄𞤴𞤭𞥅-𞤀𞤤𞤮𞤧𞤭𞤴𞤢𞤲 @@ -5619,30 +5603,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 0𞤓¤ - 0𞤓¤ - 00𞤓¤ - 00𞤓¤ - 000𞤓¤ - 000𞤓¤ - 0𞤁¤ - 0𞤁¤ - 00𞤁¤ - 00𞤁¤ - 000𞤁¤ - 000𞤁¤ - 0𞤁𞤶¤ - 0𞤁𞤶¤ - 00𞤁𞤶¤ - 00𞤁𞤶¤ - 000𞤁𞤶¤ - 000𞤁𞤶¤ - 0𞤚¤ - 0𞤚¤ - 00𞤚¤ - 00𞤚¤ - 000𞤚¤ - 000𞤚¤ + ¤ 0𞤓 + ¤ 0𞤓 + ¤ 00𞤓 + ¤ 00𞤓 + ¤ 000𞤓 + ¤ 000𞤓 + ¤ 0𞤁 + ¤ 0𞤁 + ¤ 00𞤁 + ¤ 00𞤁 + ¤ 000𞤁 + ¤ 000𞤁 + ¤ 0𞤁𞤶 + ¤ 0𞤁𞤶 + ¤ 00𞤁𞤶 + ¤ 00𞤁𞤶 + ¤ 000𞤁𞤶 + ¤ 000𞤁𞤶 + ¤ 0𞤚 + ¤ 0𞤚 + ¤ 00𞤚 + ¤ 00𞤚 + ¤ 000𞤚 + ¤ 000𞤚 {0} {1} @@ -6912,7 +6896,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 𞤨𞤭𞤪𞤰𞤵 {0} 𞤨𞤭𞤪𞤰𞤭 - + 𞤺𞤫𞤩𞤫 𞤳𞤢𞤤𞤢 𞤣𞤵𞤦𞤵𞥅𞤪𞤫 {0} 𞤺𞤫𞤩𞤢𞤤 𞤳𞤢𞤤𞤢 𞤣𞤵𞤦𞤵𞥅𞤪𞤫 {0} 𞤺𞤫𞤩𞤫 𞤳𞤢𞤤𞤢 𞤣𞤵𞤦𞤵𞥅𞤪𞤫 @@ -7920,7 +7904,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 𞤨𞤭𞤪 {0} 𞤨𞤭𞤪 - + 𞤺𞤫𞤩𞤫/𞤣𞤵𞤦𞤵𞥅𞤪𞤫 {0} 𞤺𞤳𞤣 {0} 𞤺𞤳𞤣 @@ -8846,7 +8830,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}𞤨𞤭𞤪 {0}𞤨𞤭𞤪 - + 𞤺𞤳𞤣 {0}𞤺𞤳𞤣 {0}𞤺𞤳𞤣 diff --git a/make/data/cldr/common/main/fi.xml b/make/data/cldr/common/main/fi.xml index 3d8176baf9e..877d26d9054 100644 --- a/make/data/cldr/common/main/fi.xml +++ b/make/data/cldr/common/main/fi.xml @@ -301,6 +301,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tyap makonde kapverdenkreoli + qʼeqchiʼ kenyang norsunluurannikonkoro kongo @@ -336,6 +337,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurdi + kurdi + kurmandži kumykki kutenai komi @@ -396,6 +399,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ makua-meetto meta’ marshall + mócheno maori micmac minangkabau @@ -574,6 +578,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sukuma susu sumeri + sunwar ruotsi swahili kongonswahili @@ -698,6 +703,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -729,6 +735,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -740,6 +747,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -773,6 +781,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -816,6 +825,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -980,7 +990,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiina Kolumbia Clippertoninsaari - Sark + Sark Costa Rica Kuuba Kap Verde @@ -1336,35 +1346,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ numeroiden lajittelu lajittelun taso valuutta + emojin esitys tuntijärjestelmä rivinvaihtotyyli + rivi vaihtuu sanojen sisällä mittajärjestelmä numerot + lause vaihtuu lyhenteen jälkeen aikavyöhyke maavalinnan muunnelma yksityiskäyttö buddhalainen kalenteri + buddhalainen kiinalainen kalenteri + kiinalainen koptilainen kalenteri + koptilainen dangilainen kalenteri + dangilainen etiopialainen kalenteri + etiopialainen etiopialainen amete alem -kalenteri + etiopialainen amete alem gregoriaaninen kalenteri + gregoriaaninen juutalainen kalenteri + juutalainen intialainen kalenteri hidžra-kalenteri + hidžra-kalenteri hidžra-siviilikalenteri (tabulaarinen, perjantaiepookki) + hidžra-kalenteri (taulukkomuoto, perjantaiepookki) hidžra-kalenteri (saudiarabialainen) hidžra-matemaattinen kalenteri (tabulaarinen, torstaiepookki) hidžra-kalenteri, Umm al-Qura + Umm al Qura -kalenteri ISO 8601 -kalenteri japanilainen kalenteri + japanilainen persialainen kalenteri + persialainen Kiinan tasavallan kalenteri + Minguo-kalenteri valuuttojen laskentatoimen esitysmuoto + laskentatoimi valuuttojen vakioesitysmuoto + vakio symbolit huomioiva lajittelu symbolit ohittava lajittelu painomerkkien normaali lajittelu @@ -1374,23 +1403,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ isot kirjaimet edeltävät pieniä isojen ja pienten kirjainten lajittelu yhdessä isojen ja pienten kirjainten lajittelu erikseen - perinteinen kiinalainen järjestys Big5 aiempi lajittelujärjestys yhteensopivuutta varten + yhteensopivuus sanakirjajärjestys + sanakirja Unicoden oletusjärjestys + oletusarvoinen unicode emojien lajittelujärjestys yleiseurooppalainen lajittelujärjestys - yksinkertaistettu kiinalainen järjestys GB2312 puhelinluettelojärjestys + puhelinluettelo äänteellinen järjestys + äänteellinen pinyin-järjestys + pinyin-järjestelmä yleishakujärjestys + haku haku hangul-alkukonsonantin mukaan normaalijärjestys + normaali piirtojärjestys + piirto perinteinen järjestys + perinteinen radikaali- ja piirtojärjestys + radikaali piirto zhuyin-järjestys + zhuyin-järjestelmä lajittelu ilman normalisointia lajittelu Unicode-normalisoituna numero-numerolta lajittelu @@ -1403,18 +1442,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ideogrammin levyinen ideogrammin puolikkaan levyinen numeerinen muunnos + oletusarvoinen + emoji + teksti 12 tunnin järjestelmä (0–11) + 12 (0–11) 12 tunnin järjestelmä (1–12) + 12 (1–12) 24 tunnin järjestelmä (0–23) + 24 (0–23) 24 tunnin järjestelmä (1–24) + 24 (1–24) väljä rivinvaihto + väljä normaali rivinvaihto + normaali tarkka rivinvaihto + tarkka + erota kaikki + säilytä kaikki + normaali + säilytä lauseet BGN-latinaistus UNGEGN-latinaistus metrijärjestelmä + metrinen brittiläinen mittajärjestelmä + brittiläinen yhdysvaltalainen mittajärjestelmä + yhdysvaltalainen ahom-numerot arabialaiset numerot laajennetut arabialaiset numerot @@ -1500,6 +1556,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ vai-numerot varang kshiti -numerot wancholaiset numerot + pois + päällä metrinen @@ -1536,9 +1594,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1748,6 +1803,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1} 'klo' {0} + @@ -1756,6 +1814,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1} 'klo' {0} + @@ -1764,6 +1825,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1}, {0} + @@ -1772,6 +1836,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1} 'klo' {0} + h.mm B @@ -1784,16 +1851,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h.mm.ss a E HH.mm.ss y G + M.y G d.M.y G + E d.M.y G LLL y G d. MMM y G E d. MMM y G - h a H h.mm a H.mm h.mm.ss a H.mm.ss + HH 'h' v d.M. E d.M. d. MMM @@ -1879,10 +1948,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d. MMMM – E d. MMMM y G E d. MMMM y – E d. MMMM y G - - h a – h a - h–h a - H–H @@ -1904,10 +1969,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H.mm–H.mm v H.mm–H.mm v - - h a – h a v - h–h a v - H–H v @@ -2007,20 +2068,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - tammi - helmi - maalis - huhti - touko - kesä - heinä - elo - syys - loka - marras - joulu - T H @@ -2063,7 +2110,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ la - sunnuntai + sunnuntaina maanantaina tiistaina keskiviikkona @@ -2248,6 +2295,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1} 'klo' {0} + @@ -2256,6 +2306,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1} 'klo' {0} + @@ -2264,6 +2317,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1}, {0} + @@ -2272,6 +2328,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'klo' {0} + + {1}, {0} + h.mm B @@ -2284,13 +2343,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h.mm.ss a E H.mm.ss y G + M.y G M.d.y G + E d.M.y G LLL y G d.M.y G E d.M.y G d. MMMM y G E d. MMMM y G - h a H h.mm a H.mm @@ -2300,6 +2360,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H.mm.ss v h.mm a v H.mm v + H 'h' v d.M. E d.M. d.M. @@ -2364,7 +2425,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d.–d.M.y G d.M.y. G – d.M.y G - d.M–d.M.y G + d.M.–d.M.y G d.M.y–d.M.y G @@ -2390,10 +2451,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d. MMMM – E d. MMMM y G E d. MMMM y – E d. MMMM y G - - h a – h a - h–h a - H–H @@ -2415,10 +2472,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H.mm–H.mm v H.mm–H.mm v - - h a – h a v - h–h a v - H–H v @@ -3186,18 +3239,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tuntematon - - Tirana - Jerevan - - Tucumán - - - Córdoba - Wien @@ -3214,24 +3258,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - Eirunepé - - - Cuiabá - - - Santarém - - - Araguaína - - - São Paulo - - - Maceió - Kookossaaret @@ -3244,12 +3270,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Santiago de Chile - - Ürümqi - - - Bogotá - Havanna @@ -3265,9 +3285,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Praha - - Büsingen - Berliini @@ -3283,9 +3300,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kairo - - El Aaiún - Kanariansaaret @@ -3358,7 +3372,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Biškek - Enderbury + Abariringa Komorit @@ -3411,15 +3425,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Malediivit - - Mazatlán - - - Ciudad de México - - - Nouméa - Chathamsaaret @@ -3480,9 +3485,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riad - - Mahé - Khartum @@ -3495,15 +3497,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damaskos - - N’Djamena - Kerguelensaaret - - Lomé - Dušanbe @@ -3569,9 +3565,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Länsi-Afrikan aika - Länsi-Afrikan normaaliaika - Länsi-Afrikan kesäaika + Länsi-Afrikan aika @@ -3959,6 +3953,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guyanan aika + + + Havaijin-Aleuttien normaaliaika + + Havaijin-Aleuttien aika @@ -4409,6 +4408,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chuukin aika + + + Turkin aika + Turkin normaaliaika + Turkin kesäaika + + Turkmenistanin aika @@ -4574,7 +4580,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -6091,6 +6100,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ XCD XCD + + Karibian guldeni + Karibian guldeni + Karibian guldenia + erityisnosto-oikeus (SDR) erityisnosto-oikeus (SDR) @@ -6225,6 +6239,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabwen dollari (1980–2008) Zimbabwen dollaria (1980–2008) + + Zimbabwen kulta + Zimbabwen kulta + Zimbabwen kultaa + Zimbabwen dollari (2009) Zimbabwen dollari (2009) @@ -6583,7 +6602,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kohteeseen {0} kohdetta - + + osat + {0} osa + {0} osaa + + miljoonasosat {0} miljoonasosa {0} miljoonasosasta @@ -6647,6 +6671,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mooliin {0} moolia + + glukoosia + {0} glukoosia + {0} glukoosia + litrat / kilometri {0} litra / kilometri @@ -7711,6 +7740,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} elohopeamillimetriin {0} elohopeamillimetriä + + elohopeaa + {0} elohopeaa + {0} elohopeaa + paunat / neliötuuma {0} pauna / neliötuuma @@ -8081,6 +8115,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} teekuppiin {0} teekuppia + + nesteunssit + {0} nesteunssi + {0} nesteunssia + eekkerijalat {0} eekkerijalka @@ -8157,7 +8196,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} br. neljännesgallona {0} br. neljännesgallonaa - + + steradiaanit + {0} steradiaani + {0} steradiaania + + + katalit + {0} katal + {0} katalia + + + coulombit + {0} coulombi + {0} coulombia + + + faradit + {0} faradi + {0} faradia + + + henryt + {0} henry + {0} henryä + + + siemensit + {0} siemens + {0} siemensiä + + + kalorit [IT] + {0} kalori [IT] + {0} kaloria [IT] + + + becquerelit + {0} becquerel + {0} becquereliä + + + sievertit + {0} sievertti + {0} sieverttiä + + + grayt + {0} gray + {0} grayta + + + kilopondit + {0} kilopondi + {0} kilopondia + + + teslat + {0} tesla + {0} teslaa + + + weberit + {0} weber + {0} weberiä + + + valon nopeus + {0} valon nopeus + {0} valon nopeus + + miljardisosat {0} miljardisosa {0} miljardisosasta @@ -8171,7 +8280,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} miljardisosaa - yöt {0} yö {0} yöstä {0} yön @@ -8232,6 +8340,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kohde {0} kohde + + osa + {0} osa + {0} osa + {0} % {0} % @@ -8248,6 +8361,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mooli + + gluk + {0} gluk + {0} gluk + l/km {0} l/km @@ -8451,6 +8569,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + {0} Hg + {0} Hg + {0} °C {0} °C @@ -8502,6 +8624,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} tkp {0} tkp + + {0} fl oz m. + {0} fl oz m. + am. gal {0} am. gal @@ -8516,8 +8642,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kp - {0} kp - {0} kp + {0} kuppi + {0} kuppia fl oz @@ -8577,6 +8703,65 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt br. {0} qt br. + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + kp + {0} kp + {0} kp + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + + valon nopeus + {0} valon nopeus + {0} valon nopeus + yöt {0} yö @@ -8664,7 +8849,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kohde {0} kohdetta - + + osa + {0} osa + {0} osa + + {0}ppm {0}ppm @@ -8682,6 +8872,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mol {0}mol + + gluk + {0} gluk + {0} gluk + {0}l/km {0}l/km @@ -9310,11 +9505,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt br. {0}qt br. + + cal-IT + + + kp + {0} kp + {0} kp + + + valon nopeus + {0}valon nopeus + {0}valon nopeus + + + {0}ppb + {0}ppb + - yöt {0}yö {0}yöt - {0}/yö suunta diff --git a/make/data/cldr/common/main/fil.xml b/make/data/cldr/common/main/fil.xml index ffc6e42ace6..135e318c0f2 100644 --- a/make/data/cldr/common/main/fil.xml +++ b/make/data/cldr/common/main/fil.xml @@ -31,7 +31,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Obolo Angika Arabic - Modernong Karaniwang Arabic + Modern Standard Arabic Mapuche Arapaho Najdi Arabic @@ -45,6 +45,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Azerbaijani Azeri Bashkir + Baluchi Balinese Basaa Belarusian @@ -92,7 +93,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Carolina Algonquian Seselwa Creole French Czech - Latian na Cree + Swampy Cree Church Slavic Chuvash Welsh @@ -101,8 +102,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dargwa Taita German - Austrian German - Swiss High German Dogrib Zarma Dogri @@ -138,7 +137,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Faroese Fon French - Swiss na French Cajun French Hilagang Frisian Friulian @@ -229,12 +227,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bafia Colognian Kurdish + Kurdish + Kurmanji Kumyk Komi Cornish Kwakʼwala Kuvi - Kirghiz + Kyrgyz Latin Ladino Langi @@ -287,7 +287,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Malay Maltese Mundang - Maramihang Wika + Maramihang wika Creek Mirandese Burmese @@ -341,7 +341,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pashto Pushto Portuguese - Portuges ng Brasil European Portuguese Quechua Kʼicheʼ @@ -439,7 +438,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Udmurt Uyghur Uighur - Ukranian + Ukrainian Umbundu Hindi Kilalang Wika Urdu @@ -544,7 +543,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Mundo + mundo Africa Hilagang Amerika Timog Amerika @@ -629,6 +628,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Colombia Clipperton Island + Sark Costa Rica Cuba Cape Verde @@ -663,7 +663,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ France Gabon United Kingdom - U.K. + UK Grenada Georgia French Guiana @@ -874,35 +874,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Numeric na Pag-uuri-uri Lakas ng Pag-uuri-uri Pera + Presentation ng Emoji Siklo ng Oras (12 laban sa 24) - Istilo ng Putol ng Linya + CJK na Line Break + Mga Line Break sa Mga Salita Sistema ng Pagsukat Mga Numero + Sentence Break Pagkatapos ng Abbr. Time Zone Lokal na Variant Pribadong Paggamit Kalendaryo ng Buddhist + Buddhist Kalendaryong Chinese + Chinese Kalendaryong Coptic + Coptic Dangi na Kalendaryo + Dangi Kalendaryo ng Ethiopia + Ethiopic Kalendaryong Ethiopic Amete Alem + Ethiopic Amete Alem Gregorian na Kalendaryo + Gregorian Hebrew na Kalendaryo + Hebrew Pambansang Kalendaryong Indian - Kalendaryong Islam + Kalendaryong Hijiri + Hijri Kalendaryong Hijri (tabular, Civil epoch) + Hijri (tabular, civil epoch) Kalendaryong Islamiko (Saudi Arabia, sighting) Kalendaryong Islamiko (tabular, astronomikal na epoch) Kalendaryong Hijri (Umm al-Qura) - ISO-8601 na Kalendaryo + Hijri (Umm al-Qura) + Kalendaryong Gregorian (Unang Taon) Kalendaryong Japanese + Japanese Kalendaryong Persian + Persian Kalendaryong Minguo + Minguo Format ng Pera sa Accounting + Accounting Karaniwang Format ng Pera + Karaniwan Pag-uri-uriin ang Mga Simbolo Pag-uri-uriin ang Mga Ignoring Symbol Pag-uri-uriin ang Mga Accent nang Normal @@ -912,19 +931,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Uppercase Muna ang Pag-uri-uriin Pag-uri-uriin ang Hindi Case Sensitive Pag-uri-uriin ang Case Sensitive - Pagkakasunod-sunod ng Pag-uuri ng Tradisyunal na Chinese - Big5 Nakaraang Pagkakasunud-sunod ng Pag-uuri, para sa compatibility Pagkakasunud-sunod ng Pag-uuri ng Diksyunaryo Default na Pagkakasunud-sunod ng Ayos ng Unicode + Default na Unicode Pagkakasunud-sunod ng Pag-uuri ng Emoji Mga Tuntunin ng European na Pagkakasunud-sunod - Pagkakasunud-sunod ng Pag-uuri ng Pinasimpleng Chinese - GB2312 Pagkakasunud-sunod ng Pag-uuri ng Phonebook Phonetic na Ayos ng Pag-uuri-uri Pagkakasunud-sunod ng Pag-uuri ng Pinyin Pangkalahatang Paghahanap + Maghanap Maghanap Ayon sa Unang Katinig ng Hangul Karaniwang Pagkakasunud-sunod ng Ayos + Karaniwan Pagkakasunud-sunod ng Pag-uuri ng Stroke Tradisyunal na Pagkakasunud-sunod ng Pag-uuri Pagkakasunud-sunod ng Pag-uuri ng Radical-Stroke @@ -941,18 +961,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hanggang sa Fullwidth Hanggang sa Halfwidth Numeric + Default + Emoji + Text 12 Oras na Sistema (0–11) + 12 (0–11) 12 Oras na Sistema (1–12) + 12 (1–12) 24 na Oras na Sistema (0–23) + 24 (0–23) 24 na Oras na Sistema (1–24) + 24 (1–24) Loose na Istilo ng Line Break + Loose Normal na Istilo ng Line Break + Normal Mahigpit na Istilo ng Line Break + Strict + I-break lahat + Panatilihin lahat + Normal + Panatilihin sa mga parirala US BGN na Transliteration UN GEGN na Transliteration Metrikong Sistema + Metric Sistemang Imperial na Pagsukat + UK Sistema ng Pagsukat sa US + US Ahom na mga Digit Arabic-Indic na Mga Digit Extendend Arabic-Indic na Mga Digit @@ -1009,7 +1046,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Mga Native na Digit N’Ko na Mga Digit Mga Digit ng Ol Chiki - Mga Oriya na Digit + Mga Odia na Digit Mga Roman Numeral Roman Lowercase na Mga Numeral Tamil na Mga Numeral @@ -1019,6 +1056,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Mga Tibetan na Digit Mga Tradisyunal na Numeral Mga Vai na Digit + Naka-off + Naka-on Metriko @@ -1037,9 +1076,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1082,6 +1118,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'nang' {0} + + {1} 'nang' {0} + @@ -1090,6 +1129,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'nang' {0} + + {1} 'nang' {0} + @@ -1106,11 +1148,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G M/d/y GGGGG + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G - h a h:mm a h:mm:ss a M/d @@ -1176,10 +1219,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, MMM d – E, MMM d, y G E, MMM d, y – E, MMM d, y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1190,10 +1229,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -1208,9 +1243,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM–MMM - - MMM d – MMM d - E, MMM d – E, MMM d E, MMM d – E, MMM d @@ -1327,15 +1359,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Biy Sab - - Lin - Lun - Mar - Miy - Huw - Biy - Sab - Linggo Lunes @@ -1356,15 +1379,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Biy Sab - - Lin - Lun - Mar - Miy - Huw - Biy - Sab - @@ -1395,24 +1409,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ng gabi - hatinggabi am - tanghaling-tapat pm - ng umaga - madaling-araw - ng hapon - ng gabi - ng gabi - - - hatinggabi - tanghaling-tapat - ng umaga - madaling-araw - ng hapon - ng gabi - ng gabi @@ -1520,11 +1518,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G M/d/y G + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1594,10 +1593,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, MMM d – E, MMM d, y G E, MMM d, y – E, MMM d, y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1608,10 +1603,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -1626,9 +1617,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM–MMM - - MMM d – MMM d - E, MMM d – E, MMM d E, MMM d – E, MMM d @@ -2207,7 +2195,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Enderbury + Canton Island Kostanay @@ -2261,9 +2249,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Oras sa Kanlurang Africa - Standard na Oras sa Kanlurang Africa - Oras sa Tag-init ng Kanlurang Africa + Oras sa Kanlurang Africa @@ -2620,6 +2606,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Oras sa Guyana + + + Standard na Oras sa Hawaii-Aleutian + + Oras sa Hawaii-Aleutian @@ -3179,7 +3170,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4054,6 +4044,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dolyar ng Silangang Caribbean dolyares ng Silangang Caribbean + + Caribbean guilder + Caribbean guilder + Caribbean guilders + CFA Franc ng Kanlurang Africa CFA franc ng Kanlurang Africa @@ -4087,6 +4082,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zambian kwacha Zambian kwachas + + Zimbabwean Gold + Zimbabwean gold + Zimbabwean gold + {0}+ @@ -4305,7 +4305,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} item {0} na item - + + parts + {0} part + {0} parts + + parts per million {0} part per million {0} parts per million @@ -4328,6 +4333,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mole {0} mole + + ng glucose + {0} ng glucose + {0} ng glucose + litro kada kilometro {0} litro kada kilometro @@ -4810,8 +4820,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetro ng asoge {0} na milimetro ng asoge + + ng mercury + {0} ng mercury + {0} ng mercury + - libra kada pulgadang parisukat + pounds-force bawat square inch {0} libra kada pulgadang parisukat {0} na libra kada pulgadang parisukat @@ -5052,15 +5067,72 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} Imp. na kuwart {0} Imp. na kuwart - + + steradians + {0} steradian + {0} steradians + + + katals + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + calories [IT] + {0} calorie [IT] + {0} calories [IT] + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + kilograms-force + {0} kilogram-force + {0} kilograms-force + + + teslas + + + {0} weber + {0} webers + + parts per billion {0} part per billion {0} parts per billion - mga gabi - {0} gabi - {0} gabi {0} kada gabi @@ -5126,7 +5198,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ karat - + parts/million @@ -5135,6 +5207,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mole + + Glc + litro/km @@ -5235,6 +5310,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ nanoseg + + amps + milliamps @@ -5390,6 +5468,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ watts + + ng Hg + {0} ng Hg + {0} ng Hg + in Hg @@ -5485,7 +5568,36 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Imp na kuwart - + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + parts/billion @@ -5563,7 +5675,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} item {0}item - + ppm @@ -5572,6 +5684,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mol + + Glc + L/km @@ -5816,6 +5931,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmHg {0}mmHg + + ng Hg + {0} ng Hg + {0} ng Hg + {0}psi {0}psi @@ -5936,15 +6056,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt Imp. {0}qt-Imp. - + + cal-IT + + {0}ppb {0}ppb - mga gabi {0}gabi {0}gabi - {0}/gabi diff --git a/make/data/cldr/common/main/fo.xml b/make/data/cldr/common/main/fo.xml index 62c754793d9..e54f95f951c 100644 --- a/make/data/cldr/common/main/fo.xml +++ b/make/data/cldr/common/main/fo.xml @@ -983,6 +983,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic etiopiskur kalendari etiopiskur amete alem kalendari gregorianskur kalendari + gregorianskur hebraiskur kalendari islamiskur kalendari islamiskur kalendari (talvuskapaður, fólkaligt tíðarskeið) @@ -998,6 +999,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic röðina fyrir fjöltyngi evrópskum skjölum vanlig leiting vanlig raðskipan + vanlig siðbundin raðskipan zhuyin raðskipan 12 tímar klokkuskipan (0–11) @@ -1123,6 +1125,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1131,6 +1136,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1148,7 +1156,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a y G + MM.y GGGGG dd.MM.y GGGGG + dd.MM.y GGGGG, E MMM y G d. MMM y G E d. MMM y G @@ -1516,6 +1526,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1524,6 +1537,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1541,7 +1557,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a y G + MM.y G dd.MM.y G + dd.MM.y G, E MMM y G d. MMM y G E d. MMM y G @@ -2311,9 +2329,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Jamaika - - Enderbury - Kuvait @@ -2405,9 +2420,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Vesturafrika tíð - Vesturafrika vanlig tíð - Vesturafrika summartíð + Vesturafrika tíð @@ -2757,6 +2770,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gujana tíð + + + Hawaii-Aleutian vanlig tíð + + Hawaii-Aleutian tíð @@ -3332,9 +3350,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -3965,6 +3985,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Eystur Karibia dollari Eystur Karibia dollarar + + Karibia gyllin + Karibia gyllin + Karibia gyllin + Vesturafrika CFA frankur Vesturafrika CFA frankur @@ -3995,6 +4020,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sambia kwacha + + Simbabvi gull + {0}+ @@ -4204,7 +4232,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} lutur {0} lutir - + partar fyri hvørja millión {0} partur fyri hvørja millión {0} partar fyri hvørja millión @@ -4857,7 +4885,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ljós {0} ljós - + partar fyri hvørja milliard {0} part fyri hvørja milliard {0} partar fyri hvørja milliard @@ -4958,7 +4986,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} lutur {0} lutir - + partar/millión {0} pt./mill. {0} pt./mill. @@ -5456,7 +5484,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ljós {0} ljós - + partar/milliard {0} part/mia. {0} partar/mia. @@ -5565,7 +5593,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}lutur {0} lutir - + pt./mill. {0}pt./mill {0}pt./mill @@ -6046,7 +6074,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}ljós {0}ljós - + partar/mia. {0}part/mia. {0}partar/mia. diff --git a/make/data/cldr/common/main/fr.xml b/make/data/cldr/common/main/fr.xml index 06ad708b52c..075e313db8d 100644 --- a/make/data/cldr/common/main/fr.xml +++ b/make/data/cldr/common/main/fr.xml @@ -332,6 +332,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurde + kurde + kurmandji koumyk kutenai komi @@ -695,6 +697,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -841,6 +844,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -861,6 +865,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -871,6 +876,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -979,6 +985,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chine Colombie Île Clipperton + Sercq Costa Rica Cuba Cap-Vert @@ -1203,7 +1210,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Afrique du Sud Zambie Zimbabwe - région indéterminée + région inconnue Angleterre @@ -1326,35 +1333,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tri numérique priorité du tri devise + Présentation des Emoji système horaire (12 ou 24 heures) style de saut de ligne + Sauts de ligne dans les mots système de mesure nombres + Saut de phrase après une abréviation fuseau horaire variante locale usage privé calendrier bouddhiste + bouddhiste calendrier chinois + chinois calendrier copte + copte calendrier dangi + dangi calendrier éthiopien + éthiopien calendrier éthiopien Amete Alem + éthiopien Amete Alem calendrier grégorien + grégorien calendrier hébraïque + hébraïque calendrier indien calendrier hégirien + hégirien calendrier hégirien (tabulaire, époque civile) + hégirien (tabulaire, époque civile) calendrier musulman (observé, Arabie Saoudite) calendrier hégirien (tabulaire, époque astronomique) + hégirien (tabulaire, époque astronomique) calendrier hégirien (Umm al-Qura) + hégirien (Umm al-Qura) calendrier ISO 8601 calendrier japonais + japonais calendrier persan + persan calendrier républicain chinois + républicain chinois format de devise comptable + comptable format de devise standard + standard Trier les symboles Trier en ignorant les symboles Trier les caractères accentués normalement @@ -1364,23 +1391,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Trier avec les majuscules d’abord Trier sans tenir compte de la casse Trier en tenant compte de la casse - ordre chinois traditionnel - Big5 ancien ordre de tri pour compatibilité + compatibilité ordre du dictionnaire + dictionnaire ordre de tri Unicode par défaut + Unicode par défaut ordre des emoji règles de classement européen - ordre chinois simplifié - GB2312 ordre de l’annuaire + annuaire ordre de tri phonétique + phonétique ordre pinyin + pinyin recherche générique + recherche rechercher par consonne initiale en hangeul ordre de tri standard + standard ordre des traits + traits ordre traditionnel + traditionnel ordre de tri radical-traits + radical-traits ordre zhuyin + zhuyin Trier sans normalisation Trier avec normalisation Unicode Trier les chiffres individuellement @@ -1393,18 +1430,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ en pleine chasse en demi-chasse Numérique + par défaut + Emoji + texte système horaire de 12 heures (0–11) + 12 (0–11) système horaire de 12 heures (1–12) + 12 (1–12) système horaire de 24 heures (0–23) + 24 (0–23) système horaire de 24 heures (1–24) + 24 (1–24) style de saut de ligne permissif + permissif style de saut de ligne normal + normal style de saut de ligne strict + strict + Couper n’importe où + Ne pas couper + Normal + Ne pas couper dans les phrases BGN UNGEGN système métrique + métrique système impérial + impérial système américain + américain chiffres ahoms chiffres arabes chiffres arabes étendus @@ -1440,11 +1494,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ chiffres nyiakeng puachue hmong chiffres javanais chiffres japonais - chiffres japonais financiers + chiffres financiers japonais chiffres kayah li chiffres kawis chiffres khmers - chiffres en kannada + chiffres kannadas chiffres kirat rais chiffres lannas horas chiffres lannas thams @@ -1468,7 +1522,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ chiffres birmans shans chiffres birmans tai laings chiffres nag mundaris - chiffres natifs + chiffres locaux chiffres n’kos chiffres ol-chikis chiffres ol onals @@ -1498,6 +1552,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ chiffres en vaï chiffres warang-citis chiffres wantcho + Désactivé + Activé métrique @@ -1546,10 +1602,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [''’ ՚ ᾽᾿ ʼ ߴ] - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1786,11 +1840,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - avant Dioclétien après Dioclétien - av. D. ap. D. @@ -1841,16 +1893,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - avant l’Incarnation - après l’Incarnation - - - av. Inc. - ap. Inc. - - @@ -1894,6 +1936,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'à' {0} + + {1} 'à' {0} + @@ -1902,6 +1947,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'à' {0} + + {1} 'à' {0} + @@ -1918,13 +1966,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G dd/MM/y GGGGG + E d/M/y G MMM y G d MMM y G E d MMM y G - h a h:mm a h:mm:ss a + HH 'h' v dd/MM E dd/MM d MMM @@ -1944,11 +1994,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -2300,6 +2348,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'à' {0} + + {1} 'à' {0} + @@ -2308,6 +2359,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'à' {0} + + {1} 'à' {0} + @@ -2318,6 +2372,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}, {0} + E @@ -2325,16 +2382,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM/y G dd/MM/y GGGGG + E dd/MM/y GGGGG MMM y G d MMM y G E d MMM y G - h a HH 'h' h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH 'h' v dd/MM E dd/MM d MMM @@ -2356,11 +2415,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -2403,7 +2460,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d MMM y – E d MMM y G - h a – h a h – h a @@ -2428,7 +2484,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h a v @@ -2657,6 +2712,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + M/y G + E d/M/y G M/y GGGGG d/M/y GGGGG E d/M/y GGGGG @@ -2819,6 +2876,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an + l’an dernier + cette année + l’an prochain dans {0} a dans {0} a @@ -2830,6 +2890,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ a + l’an dernier + cette année + l’an prochain +{0} a +{0} a @@ -3314,11 +3377,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} (heure d’été) {0} (heure standard) - - HT - HST - HDT - Honolulu @@ -3330,7 +3388,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ville inconnue + lieu inconnu Andorre @@ -3341,30 +3399,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kaboul - - Tirana - Erevan - - Showa - - - Dumont-d’Urville - - - Río Gallegos - Ushuaïa - - Tucumán - - - Córdoba - Vienne @@ -3389,39 +3429,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bermudes - - Eirunepé - Manaos - - Cuiabá - - - Santarém - - - Belém - - - Araguaína - - - São Paulo - - - Maceió - Saint-Jean de Terre-Neuve Île de Pâques - - Ürümqi - La Havane @@ -3434,9 +3450,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Famagouste - - Büsingen - Copenhague @@ -3449,9 +3462,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Alger - - Galápagos - Le Caire @@ -3523,15 +3533,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bichkek - - Enderbury - - - Canton - - - Comores - Saint-Christophe @@ -3586,18 +3587,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maurice - - Mazatlán - Bahia de Banderas Mexico - - Nouméa - Katmandou @@ -3670,9 +3665,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riyad - - Mahé - Singapour @@ -3688,12 +3680,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damas - - N’Djamena - - - Lomé - Douchanbé @@ -3792,9 +3778,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - heure d’Afrique de l’Ouest - heure normale d’Afrique de l’Ouest - heure d’été d’Afrique de l’Ouest + heure d’Afrique de l’Ouest @@ -3803,11 +3787,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale de l’Alaska heure d’été de l’Alaska - - HAK - HNAK - HEAK - @@ -3829,11 +3808,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale du centre nord-américain heure d’été du centre nord-américain - - HC - HNC - HEC - @@ -3841,11 +3815,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale de l’Est nord-américain heure d’été de l’Est nord-américain - - HE - HNE - HEE - @@ -3853,11 +3822,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale des Rocheuses heure d’été des Rocheuses - - HR - HNR - HER - @@ -3865,11 +3829,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale du Pacifique nord-américain heure d’été du Pacifique nord-américain - - HP - HNP - HEP - @@ -3933,11 +3892,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale de l’Atlantique heure d’été de l’Atlantique - - HA - HNA - HEA - @@ -4078,11 +4032,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale de Cuba heure d’été de Cuba - - HCU - HNCU - HECU - @@ -4124,11 +4073,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale d’Europe de l’Est heure d’été d’Europe de l’Est - - EET - EEST - EEDT - @@ -4141,11 +4085,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale d’Europe de l’Ouest heure d’été d’Europe de l’Ouest - - WET - WEST - WEDT - @@ -4207,11 +4146,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale de l’Est du Groenland heure d’été de l’Est du Groenland - - HEG - HNEG - HEEG - @@ -4219,11 +4153,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale de l’Ouest du Groenland heure d’été de l’Ouest du Groenland - - HOG - HNOG - HEOG - @@ -4240,17 +4169,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure du Guyana + + + heure normale d’Hawaï - Aléoutiennes + + heure d’Hawaï - Aléoutiennes heure normale d’Hawaï - Aléoutiennes heure d’été d’Hawaï - Aléoutiennes - - HHA - HNHA - HEHA - @@ -4439,11 +4368,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale du Pacifique mexicain heure d’été du Pacifique mexicain - - HPMX - HNPMX - HEPMX - @@ -4494,11 +4418,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure normale de Terre-Neuve heure d’été de Terre-Neuve - - HTN - HNTN - HETN - @@ -4710,6 +4629,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ heure de Chuuk + + + heure de Turquie + heure normale de Turquie + heure avancée de Turquie + + heure du Turkménistan @@ -4885,10 +4811,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -6489,6 +6416,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dollar zimbabwéen dollars zimbabwéens + + or du Zimbabwe + or du Zimbabwe + or du Zimbabwe + dollar zimbabwéen (2009) dollar zimbabwéen (2009) @@ -6754,11 +6686,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} item {0} items - + + parts + {0} parts + {0} parts + + feminine - parts par million - {0} part par million - {0} parts par million + parties par million + {0} partie par million + {0} parties par million masculine @@ -6784,6 +6721,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mole {0} moles + + de glucose + {0} de glucose + {0} de glucose + masculine litres au kilomètre @@ -7405,6 +7347,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimètre de mercure {0} millimètres de mercure + + de mercure + {0} de mercure + {0} de mercure + livres-force par pouce carré {0} livre-force par pouce carré @@ -7609,6 +7556,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} tasse métrique {0} tasses métriques + + onces liquides métriques + {0} once liquide métrique + {0} onces liquides métriques + acres-pieds {0} acre-pied @@ -7715,23 +7667,82 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} quart impérial {0} quarts impériaux + + stéradians + {0} stéradian + {0} stéradians + + + katals + {0} katal + {0} katals + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + calories [IT] + {0} calorie [IT] + {0} calories [IT] + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + kilogrammes-force + {0} kilogramme-force + {0} kilogrammes-force + + + teslas + {0} tesla + {0} teslas + + + webers + {0} weber + {0} webers + feminine - lumière - {0} lumière - {0} lumière - + feminine - parts par milliard - {0} part par milliard - {0} parts par milliard + parties par milliard + {0} partie par milliard + {0} parties par milliard feminine - nuits - {0} nuit - {0} nuits {0} par nuit @@ -7837,7 +7848,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} items {0} items - + + {0} parts + {0} parts + + {0} ppm {0} ppm @@ -7857,6 +7872,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} mol + + Glc + l/km {0} l/km @@ -8308,6 +8326,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + de Hg + {0} de Hg + {0} de Hg + lb/po² {0} lb/po² @@ -8540,6 +8563,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt imp. {0} qt imp. + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + lumière {0} lumière @@ -8630,7 +8666,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}item {0}items - + + {0} parts + {0} parts + + {0}ppm {0}ppm @@ -8646,6 +8686,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mol {0}mol + + Glc + {0}l/km {0}l/km @@ -9023,6 +9066,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + de Hg + {0} de Hg + {0} de Hg + {0} lb/po² {0} lb/po² @@ -9227,20 +9275,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt imp. {0}qt imp. - - lumière - {0} lumière - {0} lumière + + cal-IT - + {0}ppb {0}ppb - nuits {0}nuit {0}nuits - {0}/nuit {0}E diff --git a/make/data/cldr/common/main/fr_CA.xml b/make/data/cldr/common/main/fr_CA.xml index f873e9d2394..ec19a4185c9 100644 --- a/make/data/cldr/common/main/fr_CA.xml +++ b/make/data/cldr/common/main/fr_CA.xml @@ -13,7 +13,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {0} : {1} + {0} : {1} adygué @@ -48,6 +48,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kalaallisut kashmiri chambala + kurmanji live luba-katanga chinois classique @@ -145,19 +146,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic îles Vierges américaines Vietnam + + Présentation des émojis + - ordre de tri chinois traditionnel - Big5 + par compatibilité ordre de tri du dictionnaire + du dictionnaire ordre multilingue européen - ordre de tri chinois simplifié - GB2312 ordre de tri de l’annuaire + de l’annuaire ordre de tri pinyin Rechercher par consonne initiale en hangeul ordre de tri des traits + des traits ordre de tri traditionnel ordre de tri zhuyin pleine chasse demi-chasse + émoji BGN (commission de toponymie des États-Unis) GENUNG chiffres gujaratis @@ -313,19 +320,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic h 'h' B h 'h' mm B h 'h' mm 'min' ss 's' B + E h 'h' B E h 'h' mm B E h 'h' mm 'min' ss 's' B + E h 'h' a E h 'h' mm a E HH 'h' mm E h 'h' mm 'min' ss 's' a E HH 'h' mm 'min' ss 's' + y-M G y-MM-dd GGGGG + E y-MM-dd G h 'h' a HH 'h' h 'h' mm a HH 'h' mm h 'h' mm 'min' ss 's' a HH 'h' mm 'min' ss 's' + h 'h' a v M-d E M-d MM-d @@ -536,13 +548,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic h 'h' B h 'h' mm B h 'h' mm 'min' ss 's' B + E h 'h' B E h 'h' mm B E h 'h' mm 'min' ss 's' B + E h 'h' a E h 'h' mm a E HH 'h' mm E h 'h' mm 'min' ss 's' a E HH 'h' mm 'min' ss 's' + y-MM G y-MM-dd GGGGG + E y-MM-dd G h 'h' a h 'h' mm a HH 'h' mm @@ -552,6 +568,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH 'h' mm 'min' ss 's' v h 'h' mm a v HH 'h' mm v + h 'h' a v + H 'h' v MM-dd E MM-dd MM-dd @@ -802,6 +820,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic + y-MM G + E y-MM-dd G MM-dd E d MMM y-MM GGGGG @@ -1128,13 +1148,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic heure normale d’Afrique du Sud - - - heure d’Afrique de l’Ouest - heure normale d’Afrique de l’Ouest - heure avancée d’Afrique de l’Ouest - - heure de l’Alaska @@ -1266,6 +1279,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic heure normale de l’Atlantique heure avancée de l’Atlantique + + HA + HNA + HAA + @@ -1438,6 +1456,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic heure avancée de l’Ouest du Groenland + + + heure normale d’Hawaï-Aléoutiennes + + heure d’Hawaï-Aléoutiennes @@ -1655,6 +1678,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic heure normale de Saint-Pierre-et-Miquelon heure avancée de Saint-Pierre-et-Miquelon + + HPM + HNPM + HAPM + @@ -1784,56 +1812,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 0 k¤ - 0 k ¤ - 0 k¤ - 0 k ¤ - 00 k¤ - 00 k ¤ - 00 k¤ - 00 k ¤ - 000 k¤ - 000 k ¤ - 000 k¤ - 000 k ¤ - 0 M¤ - 0 M ¤ - 0 M¤ - 0 M ¤ - 00 M¤ - 00 M ¤ - 00 M¤ - 00 M ¤ - 000 M¤ - 000 M ¤ - 000 M¤ - 000 M ¤ - 0 G¤ - 0 G ¤ - 0 G¤ - 0 G ¤ - 00 G¤ - 00 G ¤ - 00 G¤ - 00 G ¤ - 000 G¤ - 000 G ¤ - 000 G¤ - 000 G ¤ - 0 T¤ - 0 T ¤ - 0 T¤ - 0 T ¤ - 00 T¤ - 00 T ¤ - 00 T¤ - 00 T ¤ - 000 T¤ - 000 T ¤ - 000 T¤ - 000 T ¤ + 0 k ¤ + 0 k ¤ + 00 k ¤ + 00 k ¤ + 000 k ¤ + 000 k ¤ + 0 M ¤ + 0 M ¤ + 00 M ¤ + 00 M ¤ + 000 M ¤ + 000 M ¤ + 0 G ¤ + 0 G ¤ + 00 G ¤ + 00 G ¤ + 000 G ¤ + 000 G ¤ + 0 T ¤ + 0 T ¤ + 00 T ¤ + 00 T ¤ + 000 T ¤ + 000 T ¤ + {0} {1} + {0} {1} @@ -2031,6 +2037,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + {0} cube + {0} cube + {0} cubes + {0} cubes + force g @@ -2038,165 +2050,72 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mètre par seconde carrée {0} mètres par seconde carrée - - {0} radian - {0} radians - - - {0} degré - {0} degrés - - - {0} kilomètre carré - {0} kilomètres carrés - - - {0} hectare - {0} hectares - - - {0} mètre carré - {0} mètres carrés - - - {0} centimètre carré - {0} centimètres carrés - - - {0} mille carré - {0} milles carrés - acres - {0} acre - {0} acres + {0} acre + {0} acres verges carrées - {0} verge carrée - {0} verges carrées + {0} verge carrée + {0} verges carrées - - {0} pied carré - {0} pieds carrés + + {0} item + {0} items - - {0} pouce carré - {0} pouces carrés + + {0} part + {0} parts - - parties par million - {0} partie par million - {0} parties par million + + {0} de glucose + {0} de glucose - - {0} pour mille - {0} pour mille + + {0} litre au kilomètre + {0} litres au kilomètre litres aux 100 kilomètres - {0} litre aux 100 kilomètres - {0} litres aux 100 kilomètres + {0} litre aux 100 kilomètres + {0} litres aux 100 kilomètres milles au gallon - {0} mille au gallon - {0} milles au gallon + {0} mille au gallon + {0} milles au gallon milles au gallon impérial - {0} mille au gallon impérial - {0} milles au gallon impérial + {0} mille au gallon impérial + {0} milles au gallon impérial - - {0} téraoctet - {0} téraoctets + + {0} siècle + {0} siècles - - {0} térabit - {0} térabits + + {0} décennie + {0} décennies - - {0} gigaoctet - {0} gigaoctets + + {0} an + {0} ans - - {0} gigabit - {0} gigabits + + {0} trimestre + {0} trimestres - - {0} mégaoctet - {0} mégaoctets - - - {0} mégabit - {0} mégabits - - - {0} kilooctet - {0} kilooctets - - - {0} kilobit - {0} kilobits - - - {0} octet - {0} octets - - - {0} bit - {0} bits - - - {0} mois - {0} mois - - - {0} semaine - {0} semaines - - - {0} jour - {0} jours - - - {0} heure - {0} heures + + {0} minute + {0} minutes {0} seconde {0} secondes {0} à la seconde - - {0} milliseconde - {0} millisecondes - - - {0} microseconde - {0} microsecondes - - - {0} nanoseconde - {0} nanosecondes - - - {0} ampère - {0} ampères - - - {0} milliampère - {0} milliampères - - - {0} ohm - {0} ohms - - - {0} volt - {0} volts - {0} kilocalorie {0} kilocalories @@ -2229,102 +2148,76 @@ CLDR data files are interpreted according to the LDML specification (http://unic therms américains - {0} therm américain - {0} therms américains + {0} therm américain + {0} therms américains - - {0} gigahertz - {0} gigahertz + + {0} kilowatt-heure pour 100 kilomètres + {0} kilowatt-heures pour 100 kilomètres - - {0} mégahertz - {0} mégahertz + + {0} cadratin + {0} cadratins - - {0} kilohertz - {0} kilohertz + + {0} pixel + {0} pixels - - {0} hertz - {0} hertz + + {0} mégapixel + {0} mégapixels + + + {0} pixel par centimètre + {0} pixels par centimètre + + + {0} pixel par pouce + {0} pixels par pouce + + + {0} point par centimètre + {0} points par centimètre + + + {0} point par pouce + {0} points par pouce point + {0} point + {0} points - - {0} kilomètre - {0} kilomètres - - - {0} mètre - {0} mètres - - - {0} décimètre - {0} décimètres - - - {0} centimètre - {0} centimètres - - - {0} millimètre - {0} millimètres - - - {0} micromètre - {0} micromètres - - - {0} nanomètre - {0} nanomètres - - - {0} picomètre - {0} picomètres + + {0} rayon terrestre + {0} rayons terrestres mille - {0} mille - {0} milles + {0} mille + {0} milles feminine verges {0} verge - {0} verges + {0} verges - {0} pied - {0} pieds + {0} pied + {0} pieds - - {0} pouce - {0} pouces + + {0} point typographique + {0} points typographiques - - {0} parsec - {0} parsecs + + {0} candela + {0} candelas - - {0} année-lumière - {0} années-lumière - - - {0} unité astronomique - {0} unités astronomiques - - - {0} mille marin - {0} milles marins - - - {0} lux - {0} lux - - - {0} kilogramme - {0} kilogrammes + + {0} lumen + {0} lumens {0} gramme @@ -2342,10 +2235,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} stone {0} stone - - {0} livre - {0} livres - {0} once {0} onces @@ -2365,41 +2254,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} gigawatt {0} gigawatts - - {0} mégawatt - {0} mégawatts - - - {0} kilowatt - {0} kilowatts - - - {0} watt - {0} watts - - - {0} milliwatt - {0} milliwatts - {0} cheval-vapeur {0} chevaux-vapeur - - {0} pouce de mercure - {0} pouces de mercure + + {0} de mercure + {0} de mercure - - {0} millibar - {0} millibars + + {0} livre-force par pouce carré + {0} livres-force par pouce carré - - {0} atmosphère - {0} atmosphères + + {0} bar + {0} bars - - {0} hectopascal - {0} hectopascals + + {0} pascal + {0} pascals kilomètres à l’heure @@ -2415,59 +2288,55 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mille à l’heure {0} milles à l’heure + + {0} degré Beaufort + {0} degrés Beaufort + ° {0}° {0}° - - {0} degré Celsius - {0} degrés Celsius - - - {0} degré Fahrenheit - {0} degrés Fahrenheit - - - {0} kilomètre cube - {0} kilomètres cubes - - - {0} mètre cube - {0} mètres cubes - - - {0} centimètre cube - {0} centimètres cubes - - - {0} mille cube - {0} milles cubes + + {0} livre-force-pied + {0} livres-force-pieds verges cubes {0} verge cube - {0} verges cubes + {0} verges cubes - - {0} pied cube - {0} pieds cubes + + {0} décilitre + {0} décilitres - - {0} pouce cube - {0} pouces cubes + + {0} centilitre + {0} centilitres - - {0} mégalitre - {0} mégalitres + + {0} millilitre + {0} millilitres - - {0} hectolitre - {0} hectolitres + + {0} pinte métrique + {0} pintes métriques - - {0} litre - {0} litres + + {0} tasse métrique + {0} tasses métriques + + + {0} once liquide métrique + {0} onces liquides métriques + + + {0} acre-pied + {0} acres-pieds + + + {0} gallon + {0} gallons gallon impérial @@ -2475,30 +2344,58 @@ CLDR data files are interpreted according to the LDML specification (http://unic feminine pintes - {0} pinte - {0} pintes + {0} pinte + {0} pintes chopine - {0} chopine - {0} chopines + {0} chopine + {0} chopines + + + {0} tasse + {0} tasses + + + {0} once liquide + {0} onces liquides + + + {0} cuillère à soupe + {0} cuillères à soupe cuillères à thé - {0} cuillère à thé - {0} cuillères à thé + {0} cuillère à thé + {0} cuillères à thé cuillère à dessert + {0} cuillère à dessert + {0} cuillères à dessert + + + {0} cuillère à dessert impériale + {0} cuillères à dessert impériales goutte + {0} goutte + {0} gouttes + + + {0} drachme + {0} drachmes gobelet doseur + {0} gobelet doseur + {0} gobelets doseurs pincée + {0} pincée + {0} pincées feminine @@ -2506,10 +2403,66 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} pinte impériale {0} pintes impériales - - parties par milliard - {0} partie par milliard - {0} parties par milliard + + {0} stéradian + {0} stéradians + + + {0} katal + {0} katals + + + {0} coulomb + {0} coulombs + + + {0} farad + {0} farads + + + {0} henry + {0} henrys + + + {0} siemens + {0} siemens + + + {0} calorie [IT] + {0} calories [IT] + + + {0} becquerel + {0} becquerels + + + {0} sievert + {0} sieverts + + + {0} gray + {0} grays + + + {0} kilogramme-force + {0} kilogrammes-force + + + {0} tesla + {0} teslas + + + {0} weber + {0} webers + + + {0} partie par milliard + {0} parties par milliard + + + {0} nuit + {0} nuits + {0} par nuit point cardinal @@ -2526,165 +2479,227 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} m/s² {0} m/s² + + {0} tr + {0} tr + - {0} rad - {0} rad + {0} rad + {0} rad - {0} km² - {0} km² + {0} km² + {0} km² - {0} ha - {0} ha + {0} ha + {0} ha - {0} m² - {0} m² + {0} m² + {0} m² - {0} cm² - {0} cm² + {0} cm² + {0} cm² - {0} mi² - {0} mi² + {0} mi² + {0} mi² - {0} ac - {0} ac + {0} ac + {0} ac vg² - {0} vg² - {0} vg² + {0} vg² + {0} vg² {0} pi² - {0} pi² + {0} pi² - {0} po² - {0} po² + {0} po² + {0} po² + + + {0} dounam + {0} dounams carats + {0} ct + {0} ct + + + {0} mg/dl + {0} mg/dl + + + {0} mmol/l + {0} mmol/l - {0} item - {0} items + {0} item + {0} items + + + {0} part + {0} parts + + + {0} ppm + {0} ppm {0} % {0} % - {0} ‰ - {0} ‰ + {0} ‰ + {0} ‰ + + + {0} ‱ + {0} ‱ + + + {0} mol + {0} mol + + + {0} Glc + {0} Glc + + + {0} l/km + {0} l/km + + + {0} l/100 km + {0} l/100 km - {0} mi/gal - {0} mi/gal + {0} mi/gal + {0} mi/gal + + + {0} mi/gal imp. + {0} mi/gal imp. + + + {0} Po + {0} Po - {0} To - {0} To + {0} To + {0} To Tb - {0} Tb - {0} Tb + {0} Tb + {0} Tb - {0} Go - {0} Go + {0} Go + {0} Go Gb - {0} Gb - {0} Gb + {0} Gb + {0} Gb - {0} Mo - {0} Mo + {0} Mo + {0} Mo Mb - {0} Mb - {0} Mb + {0} Mb + {0} Mb - {0} ko - {0} ko + {0} ko + {0} ko kb - {0} kb - {0} kb + {0} kb + {0} kb - {0} octet - {0} octet + {0} o + {0} o - {0} bit - {0} bit + {0} bit + {0} bit - - {0} an - {0} ans + + {0} s. + {0} s. + + + {0} déc. + {0} déc. + + + {0} trim. + {0} trim. - {0} m. - {0} m. + {0} m. + {0} m. - {0} sem. - {0} sem. + {0} sem. + {0} sem. - {0} j - {0} j + {0} j + {0} j - {0} h - {0} h + {0} h + {0} h - {0} min - {0} min + {0} min + {0} min - {0} s - {0} s + {0} s + {0} s - {0} ms - {0} ms + {0} ms + {0} ms - {0} μs - {0} μs + {0} μs + {0} μs - {0} ns - {0} ns + {0} ns + {0} ns - {0} A - {0} A + {0} A + {0} A - {0} mA - {0} mA + {0} mA + {0} mA - {0} Ω - {0} Ω + {0} Ω + {0} Ω - {0} V - {0} V + {0} V + {0} V {0} kcal @@ -2710,103 +2725,167 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} BTU {0} BTU + + {0} therm US + {0} therms US + + + {0} lbf + {0} lbf + + + {0} N + {0} N + + + {0} kWh/100 km + {0} kWh/100 km + - {0} GHz - {0} GHz + {0} GHz + {0} GHz - {0} MHz - {0} MHz + {0} MHz + {0} MHz - {0} kHz - {0} kHz + {0} kHz + {0} kHz - {0} Hz - {0} Hz + {0} Hz + {0} Hz + + + {0} px + {0} px + + + {0} px/cm + {0} px/cm + + + {0} px/po + {0} px/po {0} pt/cm {0} pt/cm + + {0} pt/po + {0} pt/po + + + {0} pt + {0} pt + + + {0} R⊕ + {0} R⊕ + - {0} km - {0} km + {0} km + {0} km - {0} m - {0} m + {0} m + {0} m - {0} dm - {0} dm + {0} dm + {0} dm - {0} cm - {0} cm + {0} cm + {0} cm - {0} mm - {0} mm + {0} mm + {0} mm - {0} μm - {0} μm + {0} μm + {0} μm - {0} nm - {0} nm + {0} nm + {0} nm - {0} pm - {0} pm + {0} pm + {0} pm - {0} mi - {0} mi + {0} mi + {0} mi vg {0} vg - {0} vg + {0} vg {0} pi - {0} pi + {0} pi - {0} po - {0} po + {0} po + {0} po - {0} pc - {0} pc + {0} pc + {0} pc - {0} al - {0} al + {0} al + {0} al {0} ua - {0} ua + {0} ua NM {0} NM - {0} NM + {0} NM + + + {0} smi + {0} smi + + + {0} pt typog. + {0} pts typog. + + + {0} R☉ + {0} R☉ - {0} lx - {0} lx + {0} lx + {0} lx + + + {0} cd + {0} cd + + + {0} lm + {0} lm + + + {0} L☉ + {0} L☉ {0} t {0} t - {0} kg - {0} kg + {0} kg + {0} kg {0} g @@ -2826,8 +2905,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} tc - {0} lb - {0} lb + {0} lb + {0} lb {0} oz @@ -2841,6 +2920,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ct {0} ct + + {0} Da + {0} Da + {0} grain {0} grains @@ -2850,20 +2933,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} GW - {0} MW - {0} MW + {0} MW + {0} MW - {0} kW - {0} kW + {0} kW + {0} kW - {0} W - {0} W + {0} W + {0} W - {0} mW - {0} mW + {0} mW + {0} mW {0} ch @@ -2871,30 +2954,50 @@ CLDR data files are interpreted according to the LDML specification (http://unic mm Hg - {0} mm Hg - {0} mm Hg + {0} mm Hg + {0} mm Hg + + + {0} de Hg + {0} de Hg psi {0} psi - {0} psi + {0} psi po Hg {0} po Hg {0} po Hg + + {0} bar + {0} bars + - {0} mbar - {0} mbar + {0} mbar + {0} mbar + + + {0} atm + {0} atm - {0} hPa - {0} hPa + {0} hPa + {0} hPa + + + {0} kPa + {0} kPa + + + {0} MPa + {0} MPa - {0} km/h - {0} km/h + {0} km/h + {0} km/h {0} m/s @@ -2904,55 +3007,108 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mi/h {0} mi/h + + {0} nd + {0} nd + + Bf {0} Bf {0} Bf - {0} °C - {0} °C + {0} °C + {0} °C - {0} °F - {0} °F + {0} °F + {0} °F - {0} K - {0} K + {0} K + {0} K lb-pi - {0} lb-pi - {0} lb-pi + {0} lb-pi + {0} lb-pi + + + {0} N⋅m + {0} N⋅m - {0} km³ - {0} km³ + {0} km³ + {0} km³ - {0} m³ - {0} m³ + {0} m³ + {0} m³ - {0} cm³ - {0} cm³ + {0} cm³ + {0} cm³ - {0} mi³ - {0} mi³ + {0} mi³ + {0} mi³ vg³ {0} vg³ - {0} vg³ + {0} vg³ {0} pi³ {0} pi³ - {0} po³ - {0} po³ + {0} po³ + {0} po³ + + + {0} Ml + {0} Ml + + + {0} hl + {0} hl + + + {0} l + {0} l + + + {0} dl + {0} dl + + + {0} cl + {0} cl + + + {0} ml + {0} ml + + + {0} mpt + {0} mpt + + + {0} tm + {0} tm + + + {0} fl oz m. + {0} fl oz m. + + + {0} ac pi + {0} ac pi + + + {0} gal + {0} gal gal Imp @@ -2963,68 +3119,140 @@ CLDR data files are interpreted according to the LDML specification (http://unic pte {0} pte - {0} pte + {0} pte chop - {0} chop - {0} chop + {0} chop + {0} chop + + + {0} tasse + {0} tasses oz liq. {0} oz liq. - {0} oz liq. + {0} oz liq. oz liq imp. - {0} oz liq imp. - {0} oz liq imp. + {0} oz liq imp. + {0} oz liq imp. + + + {0} c. à s. + {0} c. à s. c. à t. {0} c. à t. - {0} c. à t. + {0} c. à t. + + + {0} bbl + {0} bbl cuill. à d. - {0} cuill. à d. - {0} cuill. à d. + {0} cuill. à d. + {0} cuill. à d. cuill. à d. imp. - {0} cuill. à d. imp. - {0} cuill. à d. imp. + {0} cuill. à d. imp. + {0} cuill. à d. imp. goutte - {0} goutte - {0} gouttes + {0} goutte + {0} gouttes dram liquide - {0} dram liq - {0} dram liq + {0} dram liq + {0} dram liq gobelet doseur - {0} gobelet doseur - {0} gobelets doseurs + {0} gobelet doseur + {0} gobelets doseurs + + + {0} pincée + {0} pincées pte imp {0} pte imp {0} pte imp - + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + p.p. 10⁹ {0} p.p. 10⁹ - {0} p.p. 10⁹ + {0} p.p. 10⁹ + + + {0} nuit + {0} nuits - {0} E. - {0} N. - {0} S. - {0} O. + {0} E. + {0} N. + {0} S. + {0} O. @@ -3036,6 +3264,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}vg² {0}vg² + + {0}part + {0}parts + + + {0}% + {0}% + + + {0}Glc + {0}Glc + {0}Tb {0}Tb @@ -3053,10 +3293,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}kb - déc {0}déc {0}déc + + {0}T + {0}T + {0}m {0}m @@ -3148,6 +3391,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mmHg {0}mmHg + + {0}deHg + {0}deHg + {0}psi {0}psi @@ -3163,12 +3410,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bf - {0} Bf - {0} Bf - - - {0} °C - {0} °C {0}lb-pi @@ -3178,6 +3419,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}vg³ {0}vg³ + + {0}fl oz m + {0}fl oz m + ac pi {0}ac pi @@ -3248,8 +3493,59 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}pte imp {0}pte imp - - p.p. 10⁹ + + {0}sr + {0}sr + + + {0}kat + {0}kat + + + {0}C + {0}C + + + {0}F + {0}F + + + {0}H + {0}H + + + {0}S + {0}S + + + {0}cal-IT + {0}cal-IT + + + {0}Bq + {0}Bq + + + {0}Sv + {0}Sv + + + {0}Gy + {0}Gy + + + {0}kgf + {0}kgf + + + {0}T + {0}T + + + {0}Wb + {0}Wb + + {0}pp10⁹ {0}pp10⁹ diff --git a/make/data/cldr/common/main/frr.xml b/make/data/cldr/common/main/frr.xml index 47fa5256bc5..0bee3a5752d 100644 --- a/make/data/cldr/common/main/frr.xml +++ b/make/data/cldr/common/main/frr.xml @@ -41,6 +41,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Aserbaidschaansk Aseeri Baschkiirisk + Belutschisk Balineesk Basaa Witjrüsk @@ -114,6 +115,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Austraalisk Ingelsk Kanaadsk Ingelsk Britisk Ingelsk + UK Ingelsk Amerikoonsk Ingelsk US Ingelsk Esperanto @@ -221,6 +223,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafia Kölsch Kurdisk + Kurdisk (Kurmanji) + Kurmanji Kumyk Komi Kornisk @@ -464,6 +468,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -499,6 +504,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -599,12 +605,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Republiik Kongo Sweits Côte d’Ivoire + Elfenbianküst Cook Eilunen Chiile Kameruun Schiina Kolumbien Clipperton Eilun + Sark Costa Rica Kuuba Kapwerden @@ -799,7 +807,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tonga Türkiye Türkei - Trinidad an Tobago + Trinidad an Tobaago Tuwaalu Taiwan Tansania @@ -835,55 +843,104 @@ CLDR data files are interpreted according to the LDML specification (http://unic Münt Formaat Sortiaring Münt + Emoji Presentatsion Stünjen Formaat (12 of 24) - Rä Ambreeg Stiil + Rä Ambreeg String + Rä ambreeg uun wurden Miat Süsteem Taalen + Sats aanj efter ufk. Buddhistisk Kalender + Buddhistisk Schineesk Kalender + Schineesk Koptisk Kalender + Koptisk Dangi Kalender + Dangi Etioopisk Kalender + Etioopisk Etioopisk Amete Alem Kalender + Etioopisk Amete Alem Gregoriaans Kalender + Gregoriaans Hebreewsk Kalender + Hebreewsk Islaamisk Kalender + Islaamisk Islaamisk Bürgerlik Kalender + Islaamisk Bürgerlik Islaamisk Umalkura Kalender + Islaamisk Umalkura ISO-8601 Kalender Japoonsk Kalender + Japoonsk Persisk Kalender + Persisk Minguo Kalender + Minguo Konto Münt Formaat + Konto Standard Münt Formaat + Standard Unicode Sortiaring - Normool Schüken + Normool Unicode + Normool Schük + Schük Standard Sortiaring + Standard + Normool + Emoji + Tekst 12 Stünj Süsteem (0–11) + 12 (0–11) 12 Stünj Süsteem (1–12) + 12 (1–12) 24 Stünj Süsteem (0–23) + 24 (0–23) 24 Stünj Süsteem (1–24) + 24 (1–24) Luas Rä Ambreeg Stiil + Luas Normool Rä Ambreeg Stiil + Normool String Rä Ambreeg Stiil + String + Aal ambreeg + Aal hual + Normool + Hual uun fraasen Meetrisk Süsteem + Meetrisk UK Süsteem + UK US Süsteem + US + Ahom Taalen Araabisk Taalen Ütjwidjet Araabisk Taalen Armeensk Taalen Armeensk Letj Taalen + Balineesk Taalen Bangla Taalen + Brahmi Taalen Chakma Taalen + Cham Taalen + Kyrilisk Taalen Devanagari Taalen + Dives Akuru Taalen Etioopisk Taalen Ütjwidjet Taalen + Garay Taalen Georgisk Taalen + Gunjala Gondi Taalen + Masaram Gondi Taalen Greks Taalen Greks Letj Taalen Gujarati Taalen + Gurung Khema Taalen Gurmukhi Taalen Schineesk Deesimaal Taalen Ianfach Schineesk Taalen @@ -891,13 +948,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ual Schineesk Taalen Ual Schineesk Finans Taalen Hebreewsk Taalen + Pahawh Hmong Taalen + Nyiakeng Puachue Hmong Taalen Jawaans Taalen Japoonsk Taalen Japoonsk Finans Taalen + Kayah Li Taalen + Kawi Taalen Khmer Taalen Kanaada Taalen + Kirat Rai Taalen + Tai Tham Hora Taalen + Tai Tham Tham Taalen Laotisk Taalen Europeesk Taalen + Lepcha Taalen + Limbu Taalen Malayalam Taalen Meetei Mayek Taalen Mjanmaar Taalen @@ -911,6 +977,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Thai Taalen Tibetaans Taalen Vai Taalen + Uf + Uun Meetrisk @@ -949,7 +1017,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd @@ -961,6 +1029,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'am' {0} + + {1} 'am' {0} + @@ -969,6 +1040,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'am' {0} + + {1} 'am' {0} + @@ -981,7 +1055,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic - E, d + E, h B + E, h a + E, HH:mm + E, HH:mm:ss MMM, d G y MMM, d @@ -1108,8 +1185,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic e - iarmade - eftermade + de iarmade + de eftermade @@ -1185,6 +1262,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'am' {0} + + {1} 'am' {0} + @@ -1193,6 +1273,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'am' {0} + + {1} 'am' {0} + @@ -1206,14 +1289,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic d. + E, h B E, h:mm B E, h:mm:ss B E, d. + E, h a E, h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss - G dd/MM/y + G M/y + G d/M/y + G E, d/M/y G MMM y G d. MMM y G E, d. MMM y @@ -1222,22 +1309,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm:ss a h:mm:ss a v h:mm a v - LL - dd/MM - E dd/MM + d/M + E d/M d. MMM E, d. MMM d. MMMM 'weg' W 'faan' MMMM - MM/y - dd/MM/y - E, dd/MM/y + M/y + d/M/y + E, d/M/y MMM y d. MMM y E, d. MMM y MMMM y QQQ y - QQQ y + QQQQ y 'weg' w 'faan' Y @@ -1260,10 +1346,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic G d/M/y – d/M/y - G E, dd/MM/y – E, dd/MM/y - G E, dd/MM/y – G E, dd/MM/y - G E, dd/MM/y – E, dd/MM/y - G E, dd/MM/y – E. dd/MM/y + G E, d/M/y – E, d/M/y + G E, d/M/y – G E, d/M/y + G E, d/M/y – E, d/M/y + G E, d/M/y – E, d/M/y G MMM y – G MMM y @@ -1315,15 +1401,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH – HH v - MM – MM + M – M - dd/MM – dd/MM - dd/MM – dd/MM + d/M – d/M + d/M – d/M - E, dd/MM – E, dd/MM - E, dd/MM – E, dd/MM + E, d/M – E, d/M + E, d/M – E, d/M LLL – LLL @@ -1340,18 +1426,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic y – y - MM/y – MM/y - MM/y – MM/y + M/y – M/y + M/y – M/y - dd/MM/y – dd/MM/y - dd/MM/y – dd/MM/y - dd/MM/y – dd/MM/y + d/M/y – d/M/y + d/M/y – d/M/y + d/M/y – d/M/y - E, dd/MM/y – E, dd/MM/y - E, dd/MM/y – E, dd/MM/y - E, dd/MM/y – E, dd/MM/y + E, d/M/y – E, d/M/y + E, d/M/y – E, d/M/y + E, d/M/y – E, d/M/y MMM – MMM y @@ -1385,10 +1471,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic das juar naist juar - efter {0} juar + uun {0} juaren - föör {0} juar + föör {0} juaren @@ -1420,9 +1506,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwrt. + letst kw. + das kw. + naist kw. + + uun {0} kwn. + + + föör {0} kwn. + kwrt + letst kw. + das kw. + naist kw. + + uun {0} kwn. + + + föör {0} kwn. + muun @@ -1430,7 +1534,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das muun naist muun - efter {0} muuner + uun {0} muuner föör {0} muuner @@ -1448,7 +1552,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das m naist m - efter {0} m + uun {0} m föör {0} m @@ -1541,7 +1645,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Söndai naist Söndai - efter {0} Söndaar + uun {0} Söndaar föör {0} Söndaar @@ -1552,7 +1656,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Sön. naist Sön. - efter {0} Sön. + uun {0} Sön. föör {0} Sön. @@ -1563,7 +1667,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Sö naist Sö - efter {0} Sö + uun {0} Sö föör {0} Sö @@ -1574,7 +1678,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Mundai naist Mundai - efter {0} Mundaar + uun {0} Mundaar föör {0} Mundaar @@ -1585,7 +1689,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Mun. naist Mun. - efter {0} Mun. + uun {0} Mun. föör {0} Mun. @@ -1596,7 +1700,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Mun. naist Mun. - efter {0} Mun. + uun {0} Mun. föör {0} Mun. @@ -1607,7 +1711,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Teisdai naist Teisdai - efter {0} Teisdaar + uun {0} Teisdaar föör {0} Teisdaar @@ -1618,7 +1722,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Tei. naist Tei. - efter {0} Tei. + uun {0} Tei. föör {0} Tei. @@ -1629,7 +1733,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Tei naist Tei - efter {0} Tei + uun {0} Tei föör {0} Tei @@ -1640,7 +1744,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Weedensdai naist Weedensdai - efter {0} Weedensdaar + uun {0} Weedensdaar föör {0} Weedensdaar @@ -1651,7 +1755,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Weed. naist Weed. - efter {0} Weed. + uun {0} Weed. föör {0} Weed. @@ -1662,7 +1766,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Weed naist Weed - efter {0} Weed + uun {0} Weed föör {0} Weed @@ -1673,7 +1777,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Tüürsdai naist Tüürsdai - efter {0} Tüürsdaar + uun {0} Tüürsdaar föör {0} Tüürsdaar @@ -1684,7 +1788,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Tüü. naist Tüü. - efter {0} Tüü. + uun {0} Tüü. föör {0} Tüü. @@ -1695,7 +1799,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Tüü. naist Tüü. - efter {0} Tüü. + uun {0} Tüü. föör {0} Tüü. @@ -1706,7 +1810,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Freidai naist Freidai - efter {0} Freidaar + uun {0} Freidaar föör {0} Freidaar @@ -1717,7 +1821,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Fr. naist Fr. - efter {0} Fr. + uun {0} Fr. föör {0} Fr. @@ -1728,7 +1832,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Fr naist Fr - efter {0} Fr + uun {0} Fr föör {0} Fr @@ -1739,7 +1843,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Saninj naist Saninj - efter {0} Saninjer + uun {0} Saninjer föör {0} Saninjer @@ -1750,7 +1854,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das San. naist San. - efter {0} San. + uun {0} San. föör {0} San. @@ -1761,7 +1865,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic das Sa naist Sa - efter {0} Sa + uun {0} Sa föör {0} Sa @@ -1780,16 +1884,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic stünj das stünj - efter {0} stünj + uun {0} stünjen - föör {0} stünj + föör {0} stünjen s. + das st. - efter {0} st. + uun {0} st. föör {0} st. @@ -1798,17 +1903,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic s - efter {0} st + uun {0} st föör {0} st - minüüt + minüt das minüüt - efter {0} minüüten + uun {0} minüüten föör {0} minüüten @@ -1817,7 +1922,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic min. - efter {0} min. + uun {0} min. föör {0} min. @@ -1826,7 +1931,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic min - efter {0} min + uun {0} min föör {0} min @@ -1836,7 +1941,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic sekund - efter {0} sekunden + uun {0} sekunden föör {0} sekunden @@ -1845,7 +1950,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic sek. - efter {0} sek. + uun {0} sek. föör {0} sek. @@ -1854,7 +1959,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic sek - efter {0} s + uun {0} s föör {0} s @@ -2184,9 +2289,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waast Afrikoo Tidj - Waast Afrikoo Standard Tidj - Waast Afrikoo Somertidj + Waast Afrikoo Tidj @@ -2233,9 +2336,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Apia Tidj - Apia Standard Tidj - Apia Somertidj + Samoa Tidj + Samoa Standard Tidj + Samoa Somertidj @@ -2275,16 +2378,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Sentraal Austraalisk Tidj - Sentraal Austraalisk Standard Tidj - Sentraal Austraalisk Somertidj + Austraalisk Sentraal Tidj + Austraalisk Sentraal Standard Tidj + Austraalisk Sentraal Somertidj - Sentraal Waastaustraalisk Tidj - Sentraal Waastaustraalisk Standard Tidj - Sentraal Waastaustraalisk Somertidj + Austraalisk Madelwaast Tidj + Austraalisk Madelwaast Standard Tidj + Austraalisk Madelwaast Somertidj @@ -2341,7 +2444,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Brunei Darussalam Tidj + Brunei Tidj @@ -2398,7 +2501,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Cook Eilunen Tidj Cook Eilunen Standard Tidj - Cook Eilunen Hualew Somertidj + Cook Eilunen Somertidj @@ -2415,7 +2518,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Dumont-d’Urville Tidj + Dumont d’Urville Tidj @@ -2536,6 +2639,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyaana Tidj + + + Hawaii-Aleuten Standard Tidj + + Hawaii-Aleuten Tidj @@ -2852,7 +2960,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Ponape Tidj + Pohnpei Tidj @@ -2879,9 +2987,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Samoa Tidj - Samoa Standard Tidj - Samoa Somertidj + Amrikoons Samoa Tidj + Amerikoons Samoa Standard Tidj + Amerikoons Samoa Somertidj @@ -2921,9 +3029,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Taipee Tidj - Taipee Standard Tidj - Taipee Somertidj + Taiwan Tidj + Taiwan Standard Tidj + Taiwan Somertidj @@ -3063,11 +3171,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤00K - ¤000K - ¤0M - ¤00M - ¤000M + ¤ 00K + ¤ 000K + ¤ 0M + ¤ 00M + ¤ 000M @@ -3212,6 +3320,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tschechisk Krüün Tschechisk Krüünen + + D-Mark + Djibouti Franc Djibouti Francs @@ -3657,6 +3768,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Uast Kariibik Dooler Uast Kariibik Doolers + + Kariibisk Gulden + Kariibisk Gulden + XCG + Waastafrikoonsk CFA Franc Waastafrikoonsk CFA Francs @@ -3680,6 +3796,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sambisk Kwacha Sambisk Kwachas + + Simbabwe Gul + Simbabwe Gul + {0} daar @@ -3689,7 +3809,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - dezi{0} + deesi{0} senti{0} @@ -3862,8 +3982,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} per kwadroottol - karats - {0} karats + karaat + {0} karaat miligram per deziliter @@ -3877,6 +3997,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic items {0} items + + parts + {0} parts + prosent {0} prosent @@ -3889,6 +4013,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic promyriad {0} promyriad + + glukoos + {0} glukoos + litern per kilomeeter {0} litern per kilomeeter @@ -4108,8 +4236,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} per sentimeeter - millimeetern - {0} millimeetern + milimeetern + {0} milimeetern mikromeetern @@ -4120,8 +4248,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} nanomeetern - picomeetern - {0} picomeetern + pikomeetern + {0} pikomeetern {0} miilen @@ -4269,6 +4397,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimeetern kwaksalwer {0} milimeetern kwaksalwer + + kwaksalwer + {0} kwaksalwer + tol kwaksalwer {0} tol kwaksalwer @@ -4318,7 +4450,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Beaufort - graad {0} graad @@ -4330,8 +4461,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} graad Fahrenheit - Kelvin - {0} Kelvin + kelvin + {0} kelvin pound-force-feet @@ -4385,8 +4516,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} per liter - desilitern - {0} desilitern + deesilitern + {0} deesilitern sentilitern @@ -4404,6 +4535,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic fjuarden litern {0} fjuarden litern + + meetrisk fluid ounces + {0} meetrisk fluid ounces + acre-feet {0} acre-feet @@ -4478,6 +4613,58 @@ CLDR data files are interpreted according to the LDML specification (http://unic ingelsk quarts {0} ingelsk quarts + + steradiant + {0} steradiant + + + katal + {0} katal + + + coulomb + {0} coulomb + + + farad + {0} farad + + + henry + {0} henry + + + siemens + {0} siemens + + + kaloriin [IT] + {0} kaloriin [IT] + + + becquerel + {0} becquerel + + + sievert + {0} sievert + + + gray + {0} gray + + + kilopond + {0} kilopond + + + tesla + {0} tesla + + + weber + {0} weber + laacht faard {0} laacht faard @@ -4527,7 +4714,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}/tol² - karats + karaat milimol/liter @@ -4535,6 +4722,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} items + + Glc + litern/km @@ -4589,7 +4779,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kilojoule - kWstünjen + kW-stünj elektroonenvolt @@ -4693,6 +4883,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic PS {0} PS + + tol Hg + {0} tol Hg + {0} Bft @@ -4744,6 +4938,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic pinches {0} pinches + + cal-IT + + + kp + {0} kp + c {0} c @@ -4776,7 +4977,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic acre - karat + karaat milimol/liter @@ -4784,6 +4985,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} items + + Glc + litern/km @@ -4821,7 +5025,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ns - kWstünjen + kWh elektroonenvolt @@ -4830,7 +5034,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic pound-force - newton + N px @@ -4876,6 +5080,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic PS {0} pe-es + + ″ Hg + {0}″ Hg + {0} Bft @@ -4915,6 +5123,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic drops {0} drops + + cal-IT + + + kp + {0} kp + c {0} c diff --git a/make/data/cldr/common/main/fur.xml b/make/data/cldr/common/main/fur.xml index a7d26ec7caa..e6fe0b2227a 100644 --- a/make/data/cldr/common/main/fur.xml +++ b/make/data/cldr/common/main/fur.xml @@ -593,9 +593,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic calendari islamic civîl calendari gjaponês calendari de Republiche di Cine - ordin cinês tradizionâl - Big5 ordenament predeterminât Unicode - ordin cinês semplificât - GB2312 ordin elenc telefonic ordin pinyin ricercje par fins gjenerâi diff --git a/make/data/cldr/common/main/fy.xml b/make/data/cldr/common/main/fy.xml index 6cf0c53ad5c..bc0e2fd4ce2 100644 --- a/make/data/cldr/common/main/fy.xml +++ b/make/data/cldr/common/main/fy.xml @@ -1133,10 +1133,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Eerst sortearje op haadletters Net haadlettergefoelich sortearje Hoofdlettergevoelig sortearje - Tradisjonele-Sineeske soartear oarder - Big5 Wurdboeksortearfolgorde Standert Unikoade-sortearfolgorde - Ferienfâldigde-Sineeske sortearfolgorde - GB2312 Telefoanboeksortearfolgorde Fonetyske sortearfolgorde Pinyinvolgorde @@ -2958,9 +2956,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - West-Afrikaanske tiid - West-Afrikaanske standerttiid - West-Afrikaanske simmertiid + West-Afrikaanske tiid @@ -3358,6 +3354,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyaanske tiid + + + Hawaii-Aleoetyske standerttiid + + Hawaii-Aleoetyske tiid @@ -3957,9 +3958,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;¤ #,##0.00- + ¤ #,##0.00;¤ #,##0.00- + #,##0.00;#,##0.00- ¤ #,##0.00;(¤ #,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/ga.xml b/make/data/cldr/common/main/ga.xml index 5be8c5b76ec..f6ce29435af 100644 --- a/make/data/cldr/common/main/ga.xml +++ b/make/data/cldr/common/main/ga.xml @@ -48,6 +48,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Asarbaiseáinis Asairis Baiscíris + Balúitsis Bailís Baváiris Basáis @@ -98,7 +99,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Criól Fraincise Seselwa Seicis Caisiúibis - Swampy Cree + Craís na gCorcach Slavais na hEaglaise Suvaisis Breatnais @@ -203,7 +204,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Indinéisis Interlingue Íogbóis - Ís Shichuan + Ís Sichuan Iniúipiaicis Ionúitis Iarthar Cheanada Ileacáinis @@ -254,6 +255,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Baifiais Coilsis Coirdis + Coirdis + Curmainsis Cúimicis Coimis Coirnis @@ -359,14 +362,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Óisibis an Iarthar Okanagan Oraimis - Odia + Oirísis Oiséitis Puinseáibis Pangasaíneánais Pampaingis Paipeamaintis Palabhais - pidsean na Nigéire + Pidsean na Nigéire Sean-Pheirsis Páilis Pijin @@ -552,7 +555,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + @@ -756,7 +759,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Congó-Brazzaville Poblacht an Chongó an Eilvéis - An Cósta Eabhair + Côte d’Ivoire an Cósta Eabhair Oileáin Cook an tSile @@ -764,9 +767,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an tSín an Cholóim Oileán Clipperton + an tSairc Cósta Ríce Cúba - Rinn Verde + Poblacht Cabo Verde Cúrasó Oileán na Nollag an Chipir @@ -778,12 +782,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an Danmhairg Doiminice an Phoblacht Dhoiminiceach - An Ailgéir + an Ailgéir Ceuta agus Melilla Eacuadór an Eastóin - An Éigipt - An Sahára Thiar + an Éigipt + an Sahára Thiar an Eiritré an Spáinn an Aetóip @@ -798,6 +802,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an Fhrainc an Ghabúin an Ríocht Aontaithe + RA Greanáda an tSeoirsia Guáin na Fraince @@ -805,8 +810,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Gána Giobráltar an Ghraonlainn - An Ghaimbia - An Ghuine + an Ghaimbia + an Ghuine Guadalúip an Ghuine Mheánchiorclach an Ghréig @@ -822,7 +827,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an Chróit Háítí an Ungáir - Na hOileáin Chanáracha + na hOileáin Chanáracha an Indinéis Éire Iosrael @@ -853,12 +858,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint Lucia Lichtinstéin Srí Lanca - An Libéir + an Libéir Leosóta an Liotuáin Lucsamburg an Laitvia - An Libia + an Libia Maracó Monacó an Mholdóiv @@ -874,7 +879,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Macao Na hOileáin Mháirianacha Thuaidh Martinique - An Mháratái + an Mháratáin Montsarat Málta Oileán Mhuirís @@ -885,9 +890,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Mósaimbíc an Namaib an Nua-Chaladóin - An Nígir + an Nígir Oileán Norfolk - An Nigéir + an Nigéir Nicearagua an Ísiltír an Iorua @@ -921,7 +926,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an Araib Shádach Oileáin Sholaimh na Séiséil - An tSúdáin + an tSúdáin an tSualainn Singeapór San Héilin @@ -930,7 +935,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an tSlóvaic Siarra Leon San Mairíne - An tSeineagáil + an tSeineagáil an tSomáil Suranam an tSúdáin Theas @@ -938,7 +943,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ An tSalvadóir Sint Maarten an tSiria - eSuaitíní + Esuaitíní an tSuasalainn Tristan da Cunha Oileáin na dTurcach agus Caicos @@ -950,7 +955,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tócalá Tíomór Thoir an Tuircméanastáin - An Tuinéis + an Tuinéis Tonga an Tuirc Oileán na Tríonóide agus Tobága @@ -1082,67 +1087,104 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Formáid Airgeadra Ord Sórtála Airgeadra + Léiriú mar Emoji Timthriall Uaire (12 vs 24) - Stíl Briseadh Líne + Déine Briste Líne + Bristeacha Líne laistigh d’Fhocail Córas Tomhais Uimhreacha + Briseadh Frása tar éis Giorrúcháin Féilire Búdaíoch + Búdaíoch Féilire Síneach + Síneach Féilire Coptach + Coptach Féilire Dangi + Dangi Féilire Aetóipice + Aetóipice Féilire Aetóipice Amete Alem + Aetóipice Amete Alem Féilire Ghréagóra + Gréagóra Féilire na nEabhrach + Eabhrach Féilire Náisiúnta na hIndia - Féilire Hijri - Féilire Hijiri (táblach, seanré shibhialta) + Féilire na Moslamach + Moslamach + Féilire na Moslamach (táblach, seanré shibhialta) + Moslamach (táblach, seanré shibhialta) Féilire Ioslamach (an Araib Shádach, dearcadh) Féilire Ioslamach (táblach, seanré réalteolaíoch) - Féilire Hijiri (Umm al-Qura) - Féilire ISO-8601 + Féilire na Moslamach (Umm al-Qura) + Moslamach (Umm al-Qura) + Féilire Ghréagóra (an bhliain ag an tús) Féilire Seapánach + Seapánach Féilire Peirseach + Peirseach Féilire Téavánach + Téavánach Formáid Airgeadra don Chuntasaíocht + Cuntasaíocht Formáid Airgeadra Caighdeánach - Ord sórtála Síneach traidisiúnta - Big5 + Caighdeánach Ord Sórtála Roimhe Seo, ar son na comhoiriúnachta Ord Sórtála Foclóirí Ord Sórtála Réamhshocraithe Unicode + Réamhshocraithe Unicode Ord Sórtála Emoji Rialacha Ordaithe Eorpacha - Ord sórtála Síneach simplithe - GB 2312 Ord sórtála an eolaire teileafóin Ord sórtála pinyin Cuardach Ilfhóinteach + Cuardach Cuardach de réir Consan Tosaigh Hangul Ord Sórtála Caighdeánach + Caighdeánach Ord sórtála stríce Ord sórtála traidisiúnta Ord Sórtála Stríce Radacaí Ord Sórtála Zhuyin + Réamhshocraithe + Emoji + Téacs Córas 12 Uair (0–11) + 12 (0–11) Córas 12 Uair (1–12) + 12 (1–12) Córas 24 Uair (0–23) + 24 (0–23) Córas 24 Uair (1–24) - Stíl Briseadh Líne Scaoilte - Stíl Gnáthbhriseadh Líne - Stíl Briseadh Líne Docht + 24 (1–24) + Stíl Scaoilte Briste Líne + Scaoilte + Gnáthstíl Briste Líne + Gnách + Stíl Dhian Briste Líne + Dian + Bris gach rud + Coinnigh gach rud + Gnách + Coinnigh i bhfrásaí Córas Méadrach + Méadrach Córas Tomhais Reachtúil + RA Córas Tomhais SAM + SAM Digití Ahom Digití Ind-Arabacha Digití Ind-Arabacha Breisithe Uimhreacha Airméanacha - Uimhreacha Cás Íochtair Airméanacha + Uimhreacha Cáis Íochtair Airméanacha Digití Bailíocha Digití Beangálacha Digití Brahmi - Digití Chakma + Digití Seácmacha Digití Cham Uimhreacha Coireallacha Digití Déiveanágracha @@ -1151,19 +1193,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Uimhreacha Seoirseacha Digití Masaram Gondi Uimhreacha Gréagacha - Uimhreacha Cás Íochtair Gréagacha + Uimhreacha Cáis Íochtair Gréagacha Digití Gúisearátacha Digití Gurmúcacha Uimhreacha Deachúlacha Síneacha - Uimhreacha sa tSínis Shimplithe - Uimhreacha Airgeadúla sa tSínis Shimplithe - Uimhreacha sa tSínis Thraidisiúnta - Uimhreacha Airgeadúla sa tSínis Thraidisiúnta + Uimhreacha na Sínise Simplithe + Uimhreacha Airgeadais na Sínise Simplithe + Uimhreacha na Sínise Traidisiúnta + Uimhreacha Airgeadais na Sínise Traidisiúnta Uimhreacha Eabhracha Digití Pahawh Hmong Digití Iávacha Uimhreacha Seapánacha - Uimhreacha Airgeadúla Seapánacha + Uimhreacha Airgeadais Seapánacha Digití Kayah Li Digití Ciméaracha Digití Cannadacha @@ -1191,7 +1233,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Digití Oiríseacha Digití Osmanya Uimhreacha Rómhánacha - Uimhreacha Cás Íochtair Rómhánacha + Uimhreacha Cáis Íochtair Rómhánacha Digití Saurashtra Digití Sharada Digití Khudawadi @@ -1200,14 +1242,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Digití Sundainéise Digití Takri Digití Tai Lue Nua - Uimhreacha Traidisiúnta Tamalacha + Uimhreacha Tamalacha Traidisiúnta Digití Tamalacha Digití Teileagúcha Digití Téalannacha Digití Tibéadacha Digití Tirhuta - Digití Vai + Digití Vadhacha Digití Warang Citi + Múchta + Ar siúl Méadrach @@ -1306,10 +1350,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G + M/d/y G + E, M/d/y G MMM y G d MMM y G E d MMM y G - h a h:mm a h:mm:ss a LL @@ -1332,11 +1378,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -1349,12 +1393,38 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MM/y GGGGG – MM/y GGGGG + M/y – M/y G + M/y – M/y G + + + d/M/y – d/M/y G + d/M/y G – d/M/y G + d/M/y – d/M/y G + d/M/y – d/M/y G + + + E d/M/y – E d/M/y G + E d/M/y G – E d/M/y G + E d/M/y – E d/M/y G + E d/M/y – E d/M/y G MMM y G – MMM y G MMM – MMM y G MMM y – MMM y G + + d – d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G + + + E d MMM – E d MMM y G + E d MMM y G – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G + h a – h a h–h a @@ -1594,7 +1664,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - dd/MM/y + d/M/yy @@ -1658,11 +1728,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G dd/MM/y GGGGG + E, d/M/y G MMM y G d MMM y G E d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1673,11 +1744,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d MMM E d MMM d MMMM - 'seachtain' 'a' W 'i' MMMM - 'seachtain' 'a' W 'i' MMMM - 'seachtain' 'a' W 'i' MMMM - 'seachtain' 'a' W 'i' MMMM - 'seachtain' 'a' W 'i' MMMM + MMMM: 'seachtain' W + MMMM: 'seachtain' W + MMMM: 'seachtain' W + MMMM: 'seachtain' W + MMMM: 'seachtain' W MM/y dd/MM/y E dd/MM/y @@ -1687,27 +1758,62 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMMM y QQQ y QQQQ y - 'seachtain' 'a' w 'in' Y - 'seachtain' 'a' w 'in' Y - 'seachtain' 'a' w 'in' Y - 'seachtain' 'a' w 'in' Y - 'seachtain' 'a' w 'in' Y + 'seachtain' w 'in' Y + 'seachtain' w 'in' Y + 'seachtain' w 'in' Y + 'seachtain' w 'in' Y + 'seachtain' w 'in' Y - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B d – d + + y G – y G + y – y G + + + M/y G – M/y G + M/y – M/y G + M/y – M/y G + + + d/M/y – d/M/y G + d/M/y G – d/M/y G + d/M/y – d/M/y G + d/M/y – d/M/y G + + + E d/M/y – E d/M/y G + E d/M/y G – E d/M/y G + E d/M/y – E d/M/y G + E d/M/y – E d/M/y G + + + MMM y G – MMM y G + MMM – MMM y G + MMM y – MMM y G + + + d – d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G + + + E d MMM – E d MMM y G + E d MMM y G – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G + - h a – h a h – h a @@ -1732,7 +1838,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h a v @@ -2536,7 +2641,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Cathair Anaithnid + Láthair Anaithnid Andóra @@ -2553,20 +2658,47 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Eireaván - - Córdoba + + Stáisiún Rothera + + + Tír Palmer + + + Stáisiún Troll + + + Stáisiún Showa + + + Stáisiún Mawson + + + Stáisiún Vostok + + + Stáisiún Casey + + + Stáisiún Dumont-d’Urville + + + Stáisiún McMurdo Vín - Mac Guaire + Oileán Mhic Guaire + + + Oileán an Tiarna Howe Arúba - Baki + Bakı Sairéavó @@ -2592,12 +2724,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Brúiné - - Belém - - - São Paulo - Mionsc @@ -2605,11 +2731,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an Bheilís - Oileán Cocos + Oileáin Cocos Zürich + + Oileán na Cásca + Shang-hai @@ -2745,6 +2874,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Calcúta + + Oileánra Chagos + Bagdad @@ -2764,7 +2896,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tóiceo - Enderbury + Oileán Canton Oileáin Chomóra @@ -2814,12 +2946,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Antananairíveo + + Oileáin Kwajalein + Scóipé Rangún + + Ulan Bator + + + Macau + Nuacsat @@ -2835,24 +2976,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Oileáin Mhaildíve - - Bahia Banderas - Cathair Mheicsiceo - - Merida - Mapútó + + Oileán Norfolk + Amstardam Osló + + Katmandu + Nárú @@ -2907,6 +3048,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Iacútsc + + Sacailín + Cartúm @@ -2940,9 +3084,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ an Damaisc - - Lomé - Túinis @@ -2958,20 +3099,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Oileáin Midway + + Oileán Wake + Nua-Eabhrac an Vatacáin - - San Uinseann - Cathair Ho Chi Minh - Vailís + Wallis agus Futuna Áidin @@ -3005,9 +3146,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Am Iarthar na hAfraice - Am Caighdeánach Iarthar na hAfraice - Am Samhraidh Iarthar na hAfraice + Am Iarthar na hAfraice @@ -3073,9 +3212,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Am Apia - Am Caighdeánach Apia - Am Samhraidh Apia + Am Shamó + Am Caighdeánach Shamó + Am Samhraidh Shamó @@ -3257,7 +3396,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Am Oileáin Cook Am Caighdeánach Oileáin Cook - Am Leathshamhraidh Oileáin Cook + Am Samhraidh Oileáin Cook @@ -3378,7 +3517,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Am Chireabaití + Am Chiribeas @@ -3418,6 +3557,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Am na Guáine + + + Am Caighdeánach Haváí-Ailiúit + + Am Haváí-Ailiúit @@ -3434,9 +3578,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Am Hovd - Am Caighdeánach Hovd - Am Samhraidh Hovd + Am Khovd + Am Caighdeánach Khovd + Am Samhraidh Khovd @@ -3616,8 +3760,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Am Ulánbátar - Am Caighdeánach Ulánbátar - Am Samhraidh Ulánbátar + Am Caighdeánach Ulan Bator + Am Samhraidh Ulan Bator @@ -3758,7 +3902,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Am Phohnpei + Am Pohnpei @@ -3799,9 +3943,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Am Shamó - Am Caighdeánach Shamó - Am Samhraidh Shamó + Am Shamó Mheiriceá + Am Caighdeánach Shamó Mheiriceá + Am Samhraidh Shamó Mheiriceá @@ -3853,7 +3997,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Am Oileáin Tócalá + Am Oileáin Thócaláú @@ -4046,7 +4190,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4057,123 +4200,123 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤0k - ¤ 0K + ¤ 0k ¤0k - ¤0K + ¤ 0k ¤0k - ¤0K + ¤ 0k ¤0k - ¤0K + ¤ 0k ¤0k - ¤ 0K + ¤ 0k ¤00k - ¤ 00K + ¤ 00k ¤00k - ¤00K + ¤ 00k ¤00k - ¤00K + ¤ 00k ¤00k - ¤00K + ¤ 00k ¤00k - ¤ 00K + ¤ 00k ¤000k - ¤ 000K + ¤ 000k ¤000k - ¤000K + ¤ 000k ¤000k - ¤000K + ¤ 000k ¤000k - ¤000K + ¤ 000k ¤000k - ¤ 000K + ¤ 000k ¤0M ¤ 0M ¤0M - ¤0M + ¤ 0M ¤0M - ¤0M + ¤ 0M ¤0M - ¤0M + ¤ 0M ¤0M ¤ 0M ¤00M ¤ 00M ¤00M - ¤00M + ¤ 00M ¤00M - ¤00M + ¤ 00M ¤00M - ¤00M + ¤ 00M ¤00M ¤ 00M ¤000M ¤ 000M ¤000M - ¤000M + ¤ 000M ¤000M - ¤000M + ¤ 000M ¤000M - ¤000M + ¤ 000M ¤000M ¤ 000M ¤0B ¤ 0B ¤0B - ¤0B + ¤ 0B ¤0B - ¤0B + ¤ 0B ¤0B - ¤0B + ¤ 0B ¤0B ¤ 0B ¤00B ¤ 00B ¤00B - ¤00B + ¤ 00B ¤00B - ¤00B + ¤ 00B ¤00B - ¤00B + ¤ 00B ¤00B ¤ 00B ¤000B ¤ 000B ¤000B - ¤000B + ¤ 000B ¤000B - ¤000B + ¤ 000B ¤000B - ¤000B + ¤ 000B ¤000B ¤ 000B ¤0T ¤ 0T ¤0T - ¤0T + ¤ 0T ¤0T - ¤0T + ¤ 0T ¤0T - ¤0T + ¤ 0T ¤0T ¤ 0T ¤00T ¤ 00T ¤00T - ¤00T + ¤ 00T ¤00T - ¤00T + ¤ 00T ¤00T - ¤00T + ¤ 00T ¤00T ¤ 00T ¤000T ¤ 000T ¤000T - ¤000T + ¤ 000T ¤000T - ¤000T + ¤ 000T ¤000T - ¤000T + ¤ 000T ¤000T ¤ 000T @@ -5506,7 +5649,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ pheso na nOileán Filipíneach pheso na nOileán Filipíneach bpeso na nOileán Filipíneach - peso na nOileán Filipíneach + pesos na nOileán Filipíneach Rúipí na Pacastáine @@ -5545,11 +5688,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riyal Chatar - riyal Chatar - riyal Chatar - riyal Chatar - riyal Chatar - riyal Chatar + riyals Chatar + riyals Chatar + riyals Chatar + riyals Chatar + riyals Chatar Leu na Rómáine (1952–2006) @@ -6046,6 +6189,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ndollar na Cairibe Thoir dollar na Cairibe Thoir + + gildear Chairib + ghildear Chairib + ghildear Chairib + ghildear Chairib + ngildear Chairib + gildir Chairib + Cearta Speisialta Tarraingthe @@ -6163,6 +6314,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dollar Siombábach (1980–2008) + + ór na Siombáibe + ór na Siombáibe + ór na Siombáibe + ór na Siombáibe + n-ór na Siombáibe + ór na Siombáibe + Dollar na Siombáibe (2009) @@ -6285,7 +6444,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ méadair sa soicind cearnaithe - imrothlú + imrothluithe {0} imrothlú {0} imrothlú {0} imrothlú @@ -6401,11 +6560,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ carait - {0} charat óir - {0} charat óir + {0} charat + {0} charat {0} charat - {0} gcarat óir - {0} carat óir + {0} gcarat + {0} carat milleagraim sa deicilítear @@ -6423,7 +6582,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milleamól sa lítear {0} milleamól sa lítear - + + míreanna + {0} mhír + {0} mhír + {0} mhír + {0} mír + {0} mír + + + codanna + {0} chuid + {0} chuid + {0} chuid + {0} gcuid + {0} cuid + + codanna sa mhilliún {0} chuid sa mhilliún {0} chuid sa mhilliún @@ -6456,6 +6631,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ móil + + glúcóis + {0} glúcóis + {0} glúcóis + {0} glúcóis + {0} glúcóis + {0} glúcóis + lítir sa chiliméadar {0} lítear sa chiliméadar @@ -6726,9 +6909,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ niútain {0} niútan - {0} N - {0} N - {0} N + {0} niútan + {0} niútan + {0} niútan {0} niútan @@ -6922,12 +7105,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} muirmh. - míle Lochlannach + mílte Lochlannacha {0} mhíle Lochlannach {0} mhíle Lochlannacha {0} mhíle Lochlannacha {0} míle Lochlannacha - {0} míle Lochlannach + {0} míle Lochlannacha {0} ghriangha @@ -6937,6 +7120,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} griangha + lucsaí {0} lucsa {0} lucsa {0} lucsa @@ -6944,7 +7128,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} lucsa - caindéile + caindéilí {0} chaindéile {0} chaindéile {0} chaindéile @@ -6952,7 +7136,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} caindéile - lúman + lúmain {0} lúman {0} lúman {0} lúman @@ -7128,6 +7312,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milliméadar mearcair {0} milliméadar mearcair + + mearcair + {0} mearcair + {0} mearcair + {0} mearcair + {0} mearcair + {0} mearcair + puint san orlach cearnach {0} phunt san orlach cearnach @@ -7228,18 +7420,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ punt-troigh - {0} punt-troigh - {0} lbf⋅ft - {0} lbf⋅ft - {0} lbf⋅ft + {0} phunt-troigh + {0} phunt-troigh + {0} phunt-troigh + {0} bpunt-troigh {0} punt-troigh - méadar niútain + méadair niútain {0} mhéadar niútain {0} mhéadar niútain - {0} N⋅m - {0} N⋅m + {0} mhéadar niútain + {0} méadar niútain {0} méadar niútain @@ -7364,6 +7556,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} gcupán mhéadracha {0} cupán méadrach + + unsaí leachtacha méadracha + acra-troithe {0} acra-troigh @@ -7459,7 +7654,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} spúnóg mhilseoige impiriúla {0} spúnóg mhilseoige impiriúla {0} spúnóg mhilseoige impiriúla - {0} spúnóg mhilseoige impiriúol + {0} spúnóg mhilseoige impiriúla dram leachtach @@ -7469,8 +7664,119 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ndram leachtacha {0} dram leachtach + + stearaidiain + {0} stearaidian + {0} stearaidian + {0} stearaidian + {0} stearaidian + {0} stearaidian + + + catail + {0} chatal + {0} chatal + {0} chatal + {0} gcatal + {0} catal + + + cúlóim + {0} chúlóm + {0} chúlóm + {0} chúlóm + {0} gcúlóm + {0} cúlóm + + + faraid + {0} fharad + {0} fharad + {0} fharad + {0} bhfarad + {0} farad + + + hanraithe + {0} hanraí + {0} hanraí + {0} hanraí + {0} hanraí + {0} hanraí + + + síminí + {0} shímin + {0} shímin + {0} shímin + {0} símin + {0} símin + + + calraí [IT] + {0} chalra [IT] + {0} chalra [IT] + {0} chalra [IT] + {0} gcalra [IT] + {0} calra [IT] + + + beicireilí + {0} bheicireil + {0} bheicireil + {0} bheicireil + {0} mbeicireil + {0} beicireil + + + sívirt + {0} síveart + {0} shíveart + {0} shíveart + {0} síveart + {0} síveart + + + graeanna + {0} ghrae + {0} ghrae + {0} ghrae + {0} ngrae + {0} grae + + + cileagraim fórsa + {0} chileagram fórsa + {0} chileagram fórsa + {0} chileagram fórsa + {0} gcileagram fórsa + {0} cileagram fórsa + + + teislí + {0} teisle + {0} theisle + {0} theisle + {0} dteisle + {0} teisle + + + véibir + {0} véibear + {0} véibear + {0} véibear + {0} véibear + {0} véibear + + + solas + {0} solas + {0} sholas + {0} sholas + {0} solas + {0} solas + - oícheanta {0} oíche amháin {0} oíche {0} oíche @@ -7508,12 +7814,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ céimeanna + {0} chéim + {0} chéim + {0} chéim + {0} gcéim + {0} céim - nóiméid stua + nóim. stua + {0} nóim. stua + {0} nóim. stua + {0} nóim. stua + {0} nóim. stua + {0} nóim. stua soic. stua + {0} soic. stua + {0} shoic. stua + {0} shoic. stua + {0} soic. stua + {0} soic. stua heicteáir @@ -7562,10 +7883,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ndunam {0} dunam + + carait + {0} ct + {0} ct + {0} ct + {0} ct + {0} ct + milleamól/lítear - + + mír. + {0} mhír + {0} mhír + {0} mhír + {0} mír + {0} mír + + + cod. + {0} chuid + {0} chuid + {0} chuid + {0} gcuid + {0} cuid + + codanna/milliún {0}/milliún {0}/milliún @@ -7590,6 +7935,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mól {0} mól + + Glc + {0} Glc + {0} Glc + {0} Glc + {0} Glc + {0} Glc + lítir/km {0} l/km @@ -7651,6 +8004,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} bl {0} bl {0} bl + {0}/bl ctú @@ -7862,11 +8216,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ míle Lochl. - {0} míle Lch - {0} mhíle Lch - {0} mhíle Lch - {0} míle Lch - {0} míle Lch + {0} mhíle Lochl. + {0} mhíle Lochl. + {0} mhíle Lochl. + {0} míle Lochl. + {0} míle Lochl. pointí @@ -7875,7 +8229,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ raonta gréine - lucsa + lucs. + + + caindéilí + + + lúmain lonrachtaí gréine @@ -8195,6 +8555,71 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} gcárt impiriúla {0} cárt impiriúil + + {0} sr + {0} sr + {0} sr + {0} sr + {0} sr + + + {0} kat + {0} kat + {0} kat + {0} kat + {0} kat + + + cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} Gy + {0} Gy + {0} Gy + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + {0} kgf + {0} kgf + {0} kgf + + + {0} T + {0} T + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + {0} Wb + {0} Wb + + + solas + {0} solas + {0} sholas + {0} sholas + {0} solas + {0} solas + oícheanta {0} oíche @@ -8220,6 +8645,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}G {0}G + + {0}imr + {0}imr + {0}imr + {0}imr + {0}imr + raid {0}raid @@ -8235,15 +8667,42 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ nóim. stua - {0}kt - {0}kt - {0}kt - {0}kt - {0}kt + carat + {0}ct + {0}ct + {0}ct + {0}ct + {0}ct + + + mir. + {0}mhír + {0}mhír + {0}mhír + {0}mír + {0}mír + + + cod. + {0} chuid + {0} chuid + {0} chuid + {0} gcuid + {0} cuid % + + {0}mhól + {0}mhól + {0}mhól + {0}mól + {0}mól + + + Glc + l/km {0}l/km @@ -8343,6 +8802,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ngiot. {0} giot. + + deich. blianta + {0}/bl @@ -8455,6 +8917,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}kWh {0}kWh + + N + {0}N + {0}N + {0}N + {0}N + {0}N + {0}GHz {0}GHz @@ -8588,19 +9058,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} muirmh. - {0} m lch - {0} mh lch - {0} m lch - {0} m lch - {0} m lch + {0}mhíle Lochl. + {0}mhíle Lochl. + {0}mhíle Lochl. + {0}míle Lochl. + {0}míle Lochl. + lucs. {0}lx {0}lx {0}lx {0}lx {0}lx + + {0}cd + {0}cd + {0}cd + {0}cd + {0}cd + + + lúmain + {0}lm + {0}lm + {0}lm + {0}lm + {0}lm + {0}t {0}t @@ -8746,6 +9232,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}K {0}K + + {0}lbf⋅ft + {0}lbf⋅ft + {0}lbf⋅ft + {0}lbf⋅ft + {0}lbf⋅ft + + + {0}N⋅m + {0}N⋅m + {0}N⋅m + {0}N⋅m + {0}N⋅m + {0}km³ {0}km³ @@ -8808,11 +9308,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ cl - {0}ghalIm - {0}ghalIm - {0} ghalIm - {0} ngalIm - {0}galIm + {0}ghal. Im + {0}ghal. Im + {0}ghal. Im + {0}ngal. Im + {0}gal. Im cupán @@ -8824,6 +9324,50 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} unsa l. {0} unsa l. + + {0}spmhil + {0}spmhil + {0}spmhil + {0}spmhil + {0}spmhil + + + {0}spmhil imp + {0}spmhil imp + {0}spmhil imp + {0}spmhil imp + {0}spmhil imp + + + {0}dr l. + {0}dr l. + {0}dr l. + {0}dr l. + {0}dr l. + + + cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Wb + {0} Wb + {0} Wb + {0} Wb + {0} Wb + + + solas + {0}solas + {0}sholas + {0}sholas + {0}solas + {0}solas + {0}oí @@ -8831,7 +9375,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}oí {0}oí {0}oí - {0}/oíche diff --git a/make/data/cldr/common/main/gaa.xml b/make/data/cldr/common/main/gaa.xml index 6e69d56b6a2..88a5c87207d 100644 --- a/make/data/cldr/common/main/gaa.xml +++ b/make/data/cldr/common/main/gaa.xml @@ -851,6 +851,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic otsi lɛ mli gbi + + Hɔgbaa ni eho + Hɔgbaa nɛɛ + Hɔgbaa ni baaba + LEEBI/SHWANE @@ -1155,9 +1160,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Afrika Anaigbɛ Be - Afrika Anaigbɛ Be Yɛ Fɛi Beiaŋ - Afrika Anaigbɛ Be Yɛ Latsa Beiaŋ + Afrika Anaigbɛ Be @@ -1247,6 +1250,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Greenland Anaigbɛ Be Yɛ Latsa Beiaŋ + + + Hawaii-Aleutia Be Yɛ Fɛi Beiaŋ + + Hawaii-Aleutia Be @@ -1304,6 +1312,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) {0} {1} @@ -1931,13 +1941,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic und gaa - {given} {given2} {surname} {credentials} + {title} {given} {given2} {surname} {surname2} {given-informal} {surname} - {title} {surname} + {title} {surname} {given-informal} @@ -2033,7 +2043,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-informal-monogram-allCaps} - {surname-core}, {given} {given2} {surname-prefix} + {surname-prefix} {surname-core}, {given} {given2} {surname}, {given-informal} diff --git a/make/data/cldr/common/main/gd.xml b/make/data/cldr/common/main/gd.xml index e9b23423ac4..410a9874005 100644 --- a/make/data/cldr/common/main/gd.xml +++ b/make/data/cldr/common/main/gd.xml @@ -295,6 +295,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tyap Makonde Kabuverdianu + Qʼeqchiʼ Kenyang Koro Kongo @@ -328,6 +329,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafia Gearmailtis Chologne Cùrdais + Cùrdais + Kurmanji Kumyk Kutenai Komi @@ -528,6 +531,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Koyraboro Senni Sango Seann-Ghaeilge + Samogitis Sèirb-Chròthaisis Tachelhit Shan @@ -559,6 +563,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sukuma Susu Cànan Sumer + Sunwar Suainis Kiswahili Kiswahili na Congo @@ -678,6 +683,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -814,6 +820,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -834,6 +841,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -844,6 +852,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -1299,63 +1308,111 @@ CLDR data files are interpreted according to the LDML specification (http://unic Fòrmat an airgeadra Òrdugh an t-seòrsachaidh Airgeadra + Riochdachadh nan Emoji Cearcall an ama (12 no 24 uair) Stoidhle nam brisidhean-loidhe + Brisidhean loidhne am broinn fhaclan Siostam tomhais Àireamhan + Briseadh rosgrainn às dèidh giorr. - Am Mìosachan Budach + Am Mìosachan Bùdach + Bùdach Am Mìosachan Sìneach + Sìneach Am Mìosachan Coptach + Coptach Mìosachan Dangi + Dangi Mìosachan na h-Itioipe + Itiopach Mìosachan Itiopach Amete Alem + Amete Alem Itiopach Am Mìosachan Griogarach + Griogarach Am Mìosachan Eabhrach + Eabhrach Mìosachan Nàiseanta nan Innseachan + Nàiseanta nan Innseachan Am Mìosachan Hijri + Hijri Am Mìosachan Hijri (clàrach, linn sìobhalta) + Hijri (clàrach, linn sìobhalta) Am Mìosachan Hijri (Aràibia nan Sabhd, sealladh) Am Mìosachan Hijri (clàrach, linn reul-eòlach) + Hijri (clàrach, linn reul-eòlach) Am Mìosachan Hijri (Umm al-Qura) + Hijri (Umm al-Qura) Mìosachan ISO-8601 Am Mìosachan Seapanach + Seapanach Am Mìosachan Pearsach + Pearsach Mìosachan Poblachd na Sìne + Poblachd na Sìne Fòrmat airgeadra na cunntasachd + Cunntasachd Fòrmat stannardach an airgeadra - Òrdugh seòrsachaidh na Sìnise Tradaiseanta - Big5 + Stannardach Òrdugh seòrsachaidh roimhe a chum co-chòrdalachd + Co-chòrdalachd Òrdugh seòrsachaidh an fhaclair + Faclair Òrdugh seòrsachaidh Unicode bunaiteach + Unicode bunaiteach Òrdugh seòrsachaidh Emoji Òrdugh seòrsachaidh Eòrpach - Òrdugh seòrsachaidh na Sìnise Simplichte - GB2312 Òrdugh seòrsachaidh nan leabhraichean-fòn + Leabhar-fòn + Tar-litreachadh Òrdugh seòrsachaidh Pinyin + Pinyin Lorg coitcheann + Coitcheann Lorg leis a’ chiad chonnrag Hangul Òrdugh seòrsachaidh stannardach + Stannardach Òrdugh nan stràcan + Stràcan Òrdugh seòrsachaidh tradaiseanta + Tradaiseanta Òrdugh an fhreumha ’s nan stràcan + Freumh is stràcan Òrdugh seòrsachaidh Zhuyin + Zhuyin Làn-Leud Leth-Leud Àireamhach + Bunaiteach + Emoji + Teacsa Cleoc 12 uair a thìde (0–11) + 12 (0–11) Cleoc 12 uair a thìde (1–12) + 12 (1–12) Cleoc 24 uair a thìde (0–23) + 24 (0–23) Cleoc 24 uair a thìde (1–24) + 24 (1–24) Brisidhean-loidhe fuasgailte + Fuasgailte Brisidhean-loidhe àbhaisteach + Àbhaisteach Brisidhean-loidhe teanna + Teann + Bris na h-uile + Cùm na h-uile + Àbhaisteach + Cùm ann an abairt Tar-litreachadh BGN nan Stàitean Aonaichte Tar-litreachadh GEGN nan Dùthchannan Aonaichte Tomhas meatrach + Meatrach Tomhas impireil + RA Tomhas nan Stàitean Aonaichte + SA Àireamhan Ahom Àireamhan Arabach-Innseanach Àireamhan Arabach-Innseanach leudaichte @@ -1443,9 +1500,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àireamhan na Tibeitise Àireamhan Tirhuta Àireamhan Tangsa + Àireamhan Tolong Siki Àireamhan Vai Àireamhan Warang Citi Àireamhan Wancho + Dheth + Air Meatrach @@ -1816,6 +1876,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'aig' {0} + + {0} {1} + @@ -1824,6 +1887,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'aig' {0} + + {0} {1} + @@ -1832,6 +1898,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {0} {1} + @@ -1840,24 +1909,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {0} {1} + hB h:mmB h:mm:ssB + E hB E h:mmB E h:mm:ssB E, d + E ha E h:mma E h:mm:ssa y G + M/y G d/M/y GGGGG + E, d/M/y G LLL y G d'mh' MMM y G E, d'mh' MMM y G ha h:mma h:mm:ssa + ha v + HH'u' v d/M E, d/M dd/MM @@ -1882,11 +1960,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -2220,6 +2296,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'aig' {0} + + {0} {1} + @@ -2228,6 +2307,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'aig' {0} + + {0} {1} + @@ -2236,6 +2318,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {0} {1} + @@ -2244,26 +2329,37 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {0} {1} + hB h:mmB h:mm:ssB - E h:mmB - E h:mm:ssB + E, hB + E, h:mmB + E, h:mm:ssB E, d - E h:mma - E h:mm:ss a + E, ha + E, h:mma + E, HH:mm + E, h:mm:ss a + E, HH:mm:ss y G + M/y G d/M/y G + E, d/M/y G LLL y G - d'mh' MMM y G - E, d'mh' MMM y G + d MMM y G + E, d MMM y G ha h:mma h:mm:ss a h:mm:ss a v h:mma v + ha v + HH'u' v d/M E, d/M dd/MM @@ -2291,11 +2387,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -3261,11 +3355,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tìde samhraidh: {0} Bun-àm: {0} - - HST - HST - HDT - Honolulu @@ -3285,15 +3374,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tiranë - - Río Gallegos - - - Tucumán - - - Córdoba - Sidni @@ -3321,27 +3401,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Brùnaigh - - Eirunepé - - - Cuiabá - - - Santarém - - - Belém - - - Araguaína - - - São Paulo - - - Maceió - A’ Bheilìs @@ -3363,12 +3422,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Rapa Nui - - Ürümqi - - - Bogotá - Costa Rìcea @@ -3390,12 +3443,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Doiminicea - - Galápagos - - - El Aaiún - Asmarà @@ -3496,7 +3543,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Biškek - Enderbury + Eilean Canton Naomh Crìstean @@ -3531,15 +3578,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Rīga - - Chișinău - Rangun - - Khovd - Macàthu @@ -3555,9 +3596,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Na h-Eileanan Mhaladaibh - - Mazatlán - Cathair Mheagsago @@ -3594,9 +3632,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mosgo - - Mahé - Singeapòr @@ -3615,9 +3650,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kergelenn - - Lomé - Dušanbe @@ -3683,9 +3715,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Àm Afraga an Iar - Bun-àm Afraga an Iar - Tìde Samhraidh Afraga an Iar + Àm Afraga an Iar @@ -4128,6 +4158,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àm Guidheàna + + + Bun-àm nan Eileanan Hawai’i ’s Aleutach + + + HAST + + Àm nan Eileanan Hawai’i ’s Aleutach @@ -4149,9 +4187,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Àm Hovd - Bun-àm Hovd - Tìde samhraidh Hovd + Àm Khovd + Bun-àm Khovd + Tìde samhraidh Khovd @@ -4746,7 +4784,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -6992,6 +7029,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic dolaran Sìombabuthach (1980–2008) dolar Sìombabuthach (1980–2008) + + Òr Sìombabuthach + Òr Sìombabuthach + Òr Sìombabuthach + Òr Sìombabuthach + Òr Sìombabuthach + Dolar Sìombabuthach (2009) dolar Sìombabuthach (2009) @@ -7266,7 +7310,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} nithean {0} nì - + + pàirt + {0} phàirt + {0} phàirt + {0} pàirtean + {0} pàirt + + pàirt sa mhillean {0} phàirt sa mhillean {0} phàirt sa mhillean @@ -7297,6 +7348,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mòlaichean {0} mòl + + de ghlùcos + {0} de ghlùcos + {0} de ghlùcos + {0} de ghlùcos + {0} de ghlùcos + liotair sa chilemeatair {0} liotair sa chilemeatair @@ -7993,6 +8051,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} milimeatairean de dh’airgead-beò {0} milimeatair de dh’airgead-beò + + de dh’airgead-beò + {0} de dh’airgead-beò + {0} de dh’airgead-beò + {0} de dh’airgead-beò + {0} de dh’airgead-beò + punnd san òirleach cheàrnagach {0} phunnd san òirleach cheàrnagach @@ -8232,6 +8297,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} cupannan meatrach {0} cupa meatrach + + unnsa-dighe meatrach + {0} unnsa-dighe meatrach + {0} unnsa-dighe meatrach + {0} unnsachan-dighe meatrach + {0} unnsa-dighe meatrach + {0} acair-throigh {0} acair-throigh @@ -8272,12 +8344,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} pinntean {0} pinnt + + pinnt ìmpireil + {0} phinnt ìmpireil + {0} phinnt ìmpireil + {0} phinntean ìmpireil + {0} pinnt ìmpireil + {0} chupa {0} chupa {0} cupannan {0} cupa + + cupa ìmpireil + {0} chupa ìmpireil + {0} chupa ìmpireil + {0} cupannan ìmpireil + {0} cupa ìmpireil + unnsa-dighe {0} unnsa-dighe @@ -8357,14 +8443,147 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} càrtan ìmpireil {0} càrt ìmpireil - - solas - {0} sholas - {0} sholas - {0} solasan - {0} solas + + sterèidean + {0} sterèidean + {0} sterèidean + {0} sterèideanan + {0} sterèidean - + + katal + {0} katal + {0} katal + {0} katalaichean + {0} katal + + + coulomb + {0} choulomb + {0} choulomb + {0} coulombaichean + {0} coulomb + + + farad + {0} fharad + {0} fharad + {0} faradaichean + {0} farad + + + henry + {0} henry + {0} henry + {0} henry + {0} henry + + + siemens + {0} siemens + {0} shiemens + {0} siemens + {0} siemens + + + caloraidh [IT] + {0} chaloraidh [IT] + {0} chaloraidh [IT] + {0} caloraidhean [IT] + {0} caloraidh [IT] + + + aonad-teasa Breatannach [IT] + {0} aonad-teasa Breatannach [IT] + {0} aonad-teasa Breatannach [IT] + {0} aonadan-teasa Breatannach [IT] + {0} aonad-teasa Breatannach [IT] + + + becquerel + {0} bhecquerel + {0} bhecquerel + {0} becquerelichean + {0} becquerel + + + sievert + {0} sievert + {0} shievert + {0} sievert + {0} sievert + + + gray + {0} ghray + {0} ghray + {0} gray + {0} gray + + + forsa-cileagram + {0} fhorsa-cileagram + {0} fhorsa-cileagram + {0} forsan-cileagram + {0} forsa-cileagram + + + ròd + {0} ròd + {0} ròd + {0} ròidean + {0} ròd + + + sèine + {0} sèine + {0} shèine + {0} sèineachan + {0} sèine + + + tesla + {0} tesla + {0} tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber + {0} weber + {0} weber + + + rankine + {0} rankine + {0} rankine + {0} rankine + {0} rankine + + + cola-deug + {0} chola-deug + {0} chola-deug + {0} cola-deug + {0} cola-deug + + + sluga + {0} shluga + {0} shluga + {0} slugaichean + {0} sluga + + + de pheatrail-ionnannachd + {0} de pheatrail-ionnannachd + {0} de pheatrail-ionnannachd + {0} de pheatrail-ionnannachdan + {0} de pheatrail-ionnannachd + + pàirt sa bhillean {0} phàirt sa bhillean {0} phàirt sa bhillean @@ -8372,12 +8591,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} pàirt sa bhillean - oidhche {0} oidhche {0} oidhche {0} oidhcheannan {0} oidhche - {0}/oidhche comhair combaist @@ -8472,6 +8689,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} nith {0} nì + + pàirt + {0} phàirt + {0} phàirt + {0} pàirt. + {0} pàirt + + + pàirt/millean + sa cheud @@ -8488,6 +8715,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mòl {0} mòl + + Glc + {0} Glc + {0} Glc + {0} Glc + {0} Glc + liotair/km @@ -8776,6 +9010,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} gràinne {0} gràinne + + de Hg + {0} de Hg + {0} de Hg + {0} de Hg + {0} de Hg + in Hg @@ -8858,6 +9099,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic c-liotair + + {0} fl oz m. + {0} fl oz m. + {0} fl oz m. + {0} fl oz m. + acair-throigh @@ -8890,9 +9137,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic pinnt + + pt ìmp. + {0} pt ìmp. + {0} pt ìmp. + {0} pt ìmp. + {0} pt ìmp. + cupa + + cupa ìmp. + {0} c ìmp. + {0} c ìmp. + {0} c ìmp. + {0} c ìmp. + fl oz {0} fl oz @@ -8973,6 +9234,131 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} càrt ìmp. {0} càrt ìmp. + + {0} sr + {0} sr + {0} sr + {0} sr + + + {0} kat + {0} kat + {0} kat + {0} kat + + + {0} C + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + {0} F + + + {0} H + {0} H + {0} H + {0} H + + + {0} S + {0} S + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + {0} BTU-IT + {0} BTU-IT + {0} BTU-IT + {0} BTU-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + {0} kgf + {0} kgf + + + rd + {0} rd + {0} rd + {0} rd + {0} rd + + + ch + {0} ch + {0} ch + {0} ch + {0} ch + + + {0} T + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + {0} Wb + + + {0} °R + {0} °R + {0} °R + {0} °R + + + cld + {0} cld + {0} cld + {0} cld + {0} cld + + + {0} slug + {0} shlug + {0} slug + {0} slug + + + peatr-ionn + {0} pheatr-ionn + {0} pheatr-ionn + {0} peatr-ionn + {0} peatr-ionn + solas {0} sholas @@ -8980,7 +9366,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} solasan {0} solas - + pàirt/billean @@ -9119,7 +9505,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}nith {0}nì - + + pàirt + {0}phàirt + {0}phàirt + {0}pàirt. + {0}pàirt + + {0}ppm {0}ppm {0}ppm @@ -9140,6 +9533,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mòl {0}mòl + + Glc + {0}Glc + {0}Glc + {0}Glc + {0}Glc + L/km {0}L/km @@ -9802,6 +10202,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mm Hg {0}mm Hg + + de Hg + {0} de Hg + {0} de Hg + {0} de Hg + {0} de Hg + {0}psi {0}psi @@ -10010,6 +10417,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mc {0}mc + + {0} fl oz m. + {0} fl oz m. + {0} fl oz m. + {0} fl oz m. + ac ft {0}ac ft @@ -10049,12 +10462,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}pt {0}pt + + pt ìmp. + {0} pt ìmp. + {0} pt ìmp. + {0} pt ìmp. + {0} pt ìmp. + {0}c {0}c {0}c {0}c + + cupa ìmp. + {0} c ìmp. + {0} c ìmp. + {0} c ìmp. + {0} c ìmp. + {0}fl oz {0}fl oz @@ -10133,21 +10560,145 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}càrt ì. {0}càrt ì. + + {0}sr + {0}sr + {0}sr + {0}sr + + + {0}kat + {0}kat + {0}kat + {0}kat + + + {0}C + {0}C + {0}C + {0}C + + + {0}F + {0}F + {0}F + {0}F + + + {0}H + {0}H + {0}H + {0}H + + + {0}S + {0}S + {0}S + {0}S + + + cal-IT + {0}cal-IT + {0}cal-IT + {0}cal-IT + {0}cal-IT + + + {0}BTU-IT + {0}BTU-IT + {0}BTU-IT + {0}BTU-IT + + + {0}Bq + {0}Bq + {0}Bq + {0}Bq + + + {0}Sv + {0}Sv + {0}Sv + {0}Sv + + + {0}Gy + {0}Gy + {0}Gy + {0}Gy + + + {0}kgf + {0}kgf + {0}kgf + {0}kgf + + + rd + {0}rd + {0}rd + {0}rd + {0}rd + + + ch + {0}ch + {0}ch + {0}ch + {0}ch + + + {0}T + {0}T + {0}T + {0}T + + + {0}Wb + {0}Wb + {0}Wb + {0}Wb + + + {0}°R + {0}°R + {0}°R + {0}°R + + + cld + {0}cld + {0}cld + {0}cld + {0}cld + + + {0}slug + {0}shlug + {0}slug + {0}slug + + + peatr-ionn + {0}pheatr-ionn + {0}pheatr-ionn + {0}peatr-ionn + {0}peatr-ionn + - solas {0}sholas {0}sholas {0}solas. {0}solas - + + ppb {0}ppb {0}ppb {0}ppb {0}ppb - oidhche {0}oidh. {0}oidh. {0}oidh. @@ -10407,7 +10958,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-initial} {given2-initial} {surname} - {given-informal} {given2-initial} + {given-informal} {given-vocative} {surname-vocative} diff --git a/make/data/cldr/common/main/gl.xml b/make/data/cldr/common/main/gl.xml index 2a172194808..d67fa69ac95 100644 --- a/make/data/cldr/common/main/gl.xml +++ b/make/data/cldr/common/main/gl.xml @@ -46,6 +46,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ acerbaixano azerí baxkir + baluchi balinés basaa belaruso @@ -236,6 +237,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurdo + kurdo + kurdo setentrional kumyk komi córnico @@ -634,6 +637,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Colombia Illa Clipperton + Sark Costa Rica Cuba Cabo Verde @@ -875,34 +879,53 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ordenación numérica forza de ordenación moeda + representación como emoji ciclo horario (12 ou 24) estilo de quebra de liña + quebra de liña dentro das palabras sistema internacional de unidades números + quebra de liña tras as abreviaturas fuso horario variante rexional uso privado calendario budista + budista calendario chinés + chinés calendario copto + copto calendario dangi + dangi calendario etíope + etíope calendario etíope amete alem + etíope amete alem calendario gregoriano + gregoriano calendario hebreo + hebreo Calendario nacional indio calendario da héxira + héxira calendario da héxira (tabular, época civil) + héxira (tabular, época civil) Calendario islámico (Arabia Saudita, calendario da héxira (Umm al-Qura) + héxira (Umm al-Qura) calendario ISO-8601 calendario xaponés + xaponés calendario persa + persa calendario Minguo + MInguo formato de moeda contable + contable formato de moeda estándar + estándar Clasificar símbolos Clasificar ignorando símbolos Clasificar acentos con normalidade @@ -912,16 +935,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Clasificar primeiro as maiúsculas Clasificar sen distinguir entre maiúsculas e minúsculas Clasificar distinguindo entre maiúsculas e minúsculas - Orde de clasificación chinesa tradicional - Big5 Criterio de ordenación do dicionario criterio de ordenación Unicode predeterminado - orde de clasifcación chinesa simplificada - GB2312 + Unicode predeterminado orde de clasificación da guía telefónica Orde de clasificación fonética Orde de clasificación pinyin busca de carácter xeral + busca Clasificar por consonante inicial hangul criterio de ordenación estándar + estándar Orde de clasificación polo número de trazos Orde de clasificación tradicional Criterio de ordenación radical-trazo @@ -937,18 +961,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ancho completo ancho medio Numérico + predeterminada + emoji + texto sistema de 12 horas (0–11) + 12 (0–11) sistema de 12 horas (1–12) + 12 (1–12) sistema de 24 horas (0–23) + 24 (0–23) sistema de 24 horas (1–24) + 24 (1–24) estilo de quebra de liña flexible + flexible estilo de quebra de liña normal - estilo de quebra de liña estrita + normal + estilo de quebra de liña estrito + estrito + quebrar todo + manter todo + normal + manter en frases transliteración do BGN transliteración do UNGEGN sistema métrico decimal + métrico sistema imperial de unidades + Reino Unido sistema estadounidense de unidades + EUA díxitos indoarábigos díxitos indoarábigos ampliados numeración armenia @@ -993,6 +1034,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ díxitos tibetanos Numeros tradicionais díxitos vai + activado + desactivado métrico decimal @@ -1016,9 +1059,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1078,18 +1118,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, h:mm B E, h:mm:ss B E d + E, h a E, h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + M/y G dd/MM/y GGGGG + E, d/M/y G MMM 'de' y G d 'de' MMM 'de' y G E, d 'de' MMM 'de' y G - h a h:mm a h:mm:ss a + HH 'h' v dd/MM E, dd/MM dd/MM @@ -1120,12 +1163,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ QQQQ 'de' y G - - h B – h B - - - h:mm B – h:mm B - y G – y G y–y G @@ -1477,23 +1514,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E, h B E, h:mm B E, h:mm:ss B E d + E, h a E, h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + M/y G d/M/y GGGGG + E, d/M/y G MMM 'de' y G d 'de' MMM 'de' y G E, d 'de' MMM 'de' y G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH 'h' v d/M E, d/M dd/MM @@ -1517,12 +1558,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ w.'ª' 'semana' 'de' Y - - h B – h B - - - h:mm B – h:mm B - y G – y G y–y G @@ -1561,10 +1596,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d 'de' MMM – E, d 'de' MMM 'de' y G E, d 'de' MMM 'de' y – E, d 'de' MMM 'de' y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1575,10 +1606,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -2082,27 +2109,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Anguila - - Tirana - Iereván - - Showa - - - Dumont-d’Urville - - - Río Gallegos - - - Tucumán - - - Córdoba - Viena @@ -2136,33 +2145,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ A Paz - - Eirunepé - Río Branco - - Cuiabá - - - Santarém - - - Belém - - - Araguaína - - - São Paulo - Baía - - Maceió - Saint John’s @@ -2172,11 +2160,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Illa de Pascua - - Ürümqi - - - Bogotá + + Coihaique A Habana @@ -2299,10 +2284,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Amán - Enderbury - - - Comores + illa Kantón Saint Kitts @@ -2355,9 +2337,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maldivas - - Mazatlán - Cidade de México @@ -2433,9 +2412,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riad - - Mahé - Khartún @@ -2463,12 +2439,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damasco - - N’Djamena - - - Lomé - Achkhabad @@ -2529,6 +2499,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ hora de Acre + hora estándar de Acre + hora de verán de Acre @@ -2553,9 +2525,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - hora de África Occidental - hora estándar de África Occidental - hora de verán de África Occidental + hora de África Occidental @@ -2930,6 +2900,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ hora da Güiana + + + hora estándar de Hawai-illas Aleutianas + + hora de Hawai-illas Aleutianas @@ -3501,6 +3476,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + {0} {1} + @@ -3512,6 +3490,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) @@ -3522,42 +3506,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 0 0 0 - 0 M¤ - 0 M ¤ - 0 M¤ - 0 M ¤ - 00 M¤ - 00 M ¤ - 00 M¤ - 00 M ¤ - 000 M¤ - 000 M ¤ - 000 M¤ - 000 M ¤ - 0000 M¤ - 0000 M ¤ - 0000 M¤ - 0000 M ¤ - 00000 M¤ - 00000 M ¤ - 00000 M¤ - 00000 M ¤ - 000000 M¤ - 000000 M ¤ - 000000 M¤ - 000000 M ¤ - 0 B¤ - 0 B ¤ - 0 B¤ - 0 B ¤ - 00 B¤ - 00 B ¤ - 00 B¤ - 00 B ¤ - 000 B¤ - 000 B ¤ - 000 B¤ - 000 B ¤ + 0 M ¤ + 0 M ¤ + 00 M ¤ + 00 M ¤ + 000 M ¤ + 000 M ¤ + 0000 M ¤ + 0000 M ¤ + 00000 M ¤ + 00000 M ¤ + 000000 M ¤ + 000000 M ¤ + 0 B ¤ + 0 B ¤ + 00 B ¤ + 00 B ¤ + 000 B ¤ + 000 B ¤ {0} ¤¤ @@ -3873,7 +3839,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ pesetas , - . + birr etíope @@ -4542,6 +4508,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dólares do Caribe Oriental XCD + + florín caribeño + florín caribeño + florín caribeño + ƒ + franco CFA (BCEAO) franco CFA (BCEAO) @@ -4581,6 +4553,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kwacha zambiano kwachas zambianos + + ouro de Zimbabwe + ouro de Zimbabwe + ouro de Zimbabwe + {0} día @@ -4794,7 +4771,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} unidade {0} unidades - + + partes + {0} parte + {0} partes + + partes por millón {0} parte por millón {0} partes por millón @@ -4813,6 +4795,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} moles + + de glicosa + {0} de glicosa + {0} de glicosa + litros por quilómetro {0} litro por quilómetro @@ -5316,6 +5303,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milímetro de mercurio {0} milímetros de mercurio + + de mercurio + {0} de mercurio + {0} de mercurio + libras por polgada cadrada {0} libra por polgada cadrada @@ -5491,6 +5483,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} cunca métrica {0} cuncas métricas + + onzas líquidas métricas + {0} onza líquida métrica + {0} onzas líquidas métricas + {0} acre-pé {0} acre-pés @@ -5580,20 +5577,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} cuarto imperial {0} cuartos imperiais - - luz - {0} luz - {0} luz + + estereorradiáns + {0} estereorradián + {0} estereorradiáns - + + katais + {0} katal + {0} katais + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + calorías internacionais + {0} caloría internacional + {0} calorías internacionais + + + becquereis + {0} becquerel + {0} becquereis + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + quilogramos forza + {0} quilogramo forza + {0} quilogramos forza + + + teslas + {0} tesla + {0} teslas + + + wébers + {0} wéber + {0} wébers + + partes por mil millóns {0} parte por mil millóns {0} partes por mil millóns - noites - {0} noite - {0} noites {0} por noite @@ -5653,6 +5707,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ude. {0} udes. + + parte + {0} parte + {0} partes + + + partes/millón + {0} % {0} % @@ -5665,6 +5727,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + {0} Glc + {0} Glc + litros/km {0} l/km @@ -5898,6 +5965,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + {0} Hg + {0} Hg + millas/hora @@ -5962,6 +6033,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mc + + {0} fl oz m. + {0} fl oz m. + acre-pés @@ -6044,12 +6119,65 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} cto. imp. {0} ctos. imp. + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal IT + {0} cal IT + {0} cal IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + luz {0} luz {0} luz - + partes/mil millóns {0} ppmm {0} ppmm @@ -6093,6 +6221,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kt + + parte + {0} parte + {0} partes + + + Glc + {0} Glc + {0} Glc + l/km @@ -6124,9 +6262,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ día - {0} d - {0} d - {0}/d + {0} d. + {0} d. + {0}/d. Ω @@ -6200,6 +6338,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ W + + {0} Hg + {0} Hg + mi/h @@ -6222,6 +6364,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ l + + {0} fl oz m. + {0} fl oz m. + ac ft @@ -6240,21 +6386,61 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ cto. imp. - - luz - {0} luz - {0} luz + + {0} sr + {0} sr - + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal IT + {0} cal IT + {0} cal IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + ppmm - {0} ppmm - {0} ppmm - - - noites - {0} noite - {0} noites - {0}/noite diff --git a/make/data/cldr/common/main/gsw.xml b/make/data/cldr/common/main/gsw.xml index fda45bd6c1b..b496e7c6c7d 100644 --- a/make/data/cldr/common/main/gsw.xml +++ b/make/data/cldr/common/main/gsw.xml @@ -913,8 +913,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bürgerlich islaamisch Kaländer Japaanisch Kaländer Kaländer vor Republik Chiina - Tradizionells Chineesisch - Big5 - Veräifachts Chineesisch - GB2312 Telifonbuech-Sortiirregle Pinyin-Sortiirregle Strichfolg @@ -1739,9 +1737,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Weschtafrikanischi Ziit - Weschtafrikanischi Schtandardziit - Weschtafrikanischi Summerziit + Weschtafrikanischi Ziit @@ -1819,7 +1815,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + ' @@ -1891,6 +1887,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/gu.xml b/make/data/cldr/common/main/gu.xml index f3e353e8710..00111a0489d 100644 --- a/make/data/cldr/common/main/gu.xml +++ b/make/data/cldr/common/main/gu.xml @@ -291,6 +291,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ બફિયા કોલોગ્નિયન કુર્દિશ + કુર્દિશ + કુરમાનજી કુમીક કુતેનાઇ કોમી @@ -769,7 +771,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ સબ-સહારન આફ્રિકા લેટિન અમેરિકા એસેન્શન આઇલેન્ડ - ઍંડોરા + એન્ડોરા યુનાઇટેડ આરબ અમીરાત અફઘાનિસ્તાન ઍન્ટિગુઆ અને બર્મુડા @@ -783,7 +785,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ઑસ્ટ્રિયા ઑસ્ટ્રેલિયા અરુબા - ઑલેન્ડ આઇલેન્ડ્સ + ઑલૅન્ડ આઇલૅન્ડ્સ અઝરબૈજાન બોસ્નિયા અને હર્ઝેગોવિના બારબાડોસ @@ -802,12 +804,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ બ્રાઝિલ બહામાસ ભૂટાન - બૌવેત આઇલેન્ડ + બૌવેત આઇલૅન્ડ બોત્સ્વાના બેલારુસ બેલીઝ કેનેડા - કોકોઝ (કીલીંગ) આઇલેન્ડ્સ + કોકોઝ (કીલીંગ) આઇલૅન્ડ્સ કોંગો - કિંશાસા કોંગો (ડીઆરસી) સેન્ટ્રલ આફ્રિકન રિપબ્લિક @@ -820,13 +822,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ચિલી કૅમરૂન ચીન - કોલમ્બિયા + કોલંબિયા ક્લિપરટન આઇલેન્ડ + સાર્ક કોસ્ટા રિકા ક્યુબા કૅપ વર્ડે ક્યુરાસાઓ - ક્રિસમસ આઇલેન્ડ + ક્રિસમસ આઇલૅન્ડ સાયપ્રસ ચેકીયા ચેક રિપબ્લિક @@ -849,10 +852,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ યુરોઝોન ફિનલેન્ડ ફીજી - ફૉકલેન્ડ આઇલેન્ડ્સ - ફૉકલેન્ડ આઇલેન્ડ્સ (આઇલાસ માલવિનાસ) + ફૉકલૅન્ડ આઇલૅન્ડ્સ + ફૉકલૅન્ડ આઇલૅન્ડ્સ (આઇલાસ માલવિનાસ) માઇક્રોનેશિયા - ફેરો આઇલેન્ડ્સ + ફેરો આઇલૅન્ડ્સ ફ્રાંસ ગેબન યુનાઇટેડ કિંગડમ @@ -876,14 +879,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ગયાના હોંગકોંગ SAR ચીન હોંગકોંગ - હર્ડ અને મેકડોનાલ્ડ આઇલેન્ડ્સ + હર્ડ અને મેકડોનાલ્ડ આઇલૅન્ડ્સ હોન્ડુરસ ક્રોએશિયા હૈતિ હંગેરી કૅનેરી આઇલેન્ડ્સ ઇન્ડોનેશિયા - આયર્લેન્ડ + આયરલૅન્ડ ઇઝરાઇલ આઇલ ઑફ મેન ભારત @@ -892,7 +895,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ચાગસ દ્વિપસમૂહ ઇરાક ઈરાન - આઇસલેન્ડ + આઇસલૅન્ડ ઇટાલી જર્સી જમૈકા @@ -955,7 +958,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ નેપાળ નૌરુ નીયુ - ન્યુઝીલેન્ડ + ન્યુઝીલૅન્ડ ઓટેરોઆ ન્યૂઝીલેન્ડ ઓમાન પનામા @@ -1049,8 +1052,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ અજ્ઞાત પ્રદેશ - ઈંગ્લેન્ડ - સ્કોટલેન્ડ + ઈંગ્લૅન્ડ + સ્કૉટલૅન્ડ વેલ્સ @@ -1069,35 +1072,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ આંકડાકીય સૉર્ટિંગ સૉર્ટિંગ શક્તિ ચલણ + ઇમોજી પ્રસ્તુતિ કલાકનું આવર્તન (12 વિ.24) રેખા વિરામ પ્રકાર + શબ્દોમાં રેખા વિરામ માપદંડ પદ્ધતિ આંકડાઓ + સંક્ષેપ પછી વાક્ય વિરામ સમય ઝોન લોકેલ વેરિએન્ટ ખાનગી-ઉપયોગ બુદ્ધિસ્ટ કેલેન્ડર + બુદ્ધિસ્ટ ચાઇનીઝ કેલેન્ડર + ચાઇનીઝ કોપ્ટિક કેલેન્ડર + કોપ્ટિક ડાંગી કેલેન્ડર + ડાંગી ઇથિઓપિક કેલેન્ડર + ઇથિઓપિક ઇથિઓપિક એમેટ એલેમ કેલેન્ડર + ઇથિઓપિક એમેટ એલેમ ગ્રેગોરિઅન કેલેન્ડર + ગ્રેગોરિઅન હિબ્રુ કેલેન્ડર + હિબ્રુ ભારતીય રાષ્ટ્રીય કેલેન્ડર + ભારતીય રાષ્ટ્રીય હિજરી કેલેન્ડર + હિજરી હિજરી-નાગરિક કેલેન્ડર + હિજરી-નાગરિક કેલેન્ડર ઇસ્લામિક કેલેન્ડર (સાઉદી અરેબિયા, નિરીક્ષણ) ઇસ્લામિક કેલેન્ડર (ટેબ્યુલર, ખગોળશાસ્ત્રીય યુગ) હિજરી કેલેન્ડર (ઉમ અલ-કુરા) + હિજરી (ઉમ અલ-કુરા) ISO-8601 કેલેન્ડર જાપાનીઝ કેલેન્ડર + જાપાનીઝ પર્શિયન કેલેન્ડર + પર્શિયન મિંગુઓ કેલેન્ડર + મિંગુઓ હિસાબી ચલણી બંધારણ + હિસાબ પ્રમાણભૂત ચલણી બંધારણ + પ્રમાણભૂત પ્રતીકોને સૉર્ટ કરો પ્રતીકોને અવગણીને સૉર્ટ કરો ઉચ્ચારોને સામાન્ય રીતે સૉર્ટ કરો @@ -1107,18 +1130,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ પ્રથમ અપરકેસ સૉર્ટ કરો કેસ સંવેદીને સૉર્ટ કરો કેસ સંવેદી સૉર્ટ કરો - પરંપરાગત ચાઇનિઝ સોર્ટ ક્રમબદ્ધ અગાઉનો સોર્ટ ક્રમ, સુસંગતતા માટે શબ્દકોશ અનુક્મ ડિફોલ્ટ યુનિકોડ સૉર્ટ ક્રમ + ડિફોલ્ટ યુનિકોડ યુરોપીયન ક્રમ આપવાના નિયમો - સરળીકૃત ચાઇનીઝ સૉર્ટ ક્રમ - GB2312 ફોનબુક અનુક્મ ધ્વન્યાત્મક સૉર્ટ ક્રમ પિનયિન અનુક્મ સામાન્ય-ઉદ્દેશ શોધ + શોધ હંગુલ પ્રારંભિક વ્યંજન દ્વારા શોધો માનક સૉર્ટ ક્રમ + માનક સ્ટ્રોક અનુક્મ પરંપરાગત અનુક્મ રેડિકલ-સ્ટ્રોક @@ -1134,18 +1158,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ પૂર્ણપહોળાઇ અર્ધપહોળાઈ સંખ્યા + ડિફૉલ્ટ + ઇમોજી + ટેક્સ્ટ 12 કલાકની સિસ્ટમ (0–11) + 12 (0–11) 12 કલાકની સિસ્ટમ (1–12) + 12 (1–12) 24 કલાકની સિસ્ટમ (0–23) + 24 (0–23) 24 કલાકની સિસ્ટમ (1–24) + 24 (1–24) શિથિલ રેખા વિરામ પ્રકાર + શિથિલ સામાન્ય રેખા વિરામ પ્રકાર + સામાન્ય ચુસ્ત રેખા વિરામ પ્રકાર + ચુસ્ત + તમામ વિરામ + તમામ રાખો + સામાન્ય + વાક્યાંશમાં રાખો US BGN UN GEGN દશાંશ પદ્ધતિ + દશાંશ રજવાડું માપદંડ પદ્ધતિ + યુકે અમેરિકન માપદંડ પદ્ધતિ + અમેરિકન અરેબિક-ભારતીય અંકો વિસ્તૃત અરેબિક-ઇન્ડિક અંકો અર્મેનિયન સંખ્યાઓ @@ -1190,6 +1231,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ તિબેટિયન અંકો પરંપરાગત અંકો વાઇ અંકો + બંધ + ચાલુ મેટ્રિક @@ -1206,7 +1249,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [઼ ૐ ં ઁ ઃ અ આ ઇ ઈ ઉ ઊ ઋ ૠ ઍ એ ઐ ઑ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ વ શ ષ સ હ ળ ઽ ા િ ી ુ ૂ ૃ ૄ ૅ ે ૈ ૉ ો ૌ ્] [\u200C\u200D ૰] [અ {અં} {અઃ} આ ઇ ઈ ઉ ઊ ઋ ઍ એ ઐ ઑ ઓ ઔ ક {ક્ષ} ખ ગ ઘ ઙ ચ છ જ {જ્ઞ} ઝ ઞ ટ ઠ ડ ઢ ણ ત {ત્ર} થ દ ધ ન પ ફ બ ભ મ ય ર લ વ શ ષ સ હ ળ] + [\- ‑ , . % ‰ + − 0 1 2 3 4 5 6 7 8 9] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] @@ -1230,12 +1275,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - એરા0 - એરા1 - - @@ -1257,12 +1296,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - એરા0 - એરા1 - - @@ -1293,17 +1326,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - {1} એ {0} વાગ્યે - {1} {0} - - {1} એ {0} વાગ્યે - @@ -1628,17 +1655,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - {1} એ {0} વાગ્યે - {1} {0} - - {1} એ {0} વાગ્યે - @@ -1652,6 +1673,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d + M/y G MMM, G y d MMM, G y E, d MMM, G y @@ -2154,7 +2176,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ક. + ક૰ + + + ક૰ મિનિટ @@ -2169,10 +2194,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - મિ. + મિ૰ + + + મિ૰ - સેકન્ડ + સેકંડ હમણાં {0} સેકંડમાં @@ -2221,7 +2249,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ઍંગ્વિલા - તિરાને + તિરાના યેરેવાન @@ -2547,6 +2575,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ઇસ્ટર + + કોહેક + પુન્ટા એરીનાઝ @@ -2812,10 +2843,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ફ્નોમ પેન્હ - એંડર્બરી - - - કેન્ટન + કેંટન આઇલૅન્ડ કિરિતિમાતી @@ -2872,7 +2900,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ સેંટ લુસિયા - વૅદુઝ + વડુઝ કોલંબો @@ -3491,9 +3519,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - પશ્ચિમ આફ્રિકા સમય - પશ્ચિમ આફ્રિકા માનક સમય - પશ્ચિમ આફ્રિકા ગ્રીષ્મ સમય + પશ્ચિમ આફ્રિકા સમય @@ -3876,6 +3902,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ગયાના સમય + + + હવાઇ-એલ્યુશિઅન માનક સમય + + હવાઈ-એલ્યુશિઅન સમય @@ -4525,8 +4556,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##,##0.00 - ¤ #,##,##0.00 - #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 ¤#,##,##0.00;(¤#,##,##0.00) @@ -4625,7 +4656,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ બોસ્નિયા અને હર્ઝેગોવિના રૂપાંતર યોગ્ય માર્ક - બાર્બાડિયન ડોલર + બાર્બાડિયન ડૉલર + બાર્બાડિયન ડૉલર + બાર્બાડિયન ડૉલર બાંગ્લાદેશી ટાકા @@ -4642,10 +4675,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ બુરુન્ડિયન ફ્રેંક - બર્મુડન ડોલર + બર્મુડન ડૉલર + બર્મુડન ડૉલર + બર્મુડન ડૉલર - બ્રુનેઇ ડોલર + બ્રુનેઇ ડૉલર + બ્રુનેઇ ડૉલર + બ્રુનેઇ ડૉલર બોલિવિયન બોલિવિયાનો @@ -4654,7 +4691,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ બ્રાઝિલીયન રિઆલ - બહામિયન ડોલર + બહામિયન ડૉલર + બહામિયન ડૉલર + બહામિયન ડૉલર ભુતાનિઝ એંગુલ્ત્રમ @@ -4670,7 +4709,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ બેલારુશિયન રૂબલ (2000–2016) - બેલિઝ ડોલર + બેલિઝ ડૉલર + બેલિઝ ડૉલર + બેલિઝ ડૉલર કેનેડિયન ડૉલર @@ -4733,7 +4774,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ યુરો - ફિજિઅન ડોલર + ફિજિઅન ડૉલર + ફિજિઅન ડૉલર + ફિજિઅન ડૉલર ફૉકલેન્ડ આઇલેંડ્સ પાઉન્ડ @@ -4762,7 +4805,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ગ્વાટેમાલા કુઇટ્ઝલ - ગયાનિઝ ડોલર + ગયાનિઝ ડૉલર + ગયાનિઝ ડૉલર + ગયાનિઝ ડૉલર હોંગ કોંગ ડૉલર @@ -4798,7 +4843,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ આઇસલેન્ડિક ક્રોના - જમૈકિયન ડોલર + જમૈકિયન ડૉલર + જમૈકિયન ડૉલર + જમૈકિયન ડૉલર જોર્ડનિયન દિનાર @@ -4843,7 +4890,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ શ્રી લંકન રૂપી - લિબેરિયન ડોલર + લિબેરિયન ડૉલર + લિબેરિયન ડૉલર + લિબેરિયન ડૉલર લેસોથો લોતી @@ -4967,7 +5016,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ સાઉદી રિયાલ - સોલોમન આઇલેંડ્સ ડોલર + સોલોમન આઇલૅન્ડ્સ ડૉલર + સોલોમન આઇલૅન્ડ્સ ડૉલર + સોલોમન આઇલૅન્ડ્સ ડૉલર સેશેલોઈ રૂપી @@ -4994,7 +5045,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ સોમાલી શિલિંગ - સૂરીનામિઝ ડોલર + સૂરીનામિઝ ડૉલર + સૂરીનામિઝ ડૉલર + સૂરીનામિઝ ડૉલર દક્ષિણ સુદાનિઝ પાઉન્ડ @@ -5031,7 +5084,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ તુર્કિશ લિરા - ત્રિનિદાદ અને ટોબેગો ડોલર + ત્રિનિદાદ અને ટોબેગો ડૉલર + ત્રિનિદાદ અને ટોબેગો ડૉલર + ત્રિનિદાદ અને ટોબેગો ડૉલર ન્યુ તાઇવાન ડૉલર @@ -5047,7 +5102,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ યુગાંડન શિલિંગ - યુઍસ ડોલર + યુઍસ ડૉલર + યુઍસ ડૉલર + યુઍસ ડૉલર ઉરુગ્વેયન પેસો @@ -5076,7 +5133,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ મધ્ય આફ્રિકન [CFA] ફ્રેંક્સ - ઇસ્ટ કેરિબિયન ડોલર + ઇસ્ટ કેરિબિયન ડૉલર + ઇસ્ટ કેરિબિયન ડૉલર + ઇસ્ટ કેરિબિયન ડૉલર + + + કૅરિબિયન ગિલ્ડર + કૅરિબિયન ગિલ્ડર + કૅરિબિયન ગિલ્ડર પશ્ચિમી આફ્રિકન [CFA] ફ્રેંક @@ -5101,6 +5165,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ઝામ્બિયન ક્વાચા + + ઝીંબાબિયન ગોલ્ડ + ઝીંબાબિયન ગોલ્ડ + ઝીંબાબિયન ગોલ્ડ + {0}+ @@ -5306,7 +5375,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} મિલિમોલ પ્રતિ લિટર {0} મિલિમોલ પ્રતિ લિટર - + + ભાગ + {0} ભાગ + {0} ભાગ + + masculine કણ પ્રતિ મિલિયન {0} કણ પ્રતિ મિલિયન @@ -5330,6 +5404,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + + ગ્લૂકોઝ + {0} ગ્લૂકોઝ + {0} ગ્લૂકોઝ + લીટર પ્રતિ કિલોમીટર {0} લીટર પ્રતિ કિલોમીટર @@ -5882,6 +5961,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} મેટ્રિક કપ {0} મેટ્રિક કપ + + મેટ્રિક ફ્લુઇડ ઔંસ + {0} બુશલ {0} બુશલ @@ -5922,21 +6004,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ઇમ્પીરિયલ ક્વૉર્ટ {0} ઇમ્પીરિયલ ક્વૉર્ટ - - લાઇટ - {0} લાઇટ - {0} લાઇટ + + કૅલરિ [IT] - + + ટેસ્લા + + પ્રતિ અબજ ભાગ - {0} પ્રતિ અબજ ભાગ - {0} પ્રતિ અબજ ભાગ - - - રાત - {0} રાત - {0} રાત - {0}/રાત મુખ્ય દિશા @@ -6113,7 +6188,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} વસ્તુ {0} વસ્તુ - + + ભાગ + {0} ભાગ + {0} ભાગ + + કણ/મિલિયન @@ -6130,6 +6210,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} મોલ {0} મોલ + + ગ્લૂકોઝ + {0} ગ્લૂકોઝ + {0} ગ્લૂકોઝ + લીટર/કિમી {0} લીટર/કિમી @@ -6656,12 +6741,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ચપટી {0} ચપટી + + કૅલ [IT] + લાઇટ {0} લાઇટ {0} લાઇટ - + ભાગ/અબજ {0} પ્રતિ અબજ ભાગ {0} પ્રતિ અબજ ભાગ @@ -6777,7 +6865,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmol/L - + + ભાગ + {0} ભાગ + {0} ભાગ + + ppm @@ -6789,6 +6882,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + ગ્લૂકોઝ + {0} ગ્લૂકોઝ + {0} ગ્લૂકોઝ + {0}લિ/100કિમી {0}લિ/100કિમી @@ -6923,20 +7021,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} dstspn-Imp {0} dstspn-Imp - - લાઇટ - {0} લાઇટ - {0} લાઇટ - - - {0} પ્રતિ અબજ ભાગ - {0} પ્રતિ અબજ ભાગ - - - રાત - {0} રાત - {0} રાત - {0}/રાત + + કૅલ૰ [IT] diff --git a/make/data/cldr/common/main/ha.xml b/make/data/cldr/common/main/ha.xml index f16d12fa8a0..1afd755e2e6 100644 --- a/make/data/cldr/common/main/ha.xml +++ b/make/data/cldr/common/main/ha.xml @@ -16,7 +16,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Achinese Adangme Adyghe - Afirkanci + Afrikaans Aghem Ainu Akan @@ -41,6 +41,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Azerbaijanci Azeri Bashkir + Baluchi Balenesanci Basaa Belarusanci @@ -111,8 +112,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Girkanci Turanci Turanci Ostareliya - Turanci (Biritaniya) - Turanci (Amurka) Esperanto Sifaniyanci Sifaniyancin Latin Amirka @@ -155,7 +154,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Haida na Kudanci Ibrananci Harshen Hindi - Harshen Hindi (Latin) Hiligaynon Hmong Kuroshiyan @@ -219,6 +217,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafia Colognian Kurdanci + Kurdanci + Kurmanji Kumyk Komi Cornish @@ -295,6 +295,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nias Niuean Holanci + Flemish Kwasio Norwegian Nynorsk Ngiemboon @@ -325,7 +326,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Pijin Harshen Polan Maliseet-Passamaquoddy - Ferusawa + Yaren Prussia Pashtanci Harshen Potugis Harshen Potugis na Birazil @@ -375,7 +376,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sabiyan Sranan Tongo Swati - Sesotanci + Kudancin Sotho Straits Salish Harshen Sundanese Sukuma @@ -602,6 +603,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sin Kolambiya Tsibirin Clipperton + Sark Kwasta Rika Kyuba Tsibiran Cape Verde @@ -827,43 +829,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yanayin Kudi Tsarin Rabewa Kudin Kasa + Gabatar da Imoji Zagayen Awowi (12 da 24) Salo na Raba Layi + Layi Zai Karye tsakanin Kalmomi Tsarin Awo Lambobi + Jimlar ta Karye Bayan Gajarcewa. Kalandar Buddist + Mabiyin addinin Buddha Kalandar Sin + Ɗan ƙasar Sin Kalandar Coptic + Coptic Kalandar Dangi + Dangi Kalandar Etiofic + Ethiopic Kalandar Ethiopic Amete Alem + Ethiopic Amete Alem Kalandar Gregoria + Gregori Kalandar Ibrananci + Yaren Hebrew Kalandar Musulunci + Kaladar Musulunci Kalandar Musulunci (tabular, civil epoch) + Kaladar Musulunci (ta ciki teburi, shekarar jamaʼa) Kalandar Musulunci (tabular, astronomical epoch) + Kalandar Musulunci (ta cikin teburi, shekarar taurari) Kalandar Musulunci (Umm al-Qura) + Kalandar Musulunci (Ummu al-Qura Kalandar ISO-8601 Kalandar Jafan + Ta ƙasar Japan Kalandar Farisa + Ta ƙasar Fasha Kalandar kasar Sin + Minguo Tsarin Kudi na Kididdiga + Lissafin kuɗi Tsarin Kudi Nagartacce + Daidaitacce Tsarin Rabewa na Dan-maƙalu na Asali + Tsararren Unicode Bincike na Dalilai-Gamagari + Bincike Daidaitaccen Kasawa + Daidaitacce + Tsararre + Emoji + Rubutu Tsarin Awowi 12 (0–11) + 12 (0–11) Tsarin Awowi 12(1–12) + 12 (1–12) Tsarin Awowi 24(0–23) + 24 (0–23) Tsarin Awowi 24(1–24) + 24 (1–24) Salo na Raba Layi Sakakke + Sakakke Salo na Raba Layi na Kodayaushe + Na kodayaushe Salo na Raba Layi mai Tsauri + Mai tsauri + Raba duka + A bar duka + Na kodayaushe + A bari cikin magana Tsarin Awo na Metric + Awo Tsarin Awo na Imperial + Turai Tsarin Awo na Amurka + Amurka Lambobi na Larabawan a Gabas Fitattun lambobin lissafi na Larabci Lambobin ƙirga na Armenia @@ -904,6 +946,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lambobin yaren Thai Lambobin yaren Tibet Lambobin Vai + Kashe + Kunna Tsarin awo @@ -954,7 +998,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}, {1} - {0} 'da' {1} + {1} 'a' {0} + + + {0} 'a' {1} @@ -962,18 +1009,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}, {1} - {0} 'da' {1} + {1} 'a' {0} + + + {1} 'a' {0} {0}, {1} + + {1}, {0} + + + {1}, {0} + {0}, {1} + + {1}, {0} + + + {1}, {0} + M/d @@ -1176,6 +1238,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'da' {0} + + {1} 'a' {0} + @@ -1184,6 +1249,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'da' {0} + + {1} 'a' {0} + @@ -1197,6 +1265,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d + M/y G + E, M/d/y G h:mm a h:mm:ss a M/d @@ -1224,9 +1294,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, M/d/y – E, M/d/y G E, M/d/y – E, M/d/y G - - h a – h a - h:mm a – h:mm a @@ -1241,22 +1308,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic dd/MM/y – dd/MM/y dd/MM/y – dd/MM/y - - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - - - y MMM – y MMM - - - y MMM d – y MMM d - - - y MMM d, E – y MMM d, E - - - y MMMM – y MMMM - @@ -1331,18 +1382,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic shekaru {0} da suka gabata - - - shekara {0} da ta gabata - shekaru {0} da suka gabata - - - - - shekara {0} da ta gabata - shekaru {0} da suka gabata - - kwata kwatan karshe @@ -1357,18 +1396,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwata {0} da suka gabata - - - kwata {0} da suka gabata - kwata {0} da suka gabata - - - - - kwata {0} da suka gabata - kwata {0} da suka gabata - - wata watan da ya gabata @@ -1388,16 +1415,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic a cikin watan {0} a cikin watan {0} - - wata {0} da ya gabata - watanni {0} da suka gabata - - - - - wata {0} da ya gabata - watanni {0} da suka gabata - mako @@ -1414,12 +1431,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sati na {0} - - - mako {0} da ya gabata - makonni {0} da suka gabata - - mako {0} da ya gabata @@ -1446,26 +1457,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwanaki {0} da suka gabata - - - a cikin kwanaki {0} - a cikin kwanaki {0} - - - kwana {0} da ya gabata - kwanaki {0} da suka gabata - - - - - a cikin kwanaki {0} - a cikin kwanaki {0} - - - kwana {0} da ya gabata - kwanaki {0} da suka gabata - - Kwanan Shekara @@ -1488,28 +1479,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lahadi {0} da suka gabata - - - cikin Lahadi {0} - cikin Lahadi {0} - - - Lahadi {0} da ta gabata - Lahadi {0} da suka gabata - - Lahadin da ya gabata wannan Lahadin Lahadi mai zuwa - - cikin Lahadi {0} - cikin Lahadi {0} - - - Lahadi {0} da ta gabata - Lahadi {0} da suka gabata - Litinin din da ta gabata @@ -1524,32 +1497,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Litinin {0} da suka gabata - - Litinin din da ta gabata - wannan Litinin din - Litinin mai zuwa - - cikin Litinin {0} - cikin Litinin {0} - - - Litinin {0} da ta gabata - Litinin {0} da suka gabata - - - - Litinin din da ta gabata - wannan Litinin din - Litinin mai zuwa - - cikin Litinin {0} - cikin Litinin {0} - - - Litinin {0} da ta gabata - Litinin {0} da suka gabata - - Talata da ta gabata wannan Talata @@ -1563,26 +1510,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Talata {0} da suka gabata - - - cikin Talata {0} - cikin Talata {0} - - - Talata {0} da ta gabata - Talata {0} da suka gabata - - - - - cikin Talata {0} - cikin Talata {0} - - - Talata {0} da ta gabata - Talata {0} da suka gabata - - Laraba da ta gabata wannan Larabar @@ -1596,26 +1523,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Laraba {0} da suka gabata - - - cikin Laraba {0} - cikin Laraba {0} - - - Laraba {0} da ta gabata - Laraba {0} da suka gabata - - - - - cikin Laraba {0} - cikin Laraba {0} - - - Laraba {0} da ta gabata - Laraba {0} da suka gabata - - Alhamis din da ya Gabata wannan Alhamis din @@ -1629,26 +1536,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Alhamis {0} da suka gabata - - - cikin Alhamis {0} - cikin Alhamis {0} - - - Alhamis {0} da ta gabata - Alhamis {0} da suka gabata - - - - - cikin Alhamis {0} - cikin Alhamis {0} - - - Alhamis {0} da ta gabata - Alhamis {0} da suka gabata - - Jumaʼa da ta gabata wannan Jumaʼar @@ -1662,26 +1549,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Jumaʼa {0} da suka wuce - - - cikin Jumaʼa {0} - cikin Jumaʼa {0} - - - Jumaʼa {0} da ta wuce - Jumaʼa {0} da suka wuce - - - - - cikin Jumaʼa {0} - cikin Jumaʼa {0} - - - Jumaʼa {0} da ta wuce - Jumaʼa {0} da suka wuce - - Asabar din da ya gabata wannan Asabar din @@ -1696,20 +1563,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - cikin Asabar {0} - cikin Asabar {0} - - - Asabar {0} da ta wuce - Asabar {0} da suka wuce - - - - - cikin Asabar {0} - cikin Asabar {0} - Asabar {0} da ta wuce Asabar {0} da suka wuce @@ -1730,26 +1583,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic awanni {0} da suka gabata - - - cikin awa {0} - cikin awanni {0} - - - awa {0} da ta gabata - awanni {0} da suka gabata - - - - - cikin awa {0} - cikin awanni {0} - - - awa {0} da ta gabata - awanni {0} da suka gabata - - minti wannan mintin @@ -1762,26 +1595,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic mintuna {0} da suka gabata - - - cikin minti {0} - cikin mintuna {0} - - - minti {0} da ya gabata - mintuna {0} da suka gabata - - - - - cikin minti {0} - cikin mintuna {0} - - - minti {0} da ya gabata - mintuna {0} da suka gabata - - daƙiƙa yanzu @@ -1794,26 +1607,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic dakiku {0} da suka gabata - - - cikin dakika {0} - cikin dakiku {0} - - - dakika {0} da ta gabata - dakiku {0} da suka gabata - - - - - cikin dakika {0} - cikin dakiku {0} - - - dakika {0} da ta gabata - dakiku {0} da suka gabata - - Lokacin yanki @@ -1840,6 +1633,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tsayayyen Lokacin Irish + + Tsibirin Canton + Beulah, Arewacin Dakota @@ -1871,9 +1667,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Lokacin Afirka ta Yamma - Tsayayyen Lokacin Afirka ta Yamma - Lokacin Bazara na Afirka ta Yamma + Lokacin Afirka ta Yamma @@ -2223,6 +2017,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lokacin Guyana + + + Tsayayyen Lokacin Hawaii-Aleutian + + Lokaci na Hawaii-Aleutian @@ -2792,53 +2591,45 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤ 0D - ¤ 0D + ¤ 0K + ¤ 0K ¤ 00D ¤ 00D - ¤ 000K - ¤ 000K - ¤0B - ¤0B - ¤0B - ¤ 0B - ¤00B - ¤ 00B - ¤00B - ¤ 00B - ¤000B - ¤ 000B - ¤000B - ¤ 000B - ¤0T - ¤ 0T - ¤0T - ¤ 0T - ¤00T - ¤ 00T - ¤00T - ¤ 00T - ¤000T - ¤ 000T - ¤000T - ¤ 000T + ¤ 000D + ¤ 000D + ¤ 0B + ¤ 0B + ¤ 00B + ¤ 00B + ¤ 000B + ¤ 000B + ¤ 0T + ¤ 0T + ¤ 00T + ¤ 00T + ¤ 000T + ¤ 000T - Kuɗin Haɗaɗɗiyar Daular Larabawa + Dirham na Haɗaɗɗiyar Daular Larabawa + Dirham na Haɗaɗɗiyar Daular Larabawa + Dirham na Haɗaɗɗiyar Daular Larabawa Afghani na ƙasar Afghanistan - Kuɗin Albania + Lek na Albania + Lek na Albania + Lekë na Albania - Kuɗin Armenia - kuɗin Armenia - Kuɗin Armenia + Dram na Armeniya + Dram na Armeniya + Dram na Armeniya Antillean Guilder na ƙasar Netherlands @@ -2846,7 +2637,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Antillean Guilder na ƙasar Netherlands - Kuɗin Angola + Kwanza na Angola + Kwanza na Angola + Kwanza na Angola Peso na ƙasar Argentina @@ -2855,7 +2648,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dalar Ostareliya - Dalolin Ostareliya + Dalar Ostareliya Dalolin Ostareliya @@ -2864,9 +2657,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Florin na yankin Aruba - Kuɗin Azerbaijani - kuɗin Azerbaijani - Kuɗin Azerbaijani + Manat na Azebaijan + Manat na Azebaijan + Manat na Azebaijan Kuɗaɗen Bosnia da Herzegovina @@ -2876,24 +2669,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic Taka na ƙasar Bangladesh - taka na ƙasar Bangladesh - Taka na ƙasar Bangladesh - Kuɗin Bulgeria + Lev na Bulgeria + Lev na Bulgeria + Leva na Bulgeria - Kuɗin Baharan + Zinaren Bahrain + Zinaren Bahrain + Zinaren Bahrain - Kuɗin Burundi + Franc na Burundi + Franc na Burundi + Franc na Burundi Dalar ƙasar Bermuda Dalar Brunei - Dalolin Brunei + Dalar Brunei Dalolin Brunei @@ -2911,14 +2708,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ngultrum na ƙasar Bhutan - ngultrum na ƙasar Bhutan - Ngultrum na ƙasar Bhutan - Kuɗin Baswana + Pula na Batsuwana + Pula na Batsuwana + Pula na Batsuwana - Kuɗin Belarus + Ruble na Belarus + Ruble na Belarus + Ruble na Belarus Dalar ƙasar Belize @@ -2927,18 +2726,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dalar Kanada - Kuɗin Kongo + Franc na Kongo + Franc na Kongo + Franc na Kongo - Kuɗin Suwizalan + Franc na Suwizilan + Franc na Suwizalan + Franc na Suwizilan Peso na ƙasar Chile Yuwan na ƙasar Sin (na wajen ƙasa) - yuwan na ƙasar Sin (na wajen ƙasa) - yuwan na ƙasar Sin (na wajen ƙasa) Yuwan na ƙasar Sin @@ -2958,15 +2759,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Peso na ƙasar Kuba - Kuɗin Tsibiran Kap Barde + Escudo na Cape Verde + Escudo na Cape Verd + Escudo na Cape Verde - Kuɗin Czech - kuɗin Czech - Kuɗin Czech + Koruna na Czech + Koruna na Czech + Koruna na Czech - Kuɗin Jibuti + Franc na Djibouti + Franc na Djibouti + Franc na Djibouti Krone na ƙasar Denmark @@ -2979,27 +2784,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic Peso na jamhuriyar Dominica - Kuɗin Aljeriya + Dinarin Aljeriya Dinarin Aljeriya Dinarin Aljeriya - Fam kin Masar + Fam na Masar Fam na Masar Fam na Masar Kuɗin Eritireya + Nafka na Eritrea + Nafka na Eritrea - Kuɗin Habasha + Birr na Habasha + Birr na Habasha + Birr na Habasha Yuro + yuro + yuro Dalar Fiji - Dalolin Fiji + Dalar Fiji Dalolin Fiji @@ -3009,9 +2820,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Fam na Ingila - Kuɗin Georgia - kuɗin Georgia - Kuɗin Georgia + Lari na Georgia + Lari na Georgia + Lari na Georgia Cedi @@ -3020,13 +2831,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sidi na Ghana - Kuɗin Gibraltal + Fam na Gibraltar + Fam na Gibraltar + Fam na Gibraltar - Kuɗin Gambiya + Dalasi na Gambiya + Dalasi na Gambiya + Dalasi na Gambiya - Kuɗin Guinea + Franc na Guinea + Franc na Guinea + Franc na Guinea Kuɗin Gini @@ -3041,8 +2858,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dalar Hong Kong - dalar Hong Kong - Dalar Hong Kong Lempira na ƙasar Honduras @@ -3050,7 +2865,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lempira na ƙasar Honduras - Kuɗin Croatia + Kuna na Croatia + Kuna na Croatia + Kunas na Croatia Gourde na ƙasar Haiti @@ -3058,20 +2875,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gourde na ƙasar Haiti - Kuɗin Hungary - kuɗin Hungary - Kuɗin Hungary + Forint na Hungary + Forint na Hungary + Forint na Hungary Rupiah na ƙasar Indonesia - rupiah na ƙasar Indonesia - Rupiah na ƙasar Indonesia - Sabbin Kuɗin Israʼila + Sabon shekel na Israʼila + Sabon shekel na Israʼila + Sabon shekel na Israʼila - Kuɗin Indiya + Rupee na ƙasar Indiya + Rupee na ƙasar Indiya + Rupee na ƙasar Indiya Dinarin Iraqi @@ -3080,7 +2899,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Riyal na ƙasar Iran - Riyal-riyal na ƙasar Iran + Riyal na ƙasar Iran Riyal-riyal na ƙasar Iran @@ -3107,26 +2926,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic Som na ƙasar Kyrgystani - som na ƙasar Kyrgystani - Som na ƙasar Kyrgystani Riel na ƙasar Cambodia - riel na ƙasar Cambodia - Riel na ƙasar Cambodia - Kuɗin Kwamoras + Franc na Kwamoras + Franc na Kwamoras + Franc na Kwamoras Won na ƙasar Koriya ta Arewa - won na ƙasar Koriya ta Arewa - won na ƙasar Koriya ta Arewa Won na Koriya ta Kudu - won na Koriya ta Kudu - won na Koriya ta Kudu Dinarin Kuwaiti @@ -3140,82 +2953,84 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tenge na ƙasar Kazkhstan - tenge na ƙasar Kazakhstan - Tenge na ƙasar Kazkhstan - Kuɗin Laos - kuɗin Laos - Kuɗin Laos + Kip na ƙasar Laos + Kip na ƙasar Laos + Kip na ƙasar Laos - Kuɗin Lebanon - kuɗin Lebanon - Kuɗin Lebanon + Fam na Lebanon + Fam na Lebanon + Fam na Lebanon Rupee na ƙasar Sri Lanka - rupee na ƙasar Sri Lanka - Rupee na ƙasar Sri Lanka Dalar Laberiya - Kuɗin Lesoto - Kuɗaɗen Lesoto - Kuɗaɗen Lesoto + Loti na Lesoto + Loti na Lesoto + Loti na Lesoto - Kuɗin Libiya + Dinarin Libya Dinarin Libiya Dinarin Libiya - Kuɗin Maroko + Dirhamin Moroko Dirhamin Maroko Dirhamomin Maroko - Kuɗaɗen Moldova - Kuɗaɗen Moldova - kuɗaɗen Moldova + Leu na Moldova + Leu na Moldova + Lei na Moldova - Kuɗin Madagaskar + Ariary na Malagasy + Ariary na Malagasy + Ariary na Malagasy Dinarin Macedonia - Kuɗin Myanmar - kuɗin Myanmar - Kuɗin Myanmar + Kyat na ƙasar Myanmar + Kyat na ƙasar Myanmar + Kyat na ƙasar Myanmar Tugrik na Mongolia - tugrik na Mongoliya - Tugrik na Mongolia Pataca na ƙasar Macao - pataca na ƙasar Macao - Pataca na ƙasar Macao Kuɗin Moritaniya (1973–2017) - Kuɗin Moritaniya + Ouguiya na Moritaniya + Ouguiya na Moritaniya + Ouguiya na Moritaniya - Kuɗin Moritus + Rupee na Moritus + Rupee na Moritus + Rupee na Moritus - Rufiyaa na ɓasar Maldives + Rufiyaa na ƙasar Maldives + Rufiyaa na ƙasar Maldives + Rufiyaa na ƙasar Maldives - Kuɗin Malawi + Kwacha na Malawi + Kwacha na Malawi + Kwacha na Malawi Peso na ƙasar Mekziko @@ -3223,9 +3038,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic peso na ƙasar Mekziko - Kuɗin Malaysia - kuɗin Malaysia - Kuɗin Malaysia + Ringgit na ƙasar Malaysia + Ringgit na ƙasar Malaysia + Ringgit na ƙasar Malaysia Kuɗin Mozambik @@ -3254,12 +3069,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Rupee na Nepal - rupee na Nepal - Rupee na Nepal Dalar New Zealand - Dalolin New Zealand + Dalar New Zealand Dalolin New Zealand @@ -3272,22 +3085,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sol na ƙasar Peru - Kina na ƙasar Papua Sabon Guinea - kina na ƙasar Papua Sabon Guinea - Kina na ƙasar Papua Sabon Guinea + Kina na ƙasar Papua New Guinea + Kina na ƙasar Papua New Guinea + Kina na ƙasar Papua New Guinea - Kuɗin Philippine + Peso na ƙasar Philippine + Peso na ƙasar Philippine + Peso na ƙasar Philippine Rupee na ƙasar Pakistan - rupee na ƙasar Pakistan - Rupee na ƙasar Pakistan - Kuɗin Polan - kuɗin Polan - kuɗaɗen Polan + Zloty na Polan + zloty na Polan + zloty na Polan Guarani na ƙasar Paraguay @@ -3296,9 +3109,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Riyal ɗin Qatar - Kuɗin Romania - kuɗin Romania - Kuɗin Romania + Leu na Romania + Leu na Romania + Leu na Romania Dinarin Serbia @@ -3309,20 +3122,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ruble na ƙasar Rasha - Kuɗin Ruwanda + Franc na Ruwanda + Franc na Ruwanda + Franc na Ruwanda - Riyal + Riyal ɗin Saudiyya Riyal ɗin Saudiyya - Riyal + Riyal ɗin Saudiyya - Dalar Tsibirai na Solomon - Dalolin Tsibirai na Solomon - Dalolin Tsibirai na Solomon + Dalar Tsibiran Solomon + Dalar Tsibiran Solomon + Dalolin Tsibiran Solomon - Kuɗin Saishal + Rupee na Seychellois + Rupee na Seychellois + Rupee na Seychellois Fam na Sudan @@ -3334,23 +3151,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dalar Singapore - Dalolin Singapore + Dalar Singapore Dalolin Singapore - Fam kin San Helena + Fam na San Helena Fam na San Helena fam na San Helena - Kuɗin Salewo - Kuɗin Saliyo - Kuɗin Saliyo + Leone na Saliyo + Leone na Saliyo + Leone na Saliyo - Kuɗin Salewo (1964—2022) - Kuɗin Saliyo (1964—2022) - Kuɗin Saliyo (1964—2022) + Leone na Saliyo (1964—2022) + Leone na Saliyo (1964—2022) + Leone na Saliyo (1964—2022) Sulen Somaliya @@ -3367,41 +3184,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kuɗin Sawo Tome da Paransip (1977–2017) - Kuɗin Sawo Tome da Paransip + Dobra na Sawo Tome + Dobra na Sawo Tome + Dobra na Sawo Tome - Kuɗin Siriya + Fam ɗin Siriya + Fam ɗin Siriya + Fam ɗin Siriya - Kuɗin Lilangeni + Emalangeni na Swazi + Lilangeni na Swazi + Emalangeni na Swazi Baht na ƙasar Thailand - baht na ƙasar Thailand - Baht na ƙasar Thailand Somoni na ƙasar Tajikistan - somoni na ƙasar Tajikistan - Somoni na ƙasar Tajikistan Manat na ƙasar Turkmenistan - manat na ƙasar Turkmenistan - Manat na ƙasar Turkmenistan - Kuɗin Tunisiya + Dinarin Tunusiya Dinarin Tunusiya Dinarin Tunusiya Paʻanga na ƙasar Tonga - paʻanga na ƙasar Tonga - Paʻanga na ƙasar Tonga - Kuɗin Turkiyya + Lira na Turkiyya + Lira na Turkiyya + Lira na Turkiyya Dalar ƙasar Trinidad da Tobago @@ -3410,19 +3227,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sabuwar Dalar Taiwan - Sabuwar dalar Taiwan - Sabuwar Dalar Taiwan Sulen Tanzaniya - Kudin Ukrainian - kuɗin Ukrain - Kuɗin Ukrain + Hryvnia na Ukrain + Hryvnia na Ukrain + Hryvnia na Ukrain - Sule Yuganda + Sulen Yuganda Sulallan Yuganda Sulallan Yuganda @@ -3437,26 +3252,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic Som na ƙasar Uzbekistan - som na ƙasar Uzbekistan - Som na ƙasar Uzbekistan Bolívar na ƙasar Venezuela - Kuɗin Vietnam - kuɗin Vietnam - Kuɗin Vietnam + Dong na ƙasar Vietnam + Dong na ƙasar Vietnam + Dong na ƙasar Vietnam Vatu da ƙasar Vanuatu - vatu na ƙasar Vanuatu - Vatu da ƙasar Vanuatu Tala na ƙasar Samoa - tala na ƙasar Samoa - Tala na ƙasar Samoa Kuɗin Sefa na Afirka Ta Tsakiya @@ -3466,18 +3275,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic dalar Gabashin Karebiyan dalar Gabashin Karebiyan + + Guilder na Caribbean + Guilder na Caribbean + Guilder na Caribbean + Kuɗin Sefa na Afirka Ta Yamma Kuɗin CFP franc - kuɗin CFP franc - Kuɗin CFP franc Kudin da ba a sani ba - (kuɗin sashe da ba a sani ba) - (Kudin da ba a sani ba) + (sashin kuɗi da ba a sani ba) + Kudin da ba a sani ba Riyal ɗin Yemen @@ -3485,17 +3297,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic Riyal ɗin Yemen - Kuɗin Afirka Ta Kudu + Rand na Afirka ta Kudu + Rand na Afirka ta Kudu + Rand na Afirka ta Kudu Kuɗin Zambiya (1968–2012) - Kuɗin Zambiya + Kwacha na Zambiya + Kwacha na Zambiya + Kwacha na Zambiya Dalar zimbabuwe + + Zinaren Zimbabwe + Zinaren Zimbabwe + Zinaren Zimbabwe + {0}+ @@ -3677,7 +3498,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic abu {0} abubuwa {0} - + + sassa + sashe {0} + sassa {0} + + parts per million part per million {0} parts per million {0} @@ -3699,6 +3525,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic mole {0} moles {0} + + na guluko + {0} na guluko + {0} na guluko + litoci a kilomita lita a kilomita {0} @@ -3790,12 +3621,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} a shekara - kwatoci + kwata-kwata kwata {0} kwatoci {0} - wat wata {0} watanni {0} {0} a wata @@ -3970,17 +3800,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic ayoyi a inci - {0} aya a inci - {0} ayoyi a inci + aya {0} a inci + ayoyi {0} a inci aya {0} aya {0} - earth radius - earth radius {0} - earth radius {0} + faɗin duniya + faɗin duniya {0} + faɗin duniya {0} kilomitoci @@ -4202,6 +4032,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic millimitar zaiba {0} millimitocin zaiba {0} + + na mercury + {0} na mercury + {0} na mercury + laba-laba a sikwaya inci laba a sikwaya inci {0} @@ -4373,6 +4208,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic metric cup {0} metric cups {0} + + kimar awon ruwa + kimar awon ruwa {0} + kimar awon ruwa {0} + eka-ƙafafu eka-ƙafa {0} @@ -4452,22 +4292,80 @@ CLDR data files are interpreted according to the LDML specification (http://unic Imp. quart {0} Imp. quarts {0} + + steradians + steradian {0} + steradian {0} + + + katals + {0} katal + {0} katals + + + coulomb {0} + coulomb {0} + + + farads + farad {0} + farad {0} + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + kalori-kalori [IT] + kalori [IT] {0} + kalori-kalori [IT] {0} + + + bekerel-bekerel + bekerel {0} + bekerel-bekerel {0} + + + sibat-sibat + sibat {0} + sibat-sibat {0} + + + gre-gre + gre {0} + gre-gre {0} + + + kilograms-force + {0} kilogram-force + {0} kilograms-force + + + tesla + tesla {0} + tesla {0} + + + weber + weber {0} + weber {0} + haske haske {0} haske {0} - + sashi a cikin biliyan sashi {0} a cikin biliyan sashi {0} a cikin biliyan - - darare - dare {0} - darare {0} - dare {0} - wurin fuskanta Gabas {0} @@ -4577,7 +4475,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic abu {0} Abw. {0} - + + sashe + sashe {0} + sashe {0} + + parts/million ppm {0} ppm {0} @@ -4600,6 +4503,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic mol {0} mol {0} + + Glk + Glk {0} + Glk {0} + litoci/km L/km {0} @@ -4746,6 +4654,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ns {0} + amps A {0} A {0} @@ -4855,15 +4764,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic ppi {0} + dpcm dpcm {0} dpcm {0} + dpi dpi {0} dpi {0} aya + aya {0} + aya {0} R⊕ {0} @@ -4871,20 +4784,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic km {0} - {0} km + km {0} + km/{0} m m {0} m {0} + m/{0} dm {0} dm {0} - cm {0} - cm {0} + sm + sm {0} + sm {0} + sm/{0} mm {0} @@ -4917,12 +4834,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic ƙafafu ƙf {0} ƙff {0} - {0}/ƙf + ƙafa/{0} incina in {0} in {0} + in/{0} fasekoki @@ -5080,6 +4998,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic mmHg {0} mmHg {0} + + na Hg + {0} na Hg + {0} na Hg + psi {0} psi {0} @@ -5228,6 +5151,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic mc {0} mc {0} + + kimar awon ruwa {0}. + kimar awon ruwa {0}. + eka ƙf ek ƙf {0} @@ -5314,12 +5241,68 @@ CLDR data files are interpreted according to the LDML specification (http://unic qt Imp. {0} qt Imp. {0} + + sr {0} + sr {0} + + + {0} kat + {0} kat + + + C {0} + C {0} + + + F {0} + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + kal-IT + kal-IT {0} + kal-IT {0} + + + Bk + Bk {0} + Bk {0} + + + Sb + Sb {0} + Sb {0} + + + Gr + Gr {0} + Gr {0} + + + {0} kgf + {0} kgf + + + T {0} + T {0} + + + Wb {0} + Wb {0} + hsk hsk {0} hsk {0} - + sashi/biliyan sashi {0} a cikin biliyan sashi {0} a cikin biliyan @@ -5433,7 +5416,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic abu{0} Abw{0} - + + sashe + sashe {0} + sashe {0} + + ppm ppm{0} ppm{0} @@ -5453,6 +5441,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic mol{0} mol{0} + + Glk + Glk {0} + Glk {0} + L/km L/km{0} @@ -5687,10 +5680,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ppi{0} + dpcm dpcm{0} dpcm{0} + dpi dpi{0} dpi{0} @@ -5705,18 +5700,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic km{0} km{0} + km/{0} m{0} m{0} + m/{0} dm{0} dm{0} - cm{0} - cm{0} + sm + sm{0} + sm{0} + sm/{0} mm{0} @@ -5743,12 +5742,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic ydk{0} - ƙf{0} - ƙff{0} + {0}' + {0}' + ƙafa/{0} {0}″ {0}″ + in/{0} fasek @@ -6035,6 +6036,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic mL{0} + pt mpt{0} mpt{0} @@ -6042,6 +6044,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic mc{0} mc{0} + + kimar awon ruwa. + kimar awon ruwa {0}. + kimar awon ruwa {0}. + ek ƙf{0} ek ƙf{0} @@ -6057,7 +6064,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Imp gal galIm{0} - galIm{0} + gal-Im{0} {0}/galIm @@ -6128,22 +6135,57 @@ CLDR data files are interpreted according to the LDML specification (http://unic qt-Imp.{0} qt-Imp.{0} - - hsk - hsk {0} - hsk {0} + + sr {0} + sr {0} - + + {0} kat + {0} kat + + + C {0} + C {0} + + + F {0} + {0} F + + + kal-IT + kal-IT{0} + kal-IT {0} + + + Bk + Bk {0} + Bk {0} + + + Sb + Sb {0} + Sb {0} + + + Gr + + + {0} kgf + {0} kgf + + + T {0} + T {0} + + + Wb{0} + Wb{0} + + sashi/biliyan sashi {0} a cikin biliyan sashi {0} a cikin biliyan - - darare - dare {0} - darare {0} - dare {0} - G{0} A{0} @@ -6475,7 +6517,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic van den Wolf Becker Schmidt - Jr + Ƙarami M.D. Ph.D. diff --git a/make/data/cldr/common/main/haw.xml b/make/data/cldr/common/main/haw.xml index 014397e54b8..9981a26ad52 100644 --- a/make/data/cldr/common/main/haw.xml +++ b/make/data/cldr/common/main/haw.xml @@ -326,13 +326,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - HST - HST - HDT - - AKT @@ -340,6 +333,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic AKDT + + + HAT + HAST + HADT + + HAT diff --git a/make/data/cldr/common/main/he.xml b/make/data/cldr/common/main/he.xml index 640cb79740b..a31b5323898 100644 --- a/make/data/cldr/common/main/he.xml +++ b/make/data/cldr/common/main/he.xml @@ -283,6 +283,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ באפיה קולוניאן כורדית + כורדית + כורדית קומיקית קוטנאי קומי @@ -860,6 +862,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ סין קולומביה האי קליפרטון + סרק קוסטה ריקה קובה כף ורדה @@ -1210,35 +1213,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ מיון לפי מספרים עוצמת המיון מטבע + הצגת אמוג׳י מחזור השעות (12 או 24) סגנון מעבר שורה + פיצול שורה בתוך מילים מערכת מדידה מספרים + פיצול משפט אחרי מילה מקוצרת אזור זמן משתנה אזור שימוש פרטי לוח השנה הבודהיסטי + בודהיסטי לוח השנה הסיני + סיני לוח השנה הקופטי + קופטי לוח השנה הקוריאני + קוריאני לוח השנה האתיופי + אתיופי לוח השנה אמטה אלם האתיופי + אמטה אלם האתיופי לוח השנה הגרגוריאני + גרגוריאני לוח השנה העברי + עברי לוח השנה ההודי הלאומי לוח שנה ההיג׳רי + היג׳רי לוח השנה המוסלמי האזרחי + היג׳רי אזרחי לוח השנה המוסלמי (ערב הסעודית) לוח השנה המוסלמי האסטרונומי + מוסלמי אסטרונומי לוח השנה המוסלמי אום אל-קורא + מוסלמי אום אל-קורא לוח שנה ISO-8601 לוח השנה היפני + יפני לוח השנה הפרסי + פרסי לוח השנה הטייוואני + טייוואני תבנית מטבע למטרות חשבונאות + חשבונאות תבנית מטבע רגילה + רגילה מיין סמלים מיין תוך התעלמות מסמלים מיין הטעמות בצורה רגילה @@ -1248,23 +1271,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ מיין תחילה לפי אותיות רישיות מיין באופן שאינו תלוי רישיות מיין באופן תלוי רישיות - מיון סינית מסורתית סדר מיון קודם, עבור תאימות + תאימות סדר מיון במילון + מילון סדר מיון Unicode המוגדר כברירת מחדל + Unicode כברירת מחדל סדר מיון אימוג׳י חוקי סדר אירופיים - סדר מיון סיני פשוט - GB2312 מיון ספר טלפונים + ספר טלפונים סדר מיון פונטי + פונטי מיון פיניין + פיניין חיפוש למטרה כללית + חיפוש חפש לפי העיצור הראשון באותיות הנגול סדר מיון רגיל + רגיל סדר מיון לפי ספירת תווים + ספירת תווים מיון מסורתי + מסורתי סדר מיון לפי ספירת תווים Radical-Stroke + Radical-Stroke סדר מיון של ג׳ואין + ג׳ואין מיין ללא נורמליזציה מיין לפי Unicode מנורמל מיין ספרות בנפרד @@ -1277,18 +1310,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ רוחב מלא חצי רוחב מספרי + ברירת מחדל + אמוג׳י + טקסט מערכת של 12 שעות (‎0–11) + 12 (0–11) מערכת של 12 שעות (‎1–12) + 12 (1–12) מערכת של 24 שעות (0‎–23) + 24 (0–23) מערכת של 24 שעות (1‎–24) + ‎24 (1–24) סגנון מעבר שורה גמיש + גמיש סגנון מעבר שורה רגיל + רגיל סגנון מעבר שורה קשיח + קשיח + לחלק הכול + לשמור הכול + רגיל + לשמור כביטויים תעתיק BGN ארה״ב תעתיק GEGN האו״ם מערכת מטרית + מטרית מערכת מדידה אימפריאלית + בריטית מערכת מדידה אמריקאית + אמריקאית ספרות אהום ספרות הודיות-ערביות ספרות הודיות-ערביות מורחבות @@ -1372,6 +1422,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ספרות ואי ספרות ווראנג סיטי ספרות וונצ׳ו + כבוי + פועל מטרי @@ -1398,9 +1450,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1455,12 +1504,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - עידן 0 - עידן 1 - - @@ -1482,12 +1525,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - עידן 0 - עידן 1 - - @@ -1543,6 +1580,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E ה-d y G + MM-y G d/M/y GGGGG MMM y G d בMMM y G @@ -1778,8 +1816,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ חצות - AM - PM בבוקר בצהריים אחה״צ @@ -1789,8 +1825,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ חצות - AM - PM בבוקר בצהריים אחר הצהריים @@ -1801,8 +1835,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - AM - PM בוקר צהריים אחה״צ @@ -2393,6 +2425,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + MM-y G h a d/M d בMMMM @@ -2474,51 +2507,85 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ שנ׳ + + בעוד שנה + בעוד שנתיים ({0}) + בעוד {0} שנים + + + לפני שנה ({0}) + לפני שנתיים ({0}) + לפני {0} שנים + + + + + בעוד שנה ({0}) + בעוד שנתיים ({0}) + בעוד {0} שנים + + + לפני שנה ({0}) + לפני שנתיים ({0}) + לפני {0} שנים + רבעון הרבעון הקודם - רבעון זה + הרבעון הזה הרבעון הבא - ברבעון הבא + בעוד רבעון אחד ({0}) בעוד שני רבעונים בעוד {0} רבעונים - ברבעון הקודם - לפני שני רבעונים + לפני רבעון אחד ({0}) + לפני {0} רבעונים לפני {0} רבעונים רבע׳ - ברבע׳ הבא - בעוד שני רבע׳ + בעוד רבע׳ אחד ({0}) + בעוד {0} רבע׳ בעוד {0} רבע׳ בעוד {0} רבע׳ - ברבע׳ הקודם - לפני שני רבע׳ + לפני רבע׳ אחד ({0}) + לפני {0} רבע׳ לפני {0} רבע׳ לפני {0} רבע׳ + + + בעוד רבע׳ אחד ({0}) + בעוד {0} רבע׳ + בעוד {0} רבע׳ + + + לפני רבע׳ אחד ({0}) + לפני {0} רבע׳ + לפני {0} רבע׳ + + חודש החודש שעבר החודש החודש הבא - בעוד חודש - בעוד חודשיים + בעוד חודש ({0}) + בעוד חודשיים ({0}) בעוד {0} חודשים - לפני חודש - לפני חודשיים + לפני חודש ({0}) + לפני חודשיים ({0}) לפני {0} חודשים @@ -2528,13 +2595,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ בעוד חו׳ - בעוד חודשיים + בעוד חודשיים ({0}) בעוד {0} חו׳ בעוד {0} חו׳ - לפני חו׳ - לפני חודשיים + לפני חו׳ ({0}) + לפני חודשיים ({0}) לפני {0} חו׳ לפני {0} חו׳ @@ -2545,13 +2612,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ השבוע השבוע הבא - בעוד שבוע - בעוד שבועיים + בעוד שבוע ({0}) + בעוד שבועיים ({0}) בעוד {0} שבועות - לפני שבוע - לפני שבועיים + לפני שבוע ({0}) + לפני שבועיים ({0}) לפני {0} שבועות השבוע של {0} @@ -2559,22 +2626,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ שב׳ - בעוד שב׳ - בעוד שבועיים + בעוד שב׳ ({0}) + בעוד שבועיים ({0}) בעוד {0} שב׳ בעוד {0} שב׳ - לפני שב׳ - לפני שבועיים + לפני שב׳ ({0}) + לפני שבועיים ({0}) לפני {0} שב׳ לפני {0} שב׳ - לפני שבוע - לפני שבועיים + לפני שב׳ ({0}) + לפני שבועיים ({0}) לפני {0} שב׳ @@ -2589,25 +2656,37 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ מחר מחרתיים - בעוד יום {0} - בעוד יומיים + בעוד יום ({0}) + בעוד יומיים ({0}) בעוד {0} ימים - לפני יום {0} - לפני יומיים + לפני יום אחד ({0}) + לפני יומיים ({0}) לפני {0} ימים - מחר - בעוד יומיים + בעוד יום אחד ({0}) + בעוד יומיים ({0}) בעוד {0} ימים - אתמול - לפני יומיים + לפני יום אחד ({0}) + לפני יומיים ({0}) + לפני {0} ימים + + + + + בעוד יום אחד ({0}) + בעוד יומיים ({0}) + בעוד {0} ימים + + + לפני יום אחד ({0}) + לפני יומיים ({0}) לפני {0} ימים @@ -2642,12 +2721,31 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום א׳ שעבר יום א׳ יום א׳ הבא + + בעוד יום א׳ אחד ({0}) + בעוד {0} ימי א׳ + בעוד {0} ימי א׳ + בעוד {0} ימי א׳ + + + לפני יום א׳ אחד ({0}) + לפני {0} ימי א׳ + לפני {0} ימי א׳ + לפני {0} ימי א׳ + - בעוד יום ראשון {0} + בעוד יום א׳ אחד ({0}) בעוד {0} ימי א׳ - בעוד {0} ימי ראשון + בעוד {0} ימי א׳ + בעוד {0} ימי א׳ + + + לפני יום א׳ אחד ({0}) + לפני {0} ימי א׳ + לפני {0} ימי א׳ + לפני {0} ימי א׳ @@ -2655,12 +2753,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום שני יום שני הבא - בעוד יום שני {0} + בעוד יום שני אחד ({0}) בעוד {0} ימי שני בעוד {0} ימי שני - לפני יום שני {0} + לפני יום שני אחד ({0}) לפני {0} ימי שני לפני {0} ימי שני @@ -2669,18 +2767,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום ב׳ שעבר יום ב׳ יום ב׳ הבא + + בעוד יום ב׳ אחד ({0}) + בעוד {0} ימי ב׳ + בעוד {0} ימי ב׳ + בעוד {0} ימי ב׳ + + + לפני יום ב׳ אחד ({0}) + לפני {0} ימי ב׳ + לפני {0} ימי ב׳ + לפני {0} ימי ב׳ + + + + + בעוד יום ב׳ אחד ({0}) + בעוד {0} ימי ב׳ + בעוד {0} ימי ב׳ + בעוד {0} ימי ב׳ + + + לפני יום ב׳ אחד ({0}) + לפני {0} ימי ב׳ + לפני {0} ימי ב׳ + לפני {0} ימי ב׳ + יום שלישי שעבר יום שלישי יום שלישי הבא - בעוד יום שלישי {0} + בעוד יום שלישי אחד ({0}) בעוד {0} ימי שלישי בעוד {0} ימי שלישי - לפני יום שלישי {0} + לפני יום שלישי אחד ({0}) לפני {0} ימי שלישי לפני {0} ימי שלישי @@ -2689,18 +2813,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום ג׳ שעבר יום ג׳ יום ג׳ הבא + + בעוד יום ג׳ אחד ({0}) + בעוד {0} ימי ג׳ + בעוד {0} ימי ג׳ + בעוד {0} ימי ג׳ + + + לפני יום ג׳ אחד ({0}) + לפני {0} ימי ג׳ + לפני {0} ימי ג׳ + לפני {0} ימי ג׳ + + + + + בעוד יום ג׳ אחד ({0}) + בעוד {0} ימי ג׳ + בעוד {0} ימי ג׳ + בעוד {0} ימי ג׳ + + + לפני יום ג׳ אחד ({0}) + לפני {0} ימי ג׳ + לפני {0} ימי ג׳ + לפני {0} ימי ג׳ + יום רביעי שעבר יום רביעי יום רביעי הבא - בעוד יום רביעי {0} + בעוד יום רביעי אחד ({0}) בעוד {0} ימי רביעי בעוד {0} ימי רביעי - לפני יום רביעי {0} + לפני יום רביעי אחד ({0}) לפני {0} ימי רביעי לפני {0} ימי רביעי @@ -2709,18 +2859,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום ד׳ שעבר יום ד׳ יום ד׳ הבא + + בעוד יום ד׳ אחד ({0}) + בעוד {0} ימי ד׳ + בעוד {0} ימי ד׳ + בעוד {0} ימי ד׳ + + + לפני יום ד׳ אחד ({0}) + לפני {0} ימי ד׳ + לפני {0} ימי ד׳ + לפני {0} ימי ד׳ + + + + + בעוד יום ד׳ אחד ({0}) + בעוד {0} ימי ד׳ + בעוד {0} ימי ד׳ + בעוד {0} ימי ד׳ + + + לפני יום ד׳ אחד ({0}) + לפני {0} ימי ד׳ + לפני {0} ימי ד׳ + לפני {0} ימי ד׳ + יום חמישי שעבר יום חמישי יום חמישי הבא - בעוד יום חמישי {0} + בעוד יום חמישי אחד ({0}) בעוד {0} ימי חמישי בעוד {0} ימי חמישי - לפני יום חמישי {0} + לפני יום חמישי אחד ({0}) לפני {0} ימי חמישי לפני {0} ימי חמישי @@ -2729,18 +2905,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום ה׳ שעבר יום ה׳ יום ה׳ הבא + + בעוד יום ה׳ אחד ({0}) + בעוד {0} ימי ה׳ + בעוד {0} ימי ה׳ + בעוד {0} ימי ה׳ + + + לפני יום ה׳ אחד ({0}) + לפני {0} ימי ה׳ + לפני {0} ימי ה׳ + לפני {0} ימי ה׳ + + + + + בעוד יום ה׳ אחד ({0}) + בעוד {0} ימי ה׳ + בעוד {0} ימי ה׳ + בעוד {0} ימי ה׳ + + + לפני יום ה׳ אחד ({0}) + לפני {0} ימי ה׳ + לפני {0} ימי ה׳ + לפני {0} ימי ה׳ + יום שישי שעבר יום שישי יום שישי הבא - בעוד יום שישי אחד {0} + בעוד יום שישי אחד ({0}) בעוד {0} ימי שישי בעוד {0} ימי שישי - לפני יום שישי אחד {0} + לפני יום שישי אחד ({0}) לפני {0} ימי שישי לפני {0} ימי שישי @@ -2750,27 +2952,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום ו׳ יום ו׳ הבא - בעוד יום שישי אחד {0} - בעוד {0} ימי שישי - בעוד {0} ימי שישי - - - לפני יום שישי אחד {0} - לפני {0} ימי שישי - לפני {0} ימי שישי - - - - - בעוד יום ו׳ אחד {0} + בעוד יום ו׳ אחד ({0}) בעוד {0} ימי ו׳ בעוד {0} ימי ו׳ בעוד {0} ימי ו׳ - לפני יום ו׳ אחד {0} - לפני {0} ימי שישי - לפני {0} ימי שישי + לפני יום ו׳ אחד ({0}) + לפני {0} ימי ו׳ + לפני {0} ימי ו׳ + לפני {0} ימי ו׳ + + + + + בעוד יום ו׳ אחד ({0}) + בעוד {0} ימי ו׳ + בעוד {0} ימי ו׳ + בעוד {0} ימי ו׳ + + + לפני יום ו׳ אחד ({0}) + לפני {0} ימי ו׳ + לפני {0} ימי ו׳ + לפני {0} ימי ו׳ @@ -2778,12 +2983,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ יום שבת יום שבת הבא - בעוד שבת {0} + בעוד שבת אחת ({0}) בעוד {0} שבתות בעוד {0} שבתות - לפני שבת אחת {0} + לפני שבת אחת ({0}) לפני {0} שבתות לפני {0} שבתות @@ -2792,15 +2997,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ שבת שעברה שבת שבת הבאה + + בעוד שבת אחת ({0}) + בעוד {0} שבתות + בעוד {0} שבתות + - לפני שבת אחת {0} + לפני שבת אחת ({0}) לפני {0} שבתות לפני {0} שבתות + + בעוד שבת אחת ({0}) + בעוד {0} שבתות + בעוד {0} שבתות + - לפני שבת אחת {0} + לפני שבת אחת ({0}) לפני {0} שבתות לפני {0} שבתות @@ -2815,44 +3030,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ שעה בשעה זו - בעוד שעה - בעוד שעתיים + בעוד שעה ({0}) + בעוד שעתיים ({0}) בעוד {0} שעות - לפני שעה - לפני שעתיים + לפני שעה ({0}) + לפני שעתיים ({0}) לפני {0} שעות - בעוד שעה - בעוד שעתיים + בעוד שעה ({0}) + בעוד שעתיים ({0}) בעוד {0} שע׳ בעוד {0} שע׳ - לפני שעה - לפני שעתיים + לפני שע׳ ({0}) + לפני שעתיים ({0}) לפני {0} שע׳ לפני {0} שע׳ שע׳ + + בעוד שעה ({0}) + בעוד שעתיים ({0}) + בעוד {0} שע׳ + + + לפני שע׳ ({0}) + לפני שעתיים ({0}) + לפני {0} שע׳ + דקה בדקה זו - בעוד דקה - בעוד שתי דקות + בעוד דקה ({0}) + בעוד {0} דקות בעוד {0} דקות - לפני דקה - לפני שתי דקות + לפני דקה ({0}) + לפני {0} דקות לפני {0} דקות @@ -2860,30 +3085,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ דק׳ דקה זו - בעוד דקה - בעוד שתי דק׳ + בעוד דק׳ ({0}) + בעוד {0} דק׳ בעוד {0} דק׳ בעוד {0} דק׳ - לפני דקה + לפני דק׳ ({0}) לפני {0} דק׳ לפני {0} דק׳ לפני {0} דק׳ - - - לפני דקה - לפני שתי דק׳ - לפני {0} דק׳ - - שנייה עכשיו - בעוד שנייה + בעוד שנייה ({0}) בעוד שתי שניות בעוד {0} שניות @@ -2896,18 +3114,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ שנ׳ - בעוד שנ׳ - בעוד שתי שנ׳ + בעוד שנ׳ ({0}) + בעוד {0} שנ׳ בעוד {0} שנ׳ בעוד {0} שנ׳ - לפני שנ׳ + לפני שנ׳ ({0}) לפני שתי שנ׳ לפני {0} שנ׳ לפני {0} שנ׳ + + + בעוד שנ׳ ({0}) + בעוד {0} שנ׳ + בעוד {0} שנ׳ + + + לפני שנ׳ ({0}) + לפני שתי שנ׳ + לפני {0} שנ׳ + + אזור זמן @@ -3274,6 +3504,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ אי הפסחא + + קויאיקה + פונטה ארנס @@ -3539,9 +3772,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ פנום פן - אנדרבורי - - קנטון @@ -4211,9 +4441,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - שעון מערב אפריקה - שעון מערב אפריקה (חורף) - שעון מערב אפריקה (קיץ) + שעון מערב אפריקה @@ -4596,6 +4824,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ שעון גיאנה + + + שעון האיים האלאוטיים הוואי (חורף) + + שעון האיים האלאוטיים הוואי @@ -5041,6 +5274,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ שעון צ׳וק + + + שעון טורקיה + שעון רגיל טורקיה + שעון קיץ טורקיה + + שעון טורקמניסטן @@ -5223,95 +5463,64 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ‏#,##0.00 ‏¤;‏-#,##0.00 ‏¤ - ‏#,##0.00‏;‏-#,##0.00‏ + ‏#,##0.00 ‏¤;‏-#,##0.00 ‏¤ + ‏#,##0.00 ‏;‏-#,##0.00 ‏ + + + ‏#,##0.00 ‏¤;‏-#,##0.00 ‏¤ + ‏#,##0.00 ‏;‏-#,##0.00 ‏ - ¤0K‏ - ¤ 0K‏ - ¤0K‏ - ¤ 0K‏ - ¤ 0K‏ - ¤0K‏ - ¤ 0K‏ - ¤00K‏ - ¤ 00K‏ - ¤00K‏ - ¤ 00K‏ - ¤ 00K‏ - ¤00K‏ - ¤ 00K‏ - ¤000K‏ - ¤ 000K‏ - ¤000K‏ - ¤ 000K‏ - ¤ 000K‏ - ¤000K‏ - ¤ 000K‏ - ¤0M‏ - ¤ 0M‏ - ¤0M‏ - ¤ 0M‏ - ¤ 0M‏ - ¤0M‏ - ¤ 0M‏ - ¤00M‏ - ¤ 00M‏ - ¤00M‏ - ¤ 00M‏ - ¤ 00M‏ - ¤00M‏ - ¤ 00M‏ - ¤000M‏ - ¤ 000M‏ - ¤000M‏ - ¤ 000M‏ - ¤ 000M‏ - ¤000M‏ - ¤ 000M‏ - ¤0B‏ - ¤ 0B‏ - ¤0B‏ - ¤ 0B‏ - ¤ 0B‏ - ¤0B‏ - ¤ 0B‏ - ¤00B‏ - ¤ 00B‏ - ¤00B‏ - ¤ 00B‏ - ¤ 00B‏ - ¤00B‏ - ¤ 00B‏ - ¤000B‏ - ¤ 000B‏ - ¤000B‏ - ¤ 000B‏ - ¤ 000B‏ - ¤000B‏ - ¤ 000B‏ - ¤0T‏ - ¤ 0T‏ - ¤0T‏ - ¤ 0T‏ - ¤ 0T‏ - ¤0T‏ - ¤ 0T‏ - ¤00T‏ - ¤ 00T‏ - ¤00T‏ - ¤ 00T‏ - ¤ 00T‏ - ¤00T‏ - ¤ 00T‏ - ¤000T‏ - ¤ 000T‏ - ¤000T‏ - ¤ 000T‏ - ¤ 000T‏ - ¤000T‏ - ¤ 000T‏ + ‏0K‏ ‏¤ + ‏0K‏ ‏¤ + ‏0K‏ ‏¤ + ‏0K‏ ‏¤ + ‏00K‏ ‏¤ + ‏00K‏ ‏¤ + ‏00K‏ ‏¤ + ‏00K‏ ‏¤ + ‏000K‏ ‏¤ + ‏000K‏ ‏¤ + ‏000K‏ ‏¤ + ‏000K‏ ‏¤ + ‏0M‏ ‏¤ + ‏0M‏ ‏¤ + ‏0M‏ ‏¤ + ‏0M‏ ‏¤ + ‏00M‏ ‏¤ + ‏00M‏ ‏¤ + ‏00M‏ ‏¤ + ‏00M‏ ‏¤ + ‏000M‏ ‏¤ + ‏000M‏ ‏¤ + ‏000M‏ ‏¤ + ‏000M‏ ‏¤ + ‏0B‏ ‏¤ + ‏0B‏ ‏¤ + ‏0B‏ ‏¤ + ‏0B‏ ‏¤ + ‏00B‏ ‏¤ + ‏00B‏ ‏¤ + ‏00B‏ ‏¤ + ‏00B‏ ‏¤ + ‏000B‏ ‏¤ + ‏000B‏ ‏¤ + ‏000B‏ ‏¤ + ‏000B‏ ‏¤ + ‏0T‏ ‏¤ + ‏0T‏ ‏¤ + ‏0T‏ ‏¤ + ‏0T‏ ‏¤ + ‏00T‏ ‏¤ + ‏00T‏ ‏¤ + ‏00T‏ ‏¤ + ‏00T‏ ‏¤ + ‏000T‏ ‏¤ + ‏000T‏ ‏¤ + ‏000T‏ ‏¤ + ‏000T‏ ‏¤ @@ -5944,7 +6153,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ לירה טורקית חדשה לירה טורקית חדשה לירות טורקיות - לירות טורקיות לירות טורקיות @@ -6012,6 +6220,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ דולר מזרח קריבי + + גילדר של הקריביים + גילדר של הקריביים + גילדר של הקריביים + גילדר של הקריביים + זכויות משיכה מיוחדות @@ -6069,13 +6283,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ דולר זימבבואי + + זהב של זימבבואה + זהב של זימבבואה + זהב של זימבבואה + זהב של זימבבואה + יום יומיים {0} יום {0} ימים - פנה ימינה בפנייה ה-{0} + פנו ימינה בפנייה ה-{0} ה{0} הראשונה היא הקובעת ה{0} הראשון הוא הקובע @@ -6233,12 +6453,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} מייל רבוע {0} למייל רבוע - - {0} אקר - {0} אקר - {0} אקר - {0} אקר - יארד רבוע {0} יארד רבוע @@ -6289,7 +6503,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine פריטים - + + חלקים + {0} חלק + {0} חלקים + {0} חלקים + + masculine חלקים למיליון {0} חלקים למיליון @@ -6329,6 +6549,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} מול {0} מול + + גלוקוז + {0} גלוקוז + {0} גלוקוז + {0} גלוקוז + masculine ליטרים/קילומטר @@ -6543,10 +6769,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - {0} ohm - {0} ohms - {0} ohms - {0} ohms + אוהם + {0} אוהם + {0} אוהם + {0} אוהם + {0} אוהם masculine @@ -6675,13 +6902,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine קו מפריד מסוג em - {0} em - {0} em - {0} ems masculine פיקסלים + px ‏{0} + px ‏{0} + px ‏{0} masculine @@ -6690,6 +6917,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine פיקסלים לסנטימטר + ppcm ‏{0} + ppcm ‏{0} + ppcm ‏{0} + ppcm ‏{0} פיקסלים לאינץ׳ @@ -6700,9 +6931,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ נקודות לסנטימטר + {0} נקודות לסנטימטר + {0} נקודות לסנטימטר + {0} נקודות לסנטימטר + {0} נקודות לסנטימטר + + + נקודות לאינץ׳ + {0} נק׳ לאינץ׳ + dpi ‏{0} + {0} נק׳ לאינץ׳ נקודות קטנות + נקודה קטנה אחת ({0}) + {0} נקודות קטנות + {0} נקודות קטנות + {0} נקודות קטנות רדיוס כדור-הארץ @@ -6836,7 +7081,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - {0} נקודה + נקודה אחת ({0}) {0} נקודות {0} נקודות {0} נקודות @@ -7027,6 +7272,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} מילימטר כספית {0} מילימטר כספית + + כספית + {0} כספית + {0} כספית + {0} כספית + פאונד לאינץ׳ רבוע פאונד {0} לאינץ׳ רבוע @@ -7054,7 +7305,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - אטמוספרות + אטמוספירות {0} אטמוספרה {0} אטמוספרה {0} אטמוספרה @@ -7288,6 +7539,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} כ׳ מידה מטרית {0} כ׳ מידה מטרית + + אונקיית נוזל + {0} אונקיית נוזל + {0} fl oz m. + {0} אונקיית נוזל + אקר-רגל {0} אקר-רגל @@ -7413,14 +7670,61 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} קווארטות אימפריאליות {0} קווארטות אימפריאליות + + סטרדיאן + {0} סטרדיאן + {0} סטרדיאן + {0} סטרדיאן + + + קטאל + {0} קטאל + {0} קטאל + {0} קטאל + + + קולון + + + פאראד + + + הנרי + + + סימנס + + + קלוריה-IT + + + בקרל + {0} בקרל + {0} בקרל + {0} בקרל + + + קילוגרם כוח + {0} קילוגרם כוח + {0} קילוגרם כוח + {0} קילוגרם כוח + + + טסלה + {0} טסלה + {0} טסלה + {0} טסלה + + + ובר + {0} ובר + {0} ובר + {0} ובר + masculine - אור - {0} אור - {0} אור - {0} אור - + masculine חלקים למיליארד {0} חלקים למיליארד @@ -7429,11 +7733,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - לילות - {0} לילה - {0} לילות - {0} לילות - {0}/לילה רוחות השמיים @@ -7546,9 +7845,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ הקטאר - {0} ha - {0} ha - {0} ha מ״ר @@ -7569,7 +7865,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} sq mi {0} sq mi {0} sq mi - {0}/mi² אקר @@ -7579,43 +7874,36 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ yards² - {0} yd² - {0} yd² - {0} yd² {0} sq ft {0} sq ft {0} sq ft - - {0} in² - {0} in² - {0} in² - {0}/in² - דונם {0} דונם {0} דונם {0} דונם - - {0} kt - {0} kt - {0} kt - - - {0} mg/dL - {0} mg/dL - {0} mg/dL - פריט {0} פריט {0} פריטים {0} פריטים + + חלק + {0} חלק + {0} חלקים + {0} חלק + + + גלוקוז + {0} גלוקוז + {0} Glc + {0} Glc + ליטרים/ק״מ {0} ל׳/ק״מ @@ -7637,11 +7925,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ miles/gal Imp. + + PB‏{0} + PB‏{0} + PB‏{0} + PB‏{0} + + + TB‏{0} + {0} TB + {0} TB + + + Tb‏{0} + Tb‏{0} + Tb‏{0} + Tb‏{0} + + + GB‏{0} + {0} GB + {0} GB + Gbit + Gb‏{0} + {0} Gb + {0} Gb + + + MB‏{0} + {0} MB + {0} MB Mbit + Mb‏{0} + {0} Mb + {0} Mb + + + kB‏{0} + {0} kB + {0} kB + + + kb‏{0} + {0} kb + {0} kb בייט @@ -7729,7 +8060,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ amps - ohms + אוהם וולט @@ -7760,42 +8091,50 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ קוט״ש/100 ק״מ {0} קוט״ש/100 ק״מ {0} קוט״ש/100 ק״מ - {0} קוט״ש/100 ק״מ {0} קוט״ש/100 ק״מ - - {0} em - {0} em - {0} em - - {0} px - {0} px - {0} px + px ‏{0} + px ‏{0} + px ‏{0} - {0} MP - {0} MP - {0} MP + MP ‏{0} + MP ‏{0} + MP ‏{0} - {0} ppcm - {0} ppcm - {0} ppcm + ppcm ‏{0} + ppcm ‏{0} + ppcm ‏{0} + ppcm ‏{0} - {0} ppi - {0} ppi - {0} ppi + ppi ‏{0} + ppi ‏{0} + ppi ‏{0} + ppi ‏{0} + + + dpcm + dpcm‏ {0} + dpcm‏ {0} + dpcm‏ {0} + dpcm‏ {0} dpi - {0} ppi - {0} ppi - {0} dpi + ppi ‏{0} + dpi ‏{0} + dpi ‏{0} + dpi ‏{0} נקודה קטנה + נק' קטנה אחת ({0}) + {0} נק' קטנות + {0} נק' קטנות + {0} נק' קטנות ק״מ @@ -7830,16 +8169,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} מ״מ {0} מ״מ - - {0} μm - {0} μm - {0} μm - - - {0} nm - {0} nm - {0} nm - פ״מ {0} פ“מ @@ -7860,34 +8189,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ רגל - {0} ft - {0} ft - {0} ft {0} ‎/ft אינץ׳ - {0} in - {0} in - {0} in {0} ‎/in - - {0} pc - {0} pc - {0} pc - שנות אור {0} שנת אור {0} שנות אור {0} שנות אור - - {0} au - {0} au - {0} au - מ״י מ״י אחד @@ -8010,9 +8323,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} קמ״ק - {0} m³ - {0} m³ - {0} m³ + {0} מ"ק + {0} מ"ק + {0} מ"ק + {0} מ"ק סמ״ק @@ -8021,36 +8335,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} סמ״ק {0}/סמ״ק - - {0} mi³ - {0} mi³ - {0} mi³ - - - {0} yd³ - {0} yd³ - {0} yd³ - feet³ - {0} ft³ - {0} ft³ - {0} ft³ - - - {0} in³ - {0} in³ - {0} in³ - - - {0} ML - {0} ML - {0} ML - - - {0} hL - {0} hL - {0} hL ליטר @@ -8065,32 +8351,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} דצ״ל {0} דצ״ל - - {0} cL - {0} cL - {0} cL - מ״ל {0} מ״ל {0} מ״ל {0} מ״ל - - {0} mpt - {0} mpt - {0} mpt - - - {0} mc - {0} mc - {0} mc - - - {0} ac ft - {0} ac ft - {0} ac ft - גלון {0} גל׳ @@ -8107,15 +8373,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ qts - {0} qt - {0} qt - {0} qt פינט - {0} pt - {0} pt - {0} pt כוסות @@ -8129,11 +8389,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} fl oz {0} fl oz - - {0} fl oz Imp. - {0} fl oz Imp. - {0} fl oz Imp. - כפות {0} כפ׳ @@ -8146,11 +8401,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} כפי׳ {0} כפי׳ - - {0} bbl - {0} bbl - {0} bbl - טיפה טיפה @@ -8163,6 +8413,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} פינץ' {0} פינץ' + + קלוריה-IT + + + ק״ג-כוח + {0} ק"ג כוח + {0} ק"ג כוח + {0} ק"ג כוח + אור {0} אור @@ -8203,17 +8462,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} שנ׳ {0} שנ׳ - - {0} קמ״ר - {0} קמ״ר - {0} קמ״ר - {0} פריט {0} פר' {0} פר' {0} פר' + + חלק + {0} חלק + {0} חלקים + {0} חלקים + + + גלוקוז + {0} גלוקוז + {0} Glc + {0} Glc + ל׳/100ק״מ {0}ל׳/100ק״מ @@ -8221,6 +8487,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ל׳/100ק״מ {0}ל׳/100ק״מ + + PB‏{0} + PB‏{0} + PB‏{0} + PB‏{0} + + + TB‏{0} + TB‏{0} + TB‏{0} + TB‏{0} + + + Tb‏{0} + Tb‏{0} + Tb‏{0} + Tb‏{0} + + + GB‏{0} + {0} GB + {0} GB + + + MB‏{0} + {0} MB + {0} MB + + + Mb‏{0} + {0} Mb + {0} Mb + + + kB‏{0} + {0} kB + {0} kB + + + B‏{0} + B‏{0} + B‏{0} + B‏{0} + + + bit‏{0} + {0} ביט + {0} ביט + ש׳ {0} ש′ @@ -8255,6 +8570,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ns + + אוהם + קל׳ @@ -8265,8 +8583,43 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kWh/100km {0} kWh + + px ‏{0} + px ‏{0} + px ‏{0} + px ‏{0} + + + MP ‏{0} + MP ‏{0} + MP ‏{0} + MP ‏{0} + + + ppcm‏{0} + ppcm‏{0} + ppcm‏{0} + ppcm‏{0} + + + ppi ‏{0} + ppi ‏{0} + ppi ‏{0} + ppi ‏{0} + + + dpcm + ‎dpcm‏{0} + ‎dpcm‏{0} + ‎dpcm‏{0} + ‎dpcm‏{0} + נקודה + נק' קטנה אחת ({0}) + {0} נק' קטנות + {0} נק' קטנות + {0} נק' קטנות מטר @@ -8310,6 +8663,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} B {0} B + + {0} מ"ק + {0} מ"ק + {0} מ"ק + {0} מ"ק + {0}/galIm {0}/galIm @@ -8323,6 +8682,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}dsp-Imp {0}dsp-Imp + + קל׳-IT + + + ק״ג-כוח + {0} ק"ג כוח + {0} ק"ג כוח + {0} ק"ג כוח + diff --git a/make/data/cldr/common/main/hi.xml b/make/data/cldr/common/main/hi.xml index 649bddacab6..55b7aad3b28 100644 --- a/make/data/cldr/common/main/hi.xml +++ b/make/data/cldr/common/main/hi.xml @@ -229,7 +229,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ इबान इबिबियो इंडोनेशियाई - ईन्टरलिंगुइ + इंटरलिंग ईग्बो सिचुआन यी इनुपियाक् @@ -287,6 +287,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ बफिआ कोलोनियाई कुर्दिश + कुर्दिश + कुर्दिश कुमीक क्यूतनाई कोमी @@ -306,7 +308,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ लिगुरियन लिलोएट लैकोटा - लॉमबर्ड + लोम्बार्ड लिंगाला लाओ मोंगो @@ -537,7 +539,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ तुवीनियन मध्य एटलस तमाज़ित उदमुर्त - उइगर + उईग़ूर युगैरिटिक यूक्रेनियाई उम्बुन्डु @@ -546,7 +548,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ उज़्बेक वाई वेन्दा - वनीशन + वेनीशियन वियतनामी मखुवा वोलापुक @@ -599,7 +601,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + @@ -827,6 +829,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ चीन कोलंबिया क्लिपर्टन द्वीप + सार्क कोस्टारिका क्यूबा केप वर्ड @@ -1081,33 +1084,53 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ संख्यात्मक वर्गीकरण वर्गीकरण सशक्तता मुद्रा + इमोजी का प्रज़ेंटेशन घंटों का चक्र (12 बनाम 24) पंक्ति विच्छेद शैली + शब्दों के बीच पंक्ति विच्छेद मापन प्रणाली संख्याएँ + संक्षेपण के बाद वाक्य विच्छेद समय क्षेत्र स्थानीय प्रकार निजी-उपयोग बौद्ध पंचांग + बौद्ध चीनी पंचांग + चीनी कॉप्टिक कैलेंडर + कॉप्टिक दांगी कैलेंडर + दांगी इथियोपिक कैलेंडर + इथियोपिक इथियोपिक अमेते अलेम कैलेंडर + इथियोपिक अमेते अलेम ग्रेगोरियन कैलेंडर + ग्रेगोरियन हिब्रू पंचांग + हिब्रू भारतीय राष्ट्रीय कैलेंडर + भारतीय राष्ट्रीय हिजरी कैलेंडर + हिजरी हिजरी नागरिक कैलेंडर + हिजरी (टेबुलर, नागरिक शैली) हिजरी कैलेंडर (उम्म अल-क़ुरा) + हिजरी (उम्म अल-क़ुरा) आईएसओ-8601 कैलेंडर जापानी पंचांग + जापानी फ़ारसी कैलेंडर + फ़ारसी चीनी गणतंत्र पंचांग + चीनी गणतंत्र लेखांकन मुद्रा प्रारूप + लेखांकन मानक मुद्रा प्रारूप + मानक प्रतीकों को क्रमित करें प्रतीकों पर ध्यान न देकर क्रमित करें उच्‍चारणों को सामान्‍य रूप से क्रमित करें @@ -1117,22 +1140,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ पहले अपरकेस क्रमित करें केस असंवेदी क्रमित करें केस संवेदी को क्रमित करें - पारम्परिक चीनी वर्गीकरण क्रम संगतता के लिए पिछला वर्गीकरण क्रम + संगतता शब्दकोश वर्गीकरण क्रम + शब्दकोश डिफ़ॉल्ट यूनिकोड वर्गीकरण क्रम + डिफ़ॉल्ट यूनिकोड यूरोपीय क्रमण नियम - सरलीकृत चीनी वर्गीकरण क्रम फ़ोनबुक वर्गीकरण क्रम + फ़ोनबुक ध्वन्यात्मक वर्गीकरण क्रम + ध्वन्यात्मक पिनयिन वर्गीकरण क्रम + पिनयिन सामान्य-उद्देश्य खोज + खोज हांगुल आरंभिक व्‍यंजन द्वारा खोजें मानक वर्गीकरण क्रम + मानक स्ट्रोक वर्गीकरण क्रम + स्ट्रोक पारंपरिक वर्गीकरण क्रम + पारंपरिक रेडिकल-स्ट्रोक वर्गीकरण क्रम - ज़ूयन वर्गीकरण + रेडिकल-स्ट्रोक + ज़ूइन वर्गीकरण क्रम + ज़ूइन बिना सामान्‍यीकरण के क्रमित करें यूनिकोड सामान्‍यीकृत क्रमित करें अंको को अलग-अलग क्रमित करें @@ -1145,18 +1178,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ पूर्ण-चौड़ाई आधी-चौड़ाई सांख्यिक + डिफ़ॉल्ट + इमोजी + टेक्स्ट 12 घंटों की प्रणाली (0–11) + 12 (0–11) 12 घंटों की प्रणाली (1–12) + 12 (1–12) 24 घंटों की प्रणाली (0–23) + 24 (0–23) 24 घंटों की प्रणाली (1–24) + 24 (1–24) ढीली पंक्ति विच्छेद शैली + ढीली सामान्य पंक्ति विच्छेद शैली + सामान्य सख्त पंक्ति विच्छेद शैली + स्ट्रिक्ट + सभी को विच्छेद करें + किसी को विच्छेद न करें + सामान्य + वाक्यांशो के ज़रिए विच्छेद करें BGN लिप्यंतरण UNGEGN लिप्यंतरण मेट्रिक प्रणाली + मेट्रिक इम्पीरियल मापन प्रणाली + यू॰के॰ अमेरिकी मापन प्रणाली + यू॰एस॰ अरबी-भारतीय अंक विस्तृत अरबी-भारतीय अंक आर्मेनियाई संख्याएँ @@ -1201,6 +1251,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ तिब्बती अंक परंपरागत अंक वाई अंक + बंद + चालू मीट्रिक @@ -1222,9 +1274,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1376,7 +1425,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E B h:mm E B h:mm:ss d E + M/y G GGGGG d/M/y + E, M/d/y G G d MMM y G E, d MMM y M @@ -2544,11 +2595,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} डेलाइट समय {0} मानक समय - - एचएसटी - एचएसटी - HST - होनोलुलु @@ -2901,6 +2947,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ईस्टर + + कॉयहेक + पुंटा एरिनास @@ -3166,9 +3215,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ नॉम पेन्ह - एंडरबरी - - कैंटन @@ -3838,9 +3884,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - पश्चिम अफ़्रीका समय - पश्चिम अफ़्रीका मानक समय - पश्चिम अफ़्रीका ग्रीष्मकालीन समय + पश्चिम अफ़्रीका समय @@ -4197,6 +4241,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ गुयाना समय + + + हवाई–आल्यूशन मानक समय + + हवाई–आल्यूशन समय @@ -4799,8 +4848,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##,##0.00 - ¤ #,##,##0.00 - #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 @@ -4822,7 +4871,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤00 लाख ¤ 00 लाख ¤0 क॰ - ¤0 क॰ + ¤ 0 क॰ ¤0 क॰ ¤ 0 क॰ ¤00 क॰ @@ -5421,6 +5470,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ पूर्वी कैरिबियाई डॉलर + + कैरीबियन गिल्डर + कैरीबियन गिल्डर + कैरीबियन गिल्डर + यूरोपीय मुद्रा इकाई @@ -5447,6 +5501,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ज़ाम्बियन क्वाचा + + ज़िंबाब्वियन गोल्ड + ज़िंबाब्वियन गोल्ड + ज़िंबाब्वियन गोल्ड + {0}+ @@ -5692,11 +5751,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - मिलिग्राम प्रति डेसीलीटर - {0} मिलिग्राम प्रति डेसीलीटर - {0} मिलिग्राम प्रति डेसीलीटर - {0} मिलिग्राम प्रति डेसीलीटर - {0} मिलिग्राम प्रति डेसीलीटर + मिलीग्राम प्रति डेसीलीटर + {0} मिलीग्राम प्रति डेसीलीटर + {0} मिलीग्राम प्रति डेसीलीटर + {0} मिलीग्राम प्रति डेसीलीटर + {0} मिलीग्राम प्रति डेसीलीटर masculine @@ -5709,7 +5768,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - + + भाग + {0} भाग + {0} भागों + + masculine {0} हिस्सा प्रति दस लाख {0} हिस्सा प्रति दस लाख @@ -5741,6 +5805,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + + ग्लूकोज़ + {0} ग्लूकोज़ + {0} ग्लूकोज़ + masculine लीटर प्रति किलोमीटर @@ -6413,15 +6482,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} मर्क्यूरी मिलीमीटर {0} मर्क्यूरी मिलीमीटर + + मर्क्यूरी + {0} मर्क्यूरी + {0} मर्क्यूरी + पाउंड प्रति वर्ग इंच {0} पाउंड प्रति वर्ग इंच {0} पाउंड प्रति वर्ग इंच - मर्करी इंच - {0} मर्करी इंच - {0} मर्करी इंच + मर्क्यूरी इंच + {0} मर्क्यूरी इंच + {0} मर्क्यूरी इंच masculine @@ -6636,6 +6710,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + + मेट्रिक फ़्लूड आउंस + {0} मेट्रिक फ़्लूड आउंस + {0} मेट्रिक फ़्लूड आउंस + {0} एकड़ फ़ूट {0} एकड़ फ़ीट @@ -6727,15 +6806,75 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} क्वार्ट इम्पीरियल {0} क्वार्ट इम्पीरियल + + स्टेरेडियन + {0} स्टेरेडियन + {0} स्टेरेडियन + + + कैटाल + {0} कैटाल + {0} कैटाल + + + कूलाम + {0} कूलाम + {0} कूलाम + + + फैरड + {0} फैरड + {0} फैरड + + + हेनरी + {0} हेनरी + {0} हेनरी + + + सीमेंस + {0} सीमेंस + {0} सीमेंस + + + calories [IT] + {0} calorie [IT] + {0} calories [IT] + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + किलोग्राम-फ़ोर्स + {0} किलोग्राम-फ़ोर्स + {0} किलोग्राम-फ़ोर्स + + + टेस्ला + {0} टेस्ला + {0} टेस्ला + + + वेबर + {0} वेबर + {0} वेबर + feminine - लाइट - {0} लाइट - {0} लाइट - {0} लाइट - {0} लाइट - + masculine पार्ट्स प्रति बिलियन {0} पार्ट प्रति बिलियन @@ -6745,11 +6884,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - रातें - {0} रात - {0} रात - {0} रातें - {0} रातें {0} प्रति रात @@ -6958,7 +7092,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} आइटम {0} आइटम - + + भाग + {0} भाग + {0} भाग + + हिस्सा प्रति दस लाख @@ -6972,6 +7111,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} मोल {0} मोल + + Glc + लीटर/किमी {0} ली/किमी @@ -7306,6 +7448,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ वॉट + + {0} Hg + {0} Hg + बार {0} बार @@ -7444,6 +7590,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} मीट्रिक कप {0} मीट्रिक कप + + मेट्रिक फ़्लूड आउंस + {0} fl oz m. + {0} fl oz m. + एकड़ फ़ीट {0} ए॰फ़ी॰ @@ -7536,12 +7687,45 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} क. इम्पी. {0} क. इम्पी. + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + लाइट {0} लाइट {0} लाइट - + पार्ट्स/बिलियन @@ -7671,7 +7855,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/वर्ग किमी - हे + हे॰ वर्ग मी @@ -7703,12 +7887,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} व इं {0} व इं - + + भाग + {0} भाग + {0} भाग + + ppm % + + Glc + {0} ली/100 किमी {0} ली/100 किमी @@ -7889,15 +8081,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} वॉ {0} वॉ - - {0} मिवॉ - {0} मिवॉ - {0} एचपी {0} एचपी + + {0} Hg + {0} Hg + + ″ Hg {0}" Hg {0}" Hg @@ -7905,18 +8098,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mb {0}mb - - {0}hPa - {0} hPa - {0} किमी/घं {0} किमी/घं - - {0} मी/से - {0}मी॰/से॰ - {0} मीप्रघं {0} मीप्रघं @@ -7980,6 +8165,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} मिली {0} मिली + + मेट्रिक फ़्लूड आउंस + {0} एकड़ फ़ीट {0} एकड़ फ़ीट @@ -8046,16 +8234,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt-Imp. {0} qt-Imp. - - लाइट - {0} लाइट - {0} लाइट + + cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy - रातें {0}रात {0}रातें - {0}/रात diff --git a/make/data/cldr/common/main/hi_Latn.xml b/make/data/cldr/common/main/hi_Latn.xml index a3a8493c029..707b6a6cc65 100644 --- a/make/data/cldr/common/main/hi_Latn.xml +++ b/make/data/cldr/common/main/hi_Latn.xml @@ -20,7 +20,6 @@ annotations. Afreeki Hariyaanvi - Bangla Tibbati Kurdish, Sorani Crimean Turkish @@ -37,10 +36,8 @@ annotations. - - @@ -122,10 +119,13 @@ annotations. 24 Hour System (1–24) Sabhi Words mein Line Breaks allow karein Sabhi Words mein Line Breaks se bachein + Sabhi rakhein Words ke liye normal Line Breaks Phrases mein Line Breaks se bachein + Phrases mein rakhein Bangla Digits Chinese Decimal Numbers + Positional decimal system ke liye digits ke taur par Chinese number ideographs kaa use Simplified Chinese Numbers Simplified Chinese Financial Numbers Traditional Chinese Numbers @@ -195,6 +195,9 @@ annotations. {1}, {0} 'par' + + {1} {0} 'par' + @@ -203,6 +206,9 @@ annotations. {1}, {0} 'par' + + {1} {0} 'par' + @@ -216,6 +222,10 @@ annotations. h:mm.ss B + E, B h + E, h a + h a, v + HH'h', v d/M/y GGGGG @@ -444,7 +454,10 @@ annotations. {1}, {0} - {1}, {0} 'baje' + {1}, {0} 'par' + + + {1}, {0} 'par' @@ -452,7 +465,10 @@ annotations. {1}, {0} - {1}, {0} 'baje' + {1}, {0} 'par' + + + {1}, {0} 'par' @@ -466,11 +482,10 @@ annotations. - G y - G y MMM - G y, d MMM - G y, dd MMM, E - G y, dd MMMM, E + E, B h + E, h a + EEEE, d MMM, y G + h a, v MMMM 'kaa' 'week' W MMMM 'kaa' 'week' W d MMM, y @@ -1176,9 +1191,6 @@ annotations. - - HST - Honolulu @@ -1294,6 +1306,14 @@ annotations. + + + + ¤ #,##,##0.00 + #,##,##0.00 + + + @@ -1361,6 +1381,11 @@ annotations. {0} percent {0} percent + + glucose level + {0} kaa glucose level + {0} kaa glucose level + miles per Imp. gallon {0} mile per Imp. gallon @@ -1419,6 +1444,11 @@ annotations. {0} millimetre mercury {0} millimetres mercury + + mercury level + {0} kaa mercury level + {0} kaa mercury level + {0} inch mercury {0} inches mercury @@ -1491,6 +1521,11 @@ annotations. {0} CD {0} CD + + Hg level + {0} kaa Hg level + {0} kaa Hg level + {0} bar {0} bars @@ -1538,9 +1573,6 @@ annotations. - - μ {0} - karat {0}kt @@ -1578,6 +1610,11 @@ annotations. {0}# {0}# + + Hg level + {0} kaa Hg level + {0} kaa Hg level + {0}bar {0}bars diff --git a/make/data/cldr/common/main/hr.xml b/make/data/cldr/common/main/hr.xml index 35c73535771..b4f4f75021f 100644 --- a/make/data/cldr/common/main/hr.xml +++ b/make/data/cldr/common/main/hr.xml @@ -297,6 +297,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kelnski kurdski + kurdski + kurmanji kumyk kutenai komi @@ -857,6 +859,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kina Kolumbija Otok Clipperton + Sark Kostarika Kuba Zelenortska Republika @@ -887,7 +890,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Falklandski Otoci Falklandski Otoci (Malvini) Mikronezija - Ovčji Otoci + Farski Otoci Francuska Gabon Ujedinjeno Kraljevstvo @@ -1142,33 +1145,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ brojčano ravrstavanje jačina razvrstavanja valuta + Prezentacija emojija format vremena (12 ili 24) stil prijeloma retka + Prijelomi redaka unutar riječi sustav mjernih jedinica brojevi + Prijelom rečenice nakon kratice Vremenska zona Varijanta zemlje/jezika Privatna upotreba budistički kalendar + budistički kineski kalendar + kineski koptski kalendar + koptski dangi kalendar + dangi etiopski kalendar + etiopski etiopski kalendar "Amete Alem" + etiopski "Amete Alem" gregorijanski kalendar + gregorijanski hebrejski kalendar + hebrejski indijski nacionalni kalendar hijri kalendar + hijri hijri kalendar (tabularni, civilna epoha) + hijri (tabularni, civilna epoha) hijri kalendar (Umm al-Qura) + hijri (Umm al-Qura) ISO-8601 kalendar japanski kalendar + japanski perzijski kalendar + perzijski kalendar Republike Kine + minguo računovodstveni format valute + računovodstveno standardni format valute + standardno Poredaj simbole Poredaj zanemarujući simbole Poredaj naglaske normalno @@ -1178,22 +1200,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Poredaj prvo velika slova Poredaj zanemarujući veličinu Poredaj u skladu s veličinom slova - razvrstavanje prema tradicionalnom kineskom - Big5 prethodni redoslijed razvrstavanja, radi kompatibilnosti + kompatibilnost rječničko razvrstavanje + rječnik standardno unicode razvrstavanje + standardni Unicode Europska pravila razvrstavanja - razvrstavanje prema pojednostavljenom kineskom - GB2312 razvrstavanje po abecedi + telefonski imenik fonetsko razvrstavanje + fonetski pinyin razvrstavanje + pinyin općenito pretraživanje + pretraživanje Pretraživanje po početnom suglasniku hangula standardno razvrstavanje + standardno razvrstavanje po redoslijedu poteza za kineski + potez tradicionalno razvrstavanje + tradicionalno razvrstavanje prema korijenu i potezu + korijen i potez zhuyin razvrstavanje + zhuyin Poredaj bez normalizacije Poredaj unikod normalizirano Poredaj znamenke pojedinačno @@ -1206,18 +1238,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ široki uski Numerički + standardno + emoji + tekst 12-satni format (0 – 11) + 12 (0 – 11) 12-satni format (0 – 12) + 12 (1 – 12) 24-satni format (0 – 23) + 24 (0 – 23) 24-satni format (1 – 24) + 24 (0 – 24) slobodni stil prijeloma retka + slobodni normalni stil prijeloma retka + normalni strogi stil prijeloma retka + strogi + prijelom svega + zadrži sve + normalno + zadrži u frazama transliteracija prema BGN-u transliteracija prema UNGEGN-u metrički sustav + metrički imperijalni sustav mjera + UK američki sustav mjera + SAD arapsko-indijske znamenke proširene arapsko-indijske znamenke armenski brojevi @@ -1262,6 +1311,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tibetske znamenke Tradicionalni brojevi vai znamenke + isključeno + uključeno metrički sustav @@ -1306,9 +1357,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1405,6 +1453,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + @@ -1413,16 +1464,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + {1} {0} + + {1}, {0} + {1} {0} + + {1}, {0} + d. @@ -1430,13 +1490,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y. G + M. y. G d. M. y. GGGGG + G dd. MM. y., E LLL y. G d. MMM y. G E, d. MMM y. G hh a hh:mm a hh:mm:ss a + HH 'h' v L. dd. MM. E, dd. MM. @@ -1458,11 +1521,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -1816,6 +1877,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + @@ -1824,16 +1888,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'u' {0} + + {1} 'u' {0} + {1} {0} + + {1}, {0} + {1} {0} + + {1}, {0} + d. @@ -1841,15 +1914,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y. G + MM. y. G d. M. y. GGGGG + E, dd. MM. y., G LLL y. G d. MMM y. G E, d. MMM y. G - h a hh:mm a hh:mm:ss a h:mm:ss a v h:mm a v + HH 'h' v L. dd. MM. E, dd. MM. @@ -1881,11 +1956,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -1931,7 +2004,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, dd. MMM y. – E, dd. MMM y. G - h a – h a h – h 'h' a @@ -1956,7 +2028,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h 'h' a v @@ -2882,9 +2953,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Angvila - - Tirana - Erevan @@ -3012,9 +3080,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Biškek - - Enderbury - Pjongjang @@ -3069,9 +3134,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bahia Banderas - - Ciudad de México - Merida @@ -3165,9 +3227,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damask - - Lomé - Dušanbe @@ -3227,9 +3286,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - zapadnoafričko vrijeme - zapadnoafričko standardno vrijeme - zapadnoafričko ljetno vrijeme + zapadnoafričko vrijeme @@ -3635,6 +3692,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ gvajansko vrijeme + + + havajsko-aleutsko standardno vrijeme + + havajsko-aleutsko vrijeme @@ -4085,6 +4147,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ vrijeme Chuuka + + + tursko vrijeme + tursko standardno vrijeme + tursko ljetno vrijeme + + turkmenistansko vrijeme @@ -4260,6 +4329,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -5975,6 +6048,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ istočnokaripskih dolara XCD + + karipski gulden + karipski gulden + karipska guldena + karipskih guldena + posebna crtaća prava posebno crtaće pravo @@ -6133,6 +6212,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ zimbabveanska dolara (1980.–2008.) zimbabveanskih dolara (1980.–2008.) + + zimbabveansko zlato + zimbabveansko zlato + zimbabveanska zlata + zimbabveanskih zlata + zimbabveanski dolar (2009) zimbabveanski dolar (2009) @@ -6268,8 +6353,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ četvorni {0} četvornog {0} četvornim {0} - četvorni {0} - četvorni {0} + četvorna {0} + četvornu {0} četvorne {0} četvornom {0} četvorni {0} @@ -6280,10 +6365,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ četvorna {0} četvorna {0} četvorna {0} - četvorna {0} - četvorna {0} - četvorna {0} - četvorna {0} + četvorne {0} + četvorne {0} + četvorne {0} + četvorne {0} četvorna {0} četvorna {0} četvorna {0} @@ -6307,8 +6392,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kubni {0} kubnog {0} kubnim {0} - kubni {0} - kubni {0} + kubne {0} + {0} kubnu kubne {0} kubnom {0} kubni {0} @@ -6320,9 +6405,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kubna {0} kubna {0} kubne {0} - kubna {0} - kubna {0} - kubna {0} + kubne {0} + kubne {0} + kubne {0} kubna {0} kubna {0} kubna {0} @@ -6602,7 +6687,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} stavki {0} stavki - + + dijelovi + {0} dio + {0} dijela + {0} dijelova + + inanimate dijelovi na milijun {0} dio na milijun @@ -6682,6 +6773,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mola {0} mola + + glukoze + {0} glukoze + {0} glukoze + {0} glukoze + feminine litre po kilometru @@ -8002,7 +8099,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetar živina stupca {0} milimetar živina stupca {0} milimetar živina stupca - {0} milimetar živina stupca + {0} milimetrom živina stupca {0} milimetra živina stupca {0} milimetra živina stupca {0} milimetra živina stupca @@ -8012,6 +8109,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetara živina stupca {0} milimetara živina stupca + + žive + {0} žive + {0} žive + {0} žive + funte po kvadratnom inču {0} funta po kvadratnom inču @@ -8447,6 +8550,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metričkih šalica {0} metričkih šalica + + tekuće unce + {0} tekuća unca + {0} tekuće unce + {0} tekućih unci + aker-stope {0} aker-stopa @@ -8546,9 +8655,86 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imperijalne četvrtine {0} imperijalne četvrtine + + steradijani + {0} steradijan + {0} steradijana + {0} steradijana + + + katali + {0} katal + {0} katala + {0} katala + + + kuloni + {0} kulon + {0} kulona + {0} kulona + + + faradi + {0} farad + {0} farada + {0} farada + + + henriji + {0} henri + {0} henrija + {0} henrija + + + simensi + {0} S + {0} S + {0} S + + + kalorije [IT] + {0} kalorija [IT] + {0} kalorije [IT] + {0} kalorija [IT] + + + bekereli + {0} bekerel + {0} bekerela + {0} bekerela + + + siverti + {0} sivert + {0} siverta + {0} siverta + + + greji + {0} grej + {0} greja + {0} grejeva + + + kilogram-sila + {0} kilogram-sila + {0} kilogram-sile + {0} kilogram-sila + + + tesle + {0} tesla + {0} tesle + {0} tesla + + + veberi + {0} veber + {0} vebera + {0} vebera + neuter - svjetlo {0} svjetlo {0} svjetlo {0} svjetla @@ -8562,7 +8748,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} svjetala {0} svjetala - + inanimate dijelovi na milijardu {0} dio na milijardu @@ -8593,7 +8779,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} noći {0} noći {0} noći - {0}/noć kardinalni smjer @@ -8661,6 +8846,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} stavke {0} stavki + + dio + {0} dio + {0} dijela + {0} dijelova + {0} % {0} % @@ -8681,6 +8872,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mola {0} mola + + Glc + {0} Glc + {0} Glc + {0} Glc + l/km {0} l/km @@ -8876,6 +9073,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} KS {0} KS + + {0} Hg + {0} Hg + {0} Hg + {0} bar {0} bara @@ -9003,13 +9205,79 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} prstohvata {0} prstohvata + + {0} sr + {0} sr + {0} sr + + + {0} kat + {0} kat + {0} kat + + + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + + + {0} H + {0} H + {0} H + + + {0} S + {0} S + {0} S + + + cal [IT] + {0} cal [IT] + {0} cal [IT] + {0} cal [IT] + + + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + {0} kgf + + + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + svjetlo {0} svjetlo {0} svjetla {0} svjetala - + dijelovi/milijarda @@ -9037,11 +9305,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dunam + + dio + {0} dio + {0} dijela + {0} dijelova + {0} mol {0} mola {0} mola + + Glc + {0} Glc + {0} Glc + {0} Glc + {0}l/100km {0}l/100km @@ -9091,6 +9371,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Da + + {0} Hg + {0} Hg + {0} Hg + {0} mb {0} mb @@ -9125,21 +9410,71 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} jiggera {0} jiggera - - svjetlo - {0} svjetlo - {0} svjetla - {0} svjetala + + {0} sr + {0} sr + {0} sr - - dijelovi/milijarda + + {0} kat + {0} kat + {0} kat - - noć - {0} noć - {0} noći - {0} noći - {0}/noć + + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + + + {0} H + {0} H + {0} H + + + {0} S + {0} S + {0} S + + + cal [IT] + {0} cal [IT] + {0} cal [IT] + {0} cal [IT] + + + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + {0} kgf + + + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb {0}I diff --git a/make/data/cldr/common/main/hsb.xml b/make/data/cldr/common/main/hsb.xml index f3c8138cc6d..af2ffc5ce6c 100644 --- a/make/data/cldr/common/main/hsb.xml +++ b/make/data/cldr/common/main/hsb.xml @@ -42,6 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic aymaršćina azerbajdźanšćina baškiršćina + balučišćina balinezišćina basaa běłorušćina @@ -229,6 +230,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic bafia kelnšćina kurdišćina + kurdišćina + kurmandźišćina kumykšćina komišćina kornišćina @@ -621,6 +624,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic China Kolumbiska Clippertonowa kupa + Sark Kosta Rika Kuba Kap Verde @@ -848,42 +852,81 @@ CLDR data files are interpreted according to the LDML specification (http://unic format měny rjadowanski slěd měna + předstajenje emojija hodźinowy cyklus (12 vs 24) system łamanja linkow + łamanje linki w słowje system měrow ličby + přetorhnjenje sady po skrótšence buddhistiska protyka + buddhistiska chinska protyka + chinska koptiska protyka + koptiska dangi-protyka + dangiska etiopiska protyka + etiopiska etiopiska amete-alem-protyka + etiopiska Amete-Alem gregorianska protyka + gregorianiska židowska protyka + hebrejska islamska protyka + hijri islamska ciwilna protyka + islamska ciwilna islamska umalqura-protyka + islamska Umm al-Qura protyka po iso-8601 japanska protyka + japanska persiska protyka + persiska protyka republiki China + minguo knihiwjedniski format měny + knihiwjednistwo standardny format měny + standard rjadowanski slěd po Unicode + standardne unicode-rjadowanje powšitkowne pytanje + pytaj standardowy rjadowanski slěd + standardne + default + emoji + tekst 12-hodźinowy cyklus (0-11) + 12 (0–11) 12-hodźinowy cyklus (1-12) + 12 (1–12) 24-hodźinowy cyklus (0-23) + 24 (0–23) 24-hodźinowy cyklus (1-24) + 24 (1–24) swobodny stil łamanja linkow + wólny běžny stil łamanja linkow + běžny kruty stil łamanja linkow + kruty + łamaj wšitko + zdźerž wšitko + normalne + w sadach metriski system + metriski britiski system měrow + britiski ameriski system měrow + ameriski arabsko-indiske cyfry rozšěrjene arabsko-indiske cyfry armenske cyfry @@ -924,6 +967,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic thailandske cyfry tibetske cyfry vaiske cyfry + + haj metriski @@ -941,6 +986,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic [áàăâåäãąā æ ç ďđ éèĕêëėęē ğ íìĭîïİī ı ĺľ ňñ òŏôöőøō œ ŕ śş ß ť úùŭûůüűū ýÿ ż ź] [A B C Č Ć D {DŹ} E F G H {CH} I J K Ł L M N O P Q R S Š T U V W X Y Z Ž] [\- ‐‑ – — , ; \: ! ? . … '‘’‚ "“„ « » ( ) \[ \] \{ \} § @ * / \& #] + [\- ‐‑ , . * / † ⚭] @@ -1004,13 +1050,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic h 'hodź'. B + E h 'hodź'. B E, d. + E h 'hodź'. a E h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + M/y G d.M.y GGGGG + E, d.M.y G MMM y G d. MMM y G E, d. MMM y G @@ -1018,6 +1068,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH 'hodź'. h:mm a h:mm:ss a + h 'hodź'. a v + HH 'hodź'. v d.M. E, d.M. d. MMM @@ -1365,6 +1417,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'w' {0} + + {1} 'w' {0} + @@ -1373,6 +1428,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'w' {0} + + {1} 'w' {0} + @@ -1385,14 +1443,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic + h 'hodź'. B d. + E, h 'hodź'. B E, d. E, h:mm a E, H:mm 'hodź'. E, h:mm:ss a E, HH:mm:ss y G + M/y G d.M.y GGGGG + E, d.M.y G MMM y G d. MMM y G E, d. MMM y G @@ -1404,6 +1466,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic H:mm:ss H:mm:ss v H:mm v + h 'hodź'. a v + H 'hodź'. v d.M. E, d.M. d. MMM @@ -2479,9 +2543,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Biškek - - Enderbury - Komory @@ -2639,9 +2700,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - zapadoafriski čas - zapadoafriski standardny čas - zapadoafriski lětni čas + zapadoafriski čas @@ -3006,6 +3065,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic guyanski čas + + + hawaiisko-aleutski standardny čas + + hawaiisko-aleutski čas @@ -3595,6 +3659,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + druhdy + @@ -3606,6 +3673,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -4955,6 +5026,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic wuchodnokaribiske dolary wuchodnokaribiskich dolarow + + karibiski gulden + karibiski gulden + karibiskej guldenaj + karibiske guldeny + karibiskich guldenow + CFA-frank (BCEAO) CFA-frank (BCEAO) @@ -4997,6 +5075,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic sambiske kwachi sambiskich kwachow + + simbabwiske złoto + simbabwiske złoto + simbabwiskej złoće + simbabwiske złota + simbabwiskich złotow + ≈{0} @@ -5278,7 +5363,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kuski {0} kuskow - + + dźěle + {0} dźěl + {0} dźělej + {0} dźěle + {0} dźělow + + milionćiny {0} milionćina {0} milionćinje @@ -5313,6 +5405,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mole {0} molow + + glukozy + {0} glukozy + {0} glukozy + {0} glukozy + {0} glukozy + litry na kilometer {0} liter na kilometer @@ -6029,6 +6128,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} milimetry žiwoslěbroweho stołpika {0} milimetrow žiwoslěbroweho stołpika + + žiwoslěbroweho stołpa + {0} žiwoslěbroweho stołpa + {0} žiwoslěbroweho stołpa + {0} žiwoslěbroweho stołpa + {0} žiwoslěbroweho stołpa + punty na kwadratny cól {0} punt na kwadratny cól @@ -6276,6 +6382,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} metriske šalki {0} metriskich šalkow + + metriske běžite uncy + {0} běžita unca + {0} běžitej uncy + {0} běžite uncy + {0} metriskich běžitych uncow + acre-stopy {0} acre-stopa @@ -6397,6 +6510,97 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} britiske běrtle {0} britiskich běrtlow + + steradiany + {0} steradian + {0} steradianaj + {0} steradiany + {0} steradianow + + + katale + {0} katal + {0} katalej + {0} katale + {0} katalow + + + coulomby + {0} coulomb + {0} coulombaj + {0} coulomby + {0} coulombow + + + farady + {0} farad + {0} faradaj + {0} farady + {0} faradow + + + henryje + {0} henry + {0} henryjej + {0} henryje + {0} henryjow + + + siemensy + {0} siemens + {0} siemensaj + {0} siemensy + {0} siemensow + + + kalorije [IT] + {0} kalorija [IT] + {0} kaloriji [IT] + {0} kalorije [IT] + {0} kalorijow [IT] + + + bequerele + {0} bequerel + {0} bequerelej + {0} bequerele + {0} bequerelow + + + sieverty + {0} sievert + {0} sievertaj + {0} sieverty + {0} sievertow + + + grayje + {0} gray + {0} grayjej + {0} grayje + {0} grayjow + + + kilogramy-forcy + {0} kilogram-force + {0} kilogramaj-forcaj + {0} kilogramy-forcy + {0} kilogramow-forcow + + + tesle + {0} tesla + {0} teslej + {0} tesle + {0} teslow + + + webery + {0} weber + {0} weberaj + {0} webery + {0} weberow + swětłowa spěšnosć {0} swětłowa spěšnosć @@ -6404,7 +6608,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} swětłowe spěšnosće {0} swětłowych spěšnosćow - + miliardćina {0} miliardćina {0} miliardćinje @@ -6493,6 +6697,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kusy {0} kusow + + dźěl + {0} dźěl + {0} dźěl + {0} dźěl + {0} dźěl + {0} % {0} % @@ -6511,6 +6722,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ‱ {0} ‱ + + Glc + {0} Glc + {0} Glc + {0} Glc + {0} Glc + l/km {0} l/km @@ -6678,6 +6896,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} PS {0} PS + + {0} Hg + {0} Hg + {0} Hg + {0} Hg + mph {0} mph @@ -6746,6 +6970,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic mc + + m. fl oz + {0} m. fl oz + {0} m. fl oz + {0} m. fl oz + {0} m. fl oz + gal {0} gal @@ -6839,6 +7070,86 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} šćipki {0} šćipkow + + steradian + {0} sr + {0} sr + {0} sr + {0} sr + + + {0} kat + {0} kat + {0} kat + {0} kat + + + {0} C + {0} C + {0} C + {0} C + + + {0} F + {0} F + {0} F + {0} F + + + {0} H + {0} H + {0} H + {0} H + + + {0} S + {0} S + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + {0} kgf + {0} kgf + + + {0} T + {0} T + {0} T + {0} T + + + {0} Wb + {0} Wb + {0} Wb + {0} Wb + sw. spěšnosć {0} sw. spěšnosć @@ -6846,7 +7157,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} sw. spěšnosće {0} sw. spěšnosćow - + nano {0} nano {0} nano @@ -6981,7 +7292,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} c {0} c - + n {0} n {0} n diff --git a/make/data/cldr/common/main/hu.xml b/make/data/cldr/common/main/hu.xml index 2cfb4d16073..5872fdcad3a 100644 --- a/make/data/cldr/common/main/hu.xml +++ b/make/data/cldr/common/main/hu.xml @@ -297,6 +297,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurd + kurd + kurmandzsi kumük kutenai komi @@ -365,7 +367,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ maláj máltai mundang - többszörös nyelvek + több nyelv krík mirandéz márvári @@ -831,7 +833,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kína Kolumbia Clipperton-sziget - Sark + Sark Costa Rica Kuba Zöld-foki Köztársaság @@ -1132,33 +1134,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Numerikus rendezés Rendezés erőssége Pénznem + Emoji megjelenítése Óraformátum (12 – 24) Sortörés stílusa + Szavakon belüli sortörések Mértékegységrendszer Számok + Mondattörés rövidítés után Időzóna Földrajzi helyvariáns Privát használatra Buddhista naptár + Buddhista Kínai naptár + Kínai Kopt naptár + Kopt Dangi naptár + Dangi Etióp naptár + Etióp Etióp amete alem naptár + Etióp amete alem Gergely-naptár + Gergely Héber naptár + Héber Indiai nemzeti naptár Hidzsra naptár + Hidzsra Hidzsra naptár (táblázatos, polgári) + Hidzsra (táblázatos, polgári) Hidzsra naptár (Umm al-Qura) + Hidzsra (Umm al-Qura) ISO-8601 naptár Japán naptár + Japán Perzsa naptár + Perzsa Kínai köztársasági naptár + Kínai köztársasági Könyvelési pénznemformátum + Könyvelési Normál pénznemformátum + Normál Szimbólumok rendezése Rendezés szimbólumok figyelmen kívül hagyásával Ékezetek normál rendezése @@ -1168,23 +1189,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Nagybetűs szavak rendezése előre Kis- és nagybetűket meg nem különböztető rendezés Rendezés kisbetű-nagybetű szerint - Hagyományos kínai sorrend - Big5 Előző rendezési sorrend a kompatibilitás érdekében + Kompatibilitás Szótári rendezési sorrend + Szótári Alapértelmezett Unicode rendezési sorrend + Alapértelmezett Unicode Emodzsi rendezési sorrend Európai rendezési szabályok - Egyszerűsített kínai sorrend - GB2312 Telefonkönyv sorrend + Telefonkönyv Fonetikus rendezési sorrend + Fonetikus Pinyin sorrend + Pinyin Általános célú keresés + Keresés Keresés hangul kezdő mássalhangzó szerint Normál rendezési sorrend + Normál Vonássorrend - Hagyományos + Vonás + Hagyományos sorrend + Hagyományos Szótővonás rendezési sorrend + Szótővonás Zujin rendezési sorrend + Zujin Rendezés normalizálás nélkül Unicode szerinti normalizált rendezés Számjegyek egyedi rendezése @@ -1197,18 +1228,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Teljes szélesség Fél szélesség Szám + Alapértelmezett + Emoji + Szöveg 12 órás rendszer (0–11) + 12 (0–11) 12 órás rendszer (0–12) + 12 (1–12) 24 órás rendszer (0–23) + 24 (0–23) 24 órás rendszer (0–24) + 24 (1–24) Tág stílusú sortörés + Tág Normál stílusú sortörés + Normál Szűk stílusú sortörés + Szűk + Az összes törése + Az összes megtartása + Normál + Megtartás a kifejezéseknél BGN UNGEGN Méterrendszer + Méter Angolszász mértékegységrendszer + Angolszász Amerikai mértékegységrendszer + Amerikai Arab-indiai számjegyek Kibővített arab-indiai számjegyek Örmény számok @@ -1253,6 +1301,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tibeti számjegyek Hagyományos számok Vai számjegyek + Ki + Be metrikus @@ -1282,9 +1332,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1412,23 +1459,39 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}, {0} + + + {1}, {0} + {1} {0} + + {1}, {0} + + + {1}, {0} + B h B h:mm B h:mm:ss + E B h E h:mm E h:mm:ss d., E + E a h E h:mm E h:mm:ss G y. - GGGGG y/MM/dd + G y. M. + G y. M. d. + E, M/d/y G G y. MMM G y. MMM d. G y. MMM d., E @@ -1438,6 +1501,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm a h:mm:ss H:mm:ss + a h v M. d. M. d., E MMM d. @@ -1692,6 +1756,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ éjjel hajnal + + éjfél + dél + reggel + de. + délután + este + éjjel + hajnal + éjfél dél @@ -1704,6 +1778,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + reggel + de. + délután + este + éjjel + hajnal + reggel délelőtt @@ -1805,13 +1887,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h E B h:mm E B h:mm:ss d., E + E a h E h:mm a E h:mm:ss a G y. + G y. MM. GGGGG y. MM. dd. + G y. MM. dd., E G y. MMM G y. MMM d. G y. MMM d., E @@ -1823,6 +1909,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm:ss a h:mm:ss v a h:mm v + a h v M. d. M. d., E MMM d. @@ -2368,24 +2455,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dubaj - - Tirana - Jereván Vosztok - - Río Gallegos - - - Tucumán - - - Córdoba - Bécs @@ -2407,27 +2482,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - Eirunepé - Río Branco - - Cuiabá - - - Belém - - - Araguaína - - - São Paulo - - - Maceió - Timpu @@ -2449,9 +2506,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sanghaj - - Bogotá - Havanna @@ -2464,9 +2518,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Prága - - Büsingen - Dzsibuti @@ -2583,7 +2634,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Biskek - Enderbury + Canton-sziget Kiritimati-sziget @@ -2651,9 +2702,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maldív-szigetek - - Mazatlán - Bahia Banderas @@ -2884,9 +2932,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - nyugat-afrikai időzóna - nyugat-afrikai téli idő - nyugat-afrikai nyári idő + nyugat-afrikai időzóna @@ -3170,7 +3216,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - közép-európai időzóna + közép-európai idő közép-európai téli idő közép-európai nyári idő @@ -3292,6 +3338,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ guyanai téli idő + + + hawaii-aleuti téli idő + + hawaii-aleuti időzóna @@ -3742,6 +3793,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ truki idő + + + Törökországi idő + Törökországi zónaidő + Törökországi nyári idő + + türkmenisztáni idő @@ -3898,7 +3956,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -4283,8 +4344,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ hondurasi lempira - hondurasi lempira - hondurasi lempira Horvát dínár @@ -4323,8 +4382,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ iráni riál - iráni riál - iráni riál izlandi korona @@ -4431,8 +4488,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ macedón dénár - macedón dénár - macedón dénár macedón dénár (1992–1993) @@ -4529,8 +4584,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ománi riál - ománi riál - ománi riál panamai balboa @@ -4572,8 +4625,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ katari riál - katari riál - katari riál rhodéziai dollár @@ -4588,8 +4639,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ szerb dinár - szerb dinár - szerb dinár orosz rubel @@ -4602,8 +4651,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ szaúdi riál - szaúdi riál - szaúdi riál salamon-szigeteki dollár @@ -4644,8 +4691,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sierra Leone-i leone (1964–2022) - Sierra Leone-i leone (1964–2022) - Sierra Leone-i leone (1964–2022) szomáli shilling @@ -4762,13 +4807,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ uruguayi peso - uruguayi peso - uruguayi peso üzbegisztáni szom - üzbegisztáni szom - üzbegisztáni szom Venezuelai bolivar (1871–2008) @@ -4817,6 +4858,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kelet-karibi dollár XCD + + karibi forint + karibi forint + karibi forint + Special Drawing Rights @@ -4863,8 +4909,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ jemeni riál - jemeni riál - jemeni riál Jugoszláv kemény dínár @@ -4905,6 +4949,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabwei dollár (1980–2008) + + zimbabwei arany + zimbabwei arany + zimbabwei arany + Zimbabwei dollár (2009) @@ -5254,7 +5303,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} itemig {0} itemmé - + + rész + {0} rész + {0} rész + + {0} részecske/millió {0} részecske/milliót {0} részecske/millióval @@ -5316,6 +5370,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mólig {0} móllá + + glükóz + {0} glükóz + {0} glükóz + liter per kilométer {0} liter per kilométer @@ -6381,6 +6440,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} higanymilliméterig {0} higanymilliméterré + + higany + {0} higany + {0} higany + font per négyzethüvelyk {0} font per négyzethüvelyk @@ -6518,9 +6582,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} csomó - Beaufort - Beaufort {0} - Beaufort {0} + Beaufort + Beaufort {0} + Beaufort {0} {0} fok @@ -6749,6 +6813,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} bögréig {0} bögrévé + + metrikus folyadékuncia + {0} metrikus folyadékuncia + {0} metrikus folyadékuncia + hold-láb {0} hold-láb @@ -6811,8 +6880,72 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} birodalmi kvart {0} birodalmi kvart + + szteradián + {0} szteradián + {0} szteradián + + + katal + {0} katal + {0} katal + + + coulomb + {0} coulomb + {0} coulomb + + + farad + {0} farad + {0} farad + + + henry + {0} henry + {0} henry + + + siemens + {0} siemens + {0} siemens + + + kalória [IT] + {0} kalória [IT] + {0} kalória [IT] + + + becquerel + {0} becquerel + {0} becquerel + + + sievert + {0} sievert + {0} sievert + + + gray + {0} gray + {0} gray + + + kilogramm-erő + {0} kilogramm-erő + {0} kilogramm-erő + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber + - éjszakák {0} éjszaka {0} éjszakát {0} éjszakával @@ -6823,7 +6956,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} éjszakával {0} éjszakáig {0} éjszakává - {0}/éjszaka kardinális irány @@ -6867,7 +6999,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmol/l {0} mmol/l - + + rész + {0} rész + {0} rész + + részecske/millió @@ -6876,6 +7013,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ezrelék + + mól + + + Glc + l/km {0} l/km @@ -7054,6 +7197,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Nap-sugár + + kandela + Kt {0} Kt @@ -7209,6 +7355,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} bir. qt {0} bir. qt + + cal-IT + éjszakák {0} éjszaka @@ -7235,7 +7384,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmol/l - + + rész + {0} rész + {0} rész + + ppm @@ -7244,6 +7398,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Glc + {0} l/100 km {0} l/100 km @@ -7284,8 +7441,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hgin - B{0} - B{0} + B{0} + B{0} fl.dr. @@ -7297,11 +7454,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} csi {0} csi - - éjszakák - {0} éjszaka - {0} éjszaka - {0}/éjszaka + + cal-IT diff --git a/make/data/cldr/common/main/hy.xml b/make/data/cldr/common/main/hy.xml index 08690355a5a..8c6d8cbc0b0 100644 --- a/make/data/cldr/common/main/hy.xml +++ b/make/data/cldr/common/main/hy.xml @@ -54,6 +54,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ այմարա ադրբեջաներեն բաշկիրերեն + բելուջերեն բալիերեն բասաա բելառուսերեն @@ -253,6 +254,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ բաֆիա քյոլներեն քրդերեն + քրդերեն + քուրմանջի կումիկերեն կոմիերեն կոռներեն @@ -697,6 +700,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Չինաստան Կոլումբիա Քլիփերթոն կղզի + Սարկ կղզի Կոստա Ռիկա Կուբա Կաբո Վերդե @@ -936,42 +940,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ արժույթի ձևաչափ տեսակավորման կարգ արժույթ + էմոջիների ներկայացում Ժամանակային համակարգ (12 կամ 24) տողանցման ոճ + Տողերի ընդհատումներ բառամիջում չափման համակարգ թվեր + Նախադասության ընդհատում հապավումից հետո․ բուդդայական օրացույց + բուդդայական չինական օրացույց + չինական ղպտական օրացույց + ղպտական դանգի օրացույց + դանգի եթովպական օրացույց + եթովպական եթովպական Ամետե Ալեմ օրացույց + եթովպական Ամետե Ալեմ գրիգորյան օրացույց + գրիգորյան հրեական օրացույց + հրեական հիջրայի օրացույց + հիջրա հիջրայի քաղաքացիական օրացույց (աղյուսակային) + հիջրա (աղյուսակային, քաղաքացիական) հիջրայի օրացույց (Ում ալ Քուրա) + հիջրա (Ում ալ Քուրա) ISO-8601 օրացույց ճապոնական օրացույց + ճապոնական պարսկական օրացույց - մինգուո օրացույց + պարսկական + Մինգո օրացույց + Մինգո արժույթի հաշվապահական ձևաչափ + հաշվապահական արժույթի ստանդարտ ձևաչափ - Յունիկոդ լռելյայն տեսակավորում + ստանդարտ + Unicode-ի կանխադրված տեսակավորում + Unicode (կանխադրված) որոնում + որոնում տեսակավորման ստանդարտ կարգ + ստանդարտ + կանխադրված + էմոջի + տեքստ 12-ժամյա համակարգ (0-11) + 12 (0–11) 12-ժամյա համակարգ (1-12) + 12 (1–12) 24-ժամյա համակարգ (0-23) + 24 (0–23) 24-ժամյա համակարգ (1-24) + 24 (1–24) փափուկ տողանցում + փափուկ սովորական տողանցում + սովորական կոշտ տողանցում + կոշտ + Ընդհատել բոլորը + Պահել բոլորը + Սովորական + Պահել արտահայտություններում մետրիկ համակարգ + մետրիկ անգլիական համակարգ + ՄԹ ամերիկյան համակարգ + ԱՄՆ արաբա-հնդկական թվանշաններ արաբա-հնդկական թվերի ընդլայնված համակարգ հայկական թվանշաններ @@ -1012,6 +1055,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ թայական թվանշաններ տիբեթական թվանշաններ վայական թվանշաններ + Անջ․ + Միաց․ Մետրական @@ -1090,22 +1135,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h-ին B h:mm-ին B h:mm:ss + E B h E B h:mm-ին E B h:mm:ss d, ccc G y թ․ - dd.MM.y GGGGG + G MM.y + GGGGG dd.MM.y + G dd.MM.y, E G y թ․ MMM G y թ․ MMM d G y թ․ MMM d, E H H:mm H:mm:ss + ժ․ HH v dd.MM dd.MM, E - d MMM - d MMM, E - d MMMM y, G y, G G y թ. MM @@ -1447,6 +1493,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h-ին B h:mm-ին B h:mm:ss + E B h-ին E B h:mm-ին E B h:mm:ss d, ccc @@ -1455,23 +1502,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, h:mm:ss a E, HH:mm:ss G y թ. - dd.MM.y GGGGG + G MM.y + GGGGG dd.MM.y + G dd.MM.y, E G y թ. MMM G y թ․ MMM d G y թ. MMM d, E H H:mm H:mm:ss + ժ․ HH v dd.MM dd.MM, E d MMM - d MMM, E - d MMMM MMMM W-ին շաբաթ MMMM W-րդ շաբաթ MM.y dd.MM.y - d.MM.y թ., E + d.MM.y, E y թ. LLL d MMM, y թ. y թ. MMM d, E @@ -1493,6 +1541,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h:mm – h:mm + G y թ․ – G y թ․ G y–y թթ․ @@ -2363,6 +2412,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Զատկի կղզի + + Կոյայկե + Պունտա Արենաս @@ -2628,9 +2680,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Պնոմպեն - Էնդերբերի կղզի - - Կանտոն @@ -3300,9 +3349,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Արևմտյան Աֆրիկայի ժամանակ - Արևմտյան Աֆրիկայի ստանդարտ ժամանակ - Արևմտյան Աֆրիկայի ամառային ժամանակ + Արևմտյան Աֆրիկայի ժամանակ @@ -3652,6 +3699,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Գայանայի ժամանակ + + + Հավայան-ալեության ստանդարտ ժամանակ + + Հավայան-ալեության ժամանակ @@ -4156,6 +4208,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ armn + 2 ,   @@ -4223,6 +4276,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -4327,8 +4384,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ բոտսվանական պուլա - բոտսվանական պուլա - բոտսվանական պուլա բելառուսական ռուբլի @@ -4377,8 +4432,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ չեխական կրոնա - չեխական կրոնա - չեխական կրոնա Ջիբութիի ֆրանկ @@ -4684,8 +4737,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ թաիլանդական բահտ - թաիլանդական բահտ - թաիլանդական բահտ ฿ @@ -4750,6 +4801,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ արևելակարիբյան դոլար + + կարիբյան գուլդեն + կարիբյան գուլդեն + կարիբյան գուլդեն + Արևմտյան Աֆրիկայի ԿՖԱ ֆրանկ @@ -4773,6 +4829,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ զամբիական կվաչա + + Զիմբաբվեի ոսկի + Զիմբաբվեի ոսկի + Զիմբաբվեի ոսկի + {0}+ @@ -4960,7 +5021,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} աստիճանում - րոպե {0} րոպե {0} րոպեից {0} րոպեին @@ -4973,7 +5033,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} րոպեում - վայրկյան {0} վայրկյան {0} վայրկյանից {0} վայրկյանին @@ -5113,7 +5172,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} միույթով {0} միույթում - + + մաս + {0} մաս + {0} մաս + + մաս միլիոնի վրա {0} մաս միլիոնի վրա {0} մասից միլիոնի վրա @@ -5175,6 +5239,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} մոլով {0} մոլում + + գլյուկոզ + {0} գլյուկոզ + {0} գլյուկոզ + լիտր կիլոմետրի վրա {0} լիտր կիլոմետրի վրա @@ -5380,7 +5449,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} տասնամյակում - տարի {0} տարի {0} տարուց {0} տարուն @@ -5448,7 +5516,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ օրական {0} - ժամ {0} ժամ {0} ժամից {0} ժամին @@ -5555,7 +5622,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} միլիամպերում - օհմ {0} օհմ {0} օհմից {0} օհմին @@ -5757,7 +5823,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} em-ում - փիքսել {0} փիքսել {0} փիքսելից {0} փիքսելին @@ -5928,7 +5993,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} մղոն - յարդ {0} յարդ {0} յարդ @@ -5986,7 +6050,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} սկանդինավյան մղոնում - կտ {0} կտ {0} կտ {0} կտ @@ -6232,17 +6295,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ձիաուժ - միլիմետր՝ սնդիկի սյան - {0} միլիմետր՝ սնդիկի սյան - {0} միլիմետրից՝ սնդիկի սյան - {0} միլիմետրին՝ սնդիկի սյան - {0} միլիմետրով՝ սնդիկի սյան - {0} միլիմետրում՝ սնդիկի սյան - {0} միլիմետր՝ սնդիկի սյան - {0} միլիմետրից՝ սնդիկի սյան - {0} միլիմետրին՝ սնդիկի սյան - {0} միլիմետրով՝ սնդիկի սյան - {0} միլիմետրում՝ սնդիկի սյան + միլիմետր սնդիկի սյուն + {0} միլիմետր սնդիկի սյուն + {0} սնդիկի սյան միլիմետրից + {0} սնդիկի սյան միլիմետրին + {0} սնդիկի սյան միլիմետրով + {0} սնդիկի սյան միլիմետրում + {0} միլիմետր սնդիկի սյուն + {0} սնդիկի սյան միլիմետրից + {0} սնդիկի սյան միլիմետրին + {0} սնդիկի սյան միլիմետրով + {0} սնդիկի սյան միլիմետրում + + + սնդիկի սյուն + {0} սնդիկի սյուն + {0} սնդիկի սյուն ֆունտ քառակուսի դյույմի վրա @@ -6613,13 +6681,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} մետրիկ բաժակով {0} մետրիկ բաժակում + + մետրիկ հեղուկ ունկի + {0} մետրիկ հեղուկ ունկի + {0} մետրիկ հեղուկ ունկի + ակրոֆուտ {0} ակրոֆուտ {0} ակրոֆուտ - բուշել {0} բուշել {0} բուշել @@ -6635,11 +6707,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} անգլիական գալոն {0} անգլիական գալոնի վրա - - փինթ - - բաժակ {0} բաժակ {0} բաժակ @@ -6678,11 +6746,80 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} անգլիական աղանդերի գդալ - դրամ {0} դրամ {0} դրամ - + + ստեռադիան + {0} ստեռադիան + {0} ստեռադիան + + + կատալ + {0} կատալ + {0} կատալ + + + կուլոն + {0} կուլոն + {0} կուլոն + + + ֆարադ + {0} ֆարադ + {0} ֆարադ + + + հենրի + {0} հենրի + {0} հենրի + + + սիմենս + {0} սիմենս + {0} սիմենս + + + միջազգային կալորիա + {0} միջազգային կալորիա + {0} միջազգային կալորիա + + + բեքերել + {0} բեքերել + {0} բեքերել + + + զիվերտ + {0} զիվերտ + {0} զիվերտ + + + գրեյ + {0} գրեյ + {0} գրեյ + + + կիլոգրամ-ուժ + {0} կիլոգրամ-ուժ + {0} կիլոգրամ-ուժ + + + տեսլա + {0} տեսլա + {0} տեսլա + + + վեբեր + {0} վեբեր + {0} վեբեր + + + լույսի արագություն + {0} լույսի արագություն + {0} լույսի արագություն + + մաս միլիարդի վրա {0} մաս միլիարդի վրա {0} մասից միլիարդի վրա @@ -6696,7 +6833,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} մասում միլիարդի վրա - գիշեր {0} գիշեր {0} գիշերից {0} գիշերին @@ -6917,7 +7053,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} միույթ {0} միույթ - + + մաս + {0} մաս + {0} մաս + + մաս/միլիոն {0} մմվ {0} մմվ @@ -6933,6 +7074,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} մոլ {0} մոլ + + գլյուկոզ + {0} գլյուկոզ + {0} գլյուկոզ + լ/կմ {0} լ/կմ @@ -7093,8 +7239,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ օհմ - {0} Ω - {0} Ω Վ @@ -7438,6 +7582,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} մմ ս.ս. {0} մմ ս.ս. + + ս․ս․ + {0} ս․ս․ + {0} ս․ս․ + ֆ․/քառ․ դյմ {0} ֆ./քառ․ դյմ @@ -7605,6 +7754,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} մ․ բաժ․ {0} մ․ բաժ․ + + մետրիկ հղ․ ու + {0} մետրիկ հղ․ ու + {0} մետրիկ հղ․ ու + ակր ֆտ {0} ակր ֆտ @@ -7702,7 +7856,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} անգլիական քվարտ {0} անգլիական քվարտ - + + ստեռ + {0} ստեռ + {0} ստեռ + + + կատ + {0} կատ + {0} կատ + + + Կլ + {0} Կլ + {0} Կլ + + + ֆարադ + {0} Ֆ + {0} Ֆ + + + հն + {0} հն + {0} հն + + + Սմ + {0} Սմ + {0} Սմ + + + միջազգային կալորիա + {0} միջազգային կալորիա + {0} միջազգային կալորիա + + + Բք + {0} Բք + {0} Բք + + + Զվ + {0} Զվ + {0} Զվ + + + Գր + {0} Գր + {0} Գր + + + կգ-ուժ + {0} կգ-ուժ + {0} կգ-ուժ + + + Տլ + {0} Տլ + {0} Տլ + + + Վբ + {0} Վբ + {0} Վբ + + + լույսի արագ․ + {0} լույսի արագ․ + {0} լույսի արագ․ + + մաս/միլիարդ {0} մմլրդվ {0} մմլրդվ @@ -7723,7 +7947,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - g-ուժ {0}G {0}G @@ -7738,12 +7961,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ աստ - - րոպե - - - վայրկյան - {0}կմ² {0}կմ² @@ -7769,7 +7986,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ակր - յդ² {0}յդ² {0}յդ² @@ -7793,7 +8009,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}միույթ {0}միույթ - + + մ․ + {0} մ․ + {0} մ․ + + մմվ {0}մմվ {0}մմվ @@ -7808,6 +8029,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}մոլ {0}մոլ + + գլյուկոզ + {0} գլյուկոզ + {0} գլյուկոզ + {0}լ/կմ {0}լ/կմ @@ -7859,6 +8085,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}բիթ {0}բիթ + + տ + ա {0}ա @@ -7900,7 +8129,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}մԱ - օհմ {0} Ω {0}Ω @@ -7955,11 +8183,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ կտ - - կսմվ - {0}կսմվ - {0}կսմվ - յդ {0}յդ @@ -7983,9 +8206,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ֆատոմ - - կտ - {0}լք {0}լք @@ -8011,10 +8231,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}# - ու {0}ու {0}ու - {0}/ու տ․ ու @@ -8034,12 +8252,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}M☉ - {0}կՎ - {0}կՎ + {0}կՎտ + {0}կՎտ - {0}Վ - {0}Վ + {0}Վտ + {0}Վտ {0}մՎտ @@ -8049,8 +8267,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ձ/ու {0}ձ/ու + + մմսս + {0} մմսս + {0} մմսս + + + ս․ս․ + {0}սս + {0}սս + - մատ. ս.ս. {0}" ս.ս. {0}" ս. ս. @@ -8137,8 +8364,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ մետր․ փինթեր + + մետր․ հղ․ ու + {0} մետր․ հղ․ ու + {0} մետր․ հղ․ ու + - բուշել {0}բու {0}բու @@ -8151,7 +8382,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}քվարտ - փինթ {0}փինթ {0}փինթ @@ -8192,13 +8422,70 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}պտղունց {0}պտղունց - + + {0} sr + {0} sr + + + կատ + {0}կատ + {0}կատ + + + Ֆ + {0} Ֆ + {0} Ֆ + + + {0} S + {0} S + + + միջազգային կալորիա + {0} միջազգային կալորիա + {0} միջազգային կալորիա + + + Բք + {0}Բք + {0}Բք + + + Զվ + {0}Զվ + {0}Զվ + + + Գր + {0}Գր + {0}Գր + + + կգ-ուժ + {0}կգ-ուժ + {0}կգ-ուժ + + + Տլ + {0}Տլ + {0}Տլ + + + Վբ + {0}Վբ + {0}Վբ + + + լ․ա․ + {0} լ․ա․ + {0} լ․ա․ + + մմլրդվ {0}մմլրդվ {0}մմլրդվ - գիշեր {0}/գ․ {0}/գ․ {0}/գ․ diff --git a/make/data/cldr/common/main/ia.xml b/make/data/cldr/common/main/ia.xml index c6acc5a59d9..1f7e4296943 100644 --- a/make/data/cldr/common/main/ia.xml +++ b/make/data/cldr/common/main/ia.xml @@ -62,10 +62,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic bambara bengalese tibetano + bakhtiari breton bodo bosniaco akoose + buriato buginese blin catalano @@ -88,6 +90,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kurdo sorani chilcotin corso + copto mitchif cree del sud-est cree del planas @@ -105,8 +108,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic dargwa taita germano - germano austriac - alte germano suisse dogrib zarma dogri @@ -122,17 +123,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ekajuk greco anglese - anglese australian - anglese canadian - anglese britannic - anglese (GB) - anglese american + anglese (RU) anglese (SUA) esperanto espaniol - espaniol latinoamerican - espaniol europee - espaniol mexican estoniano basco ewondo @@ -145,8 +139,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic feroese fon francese - francese canadian - francese suisse francese cajun frison septentrional friulano @@ -170,9 +162,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic haida del sud hebreo hindi - hinglish hiligaynon hmong + hmong njua croato alte sorabo creolo haitian @@ -210,6 +202,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic tyap makonde capoverdiano + kekchi kenyang koro kaingang @@ -236,6 +229,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic bafia coloniese kurdo + kurdo + kurmanji kumyko komi cornico @@ -268,6 +263,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic mizo luyia letton + laz madurese magahi maithili @@ -299,10 +295,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic plure linguas creek mirandese + hmong daw birmano erzya mazanderani nauru + min nan napolitano nama norvegiano bokmål @@ -344,14 +342,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic papiamento palauano pidgin nigerian + pali pijin polonese + pedemontese malecite-passamaquoddy prussiano pashto portugese - portugese de Brasil - portugese de Portugal quechua kʼicheʼ rajasthani @@ -384,6 +382,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic sena koyraboro senni sango + samogitiano serbocroato tachelhit shan @@ -410,6 +409,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic salish del strictos sundanese sukuma + sunuwar svedese swahili swahili del Congo @@ -869,6 +869,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic calendario ethiope calendario ethiope Amete Alem calendario gregorian + gregorian calendario hebraic calendario national indian calendario hegiric @@ -882,18 +883,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic calendario del Republica de China formato de moneta pro contabilitate formato de moneta standard - ordinamento traditional chinese - Big5 ordinamento previe, pro compatibilitate ordinamento de dictionario ordinamento Unicode predefinite ordinamento de emoji regulas europee de ordinamento - ordinamento chinese simplificate - GB2312 ordinamento de annuario telephonic ordinamento pinyin recerca generic recerca per consonante initial hangul ordinamento standard + standard ordinamento de tractos ordinamento traditional ordinamento de tractos radical @@ -1017,6 +1017,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' {0} + + {1} 'a' {0} + @@ -1025,6 +1028,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' {0} + + {1} 'a' {0} + @@ -1041,13 +1047,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a y G + MM-y GGGGG dd-MM-y GGGGG + E dd-MM-y GGGGG MMM y G d MMM y G E d MMM y G h a h:mm a h:mm:ss a + h v dd-MM E dd-MM d MMM @@ -1338,6 +1347,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' {0} + + {1} 'a' {0} + @@ -1346,6 +1358,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' {0} + + {1} 'a' {0} + @@ -1354,6 +1369,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + @@ -1362,13 +1380,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + E d E h:mm a E h:mm:ss a y G + MM-y G dd-MM-y G + E dd-MM-y G MMM y G d MMM y G E d MMM y G @@ -1377,6 +1400,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm:ss a h:mm:ss a v h:mm a v + h v dd-MM E dd-MM d MMM @@ -1994,10 +2018,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Citate incognite - - - Tirana + Loco incognite Bruxelles @@ -2023,18 +2044,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Praga - - Büsingen - Djibuti - - Galápagos - - - Canarias - Feroe @@ -2156,6 +2168,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mayotta + + + hora de Acre + hora normal de Acre + hora estive de Acre + + hora de Afghanistan @@ -2173,14 +2192,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - hora standard de Africa del Sud + hora normal de Africa del Sud - hora de Africa del West - hora standard de Africa del West - hora estive de Africa del West + hora de Africa del West @@ -2193,7 +2210,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Amazonia - hora standard de Amazonia + hora normal de Amazonia hora estive de Amazonia @@ -2227,36 +2244,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic - hora de Apia - hora standard de Apia - hora estive de Apia + hora de Samoa + hora normal de Samoa + hora estive de Samoa hora arabe - hora standard arabe + hora normal arabe hora estive arabe hora de Argentina - hora standard de Argentina + hora normal de Argentina hora estive de Argentina hora de Argentina occidental - hora standard de Argentina occidental + hora normal de Argentina occidental hora estive de Argentina occidental hora de Armenia - hora standard de Armenia + hora normal de Armenia hora estive de Armenia @@ -2270,35 +2287,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Australia central - hora standard de Australia central + hora normal de Australia central hora estive de Australia central hora de Australia centro-occidental - hora standard de Australia centro-occidental + hora normal de Australia centro-occidental hora estive de Australia centro-occidental hora de Australia oriental - hora standard de Australia oriental + hora normal de Australia oriental hora estive de Australia oriental hora de Australia occidental - hora standard de Australia occidental + hora normal de Australia occidental hora estive de Australia occidental hora de Azerbeidzhan - hora standard de Azerbeidzhan + hora normal de Azerbeidzhan hora estive de Azerbeidzhan @@ -2312,7 +2329,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Bangladesh - hora standard de Bangladesh + hora normal de Bangladesh hora estive de Bangladesh @@ -2329,45 +2346,45 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Brasilia - hora standard de Brasilia + hora normal de Brasilia hora estive de Brasilia - hora de Brunei Darussalam + hora de Brunei hora de Capo Verde - hora standard de Capo Verde + hora normal de Capo Verde hora estive de Capo Verde - hora standard de Chamorro + hora normal de Chamorro hora de Chatham - hora standard de Chatham + hora normal de Chatham hora estive de Chatham hora de Chile - hora standard de Chile + hora normal de Chile hora estive de Chile hora de China - hora standard de China + hora normal de China hora estive de China @@ -2384,14 +2401,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Colombia - hora standard de Colombia + hora normal de Colombia hora estive de Colombia hora del Insulas Cook - hora standard del Insulas Cook + hora normal del Insulas Cook hora estive del Insulas Cook @@ -2409,18 +2426,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic - hora de Dumont-d’Urville + hora de Dumont d’Urville - hora de Timor del Est + hora de Timor Oriental hora del Insula de Pascha - hora standard del Insula de Pascha + hora normal del Insula de Pascha hora estive del Insula de Pascha @@ -2458,14 +2475,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora del Insulas Falkland - hora standard del Insulas Falkland + hora normal del Insulas Falkland hora estive del Insulas Falkland hora de Fiji - hora standard de Fiji + hora normal de Fiji hora estive de Fiji @@ -2492,7 +2509,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Georgia - hora standard de Georgia + hora normal de Georgia hora estive de Georgia @@ -2506,6 +2523,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora medie de Greenwich + + + hora de Groenlandia + hora normal de Groenlandia + hora estive de Groenlandia + + hora de Groenlandia oriental @@ -2520,9 +2544,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora estive de Groenlandia occidental + + + hora normal de Guam + + - hora standard del Golfo + hora normal del Golfo @@ -2530,6 +2559,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Guyana + + + hora normal de Hawaii-Aleutianas + + hora de Hawaii-Aleutianas @@ -2540,20 +2574,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Hongkong - hora standard de Hongkong + hora normal de Hongkong hora estive de Hongkong - hora de Hovd - hora standard de Hovd - hora estive de Hovd + hora de Khovd + hora normal de Khovd + hora estive de Khovd - hora standard de India + hora normal de India @@ -2584,7 +2618,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Iran - hora standard de Iran + hora normal de Iran hora estive de Iran @@ -2598,14 +2632,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Israel - hora standard de Israel + hora normal de Israel hora estive de Israel hora de Japon - hora standard de Japon + hora normal de Japon hora estive de Japon @@ -2627,7 +2661,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Corea - hora standard de Corea + hora normal de Corea hora estive de Corea @@ -2656,7 +2690,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Lord Howe - hora standard de Lord Howe + hora normal de Lord Howe hora estive de Lord Howe @@ -2690,7 +2724,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Mauritio - hora standard de Mauritio + hora normal de Mauritio hora estive de Mauritio @@ -2709,7 +2743,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Ulan Bator - hora standard de Ulan Bator + hora normal de Ulan Bator hora estive de Ulan Bator @@ -2738,14 +2772,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Nove Caledonia - hora standard de Nove Caledonia + hora normal de Nove Caledonia hora estive de Nove Caledonia hora de Nove Zelanda - hora standard de Nove Zelanda + hora normal de Nove Zelanda hora estive de Nove Zelanda @@ -2764,14 +2798,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora del Insula Norfolk - hora standard del Insula Norfolk + hora normal del Insula Norfolk hora estive del Insula Norfolk hora de Fernando de Noronha - hora standard de Fernando de Noronha + hora normal de Fernando de Noronha hora estive de Fernando de Noronha @@ -2792,7 +2826,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Pakistan - hora standard de Pakistan + hora normal de Pakistan hora estive de Pakistan @@ -2809,21 +2843,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Paraguay - hora standard de Paraguay + hora normal de Paraguay hora estive de Paraguay hora de Peru - hora standard de Peru + hora normal de Peru hora estive de Peru hora del Philippinas - hora standard del Philippinas + hora normal del Philippinas hora estive del Philippinas @@ -2846,12 +2880,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - hora de Ponape + hora de Pohnpei - hora de Pyongyang + hora de Corea del Nord @@ -2873,9 +2907,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - hora de Samoa - hora standard de Samoa - hora estive de Samoa + hora de Samoa american + hora normal de Samoa american + hora estive de Samoa american @@ -2885,7 +2919,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - hora standard de Singapore + hora normal de Singapore @@ -2915,9 +2949,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - hora de Taipei - hora standard de Taipei - hora estive de Taipei + hora de Taiwan + hora normal de Taiwan + hora estive de Taiwan @@ -2933,7 +2967,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Tonga - hora standard de Tonga + hora normal de Tonga hora estive de Tonga @@ -2945,7 +2979,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Turkmenistan - hora standard de Turkmenistan + hora normal de Turkmenistan hora estive de Turkmenistan @@ -2957,21 +2991,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic hora de Uruguay - hora standard de Uruguay + hora normal de Uruguay hora estive de Uruguay hora de Uzbekistan - hora standard de Uzbekistan + hora normal de Uzbekistan hora estive de Uzbekistan hora de Vanuatu - hora standard de Vanuatu + hora normal de Vanuatu hora estive de Vanuatu @@ -3098,6 +3132,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00;(¤ #,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) @@ -3919,6 +3954,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar del Caribes Oriental dollares del Caribes Oriental + + florino caribe + florino caribe + florinos caribe + franco CFA de Africa Occidental franco CFA de Africa Occidental @@ -3945,6 +3985,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwacha zambian + + auro de Zimbwabwe + auro de Zimbwabwe + auros de Zimbwabwe + ⩾{0} @@ -4108,7 +4153,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} millimol per litro {0} millimoles per litro - + partes per million {0} parte per million {0} partes per million @@ -5254,11 +5299,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} — compatibilitate {0} — inquadrate {0} — extendite + {0} a sinistra + {0} a dextra {0} — miscellanee {0} — altere scripturas — {0} {0} tractos {0} tractos + subscripto {0} + superscripto {0} activitate scriptura african scriptura american diff --git a/make/data/cldr/common/main/id.xml b/make/data/cldr/common/main/id.xml index 590e7d58569..e72e2951c5b 100644 --- a/make/data/cldr/common/main/id.xml +++ b/make/data/cldr/common/main/id.xml @@ -297,6 +297,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bafia Dialek Kolsch Kurdi + Kurdi + Kurmanji Kumyk Kutenai Komi @@ -892,6 +894,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tiongkok Kolombia Pulau Clipperton + Sark Kosta Rika Kuba Tanjung Verde @@ -1195,35 +1198,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pengurutan Numerik Kekuatan Pengurutan Mata Uang + Tampilan Emoji Siklus Jam (12 vs 24) Gaya Pemisah Baris + Pemisah Baris di antara Kata Sistem Pengukuran Angka + Pemisah Kalimat Setelah Singkatan Zona Waktu Varian Lokal Penggunaan Pribadi Kalender Buddha + Buddha Kalender Tionghoa + Tiongkok Kalender Koptik + Koptik Kalender Dangi + Dangi Kalender Etiopia + Etiopia Kalender Amete Alem Etiopia + Amete Alem Etiopia Kalender Gregorian + Gregorian Kalender Ibrani + Ibrani Kalender Nasional India Kalender Islam + Hijriah Kalender Sipil Islam + Hijri (tabular, epoch sipil) Kalender Islam (Arab Saudi, penglihatan) Kalender Astronomi Islam + Hijriah (tabular, epoch astronomi) Kalender Islam (Umm al-Qura) + Hijriah (tabular, Umm al-Qura) Kalender ISO-8601 Kalender Jepang + Jepang Kalender Persia + Persia Kalender Min-guo + Min-guo Format Mata Uang Akuntansi + Akuntansi Format Mata Uang Standar + Standar Sortir Simbol Sortir Abaikan Simbol Sortir Aksen Secara Normal @@ -1233,23 +1256,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sortir Huruf Besar Dahulu Sortir Tidak Peka Huruf Besar Sortir Peka Huruf Besar - Aturan Pengurutan Tionghoa Tradisional - Big5 Aturan Pengurutan Sebelumnya, untuk kompatibilitas + Kompatibilitas Aturan Pengurutan Kamus + Kamus Aturan Pengurutan Unicode Default + Unicode Default Urutan Sortir Emoji Aturan Pengurutan Eropa - Aturan Pengurutan Tionghoa (Sederhana) - GB2312 Aturan Pengurutan Buku Telepon + Buku Telepon Aturan Pengurutan Fonetik + Fonetik Aturan Pengurutan Pinyin + Pinyin Pencarian Tujuan Umum + Pencarian Pencarian Menurut Konsonan Awal Hangul Aturan Pengurutan Standar + Standar Aturan Pengurutan Guratan + Guratan Aturan Pengurutan Tradisional + Tradisional Aturan Pengurutan Guratan Radikal + Guratan Tradisional Aturan Pengurutan Zhuyin + Zhuyin Sortir Tanpa Normalisasi Sortir Unicode Dinormalisasi Sortir Digit Satu Per Satu @@ -1262,18 +1295,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Lebar penuh Lebar separuh Angka + Bawaan + Emoji + Teks Sistem 12 Jam (0–11) + 12 (0–11) Sistem 12 Jam (1–12) + 12 (1–12) Sistem 24 Jam (0–23) + 24 (0–23) Sistem 24 Jam (1–24) + 24 (1–24) Gaya Pemisah Baris Renggang + Renggang Gaya Pemisah Baris Normal + Normal Gaya Pemisah Baris Rapat + Rapat + Pisah semua + Pertahankan semua + Normal + Pertahankan frasa Transliterasi BGN AS Transliterasi GEGN PBB Sistem Metrik + Metrik Sistem Pengukuran Imperial + UK Sistem Pengukuran AS + AS Angka Ahom Angka Arab Timur Angka Arab Timur Diperluas @@ -1356,6 +1406,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Angka Vai Angka Warang Citi Angka Wancho + Nonaktif + Aktif Metrik @@ -1385,11 +1437,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1452,15 +1500,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - h B – h B - d – d - - h a – h a - h.mm – h.mm a h.mm – h.mm a @@ -1477,9 +1519,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH.mm – HH.mm v HH.mm – HH.mm v - - h a – h a v - M – M @@ -1615,6 +1654,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pukul' {0} + + {1} 'pukul' {0} + @@ -1623,6 +1665,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pukul' {0} + + {1} 'pukul' {0} + @@ -1645,15 +1690,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h.mm.ss a E HH.mm.ss y G - d/M/y GGGGG + M/y G + d/M/y G + E, d/M/y G MMM y G d MMM y G E, d MMM y G - h a h.mm a HH.mm h.mm.ss a HH.mm.ss + HH'j' v d/M E, d/M d MMM @@ -1988,6 +2035,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pukul' {0} + + {1} 'pukul' {0} + @@ -1996,6 +2046,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pukul' {0} + + {1} 'pukul' {0} + @@ -2004,6 +2057,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -2012,6 +2068,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + h.mm B @@ -2024,11 +2083,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h.mm.ss a E HH.mm.ss y G + M/y G d/M/y GGGGG + E, d/M/y G MMM y G d MMM y G E, d MMM y G - h a h.mm a HH.mm h.mm.ss a @@ -2103,10 +2163,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM – E, d MMM y G E, d MMM y – E, d MMM y G - - h a – h a - h–h a - h.mm a – h.mm a h.mm–h.mm a @@ -2125,10 +2181,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH.mm–HH.mm v HH.mm–HH.mm v - - h a – h a v - h–h a v - M–M @@ -2281,6 +2333,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + M/y G + E, d/M/y G + d – d @@ -2829,7 +2885,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Kota Tidak Dikenal + Lokasi Tidak Dikenal Anguila @@ -2890,7 +2946,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Roma - Enderbury + Pulau Canton Komoro @@ -2964,6 +3020,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiev + + Pulau Wake + Beulah, Dakota Utara @@ -3005,9 +3064,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Waktu Afrika Barat - Waktu Standar Afrika Barat - Waktu Musim Panas Afrika Barat + Waktu Afrika Barat @@ -3435,6 +3492,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Waktu Guyana + + + Waktu Standar Hawaii-Aleutian + + + HAST + + Waktu Hawaii-Aleutian @@ -3909,6 +3974,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Waktu Chuuk + + + Waktu Turki + Waktu Standar Turki + Waktu Musim Panas Turki + + Waktu Turkmenistan @@ -4041,36 +4113,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤0 rb - 0 rb ¤ + ¤ 0 rb ¤00 rb - 00 rb ¤ + ¤ 00 rb ¤000 rb - 000 rb ¤ + ¤ 000 rb ¤0 jt - 0 jt ¤ + ¤ 0 jt ¤00 jt - 00 jt ¤ + ¤ 00 jt ¤000 jt - 000 jt ¤ + ¤ 000 jt ¤0 M - 0 M ¤ + ¤ 0 M ¤00 M - 00 M ¤ + ¤ 00 M ¤000 M - 000 M ¤ + ¤ 000 M ¤0 T - 0 T ¤ + ¤ 0 T ¤00 T - 00 T ¤ + ¤ 00 T ¤000 T - 000 T ¤ + ¤ 000 T @@ -4903,6 +4973,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dolar Karibia Timur + + Guilder Karibia + Guilder Karibia + Hak Khusus Menggambar @@ -4978,6 +5052,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dolar Zimbabwe (1980–2008) + + Emas Zimbabwe + emas Zimbabwe + Dolar Zimbabwe (2009) @@ -5172,7 +5250,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ millimol per liter {0} millimol per liter - + + bagian + {0} bagian + + bagian per juta {0} bagian per juta @@ -5185,6 +5267,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} permyriad + + glukosa + {0} glukosa + liter per kilometer {0} liter per kilometer @@ -5559,6 +5645,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milimeter raksa {0} milimeter raksa + + raksa + {0} raksa + pound per inci persegi {0} pound per inci persegi @@ -5693,6 +5783,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ metric cup {0} metric cup + + metric fluid ounce + {0} metric fluid ounce + ekar kaki {0} ekar kaki @@ -5758,17 +5852,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ quart Imp. {0} quart Imp. - - cahaya - {0} cahaya + + steradian + {0} steradian - + + katal + {0} katal + + + coulomb + {0} coulomb + + + farad + {0} farad + + + henry + {0} henry + + + siemen + {0} siemen + + + kalori [IT] + {0} kalori [IT] + + + becquerel + {0} becquerel + + + sievert + {0} sievert + + + gray + {0} gray + + + kilogram gaya + {0} kilogram gaya + + + tesla + {0} tesla + + + weber + {0} weber + + bagian per miliar {0} bagian per miliar - malam - {0} malam {0} per malam @@ -5825,8 +5965,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ millimol/liter - + + bagian + {0} bagian + + bagian/juta + {0} bpj persen @@ -5837,6 +5982,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ permyriad + + Glc + {0} Glc + liter/km @@ -6068,6 +6217,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmHg {0} mmHg + + {0} Hg + in Hg @@ -6139,12 +6291,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ qt Imp. + + {0} sr + + + {0} kat + + + {0} C + + + {0} F + + + {0} H + + + {0} S + + + kal-IT + {0} kal-IT + + + {0} kgf + + + {0} T + + + {0} Wb + cahaya {0} cahaya - + bagian/miliar + {0} bpm malam @@ -6188,8 +6372,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmol/L - - ppm + + bagian + {0} bagian + + + bpj + {0}bpj % @@ -6200,6 +6389,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Glc + L/km @@ -6326,6 +6518,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ gr {0} gr + + {0} Hg + ″ Hg {0}″ Hg @@ -6379,14 +6574,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ qt Imp - - cahaya - {0} cahaya + + {0} sr - - malam - {0} malam - {0}/malam + + kal-IT + {0} kal-IT + + + bpm + {0}bpm {0}T diff --git a/make/data/cldr/common/main/ie.xml b/make/data/cldr/common/main/ie.xml index 2d79e00936f..13ffcd1248d 100644 --- a/make/data/cldr/common/main/ie.xml +++ b/make/data/cldr/common/main/ie.xml @@ -66,13 +66,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic dzongkha grec anglesi - australian anglesi - canadian anglesi - britannic anglesi - anglesi de UR - american anglesi - anglesi de USA - Esperanto + australian anglesi + canadian anglesi + britannic anglesi + anglesi de UR + american anglesi + anglesi de USA + Esperanto hispan hispan del latin America europan hispan @@ -81,26 +81,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic basc persian dari - finn - filipinesi + finn + filipinesi fidjian feroesi francesi - canadian francesi + canadian francesi sviss francesi cadjun-francesi nord-frisian west-frisian - irlandesi + irlandesi scotian gaelic - galician + galician swiss-aleman - hausa + hausa haidan hawaian sud-haidan - hebreic - hindi + hebreic + hindi hindi latinisat hinglish croatian @@ -108,18 +108,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic haitian creol hungarian armenian - Interlingua + Interlingua indonesian Interlingue yi de Sichuan ingush Ido - islandesi + islandesi italian japanesi Lojban - javan - georgian + javan + georgian kazakh korean karelian @@ -208,7 +208,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic maoresi comoran sirian tadjic - thai + thai turcmen Klingon tlingit @@ -235,18 +235,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic standard maroccan tamazight chinesi chinesi, mandarin - chinesi simplificat - chinesi traditional + chinesi simplificat + chinesi traditional zulu sin linguistic contenete - + - + @@ -264,7 +264,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -273,7 +273,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -281,8 +281,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - + + + @@ -290,7 +291,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic munde Africa - septentrional America + septentrional America Sud-America Oceania West-Africa @@ -301,26 +302,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic meridional Africa Americas Nord-America - Caribes - Ost-Asia - Sud-Asia - Sudost-Asia - Sud-Europa - Australasia - Melanesia - region de Micronesia - Polinesia + Caribes + Ost-Asia + Sud-Asia + Sudost-Asia + Sud-Europa + Australasia + Melanesia + region de Micronesia + Polinesia Asia - Central Asia - West-Asia + Central Asia + West-Asia Europa - Ost-Europa - Nord-Europa - West-Europa + Ost-Europa + Nord-Europa + West-Europa Sub-Saharan Africa latin America Insul de Ascension - Andorra + Andorra Unit Arab Emiratus Afghanistan Antigua e Barbuda @@ -334,7 +335,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Austria Australia Aruba - Insules Åland + Insules Åland Azerbaidjan Bosnia e Herzegovina Barbados @@ -355,7 +356,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bhutan Insul Bouvet Botswana - Bielorussia + Bielorussia Belize Canada Insules Cocos (Keeling) @@ -372,6 +373,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic China Columbia Insul Clipperton + Sark Costa-Rica Cuba Cap-Verdi @@ -409,9 +411,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Grenada Georgia Francesi Guiana - Guernsey + Guernsey Ghana - Gibraltar + Gibraltar Greenland Gambia Guinea @@ -434,7 +436,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Indonesia Irland Israel - Insul de Man + Insul de Man India Chagos (BTIO) Britanic Territoria del Indian Ocean @@ -443,7 +445,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Iran Island Italia - Jersey + Jersey Jamaica Jordania Japan @@ -461,17 +463,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Laos Liban St.-Lucia - Liechtenstein + Liechtenstein Sri-Lanka Liberia Lesotho - Lituania + Lituania Luxemburg - Lettonia + Lettonia Libia Marocco Mónaco - Moldova + Moldova Montenegro St.-Martin Madagascar @@ -499,8 +501,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Insul Norfolk Nigeria Nicaragua - Nederland - Norvegia + Nederland + Norvegia Nepal Nauru Niue @@ -522,7 +524,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Palau Paraguay Qatar - periferic Oceania + periferic Oceania Reunion Rumania Serbia @@ -536,7 +538,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Singapur Sant-Helena Slovenia - Svalbard e Jan Mayen + Svalbard e Jan Mayen Slovakia Sierra-Leone San-Marino @@ -575,7 +577,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic US Uruguay Uzbekistan - Cité de Vatican + Cité de Vatican St. Vincent e Grenadines Venezuela Insules Vírginas (UR) @@ -584,8 +586,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Vanuatu Wallis e Futuna Samoa - pseudo-diacritica - pseudo-bidi + pseudo-diacritica + pseudo-bidi Kosovo Yemen Mayotte @@ -666,7 +668,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic x-sistema - calendare + calendare formate de valuta órdine valuta @@ -675,27 +677,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic númeres - buddhist calendare - chinesi calendare - coptic calendare - etiopic calendare + buddhist calendare + buddhist + chinesi calendare + chinesi + coptic calendare + coptic + etiopic calendare gregorian calendare - hebreic calendare - calendare hejra - calendare ISO-8601 + gregorian + hebreic calendare + calendare hejra + gregorian (li annu in avan) japanesi calendare persian calendare formate por contation standard valuta-formate - órdine Big5 órdine de dictionarium órdine predefinit de Unicode órdine paneuropan - órdine GB2312 órdine de numerarium órdine pinyin órdine por sercha standard órdine + standard órdine de strecs órdine de radicales sistema 12-hor (0..11) @@ -1050,10 +1055,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic T4 - 1-m trimestre - 2-m trimestre - 3-m trimestre - 4-m trimestre + 1-m trimestre + 2-m trimestre + 3-m trimestre + 4-m trimestre @@ -1176,13 +1181,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic LLL y G d MMM y G E d MMM y G - H 'h'. + H 'h'. + HH 'h'. 'de' v d.M E d.M d MMM E d MMM d MMMM - W-'im' 'semane' 'de' MMMM M.y d.M.y E d.M.y @@ -1192,10 +1197,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic LLLL y QQQ y QQQQ y - w-'im' 'semane' 'de' Y - {0} til {1} + {0} til {1} h – h B @@ -1329,114 +1333,90 @@ CLDR data files are interpreted according to the LDML specification (http://unic ultim annu ho-annu sequent annu - - pos {0} annus - - - ante {0} annus - + + ultim annu ho-annu seq. annu + + a ult. a. ho-a. seq. a. - - pos {0} a - - - ante {0} a - + + trimestre ultim trimestre ho-trimestre sequent trimestre - - pos {0} trimestres - - - ante {0} trimestres - + + trim. - - pos {0} tr - - - ante {0} tr - + + - tr + tr + + mensu - ultim mensu - ho-mensu - sequent mensu - - pos {0} mensus - - - ante {0} mensus - + ultim mensu + ho-mensu + sequent mensu + + - mn. + mn. ultim mensu ho-mensu seq. mensu + + - mn + mn ult. mn. ho-mn. seq. mn. - - pos {0} mn - - - ante {0} mn - + + semane ultim semane ho-semane sequent semane - - pos {0} semanes - - - ante {0} semanes - + + li semane de {0} - sem. + sem. ultim semane ho-semane seq. semane + + - sem + sem ult. sem. ho sem. seq. sem. - - pos {0} sem. - - - ante {0} sem. - + + sem. de {0} @@ -1447,26 +1427,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic die - anteyer + anteyer yer hodie deman - posdeman - - pos {0} dies - - - ante {0} dies - + posdeman + + + + + + d - - pos {0} d - - - ante {0} d - + + die del annu @@ -1475,7 +1451,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic die/annu - die del semane + die del semane die del sem. @@ -1493,211 +1469,127 @@ CLDR data files are interpreted according to the LDML specification (http://unic ultim soledí ho-soledí sequent soledí - - pos {0} soledís - - - ante {0} soledís - + + ult. sol. ho-sol. seq. sol. - - pos {0} sol. - - - ante {0} sol. - + + - - p. {0} so. - - - a. {0} so. - + + ultim lunedí ho-lunedí sequent lunedí - - pos {0} lunedís - - - ante {0} lunedís - + + ult. lun. ho-lun. seq. lun. - - pos {0} lun. - - - ante {0} lun. - + + - - p. {0} lu. - - - a. {0} lu. - + + ultim mardí ho-mardí sequent mardí - - pos {0} mardís - - - ante {0} mardís - + + ult. mar. ho-mar. seq. mar. - - pos {0} mar. - - - ante {0} mar. - + + - - p. {0} ma. - - - a. {0} ma. - + + ultim mercurdí ho-mercurdí sequent mercurdí - - pos {0} mercurdís - - - ante {0} mercurdís - + + ult. mer. ho-mer. seq. mer. - - pos {0} mer. - - - ante {0} mer. - + + - - p. {0} me. - - - a. {0} me. - + + ultim jovedí ho-jovedí sequent jovedí - - pos {0} jovedís - - - ante {0} jovedís - + + ult. jov. ho-jov. seq. jov. - - pos {0} jov. - - - ante {0} jov. - + + - - p. {0} jo. - - - a. {0} jo. - + + ultim venerdí ho-venerdí sequent venerdí - - pos {0} venerdís - - - ante {0} venerdís - + + ult. ven. ho-ven. seq. ven. - - pos {0} ven. - - - ante {0} ven. - + + - - p. {0} ve. - - - a. {0} ve. - + + ultim saturdí ho-saturdí sequent saturdí - - pos {0} saturdís - - - ante {0} saturdís - + + ult. sat. ho-sat. seq. sat. - - pos {0} sat. - - - ante {0} sat. - + + - - p. {0} sa. - - - a. {0} sa. - + + midídie @@ -1705,77 +1597,49 @@ CLDR data files are interpreted according to the LDML specification (http://unic hor ti hor - - pos {0} hores - - - ante {0} hores - + + + + + + h - - pos {0} h - - - ante {0} h - + + minute ti minute - - pos {0} minutes - - - ante {0} minutes - + + min - - pos {0} min - - - ante {0} min - + + m - - pos {0} m - - - ante {0} m - + + seconde nu - - pos {0} secondes - - - ante {0} secondes - + + sec - - pos {0} sec - - - ante {0} sec - + + s - - pos {0} s - - - ante {0} s - + + zone horari @@ -1787,6 +1651,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic TMG{0} TMG + TMG+? témpor de {0} témpor estival de {0} témpor standard de {0} @@ -1796,7 +1661,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ínconosset cité + ínconosset loc Tirana @@ -1956,7 +1821,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Insul de Man + Insul de Man Teheran @@ -2075,6 +1940,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kiev + + Insul Wake + Los-Angeles @@ -2160,9 +2028,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - témpor del Insules Cook - témpor standard del Insules Cook - témpor estival del Insules Cook + témpor del Insules Cook + témpor standard del Insules Cook + témpor demíestival del Insules Cook @@ -2224,6 +2092,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic témpor estival del occidental Greenland + + + témpor standard de Hawai e Aleutes + + témpor de Hawai e Aleutes @@ -2304,710 +2177,516 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - 0 milles - 00 milles - 000 milles - 0 milliones - 00 milliones - 000 milliones - 0 milliardes - 00 milliardes - 000 milliardes - 0 billiones - 00 billiones - 000 billiones - + - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - + ¤ #,##0.00;¤ -#,##0.00 + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 - - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - + - {0} {1} UAE dirham - UAE dirhams afghan afghani - afghan afghanis albanian lek - albanian leks armenian dram - armenian drams guilder del Nederlandesi Antilles - guilderes del Nederlandesi Antilles angolan kwanza - angolan kwanzas argentinian peso - argentinian pesos australian dollar - australian dollares aruban florin - aruban florines azerbaidjanesi manat - azerbaidjanesi manates convertibil mark de Bosnia-Herzogovina - convertibil marks de Bosnia-Herzogovina barbadan dollar - barbadan dollares bangladeshan taka - bangladeshan takas bulgarian lev - bulgarian leves bahrainesi dinar - bahrainesi dinares burundian franc - burundian francs bermudan dollar - bermudan dollares brunesi dollar - brunesi dollares bolivian boliviano - bolivian bolivianos brasilian real - brasilian reales bahaman dollar - bahaman dollares bhutanesi ngultrum - bhutanesi ngultrums botswanan pula - botswanan pulas bieloruss ruble - bieloruss rubles belizan dollar - belizan dollares canadan dollar - canadan dollares congolesi franc - congolesi francs sviss franc - sviss francs F.Sv. chilan peso - chilan pesos chinesi yuan (extraterritorial) - chinesi yuanes (extraterritorial) chinesi yuan - chinesi yuanes columbian peso - columbian pesos costa-rican colon - costa-rican colones cuban convertibil peso - cuban convertibil pesos cuban peso - cuban pesos cap-verdesi escudo - cap-verdesi escudos tchec koruna - tchec korunas djibutian franc - djibutian francs danesi krone - danesi krones dominican peso - dominican pesos algerian dinar - algerian dinares egiptian pund - egiptian pundes eritrean nakfa - eritrean nakfas etiopian birr - etiopian birres euro - euros fidjian dollar - fidjian dollares pund de Falkland - pundes de Falkland pund sterling - pundes sterling georgian lari - georgian laris ghanan cedi - ghanan cedis pund de Gibraltar - pundes de Gibraltar gambian dalasi - gambian dalasis guinean franc - guinean francs guatemalan quetzal - guatemalan quetzales guyanesi dollar - guyanesi dollares dollar de Hong-Kong - dollares de Hong-Kong honduresi lempira - honduresi lempiras croatian kuna - croatian kunas haitian gourde - haitian gourdes hungarian forint - hungarian forintes indonesian rupia - indonesian rupias israelesi nov shekel - israelesi nov shekeles indian rupia - indian rupias irakesi dinar - irakesi dinares iranesi real - iranesi reales islandesi krona - islandesi kronas jamaican dollar - jamaican dollares jordanian dinar - jordanian dinares japanesi yen - japanesi yenes kenian shilling - kenian shillings kirgistanesi som - kirgistanesi somes cambodjan riel - cambodjan rieles comoran franc - comoran francs nord-korean won - nord-korean wones sud-korean won - sud-korean wones kuwaitesi dinar - kuwaitesi dinares caymanesi dollar - caymanesi dollares kazakhstanesi tenge - kazakhstanesi tenges laotic kip - laotic kipes libanesi pund - libanesi pundes sri-lankan rupia - sri-lankan rupias liberian dollar - liberian dollares lesothan loti - lesothan lotis libian dinar - libian dinares maroccan dirham - maroccan dirhams moldovan lei malgachic ariary - malgachic ariarys macedonian denar - macedonian denares myanmaran kyat - myanmaran kyates mongolian tugric - mongolian tugrics macan pataca - macan patacas mauritanian uguiya - mauritanian uguiyas maurician rupia - maurician rupias maldivan rufia - maldivan rufias malawian kwacha - malawian kwachas mexican peso - mexican pesos malaysian ringgit - malaysian ringgites mozambican metical - mozambican meticales namibian dollar - namibian dollares nigerian naira - nigerian nairas nicaraguan cordoba - nicaraguan cordobas norvegian krone - norvegian krones nepalesi rupia - nepalesi rupias nov-zelandesi dollar - nov-zelandesi dollares omanesi rial - omanesi riales panamesi balboa - panamesi balboas peruan sol - peruan soles kina de Papua Nov-Guinea - kinas de Papua Nov-Guinea filipinesi peso - filipinesi pesos pakistani rupia - pakistani rupias polonesi zloty - polonesi zlotys paraguayan guarani - paraguayan guaranis qataresi riyal - qataresi riyales rumanian lei serbian dinar - serbian dinares russian ruble - russian rubles Rub. rwandan franc - rwandan francs sauditic riyal - sauditic riyales dollar del Insules Solomon - dollares del Insules Solomon seychellan rupia - seychellan rupias sudanesi pund - sudanesi pundes sved krona - sved kronas singapuran dollar - singapuran dollares pund de Sant-Helena - pundes de Sant-Helena leone de Sierra-Leone - leones de Sierra-Leone leone de Sierra-Leone (1964..2022) - leones de Sierra-Leone (1964..2022) somalian shilling - somalian shillings surinamesi dollar - surinamesi dollares sud-sudanesi pund - sud-sudanesi pundes dobra de São Tomé e Príncipe - dobras de São Tomé e Príncipe sirian pund - sirian pundes swazian lilangeni - swazian lilangenis thai baht - thai bahtes tadjikistanesi somoni - tadjikistanesi somonis turcmen manat - turcmen manates tunisian dinar - tunisian dinares tongan pa’anga - tongan pa’angas turc lira - turc liras dollar de Trinidad e Tobago - dollares de Trinidad e Tobago nov taiwanesi dollar - nov taiwanesi dollares tanzanian shilling - tanzanian shillings ukrainan hrivnia - ukrainan hrivnias ugandesi shilling - ugandesi shillings american dollar - american dollares uruguayan peso - uruguayan pesos uzbec som - uzbec somes venezuelan bolivar - venezuelan bolivares vietnamesi dong - vietnamesi dongs vanuatuan vatu - vanuatuan vatus samoan tala - samoan talas CFA franc - CFA francs argent - troy-uncies de argent aur - troy-uncies de aur ost-caribean dollar - ost-caribean dollares west-african CFA franc - west-african CFA francs palladium - troy-uncies de palladium CFP franc - CFP francs platine - troy-uncies de platine ínconosset valuta - de ínconosset valuta yemenesi real - yemenesi reales sud-african rand - sud-african randes zambian kwacha - zambian kwachas @@ -3015,7 +2694,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}..{1} - {0} dies Li {0}-im edition @@ -3081,89 +2759,64 @@ CLDR data files are interpreted according to the LDML specification (http://unic yotta{0} - - {0} quadrat - - - {0} cubic - + + {0}-{1} metres per seconde quadrat - {0} metres per seconde quadrat - radianes - {0} radianes + radianes - gradus - {0} gradus + gradus arc-minutes - {0} arc-minutes arc-secondes - {0} arc-secondes kilometres quadrat - {0} kilometres quadrat hectares - {0} hectares metre quadrat - {0} metres quadrat centimetre quadrat - {0} centimetres quadrat milies quadrat - {0} milies quadrat - - - {0} acres yardes quadrat - {0} yardes quadrat pedes quadrat - {0} pedes quadrat inches quadrat - {0} inches quadrat carates - {0} carates percent - {0} percent permille - {0} permille litres per kilometre - {0} litres per kilometre petaoctetes - {0} petaoctetes teraoctetes @@ -3191,420 +2844,319 @@ CLDR data files are interpreted according to the LDML specification (http://unic octetes - {0} octetes bits - {0} bits secules - {0} secules decennies - {0} decennies - {0} annus {0} per annu trimestres - {0} trimestres {0} per trimestre - {0} mensus {0} per mensu - {0} semanes {0} per semane - {0} dies {0} per die - {0} hores {0} per hor minutes - {0} minutes {0} per minute secondes - {0} secondes {0} per seconde millisecondes - {0} millisecondes microsecondes - {0} microsecondes nanosecondes - {0} nanosecondes amperes - {0} amperes milliamperes - {0} milliamperes ohms - {0} ohms voltes - {0} voltes kilocalories - {0} kilocalories calories - {0} calories kilojoules - {0} kilojoules joules - {0} joules kilowatt-hores - {0} kilowatt-hores electron-voltes - {0} electron-voltes britanic termal unités - {0} britanic termal unités newtones - {0} newtones gigahertz - {0} gigahertz megahertz - {0} megahertz kilohertz - {0} kilohertz hertz - {0} hertz pixels - {0} pixels megapixels - {0} megapixels pixels per centimetre - {0} pixels per centimetre pixels per inch - {0} pixels per inch radiuses del terra - {0} radiuses del terra kilometres - {0} kilometres {0} per kilometre metres - {0} metres {0} per metre decimetres - {0} decimetres centimetres - {0} centimetres {0} per centimetre millimetres - {0} millimetres micrometres - {0} micrometres nanometres - {0} nanometres picometres - {0} picometres milies - {0} milies yards - {0} yardes pedes - {0} pedes {0} per pede inches - {0} inches {0} per inch parsecs - {0} parsecs luce-annus - {0} luce-annus unité astronomic - {0} unités astronomic marin milies - {0} marin milies punctus - {0} punctus radiuses del sol - {0} radiuses del sol lux - {0} lux candelas - {0} candelas lumenes - {0} lumenes luminositás solari - {0} luminositás solari tonnes - {0} tonnes kilogrammes - {0} kilogrammes {0} per kilogramm grammes - {0} grammes {0} per gramm milligrammes - {0} milligrammes microgrammes - {0} microgrammes american tonnes - {0} american tonnes stones - {0} stones pundes - {0} pundes uncies - {0} uncies gigawattes - {0} gigawattes megawattes - {0} megawattes kilowattes - {0} kilowattes wattes - {0} wattes milliwattes - {0} milliwattes cavall-forties - {0} cavall-forties bares - {0} bares millibares - {0} millibares atmosferes - {0} atmosferes pascales - {0} pascales hectopascales - {0} hectopascales kilopascales - {0} kilopascales megapascales - {0} megapascales kilometres per hor - {0} kilometres per hor metres per seconde - {0} metres per seconde milies per hor - {0} milies per hor nodes - {0} nodes gradus de temperatura - {0} gradus de temperatura gradus Celsius - {0} gradus Celsius gradus Fahrenheit kelvines - {0} kelvines newton-metres - {0} newton-metres kilometres cubic - {0} kilometres cubic metres cubic - {0} metres cubic centimetres cubic - {0} centimetres cubic milies cubic - {0} milies cubic yardes cubic - {0} yardes cubic pedes cubic - {0} pedes cubic inches cubic - {0} inches cubic megalitres - {0} megalitres litres - {0} litres decilitres - {0} decilitres centilitres - {0} centilitres millilitres - {0} millilitres busheles - {0} busheles direction cardinal @@ -3618,61 +3170,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic mc{0} + + {0}{1} - ° + ° acres Po - {0} Po To - {0} To Go - {0} Go Mo - {0} Mo ko - {0} ko oct - {0} oct scl - {0} scl annus - {0} a {0}/a tr - {0} tr {0}/tr mensus - {0} mn {0}/mn semanes - {0} sem {0}/sem @@ -3683,7 +3226,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic mcs - {0} mcs A @@ -3693,29 +3235,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic btu - {0} btu m mcm - {0} mcm la - {0} la ua - {0} ua gramm mcg - {0} mcg milies/hor @@ -3725,7 +3262,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic l - {0} L {0}/L @@ -3736,6 +3272,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + {0}⋅{1} @@ -3744,7 +3282,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic o - {0} o a @@ -3763,7 +3300,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic m - {0} m {0}/m @@ -3836,7 +3372,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} — varie {0} — altri scrituras — {0} - {0}-strec subscrit {0} surscrit {0} activité diff --git a/make/data/cldr/common/main/ig.xml b/make/data/cldr/common/main/ig.xml index 787eb2c8133..dc610707af9 100644 --- a/make/data/cldr/common/main/ig.xml +++ b/make/data/cldr/common/main/ig.xml @@ -23,19 +23,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Akan Aleut Southern Altai - Amariikị + Asụsụ Amariikị Aragonisị Obolo Angika apcc - Arabiikị + Asụsụ Arabiikị Ụdị Arabiikị nke oge a Mapuche Arapaho Najdi Arabikị - Asamisị + Asụsụ Asamisị Asụ - Asturianị + Asụsụ Asturianị Atikamekw Avarịk Awadhi @@ -180,7 +180,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hungarian Hupa Halkomelem - Armenianị + Asụsụ Armenianị Herero Interlingua Iban @@ -237,6 +237,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafịa Colognian Kurdish + Asụsụ Kurdish + Asụsụ Kurmanji Kumik Komi Cornish @@ -992,47 +994,86 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ụsọrọ egọ Ụsọrọ Nhazị Egọ + Ngosiputa Emoji Okịrịkịrị Awa (12 vs 24) Akara akanka nkwụsị + Nkwụsị Ahịrị n’ime Okwu Ụsọrọ Mmeshọ Nọmba + Nkwụsị ahịrịokwu mgbe nkenke gasịrị Kalenda Bụddịst + Onye ụka Buda Kalenda Chinese + China Kalenda Koptic + Koptic Kalenda Dang + Dangi Kalenda Etopịa + Ethiopic Etiopic Amete Alem Kalenda + Ethiopic Amete Alem Kalenda Gregory + Gregorian Kalenda Hebrew + Hebrew Kalenda India Kalenda Hijri + Hijri Kalenda Hijri + Hijri (tabular, civil epoch) Kalenda Hijri (Saudi Arabia, sighting) Kalenda Hijri (tabular, astronomical epoch) Kalenda Hijri (Umm al-Qura) + Hijri (Umm al-Qura) Kalenda ISO-8601 Kalenda Japanese + Japanese Kalenda Persian + Persian Kalenda repụblic nke China + Minguo Ụsọrọ akantụ egọ + Akantụ egọ Ụsọrọ egọ nzụgbe + Ụkpụrụ Default Unicode ụsọrọ nhazị + Unicode Ndabere Nhazị akwụkwọ ebe a na-ede nọmba fon Pinyin ụsọrọ nhazị Ọchụchụ nịle + Ọchụchụ Usoro Nhazi + Ụkpụrụ + Ndabara + emoji + Ederede Ụsọrọ Okịrịkịrị awa iri na abụọ (0–11) + 12 (0–11) Ụsọrọ Okịrịkịrị awa iri na abụọ (0–12) + 12 (1–12) Ụsọrọ Okịrịkịrị (0–23) + 24 (0–23) Ụsọrọ Okịrịkịrị (1–24) + 24 (1–24) Akara akanka nkwụsị esịghị ịke + Esịghị ịke Akara akanka nkwụsị kwesịrị + Kwesịrị Akara akanka nkwụsị sịrị ịke + Sịrị ịke + Kewaa nke niile + Dobe nke niile + Nkịtị + Dobe na nkebiokwu Ụsọrọ Metric + Metrik Ụsọrọ Mmeshọ ịmperịa + UK Ụsọrọ Mmeshọ US + US Ọnụ ọgụgụ Ahom Ọnụ ọgụgụ Arab na Indị Ọnụ ọgụgụ Arab na Indị agbatịrị @@ -1123,6 +1164,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ọnụ ọgụgụ Vai Ọnụ ọgụgụ Warang Citi Ọnụ ọgụgụ Wancho + Mgbanyụ + Mgbanye Metriik @@ -1172,6 +1215,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'na' {0} + + {1} 'na' {0} + @@ -1180,6 +1226,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'na' {0} + + {1} 'na' {0} + @@ -1260,20 +1309,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic N D - - Jenụwarị - Febrụwarị - Maachị - Epreel - Mee - Jun - Julaị - Ọgọọst - Septemba - Ọktoba - Novemba - Disemba - @@ -1313,14 +1348,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ọkara 4 - - - Q1 - Q2 - Q3 - Q4 - - @@ -1328,29 +1355,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic N’ụtụtụ N’abalị - - N’ụtụtụ - N’abalị - N’ụtụtụ N’abali - - - N’ụtụtụ - N’abalị - - - N’ụtụtụ - N’abalị - - - N’ụtụtụ - N’abalị - - @@ -1423,6 +1432,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'na' {0} + + {1} 'na' {0} + @@ -1431,6 +1443,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'na' {0} + + {1} 'na' {0} + @@ -1465,10 +1480,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 'Izu' w 'n' 'ime' Y - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1479,10 +1490,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M – M @@ -1492,46 +1499,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, M/d – E, M/d - MM-dd, E – MM-dd, E MMM – MMM - - MMM d – MMM d - - - MMM d, E – MMM d, E - MMM d, E – MMM d, E - MM/y – MM/y - y-MM – y-MM - - - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - - - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - - - y MMM – y MMM - - - y MMM d – MMM d - y MMM d – y MMM d - - - y MMM d, E – MMM d, E - y MMM d, E – MMM d, E - y MMM d, E – y MMM d, E - - - y MMMM – y MMMM @@ -1541,12 +1514,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Oge - - Oge - - - Oge - Afọ Afọ gara aga @@ -1559,9 +1526,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic afọ na-abịa - Afọ gara aga - Afọ a - afọ na-abịa Afọ {0} gara aga @@ -1578,38 +1542,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nkejị keanọ {0} gara aga - - - Nkejị keanọ {0} - - - Nkejị keanọ {0} gara aga - - - - - Nkejị keanọ {0} - - - Nkejị keanọ {0} gara aga - - Ọnwa Ọnwa gara aga Ọnwa a Ọnwa na-abịa - - Ọnwa gara aga - Ọnwa a - Ọnwa na-abịa - - - Ọnwa gara aga - Ọnwa a - Ọnwa na-abịa - Izu Izu gara aga @@ -1637,14 +1575,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic n’ụbọchị {0} gara aga - - - n’ụbọchị {0} - - - n’ụbọchị {0} gara aga - - ụbọchị na afọ @@ -1755,12 +1685,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ụbọchị Faraịde gara aga ụbọchị Faraịde a ụọchị Faraịde na abịa - - n’ụbọchị Faraịde {0} - - - n’ụbọchị Faraịde gara aga {0} - ụbọchị Satụde gara aga @@ -1774,9 +1698,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ụbọchị Satụde gara aga ụbọchị Satụde a ụbọchị Satụde na abịa - - Ụbọchị Satụde {0} gara aga - ụbọchị Satụde gara aga @@ -1800,9 +1721,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sekọnd - - sekọnd - Mpaghara oge @@ -1829,9 +1747,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Oge Okpomọkụ Ireland - - Enderbury - Oge Afghanistan @@ -1854,9 +1769,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Oge Mpaghara Ọdịda Anyanwụ Afrịka - Oge Izugbe Mpaghara Ọdịda Anyanwụ Afrịka - Oge Okpomọkụ Mpaghara Ọdịda Anyanwụ Afrịka + Oge Mpaghara Ọdịda Anyanwụ Afrịka @@ -2206,6 +2119,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Oge Guyana + + + Oge Izugbe Hawaii-Aleutian + + Oge Hawaii-Aleutian @@ -2740,7 +2658,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -3279,6 +3196,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ego Dollar obodo East Carribbean + + Ego Guilder Caribbean + Ego Guilder Caribbean + Ego CFA Franc obodo West Africa Ego CFA francs mba ọdịda anyanwụ Afrịka @@ -3302,6 +3223,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ego Kwacha Obodo Zambia Ego kwachas obodo Zambia + + Ego Ọlaọcha Zimbabwe + Ego Ọlaọcha Zimbabwe + {0}+ @@ -3349,6 +3274,59 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kubik + + {0} g-force + + + meters per second squared + {0} meters per second squared + + + square kilomita + {0} square kilomita + {0} per square kilomita + + + {0} hectare + + + square mita + {0} square mita + {0} kwa square mita + + + square centimita + {0} square centimita + {0} kwa square centimita + + + square mile + {0} square mile + {0} kwa square mile + + + {0} acre + + + square yard + {0} square yard + + + square feet + {0} square feet + + + square inches + {0} square inches + {0} kwa square inch + + + akụkụ gasị + {0} akụkụ gasị + + + {0} of glucose + Ọtụtụ nari afọ {0} Ọtụtụ nari afọ @@ -3363,7 +3341,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nkeji Nkeano - {0}/q + {0} nkeji iri anọ Ọtụtụ Ọnwa @@ -3375,12 +3353,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Ọtụtụ Izu {0} kwa Izu - - Ọtụtụ Ubochi - {0} Ọtụtụ Ubochi - - Ọtụtụ awa {0} Ọtụtụ awa @@ -3393,10 +3366,50 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} sekọnd {0} kwa sekọnd + + ampere + {0} ampere + + + milliampere + + + {0} ohm + + + {0} volt + + + kilocalorie + {0} kilocalorie + + + calorie + {0} calorie + Kalori {0} Kalori + + kilojoules + {0} kilojoule + + + {0} joule + + + kilowatt-hour + {0} kilowatt-hour + + + electronvolt + {0} electronvolt + + + kilohertz + {0} kilohertz + {0} pixels @@ -3420,29 +3433,388 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ntụpọ kwa inch - radius uwa + okirikiri ụwa + {0} okirikiri ụwa + + + kilomita + {0} kilomita + {0} kwa kilomita + + + mita + {0} mita + {0} kwa mita + + + decimita + {0} decimita + + + centimita + {0} centimita + {0} kwa centimita + + + millimita + {0} millimita + + + micromita + {0} micromita + + + nanomita + {0} nanomita + + + picomita + {0} picomita + + + mile + {0} mile + + + yard + {0} yard + + + feet + {0} feet + {0} kwa foot + + + inches + {0} inches + {0} kwa inch + + + parsecs + {0} parsecs + + + light years + {0} light years + + + astronomical units + {0} astronomical units + + + nautical miles + {0} nautical miles + + + miles-scandinavian + {0} miles-scandinavian + + + points + {0} points + + + solar radii + {0} solar radii + + + metric tons + {0} metric tons + + + kilograms + {0} kilograms + {0} kwa kilogram + + + {0} gram + {0} kwa gram + + + milligram + {0} milligrams + + + microgram + {0} microgram + + + ton + {0} ton + + + pound + {0} pound + {0} per pound + + + ounce + {0} ounce + {0} kwa ounce + + + troy ounce + {0} troy ounce + + + carat + {0} carat + + + dalton + {0} dalton + + + Earth mass + {0} Earth mass + + + solar mass + {0} solar mass + + + gigawatt + {0} gigawatt + + + megawatt + {0} megawatt + + + kilowatt + {0} kilowatt + + + {0} watt + + + milliwatt + {0} milliwatt + + + horsepower + {0} horsepower + + + nke mekuri + {0} nke mekuri + + + ike-paụnd kwa sukwịa inch + {0} ike-paụnd kwa sukwịa inch + + + inche kwa mekuri + {0} inche kwa mekuri + + + kilometers per hour + {0} kilometers per hour + + + meters per second + {0} meters per second + + + miles per hour + {0} miles per hour + + + knots + {0} knots Beaufort Beaufort {0} + + cubic kilomita + {0} cubic kilomita + + + cubic mita + {0} cubic mita + {0} kwa cubic mita + + + cubic centimita + {0} cubic centimita + {0} kwa cubic centimita + + + cubic mile + {0} cubic mile + + + cubic yard + {0} cubic yard + + + cubic feet + {0} cubic feet + + + cubic inches + {0} cubic inches + + + megaliter + {0} megaliter + + + hectoliter + {0} hectoliter + + + {0} liter + {0} kwa liter + + + deciliter + {0} deciliter + + + centiliter + {0} centiliter + + + milliliter + {0} milliliter + + + metric pints + {0} metric pint + + + metric cup + {0} metric cup + + + metric fluid ounces + {0} metric fluid ounces + + + acre-feet + {0} acre-feet + + + gallon + {0} gallon + {0} kwa gallon + + + Imp. gallons + {0} Imp. gallons + {0} per Imp. gallon + + + quart + {0} quart + + + pint + {0} pint + + + iko + {0} iko + + + fluid ounce + {0} fluid ounces + + + Imp. fluid ounces + {0} Imp. fluid ounces + + + ngaji + {0} ngaji + + + obere ngaji + {0} obere ngaji + + + barel + {0} barel + - ngaji mégharia onu + {0} ngaji mégharia onu + + + Imp. ngaji megharịa ọnụ + {0} Imp. ngaji mégharia onu + + + ntụsà + {0} ntụsà - mmiri dram + dram + {0} dram - - ìhè - {0} ìhè + + Imp. quarts + {0} Imp. quarts - + + steradians + {0} steradians + + + katals + {0} katals + + + kolumb + {0} kolumb + + + farads + {0} farads + + + henrys + {0} henrys + + + siemens + {0} siemens + + + calorie [IT] + {0} calorie [IT] + + + becquerel + {0} becquerel + + + sievert + {0} sievert + + + gray + {0} gray + + + kilograms-force + {0} kilograms-force + + + teslas + {0} teslas + + + webers + {0} webers + + akụkụ kwa ijeri {0} akụkụ kwa ijeri - Ọtụtụ abali - {0} Ọtụtụ abali {0} kwa abali @@ -3453,10 +3825,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + meters/sec² + + + mita² + + + sq mile + + + yards² + + + sq feet + {0} sq ft + + + inches² + ihe {0} ihe + + akụkụ + {0} akụkụ + + + Glc + {0} qtrs @@ -3474,10 +3872,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ọtụtụ awa {0} awa + + milliamp + Kal {0} Kal + + kilojoule + + + kW-hour + + + electronvolt + dpcm {0} dpcm @@ -3490,17 +3900,142 @@ CLDR data files are interpreted according to the LDML specification (http://unic ntụpọ {0} ntụpọ + + okirikiri ụwa + + + m + + + μmita + + + mile + + + yard + + + feet + + + inches + + + parsecs + + + light yrs + + + points + + + solar radii + + + ton + + + pound + + + oz troy + + + carat + + + dalton + + + Earth mass + + + solar mass + + + {0} gr + + + nke Hg + {0} nke Hg + + + km/hour + + + meters/sec + + + miles/hour + {0} mph + + + yards³ + + + feet³ + + + inches³ + + + {0} L + + + gal + {0} gal + + + {0}/galImp + + + qts + + + pint + + + iko + + + fl oz + {0} fl oz + + + barel + ngaji mégharia onu + {0} dsp + + + Imp. ngaji mégharia onu + {0} dsp-Imp. - dobé + ntụsà + {0} ntụsà + + + dram + {0} dram + + + {0} pn + + + Imp. quarts + + + cal-IT ìhè {0} ìhè - + akụkụ/ijeri @@ -3510,25 +4045,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + {0}Gs + + + {0}m/s² + + + mita² + + + yards² + + + sq feet + {0} sq ft + + + inches² + {0}mmol/L {0}ihe - + + akụkụ + {0}akụkụ + + {0}ppm + + Glc + {0}q + + {0}w + Ubochi - {0} Ọtụtụ Ubochi awa - {0} awa μsec @@ -3537,6 +4099,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}ns + + {0}A + + + milliamp + + + {0}Ω + + + {0}V + + + {0}kcal + kal {0}kal @@ -3544,6 +4121,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}Kal + + {0}kJ + + + {0}J + + + kW-hour + {0}kWh + + + electronvolt + {0}eV + + + {0}US therm + {0}N @@ -3557,30 +4151,223 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}MP - dpcm {0}dpcm - dpi {0}dpi {0}ntụpọ + + m + + + μmita + + + mile + + + yard + + + feet + {0}′ + + + inches + {0}″ + + + parsec + + + pts + + + {0}t + + + {0}kg + + + {0}g + + + {0}mg + + + {0}μg + + + ton + {0}tn + + + pound + {0}# + + + {0}oz + + + oz troy + {0}oz t + + + carat + {0}CD + + + dalton + {0}Da + + + Earth mass + {0}M⊕ + + + solar mass + {0}M☉ + + + gr + {0}gr + + + {0}GW + + + {0}MW + + + {0}kW + + + {0}W + + + {0}mW + + + {0}hp + + + nke Hg + {0}nke Hg + + + ″ Hg + {0}″ Hg + + + km/hr + {0}km/h + + + meters/sec + {0}m/s + + + mi/hr + {0}mph + + + {0}kn + B{0} + + yards³ + + + feet³ + + + {0} L + + + pt + + + acre ft + + + gal + {0}gal + {0}/gal + + + {0}gal-Im + {0}/galIm + + + qts + {0}qt + + + pint + + + iko + + + fl oz + {0}fl oz + + + {0}fl oz Im + + + {0}tbsp + + + {0}tsp + + + barel + {0}bbl + + + dsp + {0}dsp + + + dsp Imp + {0}dsp-Imp + + + dr + {0}dr + + + fl.dr. + {0}fl.dr. + + + {0}jigger + + + pn + {0}pn + + + Imp. quarts + {0}qt-Imp. + + + cal-IT + - ìhè {0}ìhè - + akụkụ/ijeri - Ọtụtụ abali {0}Ọtụtụ abali - {0}/abali @@ -3593,22 +4380,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}, ma ọ bụ {1} {0} ma ọ bụ {1} - - {0}, ma ọ bụ {1} - {0} ma ọ bụ {1} - - - {0}, ma ọ bụ {1} - {0} ma ọ bụ {1} - {0}, {1} {0}, {1} - - {0}, {1} - {0}, {1} - {0} {1} {0} {1} diff --git a/make/data/cldr/common/main/ii.xml b/make/data/cldr/common/main/ii.xml index 268e4a9808e..1c61148df34 100644 --- a/make/data/cldr/common/main/ii.xml +++ b/make/data/cldr/common/main/ii.xml @@ -17,7 +17,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ꀊꇁꀨꉙ - ꀊꇁꀨꉙ(ꋧꃅ) ꄓꇩꉙ ꑱꇩꉙ ꑭꀠꑸꉙ @@ -95,6 +94,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic [A B {BB} C {CH} D {DD} E F G {GG} H {HL} {HM} {HN} {HX} I {IE} J {JJ} K L M {MG} N {NB} {ND} {NG} {NJ} {NR} {NY} {NZ} O P Q R {RR} S {SH} {SS} T {UO} V W X Y Z {ZH} {ZZ}] [\- ‑ , . {\\\-} % ‰ + 0 1 2 3 4 5 6 7 8 9 {ꋍꑍꌕꇖꉬꃘꏃꉆꈬ}] [﹉﹊﹋﹌ __﹍﹎﹏︳︴ \--﹣ ‐‑ – —︱ ― ,,﹐ 、﹑ ;;﹔ \::﹕ !!﹗ ??﹖ ..﹒ ‥︰ … 。 · '‘’ "“”〝〞 ((﹙︵ ))﹚︶ \[[ \]] \{{﹛︷ \}}﹜︸ 〈︿ 〉﹀ 《︽ 》︾ 「﹁ 」﹂ 『﹃ 』﹄ 【︻ 】︼ 〔﹝︹ 〕﹞︺ 〖 〗 ‖ § @@﹫ **﹡ // \\\﹨ \&&﹠ ##﹟ %%﹪ ‰ ′ ″ ‵ 〃 ※] + [\- ‐‑ ・ . · ⸱] diff --git a/make/data/cldr/common/main/is.xml b/make/data/cldr/common/main/is.xml index a1cd0c5ef1c..def029d1654 100644 --- a/make/data/cldr/common/main/is.xml +++ b/make/data/cldr/common/main/is.xml @@ -284,6 +284,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafía kölníska kúrdíska + kúrdíska + kurmanji kúmík kútenaí komíska @@ -780,6 +782,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kína Kólumbía Clipperton-eyja + Sark Kostaríka Kúba Grænhöfðaeyjar @@ -956,6 +959,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sint Maarten Sýrland Esvatíní + Svasíland Tristan da Cunha Turks- og Caicoseyjar Tsjad @@ -1025,33 +1029,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Talnaröðun Röðunarstyrkur Gjaldmiðill + Framsetning emoji Tímakerfi (12 eða 24) Línuskipting + Línuskil innan orða Mælingakerfi Tölur + Hindranir á línuskiptingu Tímabelti Landsstaðalsafbrigði Einkanotkun Búddískt tímatal - Kínversk tímatal + Búddískt + Kínverskt tímatal + Kínverskt Koptískt tímatal - Dangi tímatal + Koptískt + Dangi-tímatal + Dangi Eþíópískt tímatal + Eþíópískt Eþíópískt ‘amete alem’ tímatal + Eþíópískt ‘amete alem’ Gregorískt tímatal + Gregorískt Hebreskt tímatal + Hebreskt indverskt dagatal Íslamskt tímatal + Íslamskt tímatal Íslamskt borgaradagatal + Íslamskt borgaradagatal Íslamskt dagatal (Umm al-Qura) + Íslamskt dagatal (Umm al-Qura) ISO-8601 tímatal Japanskt tímatal + Japanskt Persneskt tímatal - Minguo tímatal + Persneskt + Minguo-tímatal + Minguo Bókhaldsgjaldmiðill + Bókhald Staðlað gjaldmiðilssnið + Staðlað Raða táknum Raða óháð táknum Raða áherslum eðlilega @@ -1061,18 +1084,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Raða hástöfum fyrst Raða óháð hástöfum og lágstöfum Raða stafrétt - hefðbundin kínversk röðun - Big5 Fyrri röðun, til samræmis Orðabókarröð Sjálfgefin Unicode-röðun + Sjálfgefin Unicode Evrópskar reglur um röðun - einfölduð kínversk röðun - GB2312 Símaskráarröðun Hljóðfræðileg röð Pinyin-röðun Almenn leit + Leit Leita eftir upphafssamhljóða í Hangul Stöðluð röðun + Stöðluð Strikaröðun Hefðbundin Röðun eftir grunnstrikum @@ -1088,18 +1112,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Full breidd Hálfbreidd Tölulegur + Staðlað + Emoji + Texti 12 tíma kerfi (0–11) + 12 (0–11) 12 tíma kerfi (1–12) + 12 (1–12) 24 tíma kerfi (0–23) + 24 (0–23) 24 tíma kerfi (1–24) + 24 (1–24) Laus línuskipting + Laus Venjuleg línuskipting + Venjuleg Ströng línuskipting + Ströng + Skipta öllu + Halda öllu + Venjuleg + Halda í setningum US BGN umritun UN GEGN umritun Metrakerfi + Metrakerfi Breskt mælingakerfi + Breskt Bandarískt mælingakerfi + Bandarískt ahom-tölur Arabískar-indverskar tölur Auknar arabískar-indverskar tölur @@ -1145,6 +1186,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tíbeskir tölustafir Hefðbundin tölutákn Vai-tölustafir + Slökkt + Kveikt metrakerfi @@ -1161,13 +1204,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [a á b d ð e é f g h i í j k l m n o ó p r s t u ú v x y ý þ æ ö] [c q w z] [A Á B C D Ð E É F G H I Í J K L M N O Ó P Q R S T U Ú V W X Y Ý Z Þ Æ Ö] - [\- ‐‑ – — , ; \: ! ? . … '‘‚ "“„ ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [\- ‐‑ – — , ; \: ! ? . … '‘‚ "“„ ( ) \[ \] § @ * / \& # † ‡ ′ ″] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -1189,16 +1229,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ BD - - - - h B – h B - - - h:mm B – h:mm B - - - @@ -1241,12 +1271,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - Tímabil0 - Tímabil1 - - @@ -1281,6 +1305,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1289,6 +1316,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1305,13 +1335,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM-y G d/M/y GGGGG + E dd-MM-y G MMM y G d. MMM y G E, d. MMM y G - h a h:mm a h:mm:ss a + HH'klst'. v d.M. E, d.M. d. MMM @@ -1372,10 +1404,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d. MMM – E, d. MMM y G E, d. MMM y – E, d. MMM y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1386,10 +1414,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M.–M. @@ -1679,6 +1703,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1687,6 +1714,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1705,17 +1735,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, h:mm:ss a E, HH:mm:ss y G - d/M/y GGGGG + M/y G + d/M/y G + E, d/M/y G MMM y G d. MMM y G E, d. MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v v – HH:mm:ss h:mm a v v – HH:mm + HH'klst'. v d.M. E, d.M. d. MMM @@ -1778,10 +1810,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d. MMM – E, d. MMM y G E, d. MMM y – E, d. MMM y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1792,10 +1820,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M.–M. @@ -2637,7 +2661,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tókýó - Enderbury + Kanton-eyja Sankti Kitts @@ -2826,9 +2850,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Vestur-Afríkutími - Staðaltími í Vestur-Afríku - Sumartími í Vestur-Afríku + Vestur-Afríkutími @@ -3185,6 +3207,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Gvæjanatími + + + Staðaltími á Havaí og Aleúta + + Tími á Havaí og Aleúta @@ -3766,6 +3793,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -4783,6 +4814,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ austurkarabískur dalur austurkarabískir dalir + + Karíbahafsgyllini + Karíbahafsgyllini + Karíbahafsgyllini + XCG + Sérstök dráttarréttindi @@ -4843,6 +4880,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Simbabveskur dalur + + simbabveskt gold + simbabveskt gold + simbabveskt gold + {0}+ @@ -5204,7 +5246,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} atriðum {0} atriða - + + hlutar + {0} hluti + {0} hlutar + + masculine {0} milljónarhluti {0} milljónarhluta @@ -5259,6 +5306,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mólum {0} móla + + af glúkósa + {0} af glúkósa + {0} af glúkósa + masculine lítrar á kílómetra @@ -6240,6 +6292,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimetrum af kvikasilfri {0} millimetra af kvikasilfri + + af kvikasilfri + {0} af kvikasilfri + {0} af kvikasilfri + pund á fertommu {0} pund á fertommu @@ -6573,6 +6630,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} áströlskum bollum {0} ástralskra bolla + + vökvaúnsur í metrakerfi + {0} vökvaúnsa í metrakerfi + {0} vökvaúnsur í metrakerfi + gallon {0} gallon @@ -6640,7 +6702,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ klípur - + + steradíanar + {0} steradíani + {0} steradíanar + + + katöl + {0} katal + {0} katöl + + + kúlomb + {0} kúlomb + {0} kúlomb + + + faröd + {0} farad + {0} faröd + + + henry + {0} henry + {0} henry + + + símens + {0} símens + {0} símens + + + hitaeiningar [IT] + {0} hitaeining [IT] + {0} hitaeiningar [IT] + + + bekerel + {0} bekerel + {0} bekerel + + + sívert + {0} sívert + {0} sívert + + + grei + {0} grei + {0} grei + + + kílópond + {0} kílópond + {0} kílópond + + + teslur + {0} tesla + {0} teslur + + + veber + {0} veber + {0} veber + + + ljóshraði + {0} ljóshraði + {0} ljóshraðar + + masculine hlutar á milljarð {0} hluti á milljarð @@ -6663,7 +6795,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} nætur {0} nóttum {0} nótta - {0}/nótt höfuðátt @@ -6763,7 +6894,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} atriði {0} atriði - + + hluti + {0} hluti + {0} hlutar + + milljónarhlutar @@ -6782,6 +6918,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mól {0} mól + + Glc + lítrar/km {0} l/km @@ -7063,6 +7202,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} hö {0} hö + + af Hg + {0} af Hg + {0} af Hg + to Hg {0} to Hg @@ -7242,6 +7386,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} lagarmál {0} lagarmál + + kal-IT + {0} kal-IT + {0} kal-IT + + + ljóshraði + {0} ljóshraði + {0} ljóshraðar + næt. {0} nótt @@ -7316,7 +7470,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmól/l {0}mmól/l - + + hluti + {0} hluti + {0} hlutar + + ppm {0}ppm {0}ppm @@ -7329,6 +7488,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Glc + l/100km {0}l/100km @@ -7449,6 +7611,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ oz t + + af Hg + {0} af Hg + {0} af Hg + inHg {0}" Hg @@ -7505,6 +7672,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} l.mál {0} l.mál + + kal-IT + {0} kal-IT + {0} kal-IT + + + ljóshraði + {0} ljóshraði + {0} ljóshraðar + n. {0} n. diff --git a/make/data/cldr/common/main/it.xml b/make/data/cldr/common/main/it.xml index a34f0ada80a..d8c2050ea31 100644 --- a/make/data/cldr/common/main/it.xml +++ b/make/data/cldr/common/main/it.xml @@ -328,6 +328,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia coloniese curdo + curdo + kurmancî kumyk kutenai komi @@ -928,6 +930,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Cina Colombia Isola di Clipperton + Sark Costa Rica Cuba Capo Verde @@ -1218,35 +1221,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordinamento numerico Sicurezza ordinamento Valuta + Presentazione emoji Sistema orario (12 o 24 ore) Tipo di interruzione di riga + Interruzioni di riga all’interno delle parole Sistema di misurazione Numeri + Interruzione frase dopo abbreviaz. Fuso orario Variante lingua Uso privato Calendario buddista + Buddista Calendario cinese + Cinese Calendario copto + Copto Calendario dangi + Dangi Calendario etiope + Etiope Calendario etiope Amete Alem + Etiope Amete Alem Calendario gregoriano + Gregoriano Calendario ebraico + Ebraico calendario nazionale indiano Calendario Hijri + Hijri Calendario Hijri (tabulare, epoca civile) + Hijri (tabulare, epoca civile) Calendario islamico (Arabia Saudita, osservazione) Calendario islamico (tabulare, era astronomica) Calendario Hijri (Umm al-Qura) + Hijri (Umm al-Qura) Calendario ISO-8601 Calendario giapponese + Giapponese Calendario persiano + Persiano Calendario minguo + Minguo Formato valuta contabile + Contabile Formato valuta standard + Standard Ordina simboli Ordina ignorando i simboli Ordina accenti normalmente @@ -1256,21 +1278,31 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordina prima lettere minuscole Ordina senza distinzione tra maiuscole e minuscole Ordina distinzione tra maiuscole e minuscole - Ordinamento Cinese tradizionale - Big5 Ordinamento precedente, per compatibilità + Compatibilità Ordinamento dizionario + Dizionario Ordinamento Unicode predefinito - Ordinamento Cinese semplificato - GB2312 + Unicode predefinito Ordinamento Elenco telefonico + Elenco telefonico Ordinamento fonetico + Fonetico Ordinamento pinyin + Pinyin Ricerca generica + Ricerca Cerca per consonante hangul iniziale Ordinamento standard + Standard Ordinamento tratti + Tratti Ordinamento tradizionale + Tradizionale Ordinamento tratti radicali + Tratti radicali Ordinamento Zhuyin + Zhuyin Ordina senza normalizzazione Ordina Unicode normalizzato Ordina cifre individualmente @@ -1283,18 +1315,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Larghezza intera Metà larghezza Numerica + Default + Emoji + Testo Sistema orario a 12 ore (0–11) + 12 ore (0–11) Sistema orario a 12 ore (1–12) + 12 ore (1–12) Sistema orario a 24 ore (0–23) + 24 ore (0–23) Sistema orario a 24 ore (1–24) + 24 ore (1–24) Interruzione di riga facoltativa + Facoltativa Interruzione di riga normale + Normale Interruzione di riga forzata + Forzata + Dividi tutte + Conserva tutte + Normale + Conserva in sintagmi BGN UNGEGN Sistema metrico + Metrico Sistema imperiale britannico + Imperiale britannico Sistema consuetudinario statunitense + Consuetudinario statunitense Cifre indo-arabe Cifre indo-arabe estese Numeri armeni @@ -1357,6 +1406,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Cifre tibetane Numeri tradizionali Cifre Vai + Off + On metrico @@ -1395,13 +1446,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [aà b c d eéè f g h iì j k l m n oò p q r s t uù v w x y z] [ªáâåäã æ ç êë íîï ñ ºóôöõø œ ß úûü ÿ] [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] - [\- ‑ — , ; \: ! ? . … '’ "“” « » ( ) \[ \] \{ \} @ /] + [\- ‑ — , ; \: ! ? . … '’ "“” « » ( ) \[ \] \{ \} @ * / \& #] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1487,6 +1535,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'alle' 'ore' {0} + + {1} 'alle' 'ore' {0} + @@ -1495,6 +1546,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'alle' 'ore' {0} + + {1} 'alle' 'ore' {0} + @@ -1511,13 +1565,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G d/M/y GGGGG + E d/M/y G MMM y G d MMM y G E d MMM y G hh a hh:mm a hh:mm:ss a + 'h'HH v d/M E d/M d MMM @@ -1537,19 +1594,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B - - G y – G y - - GGGGG y-MM – GGGGG y-MM + MM/y G – MM/y G M/y – M/y GGGGG M/y – M/y GGGGG @@ -1867,6 +1919,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'alle' 'ore' {0} + + {1} 'alle' 'ore' {0} + @@ -1875,6 +1930,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'alle' 'ore' {0} + + {1} 'alle' 'ore' {0} + @@ -1891,15 +1949,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G - dd/MM/y GGGGG + M/y G + dd/MM/y G + E dd/MM/y G MMM y G d MMM y G E d MMM y G - h a + H h:mm a h:mm:ss a h:mm:ss a v h:mm a v + 'h'HH v dd/MM E dd/MM d MMM @@ -1921,11 +1982,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -1967,10 +2026,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d MMM – E d MMM y G E d MMM y – E d MMM y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1981,10 +2036,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -2481,12 +2532,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Città sconosciuta - - Tirana - - - Tucumán - Dacca @@ -2499,9 +2544,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - Santarém - San Paolo @@ -2511,9 +2553,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pasqua - - Bogotá - L’Avana @@ -2526,9 +2565,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Praga - - Büsingen - Berlino @@ -2616,12 +2652,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Giamaica - - Enderbury - - - Canton - Comore @@ -2733,12 +2763,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damasco - - N’Djamena - - - Lomé - Tunisi @@ -2791,9 +2815,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ora dell’Africa occidentale - Ora standard dell’Africa occidentale - Ora legale dell’Africa occidentale + Ora dell’Africa occidentale @@ -3165,6 +3187,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ora della Guyana + + + Ora standard delle Isole Hawaii-Aleutine + + Ora delle isole Hawaii-Aleutine @@ -3723,12 +3750,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 0 - 0 - 0 - 0 - 0 - 0 + 0K + 0K + 00K + 00K + 000K + 000K 0 Mln 0 Mln 00 Mln @@ -3754,17 +3781,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ - 0 - 0 - 0 - 0 - 0 - 0 + 0K ¤ + 0K ¤ + 00K ¤ + 00K ¤ + 000K ¤ + 000K ¤ 0 Mln ¤ 0 Mln ¤ 00 Mln ¤ @@ -4868,6 +4898,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dollaro dei Caraibi orientali dollari dei Caraibi orientali + + fiorino caraibico + fiorino caraibico + fiorini caraibici + Cf + diritti speciali di incasso @@ -4948,6 +4984,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dollaro dello Zimbabwe + + Zimbabwe Gold + Zimbabwe Gold + Zimbabwe Gold + dollaro zimbabwiano (2009) @@ -5199,7 +5240,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} elemento {0} elementi - + + parti + {0} parte + {0} parti + + feminine parti per milione {0} parte per milione @@ -5229,6 +5275,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mole {0} moli + + di glucosio + {0} di glucosio + {0} di glucosio + masculine litri per chilometro @@ -5662,7 +5713,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} miglia scandinave - masculine + masculine punti tipografici {0} punto tipografico {0} punti tipografici @@ -5825,6 +5876,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimetro di mercurio {0} millimetri di mercurio + + di mercurio + {0} di mercurio + {0} di mercurio + libbre per pollice quadrato {0} libbra per pollice quadrato @@ -6029,6 +6085,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} tazza metrica {0} tazze metriche + + once liquide metriche + {0} oncia liquida metrica + {0} once liquide metriche + masculine piedi acro @@ -6136,12 +6197,76 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} quarto imperiale {0} quarti imperiali - - feminine - {0} alla velocità della luce - {0} alla velocità della luce + + steradianti + {0} steradiante + {0} steradianti - + + katal + {0} katal + {0} katal + + + coulomb + {0} coulomb + {0} coulomb + + + farad + {0} farad + {0} farad + + + henry + {0} henry + {0} henry + + + siemens + {0} siemens + {0} siemens + + + calorie [IT] + {0} caloria [IT] + {0} calorie [IT] + + + becquerel + {0} becquerel + {0} becquerel + + + sievert + {0} sievert + {0} sievert + + + gray + {0} gray + {0} gray + + + chilogrammi-forza + {0} chilogrammo-forza + {0} chilogrammi-forza + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber + + + feminine + luce + + feminine parti per miliardo {0} parte per miliardo @@ -6149,9 +6274,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - notti - {0} notte - {0} notti {0} a notte @@ -6209,9 +6331,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} elem. {0} elem. + + parte + {0} parte + {0} parti + percento + + Glc + {0} Glc + {0} Glc + mpg {0} mpg @@ -6376,6 +6508,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ W + + di Hg + {0} di Hg + {0} di Hg + Bft {0} Bft {0} @@ -6426,6 +6563,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ml {0} ml + + {0} fl oz m. + {0} fl oz m. + staia @@ -6477,9 +6618,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp qt {0} imp qt + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + - {0} luce - {0} luce + luce + {0} luce + {0} luce notti @@ -6569,7 +6764,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}elem. {0}elem. - + + parte + {0}parte + {0}parti + + {0}ppm {0}ppm @@ -6580,6 +6780,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mol {0}mol + + Glc + {0}Glc + {0}Glc + {0}L/km {0}L/km @@ -7011,6 +7216,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mm Hg {0}mm Hg + + di Hg + {0} di Hg + {0} di Hg + {0}psi {0}psi @@ -7148,6 +7358,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mc {0}mc + + {0}fl oz m. + {0}fl oz m. + {0}ac ft {0}ac ft @@ -7231,20 +7445,68 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}imp qt {0}imp qt - - {0}l - {0}l + + {0}sr + {0}sr - + + {0}kat + {0}kat + + + {0}C + {0}C + + + {0}F + {0}F + + + {0}H + {0}H + + + {0}S + {0}S + + + cal-IT + {0}cal-IT + {0}cal-IT + + + {0}Bq + {0}Bq + + + {0}Sv + {0}Sv + + + {0}Gy + {0}Gy + + + {0}kgf + {0}kgf + + + {0}T + {0}T + + + {0}Wb + {0}Wb + + + luce + {0}l + {0}l + + {0}ppb {0}ppb - - notti - {0} notte - {0} notti - {0}/notte - diff --git a/make/data/cldr/common/main/it_CH.xml b/make/data/cldr/common/main/it_CH.xml index 4185a3c2f4e..2073e3b4820 100644 --- a/make/data/cldr/common/main/it_CH.xml +++ b/make/data/cldr/common/main/it_CH.xml @@ -169,12 +169,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic . - + ' ¤ #,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/ja.xml b/make/data/cldr/common/main/ja.xml index 8c7f32a9a03..01c6f969f77 100644 --- a/make/data/cldr/common/main/ja.xml +++ b/make/data/cldr/common/main/ja.xml @@ -88,7 +88,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ バンジャル語 コム語 シクシカ語 - アニ語 (blo) + アニ語 (ベナン) バンバラ語 ベンガル語 チベット語 @@ -331,6 +331,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ バフィア語 ケルン語 クルド語 + クルド語 + クルマンジー クムク語 クテナイ語 コミ語 @@ -396,7 +398,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ マケドニア語 マラヤーラム語 モンゴル語 - 満州語 + 満洲語 マニプリ語 イヌー=アイムン語 モーホーク語 @@ -938,6 +940,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 中国 コロンビア クリッパートン島 + サーク島 コスタリカ キューバ カーボベルデ @@ -1235,43 +1238,62 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 暦法 通貨フォーマット 記号を無視した並べ替え - アクセント(逆方向)による並べ替え + 逆順アクセントによる並べ替え 大文字順/小文字順による並べ替え 大文字小文字を区別した並べ替え 並べ替え順序 正規化による並べ替え 数値による並べ替え - 強度による並べ替え + 照合強度 通貨 + 絵文字表示方法 時間制(12 / 24) 禁則処理 + 単語途中の改行 単位系 数値書式 + 略語の後の文分割 タイムゾーン ロケールのバリアント 私用 仏暦 + 仏暦 中国暦 + 中国暦 コプト暦 + コプト暦 ダンギ暦 + ダンギ暦 エチオピア暦 + エチオピア暦 エチオピア創世紀元暦 + エチオピア創世紀元暦 西暦(グレゴリオ暦) + 西暦(グレゴリオ暦) ユダヤ暦 + ユダヤ暦 インド国定暦 イスラム暦 + イスラム暦 イスラム暦(定周期、公民紀元) + イスラム暦(定周期、公民紀元) イスラム暦(サウジアラビア、月観測) イスラム歴(定周期、天文紀元) イスラム暦(ウンム・アルクラー) + イスラム暦(ウンム・アルクラー) ISO-8601 和暦 + 和暦 ペルシア暦 + ペルシア暦 中華民国暦 + 中華民国暦 会計通貨フォーマット + 会計 標準通貨フォーマット + 標準 記号で並べ替え 記号を無視して並べ替え アクセント(順方向)で並べ替え @@ -1281,22 +1303,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 大文字優先で並べ替え 大文字小文字を区別しないで並べ替え 大文字小文字を区別して並べ替え - 繁体字中国語順(Big5) 以前の順序(互換性) + 互換性 辞書順 - ユニコード照合順 + 辞書 + デフォルトUnicode照合順 + デフォルトUnicode ヨーロッパ言語文字の並べ替え規則 - 簡体字中国語順(GB2312) 電話帳順 - 音声順による並べ替え + 電話帳 + 読み順 + 読み ピンイン順 + ピンイン 汎用検索 + 検索 ハングル語頭子音による並べ替え 標準並べ替え順序 + 標準 画数順 - トラディッショナル - 部首順 + 画数 + 伝統的並べ替え順序 + 伝統的 + 部首画数順 + 部首画数 注音順 + 注音 正規化しないで並べ替え Unicode 正規化で並べ替え 数値を独立して並べ替え @@ -1309,18 +1341,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 全角 半角 数字 + デフォルト + 絵文字 + テキスト 12時間制(0〜11) + 12時間制(0〜11) 12時間制(1〜12) + 12時間制(1〜12) 24時間制(0〜23) + 24時間制(0〜23) 24時間制(1〜24) + 24時間制(1〜24) 禁則処理(弱) + 禁則処理(標準) + 標準 禁則処理(強) + + 強制改行 + 改行禁止 + 標準 + 文節単位 BGN UNGEGN メートル法 + メートル ヤード・ポンド法 + 英国 米慣習単位 + 米国 アラビア・インド数字 ペルシア数字 アルメニア数字 @@ -1382,6 +1431,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ チベット数字 従来の記数法 ヴァイ文字の記数法 + オフ + オン メートル法 @@ -1399,12 +1450,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [丑 亥 亨 兌 兎 凧 剃 卯 嘉 嘔 嘘 壬 壺 嬉 寅 巳 庚 庵 弘 彗 悶 愕 戊 戌 拼 揃 斧 昌 杖 桶 梵 楔 湘 焚 燭 爬 牌 牝 牡 狐 狗 狼 猪 獅 癸 瞑 碇 祚 禄 禎 秤 竿 絆 繍 罫 膏 芒 蟄 蟹 蠍 蠣 贛 蹄 辰 酉 鋲 錄 錨 閏 閩 雀 雉 鳳 鼠 龍] [あ か さ た な は ま や ら わ] [‾ __ \-- ‐‑ — ― 〜 ・・ ,, 、、 ;; \:: !! ?? .. ‥ … 。。 '‘’ ""“” (( )) \[[ \]] \{{ \}} 〈 〉 《 》 「「 」」 『 』 【 】 〔 〕 ‖ § ¶ @@ ** // \\\ \&& ## %% ‰ † ‡ ′ ″ 〃 ※] + [゠ ・・ . ==] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、、﹑︑] @@ -1697,6 +1746,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ BK:mm BK:mm:ss d日 + BK時 (E) BK:mm (E) BK:mm:ss (E) d日(E) @@ -1716,6 +1766,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm aK:mm:ss H:mm:ss + aK時 v + H時 v MMM M/d M/d(E) @@ -1919,11 +1971,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}の {0} + {1} {0} + + {1}の {0} + @@ -1940,16 +1998,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ BK:mm BK:mm:ss d日 + BK時 (E) BK:mm (E) BK:mm:ss (E) d日(E) d日(EEEE) + aK時 (E) aK:mm (E) H:mm (E) aK:mm:ss (E) H:mm:ss (E) Gy年 + GGGGGy/M GGGGGy/M/d + GGGGGy/M/d(E) Gy年M月 Gy年M月d日 Gy年M月d日(E) @@ -1960,6 +2022,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm aK:mm:ss H:mm:ss + aK時 v + H時 v M月 M/d M/d(E) @@ -2298,11 +2362,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}の {0} + {1} {0} + + {1}の {0} + @@ -2319,16 +2389,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ BK:mm BK:mm:ss d日 + BK時 (E) BK:mm (E) BK:mm:ss (E) d日(E) d日EEEE + aK時 (E) aK:mm (E) H:mm (E) aK:mm:ss (E) H:mm:ss (E) Gy年 + Gy/M Gy/M/d + Gy/M/d(E) Gy年M月 Gy年M月d日 Gy年M月d日(E) @@ -2343,6 +2417,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm:ss v aK:mm v H:mm v + aK時 v + H時 v M月 M/d M/d(E) @@ -3148,11 +3224,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}の {0} + {1} {0} + + {1}の {0} + @@ -3166,6 +3248,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d日EEEE + GGGGGy/M + GGGGGy/M/d(E) Gy年M月d日EEEE M/dEEEE M月d日EEEE @@ -3980,6 +4064,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ イースター島 + + コジャイケ + プンタアレナス @@ -4245,9 +4332,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ プノンペン - エンダーベリー島 - - カントン島 @@ -4924,9 +5008,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 西アフリカ時間 - 西アフリカ標準時 - 西アフリカ夏時間 + 西アフリカ時間 @@ -4952,30 +5034,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - アメリカ中部時間 - アメリカ中部標準時 - アメリカ中部夏時間 + 米国中部時間 + 米国中部標準時 + 米国中部夏時間 - アメリカ東部時間 - アメリカ東部標準時 - アメリカ東部夏時間 + 米国東部時間 + 米国東部標準時 + 米国東部夏時間 - アメリカ山地時間 - アメリカ山地標準時 - アメリカ山地夏時間 + 米国山岳部時間 + 米国山岳標準時 + 米国山岳夏時間 - アメリカ太平洋時間 - アメリカ太平洋標準時 - アメリカ太平洋夏時間 + 米国太平洋時間 + 米国太平洋標準時 + 米国太平洋夏時間 @@ -4987,9 +5069,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - アピア時間 - アピア標準時 - アピア夏時間 + サモア時間 + サモア標準時 + サモア夏時間 @@ -5109,7 +5191,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ブルネイ・ダルサラーム時間 + ブルネイ時間 @@ -5314,6 +5396,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ガイアナ時間 + + + ハワイ・アリューシャン標準時 + + ハワイ・アリューシャン時間 @@ -5659,12 +5746,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ポナペ時間 + ポンペイ時間 - 平壌時間 + 北朝鮮時間 @@ -5700,9 +5787,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - サモア時間 - サモア標準時 - サモア夏時間 + 米領サモア時間 + 米領サモア標準時 + 米領サモア夏時間 @@ -5742,9 +5829,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 台北時間 - 台北標準時 - 台北夏時間 + 台湾時間 + 台湾標準時 + 台湾夏時間 @@ -5769,6 +5856,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ チューク時間 + + + トルコ時間 + トルコ標準時 + トルコ夏時間 + + トルクメニスタン時間 @@ -5892,8 +5986,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -6579,7 +6671,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ セルビア ディナール - セルビア ディナール ロシア ルーブル @@ -6700,7 +6791,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ウクライナ フリヴニャ - ウクライナ フリヴニャ ウクライナ カルボバネツ @@ -6778,6 +6868,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 東カリブ ドル + + カリブ ギルダー + カリブ ギルダー + Cg + 特別引き出し権 @@ -6857,6 +6952,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ジンバブエ ドル (1980–2008) + + ジンバブエ ゴールド + ジンバブエ ゴールド + ジンバブエ ドル (2009) @@ -7038,6 +7137,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ミリモル毎リットル + + パーツ + {0} パーツ + {0} パーセント @@ -7050,6 +7153,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} モル + + グルコース + {0} グルコース + リットル毎キロメートル {0} リットル毎キロメートル @@ -7354,6 +7461,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} 水銀柱ミリメートル + + 水銀柱 + {0}Hg + {0} 重量ポンド毎平方インチ @@ -7475,6 +7586,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} メトリックカップ + + メトリック液量オンス + {0} メトリック液量オンス + {0} エーカーフィート @@ -7517,14 +7632,57 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} 英クォート - - - {0} 光 + + ステラジアン + {0} ステラジアン - - - {0} 泊 - {0}/泊 + + カタール + {0} カタール + + + クーロン + {0} クーロン + + + ファラド + {0} ファラド + + + ヘンリー + {0} ヘンリー + + + ジーメンス + {0} ジーメンス + + + 国際蒸気表カロリー + {0} 国際蒸気表カロリー + + + ベクレル + {0} ベクレル + + + シーベルト + {0} シーベルト + + + グレイ + {0} グレイ + + + 重量キログラム + {0} 重量キログラム + + + テスラ + {0} テスラ + + + ウェーバ + {0} ウェーバ @@ -7585,6 +7743,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 項目 {0} 項目 + + パーツ + {0} パーツ + パーセント @@ -7597,6 +7759,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ モル + + グルコース + {0} Glc + マイル/ガロン {0} mpg @@ -7872,6 +8038,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 水銀柱ミリメートル + + 水銀柱 + {0}Hg + 重量ポンド毎平方インチ @@ -7946,6 +8116,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ メトリックカップ + + メトリック液量オンス + {0} fl oz m. + エーカーフィート @@ -8014,6 +8188,51 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 英クォート + + ステラジアン + {0} sr + + + カタール + {0} kat + + + {0} C + + + {0} F + + + {0} H + + + {0} S + + + cal-IT + {0} cal-IT + + + {0} Bq + + + {0} Sv + + + {0} Gy + + + 重量キログラム + {0} kgf + + + テスラ + {0} T + + + ウェーバ + {0} Wb + {0} 厘 @@ -8172,7 +8391,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}項目 - + + パーツ + {0}パーツ + + {0}ppm @@ -8188,6 +8411,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mol {0}mol + + グルコース + {0}Glc + {0}L/km @@ -8529,6 +8756,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmHg + + 水銀柱 + {0}Hg + {0}psi @@ -8638,6 +8869,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mc + + メトリック液量オンス + {0} fl oz m. + ac ft {0}ac ft @@ -8707,6 +8942,28 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ qt Imp {0}qt-Imp. + + {0}sr + + + カタール + {0}kat + + + cal-IT + + + 重量キログラム + {0}kgf + + + テスラ + {0}T + + + ウェーバ + {0}Wb + {0}厘 @@ -8759,20 +9016,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}石 - {0}光 {0}分 - + {0}ppb - {0}泊 - {0}/泊 {0}E diff --git a/make/data/cldr/common/main/jgo.xml b/make/data/cldr/common/main/jgo.xml index 77a32c12d1e..42dc6d82a92 100644 --- a/make/data/cldr/common/main/jgo.xml +++ b/make/data/cldr/common/main/jgo.xml @@ -153,7 +153,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd diff --git a/make/data/cldr/common/main/jv.xml b/make/data/cldr/common/main/jv.xml index 54ef5e3901d..c95407d748b 100644 --- a/make/data/cldr/common/main/jv.xml +++ b/make/data/cldr/common/main/jv.xml @@ -16,7 +16,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Achinese Adangme Adyghe - Afrika + Afrikaans Aghem Ainu Akan @@ -40,6 +40,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Aymara Azerbaijan Bashkir + Baluchi Bali Basaa Belarus @@ -219,6 +220,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafia Colonia Kurdis + Kurdi + Kurmanji Kumik Komi Kernowek @@ -604,6 +607,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tyongkok Kolombia Pulo Clipperton + Sark Kosta Rika Kuba Pongol Verdé @@ -837,43 +841,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic Format Mata Uang Urutan Pamilahan Mata Uang + Presentasi Emoji Siklus Jam (12 vs 24) Gaya Ganti Baris + Ganti baris sajrone Tembung Sistem Pangukuran Angka + Pedhotan ukara sawise singkatan Tanggalan Buddha + Buddha Tanggalan Cina + Cina Tanggalan Koptik + Koptik Tanggalan Dangi + Dangi Tanggalan Etiopia + Etiopia Tanggalan Etiopia Amete Alem + Etiopia Amete Alem Tanggalan Gregorian + Gregorian Tanggalan Ibrani + Ibrani Tanggalan Hijriah + Hijriah Tanggalan Hijriah (tabel, jaman sipil) + Hijriah (tabel, jaman sipil) Tanggalan Hijriah (tabel, jaman astronomis) - Tanggalan Hijriah (Umm al-Qura) + Hijriah (tabel, jaman astronomis) + Tanggalan Hijriah (Ummul Qura) + Hijriah (Ummul Qura) Tanggalan ISO-8601 Tanggalan Jepang + Jepang Tanggalan Persia + Persia Tanggalan Minguo + Minguo Format Mata Uang Akuntansi + Akuntansi Format Mata Uang Standar + Standar Urutan Pamilahan Unicode Default + Unicode Default Panlusuran Tujuan Umum + Panlusuran Standar Ngurutke Urutan + Standar + Gawan + Emoji + Teks Sistem 12 Jam (0–11) + 12 (0–11) Sistem 12 Jam (1–12) + 12 (1–12) Sistem 24 Jam (0–23) + 24 (0–23) Sistem 24 Jam (1–24) + 24 (1–24) Gaya Ganti Baris Longgar + Longgar Gaya Ganti Baris Normal + Normal Gaya Ganti Baris Strik + Ketat + Ganti baris kabeh + Tetep kabeh + Normal + Pertahanake frasa Sistem Metrik + Metrik Sistem Pangukuran Imperial + Inggris Sistem Pangukuran AS + AS Digit Hindu-Arab Digit Hindu-Arab Diambakake Angka Armenia @@ -914,6 +958,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Digit Thailand Digit Tibet Digit Vai + Mati + Urip Metrik @@ -933,9 +979,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -1003,11 +1046,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a y G + MM-y G GGGGG dd-MM-y + E, dd-MM-y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a dd/MM @@ -1301,6 +1345,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ing' {0} + + {1} 'ing' {0} + @@ -1309,6 +1356,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ing' {0} + + {1} 'ing' {0} + @@ -1324,11 +1374,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d E h:mm a E h:mm:ss a - y G - d/M/y GGGGG - MMM y G - d MMM y G - E, d MMM y G h a h:mm a h:mm:ss a @@ -1355,44 +1400,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic d – d - - y G – y G - y – y G - - - M/y GGGGG – M/y GGGGG - M/y – M/y GGGGG - M/y – M/y GGGGG - - - d/M/y – d/M/y GGGGG - d/M/y GGGGG – d/M/y GGGGG - d/M/y – d/M/y GGGGG - d/M/y – d/M/y GGGGG - - - E, d/M/y – E, d/M/y GGGGG - E, d/M/y GGGGG – E, d/M/y GGGGG - E, d/M/y – E, d/M/y GGGGG - E, d/M/y – E, d/M/y GGGGG - - - MMM y G – MMM y G - MMM – MMM y G - MMM y – MMM y G - - - d – d MMM y G - d MMM y G – d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G - - - E, d MMM – E, d MMM y G - E, d MMM y G – E, d MMM y G - E, d MMM – E, d MMM y G - E, d MMM y – E, d MMM y G - h a – h a h – h a @@ -1517,7 +1524,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic d E + MM-y G d/M/y GGGGG + E, dd-MM-y G M/y GGGGG @@ -1825,7 +1834,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Kuto Ora Dikenali + Lokasi Ora Dikenali Mendosa @@ -1936,9 +1945,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Roma - - Enderbury - Komoro @@ -2078,9 +2084,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wektu Afrika Kulon - Wektu Standar Afrika Kulon - Wektu Ketigo Afrika Kulon + Wektu Afrika Kulon @@ -2128,8 +2132,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Apia - Wektu Standar Apia - Wektu Ketigo Apia + Wektu Standar Samoa + Wektu Ketiga Samoa @@ -2235,7 +2239,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wektu Brunai Darussalam + Wektu Brunei @@ -2268,7 +2272,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Cina Wektu Standar Cina - Wektu Ketigo Cina + Wektu Ketiga Cina @@ -2292,7 +2296,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Kepuloan Cook Wektu Standar Kepuloan Cook - Wektu Ketigo Kepuloan Cook + Wektu Ketiga Kepuloan Cook @@ -2309,12 +2313,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wektu Dumont-d’Urville + Wektu Dumont d’Urville - Wektu Timor Leste + Wektu Timor-Leste @@ -2430,6 +2434,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Guyana + + + Wektu Standar Hawaii-Aleutian + + Wektu Hawaii-Aleutian @@ -2441,14 +2450,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Hong Kong Wektu Standar Hong Kong - Wektu Ketigo Hong Kong + Wektu Ketiga Hong Kong Wektu Hovd Wektu Standar Hovd - Wektu Ketigo Hovd + Wektu Ketiga Hovd @@ -2506,7 +2515,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Jepang Wektu Standar Jepang - Wektu Ketigo Jepang + Wektu Ketiga Jepang @@ -2528,7 +2537,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Korea Wektu Standar Korea - Wektu Ketigo Korea + Wektu Ketiga Korea @@ -2610,7 +2619,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wektu Ulaanbaatar Wektu Standar Ulaanbaatar - Wektu Ketigo Ulaanbaatar + Wektu Ketiga Ulaanbaatar @@ -2746,12 +2755,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wektu Ponape + Wektu Pohnpei - Wektu Pyongyang + Wektu Korea Lor @@ -2773,9 +2782,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wektu Samoa - Wektu Standar Samoa - Wektu Ketigo Samoa + Wektu Samoa Amerika + Wektu Standar Samoa Amerika + Wektu Ketiga Samoa Amerika @@ -2815,9 +2824,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wektu Taipei - Wektu Standar Taipei - Wektu Ketigo Taipei + Wektu Taiwan + Wektu Standar Taiwan + Wektu Awan Taiwan @@ -2969,33 +2978,39 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + ¤ #,##0.00 + + + ¤ #,##0.00 + + + + + + ¤ #,##0.00 + + + ¤ #,##0.00 + + - ¤0È - ¤ 0È - ¤00È - ¤ 00È - ¤000È - ¤ 000È - ¤0Y - ¤ 0Y - ¤00Y - ¤ 00Y - ¤000Y - ¤ 000Y - ¤0M - ¤ 0M - ¤00M - ¤ 00M - ¤000M - ¤ 000M - ¤0T - ¤ 0T - ¤00T - ¤ 00T - ¤000T - ¤ 000T + ¤ 0È + ¤ 00È + ¤ 000È + ¤ 0Y + ¤ 00Y + ¤ 000Y + ¤ 0M + ¤ 00M + ¤ 000M + ¤ 0T + ¤ 00T + ¤ 000T {0} {1} @@ -3250,7 +3265,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Loti Lesotho - Loti Lesotho Dinar Libya @@ -3333,7 +3347,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Peso Filipina - Peso Filipina Rupee Pakistan @@ -3467,6 +3480,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dolar Karibia Wetan + + Guilder Karibia + Guilder Karibia + CFA Franc Afrika Kulon @@ -3485,6 +3502,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kwacha Sambia + + Emas Zimbabwe + Emas Zimbabwe + ⩾{0} @@ -3598,11 +3619,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic peng loro {0} - pesagi {0} + {0} pesagi peng telu {0} - kubik {0} + {0} kubik {0}-{1} @@ -3668,7 +3689,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimol saben liter {0} milimol saben liter - + bagean saben yuta {0} bagean saben yuta @@ -3681,6 +3702,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} permiriad + + glukosa + {0} glukosa + liter saben kilometer {0} liter saben kilometer @@ -4114,6 +4139,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} metrik kup + + {0} fl ons metrik + {0} saben galon @@ -4132,18 +4160,44 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} barel - - jiwit - {0} jiwit + + steradian + {0} steradian - - cahya - {0} cahya + + katal + {0} katal - - wengi - {0} wengi - {0}/wengi + + coulomb + {0} coulomb + + + farad + {0} farad + + + henry + {0} henry + + + siemens + {0} siemens + + + kalori-IT + + + sievert + {0} sievert + + + tesla + {0} tesla + + + weber + {0} weber arah kardinal @@ -4200,7 +4254,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic iji {0} iji - + bagean/yuta {0}bpj @@ -4213,6 +4267,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic permiriad + + Glc + liter/km @@ -4433,7 +4490,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic metrik ton - {0} metrik ton mikrogram @@ -4605,6 +4661,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Imp. seprapat galon {0} Imp. seprapat galon + + cal-IT + cahya {0} cahya @@ -4638,6 +4697,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic % + + Glc + mpg inggris {0}m/gUK @@ -4660,6 +4722,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}panas AS + + N + {0}kWh/km @@ -4669,9 +4734,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}tpi - - {0} cd - {0}t @@ -4687,9 +4749,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mpt - - {0}gallm - {0}sprt @@ -4712,18 +4771,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}by.dr. - jiwit {0}jiwit {0}spt-lmp. - - cahya - {0} cahya - - - wengi + + cal-IT diff --git a/make/data/cldr/common/main/ka.xml b/make/data/cldr/common/main/ka.xml index 7740acd7acb..2bd7c289ed6 100644 --- a/make/data/cldr/common/main/ka.xml +++ b/make/data/cldr/common/main/ka.xml @@ -267,6 +267,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ბაფია კიოლში ქურთული + ქურთული + კურმანჯი ყუმუხური კუტენაი კომი @@ -804,6 +806,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ჩინეთი კოლუმბია კლიპერტონის კუნძული + სარკი კოსტა-რიკა კუბა კაბო-ვერდე @@ -1100,54 +1103,91 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ვალუტის ფორმატი დახარისხების თანმიმდევრობა ვალუტა + სიცილაკების პრეზენტაცია დროის სისტემა (12 ან 24) სტრიქონის წყვეტის სტილი + სტრიქონზე გადასვლა სიტყვებს შორის საზომი სისტემა რიცხვები + წინადადების წყვეტა შემოკლ. შემდეგ ბუდისტური კალენდარი + ბუდისტური ჩინური კალენდარი + ჩინური კოპტური კალენდარი + კოპტური კალენდარი დანგი + დანგი ეთიოპიური კალენდარი + ეთიოპიური ეთიოპიური ამეთე ალემი კალენდარი + ეთიოპიური ამეთე ალემი გრიგორიანული კალენდარი + გრიგორიანული ებრაული კალენდარი + ებრაული ინდოეთის ეროვნული კალენდარი ჰიჯრის კალენდარი + ჰიჯრი ჰიჯრის სამოქალაქო კალენდარი (ტაბულარული) + ჰიჯრი (ტაბულარული, სამოქალაქო) ჰიჯრის კალენდარი (უმ-ალ-ქურა) + ჰიჯრი (უმ-ალ-ქურა) ISO-8601 კალენდარი იაპონური კალენდარი + იაპონური სპარსული კალენდარი + სპარსული ჩინეთის რესპუბლიკის კალენდარი - ვალუტის ბუღალტრული ფორმატი + მინგუო + ვალუტის საბუღალტრო ფორმატი + საბუღალტრო ვალუტის სტანდარტული ფორმატი - ტრადიციული ჩინური + სტანდარტული ლექსიკონით უნიკოდის ნაგულისხმევი დახარისხების თანმიმდევრობა - გამარტივებული ჩინური + უნიკოდის ნაგულისხმევი ტელეფონის წიგნით პინ-ინი რეფორმირებული ზოგადი დანიშნულების ძიება + ძიება ჰანგულის პირველი თანხმოვნით სტანდარტული დახარისხების თანმიმდევრობა + სტანდარტული შტრიხით ტრადიციული ძირითადი შტრიხით ჟუინი + ნაგულისხმევი + სიცილაკი + ტექსტი 12-საათიანი სისტემა (0-11) + 12 (0–11) 12-საათიანი სისტემა (1-12) + 12 (0–11) 24-საათიანი სისტემა (0-23) + 12 (0–23) 24-საათიანი სისტემა (1-24) + 12 (0–23) სტრიქონის რბილი წყვეტის სტილი + თავისუფალი სტრიქონის ჩვეულებრივი წყვეტის სტილი + ნორმალური სტრიქონის ზედმიწევნითი წყვეტის სტილი + მკაცრი + ყველგან გაყოფა + ყველგან შენარჩუნება + ნორმალური + ფრაზებში შენარჩუნება მეტრული სისტემა + მეტრული ბრიტანული საზომი სისტემა + ბრიტანული ამერიკული საზომი სისტემა + ამერიკული არაბულ-ინდური ციფრები გაფართოებული არაბულ-ინდური ციფრები სომხური რიცხვები @@ -1201,6 +1241,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ტაილანდური ციფრები ტიბეტური ციფრები ვაიური ციფრები + გამორთული + ჩართული მეტრული @@ -2471,6 +2513,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ისთერი + + კოიჰაიკე + პუნტა-არენასი @@ -2736,9 +2781,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ პნომპენი - ენდერბური - - კანტონი @@ -3408,9 +3450,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - დასავლეთ აფრიკის დრო - დასავლეთ აფრიკის სტანდარტული დრო - დასავლეთ აფრიკის ზაფხულის დრო + დასავლეთ აფრიკის დრო @@ -3760,6 +3800,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ გაიანის დრო + + + ჰავაისა და ალეუტის სტანდარტული დრო + + ჰავაისა და ალეუტის დრო @@ -3993,9 +4038,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ნორფოლკის კუნძულის დრო - ნორფოლკის კუნძულის სტანდარტული დრო - ნორფოლკის კუნძულის ზაფხულის დრო + ნორფოლკის კუნძულის დრო + ნორფოლკის კუნძულის სტანდარტული დრო + ნორფოლკის კუნძულის ზაფხულის დრო @@ -4333,6 +4378,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -5086,6 +5135,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ აღმოსავლეთ კარიბიული დოლარი + + კარიბის გულდენი + კარიბის გულდენი + კარიბის გულდენი + ევროპული სავალუტო ერთეული @@ -5136,6 +5190,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ზიმბაბვეს დოლარი + + ზიმბაბვეს გოლდი + ზიმბაბვეს გოლდი + ზიმბაბვეს გოლდი + ≈{0} @@ -5327,7 +5386,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ერთეული {0} ერთეული - + + წილი + {0} წილი + {0} წილი + + ნაწილი მილიონზე {0} ნაწილი მილიონზე {0} ნაწილი მილიონზე @@ -5342,6 +5406,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} პრომილე {0} პრომილე + + მოლი + {0} მოლი + {0} მოლი + + + გლუკოზის + გლუკოზის {0} + გლუკოზის {0} + ლიტრი კილომეტრზე {0} ლიტრი კილომეტრზე @@ -5522,6 +5596,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ბრიტანული სითბური ერთეული {0} ბრიტანული სითბური ერთეული + + ნიუტონი + {0} ნიუტონი + {0} ნიუტონი + გიგაჰერცი {0} გიგაჰერცი @@ -5712,8 +5791,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} მიკროგრამი - {0} ტონა - {0} ტ + აშშ მოკლე ტონა + {0} აშშ მოკლე ტონა + {0} აშშ მოკლე ტონა {0} ფუნტი @@ -5778,9 +5858,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ცხენის ძალა - მილიმეტრი ვერცხლისწყლის სვეტისა - {0} მილიმეტრი ვერცხლისწყლის სვეტისა - {0} მილიმეტრი ვერცხლისწყლის სვეტისა + მილიმეტრი ვერცხლისწყლის სვეტი + {0} მილიმეტრი ვერცხლისწყლის სვეტი + {0} მილიმეტრი ვერცხლისწყლის სვეტი + + + ვერცხლისწყალი + {0} ვერცხლისწყალი + {0} ვერცხლისწყალი ფუნტი კვადრატულ დუიმზე @@ -5788,9 +5873,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ფუნტი კვადრატულ დუიმზე - ვერცხლისწყლის დუიმი - {0} ვერცხლისწყლის დუიმი - {0} ვერცხლისწყლის დუიმი + დუიმი ვერცხლისწყალი + {0} დუიმი ვერცხლისწყალი + {0} დუიმი ვერცხლისწყალი მილიბარი @@ -5942,6 +6027,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} მეტრული ჭიქა {0} მეტრული ჭიქა + + მეტრული თხევადი უნცია + {0} მეტრული თხევადი უნცია + {0} მეტრული თხევადი უნცია + აკრი-ფუტი {0} აკრი-ფუტი @@ -5993,17 +6083,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ბრიტანული კვარტი {0} ბრიტანული კვარტი - + + სტერადიანი + {0} სტერადიანი + {0} სტერადიანი + + + კატალი + {0} კატალი + {0} კატალი + + + კულონი + {0} კულონი + {0} კულონი + + + ფარადა + {0} ფარადა + {0} ფარადა + + + ჰენრი + {0} ჰენრი + {0} ჰენრი + + + სიმენსი + {0} სიმენსი + {0} სიმენსი + + + კალორია [IT] + {0} კალორია [IT] + {0} კალორია [IT] + + + ბეკერელი + {0} ბეკერელი + {0} ბეკერელი + + + ზივერტი + {0} ზივერტი + {0} ზივერტი + + + გრეი + {0} გრეი + {0} გრეი + + + კილოგრამძალა + {0} კილოგრამძალა + {0} კილოგრამძალა + + + ტესლა + {0} ტესლა + {0} ტესლა + + + ვებერი + {0} ვებერი + {0} ვებერი + + + სინათლის სიჩქარე + {0} სინათლის სიჩქარე + {0}-მაგი სინათლის სიჩქარე + + ნაწილი მილიარდზე {0} ნაწილი მილიარდზე {0} ნაწილი მილიარდზე - - ღამე - {0} ღამე - {0} ღამე - {0}/ღამე - კარდინალური მიმართულება {0} აღმოსავლეთით @@ -6214,9 +6368,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ერთე. {0} ერთე. - + + წ. + {0} წ. + {0} წ. + + ნაწილი/მილიონზე + + მოლ + {0} მოლ + {0} მოლ + + + Glc + {0} Glc + {0} Glc + ლიტრი/კმ {0} ლ/კმ @@ -6252,11 +6421,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ტბიტი {0} ტბიტი + + გიგაბაიტი + {0} გიგაბაიტი + {0} გიგაბაიტი + გბიტი {0} გბიტი {0} გბიტი + + მეგაბაიტი + {0} მეგაბაიტი + {0} მეგაბაიტი + მბიტი {0} მბიტი @@ -6420,6 +6599,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} აშშ თერმი {0} აშშ თერმი + + + {0} ნ + {0} ნ + კვტსთ/100კმ {0} კვტსთ/100კმ @@ -6621,9 +6805,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ☉ სხივიერობა - მტ - {0} მტ - {0} მტ + + {0} ტონა + {0} ტონა კილოგრამი @@ -6648,9 +6832,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} მკგ - ტონა - {0} ტ - {0} ტ + მოკ. ტონა + {0} მოკ. ტონა + {0} მოკ. ტონა სტოუნი @@ -6720,9 +6904,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ცხ. ძ. - მმ ვწყ. სვ. - {0} მმ ვწყ. სვ. - {0} მმ ვწყ. სვ. + მმ.ვწყ. სვ. + {0} მმ.ვწყ. სვ. + {0} მმ.ვწყ. სვ. ფნტ. კვ. დმ. @@ -6730,9 +6914,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ფნტ. კვ. დმ. - ვრც. დმ. - {0} ვრც. დმ. - {0} ვრც. დმ. + დუიმი ვერცხლისწყალი + {0} დუიმი ვერცხლისწყალი + {0} დუიმი ვერცხლისწყალი ბარი @@ -6789,6 +6973,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} კვძ. {0} კვძ. + + ბოფორტი + ფუნტი-ფუტი {0} ფუნტი-ფუტი @@ -6877,6 +7064,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} მეტრ. ჭიქა {0} მეტრ. ჭიქა + + მეტრული თხევადი უნცია + {0} მეტრული თხევადი უნცია + {0} მეტრული თხევადი უნცია + აკრ.ფტ. {0} აკრ.ფტ. @@ -6974,7 +7166,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ბრიტ. კვარტი {0} ბრიტ. კვარტი - + + სრ + {0} სრ + {0} სრ + + + კატ + {0} კატ + {0} კატ + + + კულ + {0} კულ + {0} კულ + + + + {0} ფ + {0} ფ + + + + {0} ჰ + {0} ჰ + + + სიმ + {0} სიმ + {0} სიმ + + + კალ-IT + {0} კალ-IT + {0} კალ-IT + + + ბკ + {0} ბკ + {0} ბკ + + + ზვ + {0} ზვ + {0} ზვ + + + გრ + {0} გრ + {0} გრ + + + კგძ + {0} კგძ + {0} კგძ + + + ტლ + {0} ტლ + {0} ტლ + + + ვბ + {0} ვბ + {0} ვბ + + + სინათლის სიჩქ. + {0} სინათლის სიჩქ. + {0}-მაგი სინათლის სიჩქ. + + ნაწილი/მილიარდზე {0} ნ/მ {0} ნ/მ @@ -6994,6 +7256,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + ინერციის ძალა + {0} წთ {0} წთ @@ -7002,10 +7267,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} წმ {0} წმ + + წ. + {0} წ. + {0} წ. + + + მოლ + {0} მოლ + {0} მოლ + + + Glc + {0} Glc + {0} Glc + {0}ლ/100კმ {0}ლ/100კმ + + გბაიტი + {0} გბაიტი + {0} გბაიტი + + + მეგაბაიტი + {0} მეგაბაიტი + {0} მეგაბაიტი + {0}/თ. @@ -7022,6 +7312,29 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}წმ {0}წმ + + მილიამპერი + {0} მილიამპერი + {0} მილიამპერი + + + {0} ომი + {0} ომი + + + კვტ.სთ + {0} კვტ.სთ + {0} კვტ.სთ + + + + {0} ნ + {0} ნ + + + {0} პიქს/დუიმი + {0} პიქს/დუიმი + {0}მ {0}მ @@ -7030,6 +7343,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} დმ {0} დმ + + + {0} ტ + {0} ტ + კგ {0}კგ @@ -7048,29 +7366,150 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}მკგ - {0}ტ - {0}ტ + მ.ტონა + {0}მ.ტონა + {0}მ.ტონა + + + ფნტ + + + კარ {0}ცხ.ძ. {0}ცხ.ძ. + + მმ.ვწყ. სვ. + {0} მმ.ვწყ. სვ. + {0} მმ.ვწყ. სვ. + + + ფუნტი კვადრატულ დუიმზე + {0} ფუნტი კვადრატულ დუიმზე + {0} ფუნტი კვადრატულ დუიმზე + + + დუიმი ვერცხლისწყალი + {0} დუიმი ვერცხლისწყალი + {0} დუიმი ვერცხლისწყალი + {0} მბრ {0} მბრ + + ბოფორტი + + + მილი³ + {0}ლ {0}ლ - - ნ/მ + + მეტრული თხევადი უნცია + {0} მეტრული თხევადი უნცია + {0} მეტრული თხევადი უნცია - - ღამე - {0} ღამე - {0} ღამე - {0}/ღამე + + ბრიტანული თხევადი უნცია + {0} ბრიტანული თხევადი უნცია + {0} ბრიტანული თხევადი უნცია + + + ს.კ. + {0} ს.კ. + {0} ს.კ. + + + ჩ.კ. + {0} ჩ.კ. + {0} ჩ.კ. + + + {0} ბარელი + {0} ბარელი + + + ბრიტანული თხევადი დრაქმა + {0} ბრიტანული თხევადი დრაქმა + {0} ბრიტანული თხევადი დრაქმა + + + სრ + {0} სრ + {0} სრ + + + კატ + {0} კატ + {0} კატ + + + კულ + {0} კულ + {0} კულ + + + + {0} ფ + {0} ფ + + + + {0} ჰ + {0} ჰ + + + სიმ + {0} სიმ + {0} სიმ + + + კალ-IT + {0} კალ-IT + {0} კალ-IT + + + ბკ + {0} ბკ + {0} ბკ + + + ზვ + {0} ზვ + {0} ზვ + + + გრ + {0} გრ + {0} გრ + + + კგძ + {0} კგძ + {0} კგძ + + + ტლ + {0} ტლ + {0} ტლ + + + ვბ + {0} ვბ + {0} ვბ + + + c + {0} სინათლის სიჩქ. + {0}-მაგი სინათლის სიჩქ. + + + ნ/მ diff --git a/make/data/cldr/common/main/kaa.xml b/make/data/cldr/common/main/kaa.xml index 851615c3139..28914280908 100644 --- a/make/data/cldr/common/main/kaa.xml +++ b/make/data/cldr/common/main/kaa.xml @@ -339,6 +339,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic григориан календарь + григориан кестели ҳижрий календарь кестели ҳижрий календарь (астрономиялық дәўир) ISO-8601 календары @@ -622,9 +623,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ай - өткен ай - усы ай - кейинги ай ай @@ -644,14 +642,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic өткен ҳәп. усы ҳәп. кейинги ҳәп. - {0}-ҳәпте ҳәп өтк. ҳәп. усы ҳәп. кей. ҳәп. - {0}-ҳәпте күн @@ -661,15 +657,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic күн - кеше - бүгин - ертең күн - кеше - бүгин - ертең ҳәпте күни @@ -708,5 +698,37 @@ CLDR data files are interpreted according to the LDML specification (http://unic ўақыт зонасы + + + Белгисиз орын + + + + + сан емес + + + + + {0} ҳәм {1} + {0} ҳәм {1} + + + {0} ямаса {1} + {0} ямаса {1} + + + {0} ямаса {1} + {0} ямаса {1} + + + {0} ямаса {1} + {0} ямаса {1} + + + {0} ҳәм {1} + {0} ҳәм {1} + + diff --git a/make/data/cldr/common/main/kab.xml b/make/data/cldr/common/main/kab.xml index ef10d1d734d..c3a8b4a4446 100644 --- a/make/data/cldr/common/main/kab.xml +++ b/make/data/cldr/common/main/kab.xml @@ -1076,20 +1076,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nun Duǧ - - Y - F - M - Y - M - Y - Y - Ɣ - C - T - W - D - Yennayer Fuṛar @@ -1106,20 +1092,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Yen - Fur - Meɣ - Yeb - May - Yun - Yul - Ɣuc - Cte - Tub - Wam - Duǧ - Y F @@ -1139,51 +1111,51 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Yan - San - Kraḍ - Kuẓ - Sam - Sḍis - Say + Acer + Arim + Aram + Ahad + Amhad + Sem + Sed - C - R - R - H - M - S - S + C + R + R + H + M + S + S - Cr - Ri - Ra - Hd - Mh - Sm - Sd + Acer + Arim + Aram + Ahad + Amhad + Sem + Sed - Yanass - Sanass - Kraḍass - Kuẓass - Samass - Sḍisass - Sayass + Acer + Arim + Aram + Ahad + Amhad + Sem + Sed - Ace - Ari - Ara - Aha - Amh - Sem - Sed + Acer + Arim + Aram + Ahad + Amhad + Sem + Sed - Y - S - K - K - S + C + R + R + H + M S S - Cr - Ri - Ra - Hd - Md - Sm - Sd + Acer + Arim + Aram + Ahad + Amhad + Sem + Sed - Acer - Arim - Aram - Ahad - Amhad - Sem - Sed + Acer + Arim + Aram + Ahad + Amhad + Sem + Sed @@ -2299,9 +2271,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nayrubi - - Enderbury - Kumuṛ @@ -2615,9 +2584,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Akud n Tefriqt n umalu - Akud amezday n Tefriqt n umalu - Akud n unebdu n Tefriqt n umalu + Akud n Tefriqt n umalu @@ -2967,6 +2934,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Akud n Gwiyan + + + Akud amezday n Haway-Aliwsyan + + Akud n Haway-Aliwsyan @@ -3518,30 +3490,54 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 0K¤ - 0K¤ - 00K¤ - 00K¤ - 000K¤ - 000K¤ + 0G¤ + 0G ¤ + 0G¤ + 0G ¤ + 00G¤ + 00G ¤ + 00G¤ + 00G ¤ + 000G¤ + 000G ¤ + 000G¤ + 000G ¤ 0M¤ + 0M ¤ 0M¤ + 0M ¤ 00M¤ + 00M ¤ 00M¤ + 00M ¤ 000M¤ + 000M ¤ 000M¤ - 0G¤ - 0G¤ - 00G¤ - 00G¤ - 000G¤ - 000G¤ + 000M ¤ + 0L¤ + 0L ¤ + 0L¤ + 0L ¤ + 00L¤ + 00L ¤ + 00L¤ + 00L ¤ + 000L¤ + 000L ¤ + 000L¤ + 000L ¤ 0T¤ + 0T ¤ 0T¤ + 0T ¤ 00T¤ + 00T ¤ 00T¤ + 00T ¤ 000T¤ + 000T ¤ 000T¤ + 000T ¤ {0} {1} diff --git a/make/data/cldr/common/main/kea.xml b/make/data/cldr/common/main/kea.xml index 15661c6e995..cfd3aaf5948 100644 --- a/make/data/cldr/common/main/kea.xml +++ b/make/data/cldr/common/main/kea.xml @@ -151,7 +151,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic lausianu lituanu luba-katanga - luo luyia letãu malgaxi @@ -432,7 +431,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Israel Ilha di Man Índia - Ilhas Británikas di Índiku + Ilhas Británikas di Índiku Iraki Irãu Islándia @@ -609,10 +608,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kalendáriu Gregorianu Kalendáriu ebraiku Kalendáriu nasional indianu - Kalendáriu islámiku - Kalendáriu islámiku (sivil) - Kalendáriu islámiku (astronómiku) - Kalendáriu islámiku (Umm al-Qura) + Kalendáriu islámiku + Kalendáriu islámiku (sivil) + Kalendáriu islámiku (astronómiku) + Kalendáriu islámiku (Umm al-Qura) Kalendáriu ISO-8601 Kalendáriu japones Kalendáriu persa @@ -709,7 +708,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic LLL y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a dd/MM @@ -1069,7 +1067,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic LLL y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a (v) @@ -1147,7 +1144,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d MMM y – E, d MMM y G - h a – h a h – h a @@ -1172,7 +1168,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH:mm – HH:mm v - h a – h a v h – h a v @@ -1736,9 +1731,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Ora di Áfrika Osidental - Ora Padron di Áfrika Osidental - Ora di Veron di Áfrika Osidental + Ora di Áfrika Osidental @@ -1865,6 +1858,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora di Veron di Gronelándia Osidental + + + Ora Padron di Avaí i Aleutas + + Ora di Avaí i Aleutas @@ -1943,9 +1941,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -1965,7 +1965,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 000 Bi ¤ - {0} {1} @@ -2356,7 +2355,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimol pur litru {0} milimol pur litru - + parti pur milhãu {0} parti pur milhãu @@ -2503,8 +2502,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kaloria - Kaloria - {0} Kaloria + Kaloria + {0} Kaloria kilojoule @@ -2574,16 +2573,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} piksel pur pulegada - pontu pur sentímeru - {0} pontu pur sentímetru + pontu pur sentímeru + {0} pontu pur sentímetru - pontu pur pulegada - {0} pontu pur pulegada + pontu pur pulegada + {0} pontu pur pulegada - pontu - {0} pontu + pontu + {0} pontu raiu di Tera @@ -3000,7 +2999,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimol/litru {0} mmol/l - + parti/milhãu @@ -3068,8 +3067,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} sig. - Cal - {0} Cal + Cal + {0} Cal J diff --git a/make/data/cldr/common/main/kek.xml b/make/data/cldr/common/main/kek.xml new file mode 100644 index 00000000000..d13302e690d --- /dev/null +++ b/make/data/cldr/common/main/kek.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + Qʼeqchiʼ + + + Ruchichʼochʼ + Molam Rehebʼ Ninqi Tenamit + Ebʼ li Naʼajej Moko Nawbʼilebʼ Ta + + + + [a {aa} {bʼ} c {ch} {ch’} e {ee} h i {ii} j k {k’} l m n o {oo} p q {q’} r s t {t’} {tz} {tz’} u {uu} w x y] + [d f g v z] + [\- ‑ , ; \: ! ? . … ’ “” ( ) \[ \] \{ \} /] + + + + + + + + Xbʼeen Po + Xkabʼ Po + Rox Po + Xkaa Po + Roʼ Po + Xwaq Po + Xwuuq Po + Xwaqxaq Po + Xbʼelee Po + Xlajee Po + Xjunlaj Po + Xkabʼlaj Po + + + + + + + Doʼkutan + LuʼKutan + MarʼKutan + MerʼKutan + JueʼKutan + VierʼKutan + SabʼKutan + + + + + + + Eqʼela + Ewu + + + + + + dd-MM-y + + + + + + diff --git a/make/data/cldr/common/main/kek_GT.xml b/make/data/cldr/common/main/kek_GT.xml new file mode 100644 index 00000000000..4beb614a91a --- /dev/null +++ b/make/data/cldr/common/main/kek_GT.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/make/data/cldr/common/main/kgp.xml b/make/data/cldr/common/main/kgp.xml index 343220d9650..3b00c5f70db 100644 --- a/make/data/cldr/common/main/kgp.xml +++ b/make/data/cldr/common/main/kgp.xml @@ -1089,12 +1089,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Vẽnhrá mág to kuprãg Vẽnhrá mág mré ũn kẽsir tỹ ũn’ũn mỹ kuprẽg Vẽnhrá mág mré ũn kẽsir tỹ ũn’ũn kỹ kuprẽg - Sĩnẽj Vỹsa ke to ke pẽ - Big5 Ẽgno tá jẽnẽ já kỹ ta ki já Vẽnhrá Nỹtĩj-fẽ nỹtĩ há Unicode to ke pẽ Orópa tá vẽnhvin han to ke - Sĩnẽj ke to ke (sĩmpri há) - GB2312 Terefonĩ Risita to ke Fonẽtika to ke kuprãg Pin-yin to nỹtĩ @@ -2854,9 +2852,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Fynãg Pẽj - - Ẽnnermuri - Kiritimỹti @@ -3524,9 +3519,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Afrika Rãpur tá óra - Óra Pã Afrika Rãpur tá - Rỹ Kã óra Afrika Rãpur tá + Afrika Rãpur tá óra @@ -3919,6 +3912,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Óra Gijỹnỹ tá + + + Óra Pã Hava’i kar Arevta Goj-vẽso tá + + Óra Hava’i kar Arevta Goj-vẽso tá @@ -6148,7 +6146,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mĩrimol ritru ki {0} mĩrimol ag ritru ki - + milhão ki kupar ‘e {0} kupar milhão ki {0} kupar 'e milhão ki @@ -6917,7 +6915,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mĩrimol/ritru {0} mmol/l - + kupar ‘e/milhão ki diff --git a/make/data/cldr/common/main/kk.xml b/make/data/cldr/common/main/kk.xml index c410b197cc6..8c1d68c5fe7 100644 --- a/make/data/cldr/common/main/kk.xml +++ b/make/data/cldr/common/main/kk.xml @@ -29,7 +29,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ арагон тілі оболо тілі ангика тілі - араб тілі (леватин) + араб тілі (леватин) араб тілі қазіргі стандартты араб тілі мапуче тілі @@ -44,12 +44,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ аймара тілі әзірбайжан тілі башқұрт тілі - балучи тілі + балучи тілі бали тілі баса тілі беларусь тілі бемба тілі - бетауи тілі + бетауи тілі бена тілі болгар тілі хариани тілі @@ -59,20 +59,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ бини тілі сиксика тілі ании тілі - тай дам тілі + тай дам тілі бамбара тілі бенгал тілі тибет тілі + бахтияр тілі бретон тілі бодо тілі босния тілі - акусе тілі + акусе тілі + бурят тілі бугис тілі блин тілі каталан тілі - каддо тілі + каддо тілі кайюга тілі - атсам тілі + атсам тілі чакма тілі шешен тілі себуано тілі @@ -84,10 +86,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ чипевайан тілі чероки тілі шайен тілі - чикасау тілі + чикасау тілі сорани тілі чилкотин тілі корсика тілі + копт тілі мичиф тілі оңтүстік-шығыс кри тілі жазықтағы кри тілі @@ -121,6 +124,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ экаджук тілі грек тілі ағылшын тілі + ағылшын тілі (Біріккен Корольдік) эсперанто тілі испан тілі эстон тілі @@ -162,7 +166,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ хинглиш хилигайнон тілі хмонг тілі - хмоң ниуа тілі + хмоң ниуа тілі хорват тілі жоғарғы лужица тілі гаити тілі @@ -191,7 +195,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ мачаме тілі ява тілі грузин тілі - қарақалпақ тілі + қарақалпақ тілі кабил тілі качин тілі каджи тілі @@ -200,7 +204,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ тьяп тілі маконде тілі кабувердьяну тілі - кеняң тілі + кекчи тілі + кеняң тілі коро тілі кайнганг тілі кхаси тілі @@ -227,6 +232,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ бафиа тілі кёльн тілі күрд тілі + күрд тілі + күрд тілі (күрмәнжі) құмық тілі коми тілі корн тілі @@ -243,7 +250,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ лигур тілі лиллуэт тілі лакота тілі - ладин тілі + ладин тілі ломбард тілі лингала тілі лаос тілі @@ -252,7 +259,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ солтүстік люри тілі самия тілі литва тілі - латгалиан тілі + латгалиан тілі луба-катанга тілі луба-лулуа тілі лунда тілі @@ -260,6 +267,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ мизо тілі лухиа тілі латыш тілі + Лаз тілі мадур тілі магахи тілі майтхили тілі @@ -273,7 +281,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ макуа-меетто тілі мета тілі маршалл тілі - мокено тілі + мокено тілі маори тілі микмак тілі минангкабау тілі @@ -336,8 +344,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ папьяменто тілі палау тілі нигериялық пиджин тілі + пали тілі пиджин тілі поляк тілі + пьемонт тілі малесит-пассамакводди тілі пруссия тілі пушту тілі @@ -350,7 +360,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ рапануй тілі раротонган тілі рохинджа - риффиан тілі + риффиан тілі романш тілі рунди тілі румын тілі @@ -376,13 +386,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ сена тілі койраборо сенни тілі санго тілі + самогития тілі серб-хорват тілі ташелхит тілі шан тілі сингал тілі - сидамо тілі + сидамо тілі словак тілі - сарайки тілі + сарайки тілі словен тілі оңтүстік лушуцид тілі самоа тілі @@ -429,7 +440,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ток-писин тілі түрік тілі тароко тілі - торуали тілі + торуали тілі тсонга тілі татар тілі солтүстік тутчоне тілі @@ -751,6 +762,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Қытай Колумбия Клиппертон аралы + Сарк Коста-Рика Куба Кабо-Верде @@ -1097,59 +1109,96 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Валюта форматы Сұрыптау реті Валюта + Эмоджи көрсетілімі Уақыт форматы (12 не 24) Жолды тасымалдау стилі + Сөздердегі жол бөліністері Өлшемдер жүйесі Сандар + Қысқарған сөзден кейінгі сөйлем бөлінісі Будда күнтізбесі + Будда Қытай күнтізбесі + Қытай Копт күнтізбесі + Копт Данги күнтізбесі + Данги Эфиопия күнтізбесі + Эфиопия Эфиопияның Амете-Алем күнтізбесі + Эфиопияның Амете-Алем Грегориандық күнтізбе + Грегориан Көне еврей күнтізбесі + Көне еврей Үндістанның ұлттық күнтізбесі Ислам күнтізбесі + Ислам Ислам күнтізбесі (кестелік, азаматтық дәуір) + Ислам (кестелік, азаматтық дәуір) Ислам күнтізбесі (Сауд Арабиясы, жаңа ай) Ислам күнтізбесі (кестелік, астрономиялық дәуір) Ислам күнтізбесі (Умм аль-Кура) + Ислам (Умм аль-Кура) ISO-8601 күнтізбесі Жапон күнтізбесі + Жапон Парсы күнтізбесі + Парсы Мингуо күнтізбесі + Мингуо Есептік валюта форматы + Есептік Стандартты валюта форматы - Дәстүрлі қытай тілінің сұрыптау реті - Big5 + Стандартты Сәйкестікке арналған алдыңғы сұрыптау реті Сөздік бойынша сұрыптау реті Әдепкі уникод сұрыптау реті + Әдепкі уникод Эмоджи сұрыптау реті Еуропалық реттеу ережелері - Жеңілдетілген қытай тілінің сұрыптау реті - GB2312 Телефон кітапшасының сұрыптау реті Пиньинь сұрыптау реті Қайта қарастырылған сұрыптау реті Жалпы мақсаттағы іздеу + Іздеу Корей тілінің бастапқы дауыссызы бойынша іздеу Стандартты сұрыптау реті + Стандартты Иероглифтер сызықтарын сұрыптау реті Дәстүрлі сұрыптау реті Иероглифтер сызықтарын түбегейлі сұрыптау реті Чжуинь сұрыптау реті + Әдепкі + Эмоджи + Мәтін 12 сағаттық жүйе (0–11) + 12 (0–11) 12 сағаттық жүйе (1–12) + 12 (1–12) 24 сағаттық жүйе (0–23) + 24 (0–23) 24 сағаттық жүйе (1–24) + 24 (1–24) Жолды тасымалдаудың еркін стилі + Еркін Жолды тасымалдаудың қалыпты стилі + Қалыпты Жолды тасымалдаудың қатаң стилі + Қатаң + Бәрін тасымалдау + Бәрін қалдыру + Қалыпты + Фразаларда қалдыру Метрлік жүйе + Метрлік Британиялық өлшемдер жүйесі + Британиялық Америкалық өлшемдер жүйесі + Америкалық Ахом цифрлары Үнді-араб сандары Үнді-араб сандарының кеңейтілген жүйесі @@ -1232,6 +1281,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Вай цифрлары Варанг сити цифрлары Ванчо цифрлары + Өшіру + Қосу Метрлік @@ -1290,36 +1341,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Он екінші ай - - - 1-ай - 2-ай - 3-ай - 4-ай - 5-ай - 6-ай - 7-ай - 8-ай - 9-ай - 10-ай - 11-ай - 12-ай - - - Бірінші ай - Екінші ай - Үшінші ай - Төртінші ай - Бесінші ай - Алтыншы ай - Жетінші ай - Сегізінші ай - Тоғызыншы ай - Оныншы ай - Он бірінші ай - Он екінші ай - - @@ -1414,18 +1435,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h E B h:mm E B h:mm:ss E h:mm a E h:mm:ss a G y 'ж'. + M/y G d/M/y GGGGG + E, d/M/y G G y 'ж'. MMM G y 'ж'. d MMM G y 'ж'. d MMM, E - h a h:mm a h:mm:ss a + h a, v + HH'h', v dd.MM dd.MM, E d MMM @@ -1464,9 +1489,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G y 'ж'. d MMM, E – d MMM, E G y 'ж'. d MMM, E – y 'ж'. d MMM, E - - h–h a - h:mm–h:mm a h:mm–h:mm a @@ -1475,9 +1497,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h–h a v - M–M @@ -1770,20 +1789,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E, B h E, B h:mm E, B h:mm:ss + E, h a E h:mm a E h:mm:ss a G y 'ж'. + MM-GGGGG y dd-MM-GGGGG y + E, MM-dd-G y G y 'ж'. MMM G y 'ж'. d MMM G y 'ж'. d MMM, E - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + h a, v dd.MM dd.MM, E d MMM @@ -1806,11 +1829,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} - {1} - h – h B + B h – B h + B h – h - h:mm – h:mm B - h:mm – h:mm B + B h:mm – B h:mm + B h:mm – h:mm + B h:mm – h:mm G y 'ж'. d–d MMM @@ -1826,7 +1851,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a h:mm a – h:mm a @@ -1840,7 +1864,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M–M @@ -1988,32 +2011,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Зұлқ. Зұлх. - - Мұхаррам - Сафар - Рабиғул әууәл - Рабиғул ахир - Жұмадәл аууәл - Жұмадәл ахир - Ережеп - Шағбан - Рамазан - Шәууал - Зұлқағда - Зұлхижжа - - - ХЖ - ХЖ - - ХЖ - @@ -2877,6 +2880,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пасха аралы + + Койайке + Пунта-Аренас @@ -3142,9 +3148,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пномпень - Эндербери - - Кантон @@ -3814,9 +3817,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Батыс Африка уақыты - Батыс Африка стандартты уақыты - Батыс Африка жазғы уақыты + Батыс Африка уақыты @@ -4171,6 +4172,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Гайана уақыты + + + Гавай және Алеут аралдары стандартты уақыты + + Гавай және Алеут аралдары уақыты @@ -4735,13 +4741,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + #,##0.00 + + + #,##0.00 ¤ + #,##0.00 ¤ - #,##0.00;(#,##0.00) + #,##0.00 ¤ + #,##0.00 @@ -4750,8 +4769,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 0 мың ¤ 00 мың ¤ 00 мың ¤ - 000 мың ¤ - 000 мың ¤ + 000 м'.' ¤ + 000 м'.' ¤ 0 млн ¤ 0 млн ¤ 00 млн ¤ @@ -5265,6 +5284,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Шығыс Кариб доллары + + Кариб гульдені + Кариб гульдені + Кариб гульдені + Батыс Африканың КФА франкі @@ -5285,6 +5309,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Замбия квачасы + + Зимбабве алтыны + Зимбабве алтыны + Зимбабве алтыны + {0}+ @@ -5486,10 +5515,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} миллимоль/литр {0} миллимоль/литр - - миллиондық үлес - {0} миллиондық үлес - {0} миллиондық үлес + + бөлік + {0} бөлік + {0} бөлік + + + миллиондағы бөлік + {0} б/млн + {0} б/млн {0} пайыз @@ -5503,6 +5537,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} промириад {0} промириад + + глюкоза + {0} глюкоза + {0} глюкоза + литр/километр {0} литр/километр @@ -5908,6 +5947,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} миллиметр сынап бағанасы {0} миллиметр сынап бағанасы + + сынап бағанасы + {0} сынап бағанасы + {0} с. б. + фунт-күш/шаршы дюйм {0} фунт-күш/шаршы дюйм @@ -6072,6 +6116,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метрлік кесе {0} метрлік кесе + + метрлік сұйық унция + {0} метрлік сұйық унция + {0} метрлік сұйық унция + {0} бушель {0} бушель @@ -6132,21 +6181,73 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} британдық кварта {0} брит. кварта - - жарық - {0} жарық - {0} жарық + + стерадиан + {0} стерадиан + {0} стерадиан - + + катал + {0} катал + {0} катал + + + кулон + {0} кулон + {0} кулон + + + фарад + {0} фарад + {0} фарад + + + генри + {0} генри + {0} генри + + + сименс + {0} сименс + {0} сименс + + + калория [халықаралық] + {0} калория [халықаралық] + {0} калория [халықаралық] + + + беккерель + {0} беккерель + {0} Бк + + + зиверт + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + + + килограмм-күш + {0} кг-күш + {0} кг-күш + + + тесла + {0} тесла + {0} тесла + + + вебер + {0} вебер + {0} вебер + + миллиардтағы бөлік - {0} б/млрд - {0} б/млрд - - - түн - {0} түн - {0} түн - {0}/түн негізгі бағыт @@ -6361,6 +6462,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} элемент {0} элемент + + бөлік + {0} бөлік + {0} бөлік + + + бөлік/миллион + {0} б/млн + {0} б/млн + пайыз @@ -6375,6 +6486,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} моль {0} моль + + глюкоза + {0} Глк + {0} Глк + литр/км {0} л/км @@ -6880,6 +6996,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мм с.б. {0} мм с.б. + + с. б. + {0} с. б. + {0} с. б. + дюйм сынап бағанасы {0} дюйм с.б. @@ -7038,6 +7159,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мк {0} мк + + метрлік сұйық унция + {0} метрлік сұйық унция + {0} метрлік сұйық унция + акр-фут {0} aкр-фут @@ -7135,12 +7261,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} брит. кварта {0} брит. кварта + + ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + + + Г + {0} Г + {0} Г + + + Си + {0} Си + {0} Си + + + халықаралық калория + {0} халықаралық калория + {0} халықаралық калория + + + Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + + + кг-күш + {0} кг-күш + {0} кг-күш + + + Тл + {0} Т + {0} Т + + + Вб + {0} Вб + {0} Вб + жарық {0} жарық {0} жарық - + бөлік/миллиард {0} б/млрд {0} б/млрд @@ -7187,12 +7378,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ фут² + + бөлік + {0} бөлік + {0} бөлік + + + б/млн + {0} б/млн + {0} б/млн + % + + глюкоза + {0} Глк + {0} Глк + л/км @@ -7264,6 +7470,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} унция {0} унция + + с. б. + {0} с. б. + {0} с. б. + дюйм с.б. @@ -7288,26 +7499,87 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}° {0}° + + метрлік сұйық унция + {0} метрлік сұйық унция + {0} метрлік сұйық унция + имп. сұй. унц. {0} имп. сұй. унц. {0} имп. сұй. унц. - - жарық - {0} жарық - {0} жарық + + ср + {0} ср + {0} ср - + + кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + + + Г + {0} Г + {0} Г + + + Си + {0} Си + {0} Си + + + халықаралық калория + {0} халықаралық калория + {0} халықаралық калория + + + Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + + + кг-күш + {0} кг-күш + {0} кг-күш + + + Тл + {0} Т + {0} Т + + + Вб + {0} Вб + {0} Вб + + б/млрд - {0} б/млрд - {0} б/млрд - түн {0}түн {0}түн - {0}/түн diff --git a/make/data/cldr/common/main/kk_Arab.xml b/make/data/cldr/common/main/kk_Arab.xml index 198e8443f83..c56abe2de99 100644 --- a/make/data/cldr/common/main/kk_Arab.xml +++ b/make/data/cldr/common/main/kk_Arab.xml @@ -13,1134 +13,1187 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {0}، {1} + {0}، {1} - افار ءتىلى - ابحاز ءتىلى - افريكاانس ءتىلى - اگەم ءتىلى - اكان ءتىلى - امحار ءتىلى - اراگون ءتىلى - وبولو ءتىلى - شامي ءتىلى - اراب ءتىلى - قازىرگى ستاندارتتى اراب ءتىلى - ماپۋچە ءتىلى - اسسام ءتىلى - اسۋ ءتىلى - استرۋيا ءتىلى - ءازىربايجان ءتىلى - باشقۇرت ءتىلى - بالۋچي ءتىلى - باسا ءتىلى - بەلارۋس ءتىلى - بەمبا ءتىلى - بەياۋي ءتىلى - بەنا ءتىلى - بولگار ءتىلى - حارياني ءتىلى - باتىس بالۋچي ءتىلى - بحودجپۋري ءتىلى - اني ءتىلى - تاي دام ءتىلى - بامبارا ءتىلى - بەنگال ءتىلى - تيبەت ءتىلى - برەتون ءتىلى - بودو ءتىلى - بوسنيا ءتىلى - اكوسە ءتىلى - بلين ءتىلى - كاتالان ءتىلى - كاددو ءتىلى - اتسام ءتىلى - چاكما ءتىلى - شەشەن ءتىلى - سەبۋانو ءتىلى - كيگا ءتىلى - چوكتو ءتىلى - چەروكي ءتىلى - چيكاساۋ ءتىلى - سوراني ءتىلى - كورسيكا ءتىلى - چەح ءتىلى - باتپاقتى جەردىڭ كري ءتىلى - شىركەۋلىك سلاۆيان ءتىلى - چۋۆاش ءتىلى - ۆاللي ءتىلى - دات ءتىلى - تايتا ءتىلى - نەمىس ءتىلى - نەمىس ءتىلى (اۋستريا) - نەمىس ءتىلى (شۆەيساريا) - زارما ءتىلى - دوگري ءتىلى - تومەنگى سوربيان ءتىلى - دۋالا ءتىلى - ديۆەحي ءتىلى - ديولا ءتىلى - جوڭكا ءتىلى - ەمبۋ ءتىلى - ەۆە ءتىلى - گرەك ءتىلى - اعىلشىن ءتىلى - اعىلشىن ءتىلى (اۋستراليا) - اعىلشىن ءتىلى (كانادا) - اعىلشىن ءتىلى (ۇلىبريتانيا) - اعىلشىن ءتىلى (امەريكا قۇراما شتاتتارى) - اعىلشىن ءتىلى (امەريكا) - ەسپەرانتو ءتىلى - يسپان ءتىلى - يسپان ءتىلى (لاتىن امەريكا) - يسپان ءتىلى (يسپانيا) - يسپان ءتىلى (مەكسيكا) - ەستون ءتىلى - باسك ءتىلى - ەۆوندو ءتىلى - پارسى ءتىلى - داري ءتىلى - فۋلا ءتىلى - فين ءتىلى - فيليپين ءتىلى - فارەر ءتىلى - فرانسۋز ءتىلى - فرانسۋز ءتىلى (كانادا) - فرانسۋز ءتىلى (شۆەيساريا) - كاجۋن ءتىلى - سولتۇستىك-شىعىس كري ءتىلى - فريۋل ءتىلى - باتىس فريز ءتىلى - يرلاند ءتىلى - گا ءتىلى - شوتلانديالىق گەل ءتىلى - گەەز ءتىلى - گاليسيا ءتىلى - گۋاريني ءتىلى - شۆەيساريالىق نەمىس ءتىلى - گۋجاراتي ءتىلى - گۋسي ءتىلى - مەن ءتىلى - حاۋسا ءتىلى - حاۋاي ءتىلى - يۆريت ءتىلى - حيندي ءتىلى - حيندي ءتىلى (لاتىن جازۋى) - حينگليش - حموڭ نيۋا ءتىلى - حورۆات ءتىلى - جوعارعى سوربيان ءتىلى - ماجار ءتىلى - ارميان ءتىلى - ينتەرلينگۆا ءتىلى - يندونەزيا ءتىلى - ينتەرلينگۆە ءتىلى - يگبو ءتىلى - سىچۋان ي ءتىلى - يدو ءتىلى - يسلاند ءتىلى - يتاليان ءتىلى - ينۋكتيتۋت ءتىلى - جاپون ءتىلى - لاجبان ءتىلى - نگومبا ءتىلى - ماچامە ءتىلى - ياۆا ءتىلى - گرۋزين ءتىلى - قاراقالپاق ءتىلى - كابيل ءتىلى - كاجي ءتىلى - كامبا ءتىلى - تياپ ءتىلى - ماكوندە ءتىلى - كابۋۆەرديانۋ ءتىلى - كەنياڭ ءتىلى - كاينگاڭ ءتىلى - كويرا چيني ءتىلى - كيكۋيۋ ءتىلى - قازاق ءتىلى + افار ءتىلى + ابحاز ءتىلى + افريكاانس ءتىلى + اگەم ءتىلى + اكان ءتىلى + امحار ءتىلى + اراگون ءتىلى + وبولو ءتىلى + شامي ءتىلى + اراب ءتىلى + قازىرگى ستاندارتتى اراب ءتىلى + ماپۋچە ءتىلى + اسسام ءتىلى + اسۋ ءتىلى + استرۋيا ءتىلى + ءازىربايجان ءتىلى + باشقۇرت ءتىلى + بالۋچي ءتىلى + باسا ءتىلى + بەلارۋس ءتىلى + بەمبا ءتىلى + بەياۋي ءتىلى + بەنا ءتىلى + بولگار ءتىلى + حارياني ءتىلى + باتىس بالۋچي ءتىلى + بحودجپۋري ءتىلى + اني ءتىلى + تاي دام ءتىلى + بامبارا ءتىلى + بەنگال ءتىلى + تيبەت ءتىلى + باحتيار ءتىلى + برەتون ءتىلى + بودو ءتىلى + بوسنيا ءتىلى + اكوسە ءتىلى + بۋريات ءتىلى + بلين ءتىلى + كاتالان ءتىلى + كاددو ءتىلى + اتسام ءتىلى + چاكما ءتىلى + شەشەن ءتىلى + سەبۋانو ءتىلى + كيگا ءتىلى + چوكتو ءتىلى + چەروكي ءتىلى + چيكاساۋ ءتىلى + سوراني ءتىلى + كورسيكا ءتىلى + كوپىت ءتىلى + چەح ءتىلى + باتپاقتى جەردىڭ كري ءتىلى + شىركەۋلىك سلاۆيان ءتىلى + چۋۆاش ءتىلى + ۆاللي ءتىلى + دات ءتىلى + تايتا ءتىلى + نەمىس ءتىلى + زارما ءتىلى + دوگري ءتىلى + تومەنگى سوربيان ءتىلى + دۋالا ءتىلى + ديۆەحي ءتىلى + ديولا ءتىلى + جوڭكا ءتىلى + ەمبۋ ءتىلى + ەۆە ءتىلى + گرەك ءتىلى + اعىلشىن ءتىلى + اعىلشىن ءتىلى (امەريكا) + ەسپەرانتو ءتىلى + يسپان ءتىلى + ەستون ءتىلى + باسك ءتىلى + ەۆوندو ءتىلى + پارسى ءتىلى + داري ءتىلى + فۋلا ءتىلى + فين ءتىلى + فيليپين ءتىلى + فارەر ءتىلى + فرانسۋز ءتىلى + كاجۋن ءتىلى + سولتۇستىك-شىعىس كري ءتىلى + فريۋل ءتىلى + باتىس فريز ءتىلى + يرلاند ءتىلى + گا ءتىلى + شوتلانديالىق گەل ءتىلى + گەەز ءتىلى + گاليسيا ءتىلى + گۋاريني ءتىلى + شۆەيساريالىق نەمىس ءتىلى + گۋجاراتي ءتىلى + گۋسي ءتىلى + مەن ءتىلى + حاۋسا ءتىلى + حاۋاي ءتىلى + يۆريت ءتىلى + حيندي ءتىلى + حينگليش + حموڭ نيۋا ءتىلى + حورۆات ءتىلى + جوعارعى سوربيان ءتىلى + گايتيان كىرەول ءتىلى + ماجار ءتىلى + ارميان ءتىلى + ينتەرلينگۆا ءتىلى + يندونەزيا ءتىلى + ينتەرلينگۆە ءتىلى + يگبو ءتىلى + سىچۋان ي ءتىلى + يدو ءتىلى + يسلاند ءتىلى + يتاليان ءتىلى + ينۋكتيتۋت ءتىلى + جاپون ءتىلى + لاجبان ءتىلى + نگومبا ءتىلى + ماچامە ءتىلى + ياۆا ءتىلى + گرۋزين ءتىلى + قاراقالپاق ءتىلى + كابيل ءتىلى + كاجي ءتىلى + كامبا ءتىلى + تياپ ءتىلى + ماكوندە ءتىلى + كابۋۆەرديانۋ ءتىلى + كەكچي ءتىلى + كەنياڭ ءتىلى + كاينگاڭ ءتىلى + كويرا چيني ءتىلى + كيكۋيۋ ءتىلى + قازاق ءتىلى قازاق ءتىلى (توتە) - كاكو ءتىلى - كالاليسۋت ءتىلى - كالەنجين ءتىلى - كحمەر ءتىلى - كاننادا ءتىلى - كورەي ءتىلى - كونكاني ءتىلى - كپەلە ءتىلى - كاشمير ءتىلى - شامبالا ءتىلى - بافيا ءتىلى - كولونيان ءتىلى - كۇرد ءتىلى - كورن ءتىلى - كۋۆي ءتىلى - قىرعىز ءتىلى - لاتىن ءتىلى - لانگي ءتىلى - ليۋكسەمبۋرگ ءتىلى - گاندا ءتىلى - ليگۋر ءتىلى - لاكوتا ءتىلى - لادينو ءتىلى - لومبارد ءتىلى - لينگالا ءتىلى - لاوس ءتىلى - كىرەول ءتىلى - سولتۇستىك فريز ءتىلى - ليتۆا ءتىلى - لاتگاليان ءتىلى - لۋبا-كاتاڭا ءتىلى - لۋو ءتىلى - لۋحيا ءتىلى - لاتىش ءتىلى - مايتحيلي ءتىلى - ماساي ءتىلى - موكشا ءتىلى - مەرۋ ءتىلى - موريسيەن ءتىلى - مالاگاسي ءتىلى - ماكۋا-مەتتو ءتىلى - مەتا ءتىلى - موكەنو ءتىلى - ماوري ءتىلى - ميكماۋ ءتىلى - ماكەدون ءتىلى - مالايالام ءتىلى - موڭعول ءتىلى - مانيپۋري ءتىلى - موحاۋك ءتىلى - ماراتحي ءتىلى - مالاي ءتىلى - مالتا ءتىلى - مۋنداڭ ءتىلى - بىرنەشە ءتىلى - كريك ءتىلى - بيرما ءتىلى - ەرزيا ءتىلى - مازاندەران ءتىلى - ناما ءتىلى - نورۆەگيالىق بۋكمول ءتىلى - سولتۇستىك ندەبەلە ءتىلى - تومەنگى نەمىس ءتىلى - تومەنگى ساكسون ءتىلى - نەپال ءتىلى - نيدەرلاند ءتىلى - فلاماند ءتىلى - كۋاسيو ءتىلى - نورۆەگيالىق نيۋنورسك ءتىلى - نگيەمبۋن ءتىلى - نورۆەگ ءتىلى - نكو ءتىلى - وڭتۇستىك ندەبەلە ءتىلى - سولتۇستىك سوتو ءتىلى - نۋەر ءتىلى - ناۆاحو ءتىلى - نيانجا ءتىلى - نيانكولە ءتىلى - وكسيتان ءتىلى - ورومو ءتىلى - وريا ءتىلى - وسەتين ءتىلى - وسەيج ءتىلى - پەنجاب ءتىلى - پاپيامەنتو ءتىلى - نيگەريالىق پيدجين ءتىلى - پيجين ءتىلى - پولياك ءتىلى - پرۋسسيا ءتىلى - پۋشتۋ ءتىلى - پورتۋگال ءتىلى - برازيليالىق پورتۋگال ءتىلى - ەۋروپالىق پورتۋگال ءتىلى - كەچۋا ءتىلى - كيچە ءتىلى - راجاستاني ءتىلى - روحينجا ءتىلى - ريفيان ءتىلى - رومانش ءتىلى - رۋندي ءتىلى - رۋمىن ءتىلى - مولدوۆان ءتىلى - رومبو ءتىلى - ورىس ءتىلى - كينيارۋاندا ءتىلى - رۋا ءتىلى - سانسكريت ءتىلى - ساحا ءتىلى - سامبۋرۋ ءتىلى - سانتالي ءتىلى - ساڭۋ ءتىلى - ساردين ءتىلى - سيسيليا ءتىلى - سيندحي ءتىلى - وڭتۇستىك كۇرد ءتىلى - سولتۇستىك سامي ءتىلى - سەنا ءتىلى - كويرابورو سەنني ءتىلى - ساڭو ءتىلى - تاشەلحيت ءتىلى - شان ءتىلى - سينگال ءتىلى - سيدامو ءتىلى - سلوۆاك ءتىلى - سارايكي ءتىلى - سلوۆەن ءتىلى - وڭتۇستىك سامي ءتىلى - لۋلە-سامي ءتىلى - يناري سامي ءتىلى - كولتا سامي ءتىلى - شونا ءتىلى - سومالي ءتىلى - البان ءتىلى - سەرب ءتىلى - سۋاتي ءتىلى - ساحو ءتىلى - وڭتۇستىك سوتو ءتىلى - سۋدان ءتىلى - شۆەد ءتىلى - سۋاحيلي ءتىلى - كونگو سۋاحيلي ءتىلى - سيريا ءتىلى - سيلەز ءتىلى - تاميل ءتىلى - تەلۋگۋ ءتىلى - تەسو ءتىلى - تاجىك ءتىلى - تاي ءتىلى - تيگرينيا ءتىلى - تيگرە ءتىلى - تۇرىكمەن ءتىلى - سۋانا ءتىلى - تونگان ءتىلى - توكي-پونا ءتىلى - توك-پيسين ءتىلى - تۇرىك ءتىلى - تاروكو ءتىلى - توۋالي ءتىلى - سونگا ءتىلى - تاتار ءتىلى - تاساۋاك ءتىلى - تۋۆين ءتىلى - ورتالىق اتلاس تامازيگحت ءتىلى - ۇيعىر ءتىلى - ۋكراين ءتىلى - بەلگىسىز ءتىل - ۋردۋ ءتىلى - وزبەك ءتىلى - ۆاي ءتىلى - ۆەندا ءتىلى - ۆەنەسيا ءتىلى - ۆيەتنام ءتىلى - ماكۋا ءتىلى - ۆولاپيۋك ءتىلى - ۆۋنجو ءتىلى - ۋالون ءتىلى - ۋالسەر ءتىلى - ۋولايتا ءتىلى - ۋالبيري ءتىلى - ۆولوف ءتىلى - كحوسا ءتىلى - كاڭري ءتىلى - سوگا ءتىلى - ياڭبەن ءتىلى - يديش ءتىلى - يورۋبا ءتىلى - نەنگاتۋ ءتىلى - گۋاڭدۇڭ ءتىلى - قىتاي ءتىلى (گۋاڭدۇڭ) - جۋاڭ ءتىلى - ماروككولىق ستاندارتتى تامازيگحت ءتىلى - قىتاي ءتىلى - قىتاي ءتىلى (پۋتۋڭحۋا) - جەڭىلدەتىلگەن قىتاي ءتىلى - جەڭىلدەتىلگەن قىتاي ءتىلى (پۋتۋڭحۋا) - ءداستۇرلى قىتاي ءتىلى - ءداستۇرلى قىتاي ءتىلى (پۋتۋڭحۋا) - زۋلۋ ءتىلى - تىلدىك مازمۇنى جوق + كاكو ءتىلى + كالاليسۋت ءتىلى + كالەنجين ءتىلى + كحمەر ءتىلى + كاننادا ءتىلى + كورەي ءتىلى + كونكاني ءتىلى + كپەلە ءتىلى + كاشمير ءتىلى + شامبالا ءتىلى + بافيا ءتىلى + كولونيان ءتىلى + كۇرد ءتىلى + كۇرد ءتىلى + كۇرمانجى + كورن ءتىلى + كۋۆي ءتىلى + قىرعىز ءتىلى + لاتىن ءتىلى + لانگي ءتىلى + ليۋكسەمبۋرگ ءتىلى + گاندا ءتىلى + ليگۋر ءتىلى + لاكوتا ءتىلى + لادينو ءتىلى + لومبارد ءتىلى + لينگالا ءتىلى + لاوس ءتىلى + كىرەول ءتىلى + سولتۇستىك فريز ءتىلى + ليتۆا ءتىلى + لاتگاليان ءتىلى + لۋبا-كاتاڭا ءتىلى + لۋو ءتىلى + لۋحيا ءتىلى + لاتىش ءتىلى + لاز ءتىلى + مايتحيلي ءتىلى + ماساي ءتىلى + موكشا ءتىلى + مەرۋ ءتىلى + موريسيەن ءتىلى + مالاگاسي ءتىلى + ماكۋا-مەتتو ءتىلى + مەتا ءتىلى + موكەنو ءتىلى + ماوري ءتىلى + ميكماۋ ءتىلى + ماكەدون ءتىلى + مالايالام ءتىلى + موڭعول ءتىلى + مانيپۋري ءتىلى + موحاۋك ءتىلى + ماراتحي ءتىلى + مالاي ءتىلى + مالتا ءتىلى + مۋنداڭ ءتىلى + بىرنەشە ءتىلى + كريك ءتىلى + بيرما ءتىلى + ەرزيا ءتىلى + مازاندەران ءتىلى + ناما ءتىلى + نورۆەگيالىق بۋكمول ءتىلى + سولتۇستىك ندەبەلە ءتىلى + تومەنگى نەمىس ءتىلى + تومەنگى ساكسون ءتىلى + نەپال ءتىلى + نيدەرلاند ءتىلى + فلاماند ءتىلى + كۋاسيو ءتىلى + نورۆەگيالىق نيۋنورسك ءتىلى + نگيەمبۋن ءتىلى + نورۆەگ ءتىلى + نكو ءتىلى + وڭتۇستىك ندەبەلە ءتىلى + سولتۇستىك سوتو ءتىلى + نۋەر ءتىلى + ناۆاحو ءتىلى + نيانجا ءتىلى + نيانكولە ءتىلى + وكسيتان ءتىلى + ورومو ءتىلى + وريا ءتىلى + وسەتين ءتىلى + وسەيج ءتىلى + پەنجاب ءتىلى + پاپيامەنتو ءتىلى + نيگەريالىق پيدجين ءتىلى + پالي ءتىلى + پيجين ءتىلى + پولياك ءتىلى + پيەمونت ءتىلى + پرۋسسيا ءتىلى + پۋشتۋ ءتىلى + پورتۋگال ءتىلى + برازيليالىق پورتۋگال ءتىلى + ەۋروپالىق پورتۋگال ءتىلى + كەچۋا ءتىلى + كيچە ءتىلى + راجاستاني ءتىلى + روحينجا ءتىلى + ريفيان ءتىلى + رومانش ءتىلى + رۋندي ءتىلى + رۋمىن ءتىلى + مولدوۆان ءتىلى + رومبو ءتىلى + ورىس ءتىلى + كينيارۋاندا ءتىلى + رۋا ءتىلى + سانسكريت ءتىلى + ساحا ءتىلى + سامبۋرۋ ءتىلى + سانتالي ءتىلى + ساڭۋ ءتىلى + ساردين ءتىلى + سيسيليا ءتىلى + سيندحي ءتىلى + وڭتۇستىك كۇرد ءتىلى + سولتۇستىك سامي ءتىلى + سەنا ءتىلى + كويرابورو سەنني ءتىلى + ساڭو ءتىلى + ساموگيتيان ءتىلى + تاشەلحيت ءتىلى + شان ءتىلى + سينگال ءتىلى + سيدامو ءتىلى + سلوۆاك ءتىلى + سارايكي ءتىلى + سلوۆەن ءتىلى + وڭتۇستىك سامي ءتىلى + لۋلە-سامي ءتىلى + يناري سامي ءتىلى + كولتا سامي ءتىلى + شونا ءتىلى + سومالي ءتىلى + البان ءتىلى + سەرب ءتىلى + سۋاتي ءتىلى + ساحو ءتىلى + وڭتۇستىك سوتو ءتىلى + سۋدان ءتىلى + شۆەد ءتىلى + سۋاحيلي ءتىلى + كونگو سۋاحيلي ءتىلى + سيريا ءتىلى + سيلەز ءتىلى + تاميل ءتىلى + تەلۋگۋ ءتىلى + تەسو ءتىلى + تاجىك ءتىلى + تاي ءتىلى + تيگرينيا ءتىلى + تيگرە ءتىلى + تۇرىكمەن ءتىلى + سۋانا ءتىلى + تونگان ءتىلى + توكي-پونا ءتىلى + توك-پيسين ءتىلى + تۇرىك ءتىلى + تاروكو ءتىلى + توۋالي ءتىلى + سونگا ءتىلى + تاتار ءتىلى + تاساۋاك ءتىلى + تۋۆين ءتىلى + ورتالىق اتلاس تامازيگحت ءتىلى + ۇيعىر ءتىلى + ۋكراين ءتىلى + بەلگىسىز ءتىل + ۋردۋ ءتىلى + وزبەك ءتىلى + ۆاي ءتىلى + ۆەندا ءتىلى + ۆەنەسيا ءتىلى + ۆيەتنام ءتىلى + ماكۋا ءتىلى + ۆولاپيۋك ءتىلى + ۆۋنجو ءتىلى + ۋالون ءتىلى + ۋالسەر ءتىلى + ۋولايتا ءتىلى + ۋالبيري ءتىلى + ۆولوف ءتىلى + كحوسا ءتىلى + كاڭري ءتىلى + سوگا ءتىلى + ياڭبەن ءتىلى + يديش ءتىلى + يورۋبا ءتىلى + نەنگاتۋ ءتىلى + گۋاڭدۇڭ ءتىلى + قىتاي ءتىلى (گۋاڭدۇڭ) + جۋاڭ ءتىلى + ماروككولىق ستاندارتتى تامازيگحت ءتىلى + قىتاي ءتىلى + قىتاي ءتىلى (پۋتۋڭحۋا) + جەڭىلدەتىلگەن قىتاي ءتىلى + جەڭىلدەتىلگەن قىتاي ءتىلى (پۋتۋڭحۋا) + ءداستۇرلى قىتاي ءتىلى + ءداستۇرلى قىتاي ءتىلى (پۋتۋڭحۋا) + زۋلۋ ءتىلى + تىلدىك مازمۇنى جوق - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - الەم - افريكا - سولتۇستىك امەريكا - وڭتۇستىك امەريكا - وكەانيا - باتىس افريكا - ورتالىق امەريكا - شىعىس افريكا - سولتۇستىك افريكا - ورتالىق افريكا - وڭتۇستىك افريكا ايماعى - امەريكا - سولتۇستىك امەريكا (ايماق) - كاريب - شىعىس ازيا - وڭتۇستىك ازيا - وڭتۇستىك-شىعىس ازيا - وڭتۇستىك ەۋروپا - اۋسترالازيا - مەلانەزيا - ميكرونەزيا ايماعى - پولينەزىا - ازيا - ورتالىق ازيا - باتىس ازيا - ەۋروپا - شىعىس ەۋروپا - سولتۇستىك ەۋروپا - باتىس ەۋروپا - سۋبساحارالىق افريكا - لاتىن امەريكا - اسكەنجىن ارالى - اندوررا - بىرىككەن اراب امىرلىكتەرى - اۋعانستان - انتيگۋا جانە باربۋدا - انگيليا - البانيا - ارمەنيا - انگولا - انتاركتيدا - ارگەنتينا - امەريكالىق ساموا - اۋستريا - اۋستراليا - ارۋبا - الاند ارالدارى - ءازىربايجان - بوسنيا جانە گەرتسەگوۆينا - باربادوس - بانگلادەش - بەلگيا - بۋركينا-فاسو - بولگاريا - باحرەين - بۋرۋندي - بەنين - سان-بارتەمەلي - بەرمۋد ارالدارى - برۋنەي - بوليۆيا - بونەير، سينت-ەستاتيۋس جانە سابا - برازيليا - باگام ارالدارى - بۋتان - بۋۆە ارالى - بوتسۆانا - بەلارۋس - بەليز - كانادا - كوكوس (كيليڭ) ارالدارى - كونگو - كونگو دەموكراتيالىق رەسپۋبليكاسى - ورتالىق افريكا رەسپۋبليكاسى - كونگو-براززاۆيل رەسپۋبليكاسى - كونگو رەسپۋبليكاسى - شۆەيساريا - كوت-ديۆۋار - كۋك ارالدارى - چيلي - كامەرۋن - قىتاي - كولۋمبيا - كليپپەرتون ارالى - سارك - كوستا-ريكا - كۋبا - كابو-ۆەردە - كيۋراساو - حريستماس ارالى - كيپر - چەحيا - چەح رەسپۋبليكاسى - گەرمانيا - ديەگو-گارسيا - دجيبۋتي - دانيا - دومينيكا - دومينيكان رەسپۋبليكاسى - الجىر - سەۋتا جانە مەليليا - ەكۆادور - ەستونيا - مىسىر - باتىس ساحارا - ەريترەيا - يسپانيا - ەفيوپيا - ەۋروپالىق وداق - ەۋرو ايماق - فينليانديا - فيجي - فولكلەند ارالدارى - فولكلەند ارالدارى (مالۆين ارالدارى) - ميكرونەزيا - فارەر ارالدارى - فرانسيا - گابون - ۇلىبريتانيا - گرەنادا - گرۋزيا - فرانسۋز گۆياناسى - گەرنسي - گانا - گيبرالتار - گرەنلانديا - گامبيا - گۆەنيا - گۆادەلۋپا - ەكۆاتورلىق گۆينەيا - گرەكيا - وڭتۇستىك گەورگيا جانە وڭتۇستىك ساندۆيچ ارالدارى - گۆاتەمالا - گۋان - گۆەنيا-بيساۋ - گايانا - حوڭكوڭ - حەرد ارالى جانە ماكدونالد ارالدارى - گوندۋراس - حورۆاتيا - گايتي - ماجارستان - كانار ارالدارى - يندونەزيا - يرلانديا - يزرايل - مەن ارالى - ءۇندىستان - ءۇندى مۇحيتىنداعى بريتان ايماعى - چاگوس ارحيپەلاگى - يراك - يران - يسلانديا - يتاليا - جەرسي - يامايكا - يوردانيا - جاپونيا - كەنيا - قىرعىزستان - كامباجا - كيريباتي - كومور ارالدارى - سەنت-كيتس جانە نەۆيس - سولتۇستىك كورەيا - وڭتۇستىك كورەيا - كۋۆەيت - كايمان ارالدارى - قازاق ەلى - لاوس - ليۆان - سەنت-ليۋسيا - ليحتەنشتەين - شري-لانكا - ليبەريا - لەسوتو - ليتۆا - ليۋكسەمبۋرگ - لاتۆيا - ليۆيا - ماروككو - موناكو - مولدوۆا - چەرنوگوريا - سەن-مارتەن - ماداگاسكار - مارشال ارالدارى - سولتۇستىك ماكەدونيا - مالي - ميانما (بيرما) - موڭعوليا - ماكاو - سولتۇستىك ماريانا ارالدارى - مارتينيكا - ماۆريتانيا - مونتسەررات - مالتا - ماۆريكي - مالديۆ ارالدارى - مالاۆي - مەكسيكا - مالايزيا - موزامبيك - ناميبيا - جاڭا كالەدونيا - نيگەر - نورفولك ارالى - نيگەريا - نيكاراگۋا - نيدەرلاند - نورۆەگيا - نەپال - ناۋرۋ - نيۋە - جاڭا زەلانديا - اوتەاروا، جاڭا زەلانديا - ومان - پاناما - پەرۋ - فرانتسۋز پولينەزياسى - پاپۋا — جاڭا گۆينەيا - فيليپين ارالدارى - پاكىستان - پولشا - سەن-پەر جانە ميكەلون - پيتكەرن ارالدارى - پۋەرتو-ريكو - پالەستينا ايماقتارى - پالەستينا - پورتۋگاليا - پالاۋ - پاراگۆاي - كاتار - سىرتقى وكەانيا - رەيۋنيون - رۋمىنيا - سەربيا - حەسەي - رۋاندا - ساۋد ارابياسى - سولومون ارالدارى - سەيشەل ارالدارى - سۋدان - شۆەسيا - سينگاپۋر - اۋليە ەلەنا ارالى - سلوۆەنيا - شپيتسبەرگەن جانە يان-مايەن - سلوۆاكيا - سەررا-لەونە - سان-مارينو - سەنەگال - سومالي - سۋرينام - وڭتۇستىك سۋدان - سان-تومە جانە پرينسيپي - سالۆادور - سينت-مارتەن - سيريا - ەسۆاتيني - سۆازيلەند - تريستان-دا-كۋنيا - تەركس جانە كايكوس ارالدارى - چاد - فرانتسيانىڭ وڭتۇستىك ايماقتارى - توگو - تايلاند - تاجىكستان - توكەلاۋ - تيمور-لەستە - شىعىس تيمور - تۇرىكمەنستان - تۋنيس - تونگا - تۇركيا - ترينيداد جانە توباگو - تۋۆالۋ - تايۋان - تانزانيا - ۋكراينا - ۋگاندا - ا ق ش-تىڭ سىرتقى كىشى ارالدارى - بىرىككەن ۇلتتار ۇيىمى - امەريكا قۇراما شتاتتارى - ا ق ش - ۋرۋگۆاي - وزبەكستان - ۆاتيكان - سەنت-ۆينسەنت جانە گرەنادين ارالدارى - ۆەنەسۋەلا - بريتاندىق ۆيرگين ارالدارى - ا ق ش-تىڭ ۆيرگين ارالدارى - ۆيەتنام - ۆانۋاتۋ - ۋولليس جانە فۋتۋنا - ساموا - جالعان اكسەنت - جالعان Bidi - كوسوۆو - يەمەن - مايوتتا - وڭتۇستىك افريكا - زامبيا - زيمبابۆە - بەلگىسىز ايماق + الەم + افريكا + سولتۇستىك امەريكا + وڭتۇستىك امەريكا + وكەانيا + باتىس افريكا + ورتالىق امەريكا + شىعىس افريكا + سولتۇستىك افريكا + ورتالىق افريكا + وڭتۇستىك افريكا ايماعى + امەريكا + سولتۇستىك امەريكا (ايماق) + كاريب + شىعىس ازيا + وڭتۇستىك ازيا + وڭتۇستىك-شىعىس ازيا + وڭتۇستىك ەۋروپا + اۋسترالازيا + مەلانەزيا + ميكرونەزيا ايماعى + پولينەزىا + ازيا + ورتالىق ازيا + باتىس ازيا + ەۋروپا + شىعىس ەۋروپا + سولتۇستىك ەۋروپا + باتىس ەۋروپا + سۋبساحارالىق افريكا + لاتىن امەريكا + اسكەنجىن ارالى + اندوررا + بىرىككەن اراب امىرلىكتەرى + اۋعانستان + انتيگۋا جانە باربۋدا + انگيليا + البانيا + ارمەنيا + انگولا + انتاركتيدا + ارگەنتينا + امەريكالىق ساموا + اۋستريا + اۋستراليا + ارۋبا + الاند ارالدارى + ءازىربايجان + بوسنيا جانە گەرتسەگوۆينا + باربادوس + بانگلادەش + بەلگيا + بۋركينا-فاسو + بولگاريا + باحرەين + بۋرۋندي + بەنين + سان-بارتەمەلي + بەرمۋد ارالدارى + برۋنەي + بوليۆيا + بونەير، سينت-ەستاتيۋس جانە سابا + برازيليا + باگام ارالدارى + بۋتان + بۋۆە ارالى + بوتسۆانا + بەلارۋس + بەليز + كانادا + كوكوس (كيليڭ) ارالدارى + كونگو + كونگو دەموكراتيالىق رەسپۋبليكاسى + ورتالىق افريكا رەسپۋبليكاسى + كونگو-براززاۆيل رەسپۋبليكاسى + كونگو رەسپۋبليكاسى + شۆەيساريا + كوت-ديۆۋار + كۋك ارالدارى + چيلي + كامەرۋن + قىتاي + كولۋمبيا + كليپپەرتون ارالى + سارك + كوستا-ريكا + كۋبا + كابو-ۆەردە + كيۋراساو + حريستماس ارالى + كيپر + چەحيا + چەح رەسپۋبليكاسى + گەرمانيا + ديەگو-گارسيا + دجيبۋتي + دانيا + دومينيكا + دومينيكان رەسپۋبليكاسى + الجىر + سەۋتا جانە مەليليا + ەكۆادور + ەستونيا + مىسىر + باتىس ساحارا + ەريترەيا + يسپانيا + ەفيوپيا + ەۋروپالىق وداق + ەۋرو ايماق + فينليانديا + فيجي + فولكلەند ارالدارى + فولكلەند ارالدارى (مالۆين ارالدارى) + ميكرونەزيا + فارەر ارالدارى + فرانسيا + گابون + ۇلىبريتانيا + گرەنادا + گرۋزيا + فرانسۋز گۆياناسى + گەرنسي + گانا + گيبرالتار + گرەنلانديا + گامبيا + گۆەنيا + گۆادەلۋپا + ەكۆاتورلىق گۆينەيا + گرەكيا + وڭتۇستىك گەورگيا جانە وڭتۇستىك ساندۆيچ ارالدارى + گۆاتەمالا + گۋان + گۆەنيا-بيساۋ + گايانا + حوڭكوڭ + حەرد ارالى جانە ماكدونالد ارالدارى + گوندۋراس + حورۆاتيا + گايتي + ماجارستان + كانار ارالدارى + يندونەزيا + يرلانديا + يزرايل + مەن ارالى + ءۇندىستان + ءۇندى مۇحيتىنداعى بريتان ايماعى + چاگوس ارحيپەلاگى + يراك + يران + يسلانديا + يتاليا + جەرسي + يامايكا + يوردانيا + جاپونيا + كەنيا + قىرعىزستان + كامباجا + كيريباتي + كومور ارالدارى + سەنت-كيتس جانە نەۆيس + سولتۇستىك كورەيا + وڭتۇستىك كورەيا + كۋۆەيت + كايمان ارالدارى + قازاق ەلى + لاوس + ليۆان + سەنت-ليۋسيا + ليحتەنشتەين + شري-لانكا + ليبەريا + لەسوتو + ليتۆا + ليۋكسەمبۋرگ + لاتۆيا + ليۆيا + ماروككو + موناكو + مولدوۆا + چەرنوگوريا + سەن-مارتەن + ماداگاسكار + مارشال ارالدارى + سولتۇستىك ماكەدونيا + مالي + ميانما (بيرما) + موڭعوليا + ماكاو + سولتۇستىك ماريانا ارالدارى + مارتينيكا + ماۆريتانيا + مونتسەررات + مالتا + ماۆريكي + مالديۆ ارالدارى + مالاۆي + مەكسيكا + مالايزيا + موزامبيك + ناميبيا + جاڭا كالەدونيا + نيگەر + نورفولك ارالى + نيگەريا + نيكاراگۋا + نيدەرلاند + نورۆەگيا + نەپال + ناۋرۋ + نيۋە + جاڭا زەلانديا + اوتەاروا، جاڭا زەلانديا + ومان + پاناما + پەرۋ + فرانتسۋز پولينەزياسى + پاپۋا — جاڭا گۆينەيا + فيليپين ارالدارى + پاكىستان + پولشا + سەن-پەر جانە ميكەلون + پيتكەرن ارالدارى + پۋەرتو-ريكو + پالەستينا ايماقتارى + پالەستينا + پورتۋگاليا + پالاۋ + پاراگۆاي + كاتار + سىرتقى وكەانيا + رەيۋنيون + رۋمىنيا + سەربيا + حەسەي + رۋاندا + ساۋد ارابياسى + سولومون ارالدارى + سەيشەل ارالدارى + سۋدان + شۆەسيا + سينگاپۋر + اۋليە ەلەنا ارالى + سلوۆەنيا + شپيتسبەرگەن جانە يان-مايەن + سلوۆاكيا + سەررا-لەونە + سان-مارينو + سەنەگال + سومالي + سۋرينام + وڭتۇستىك سۋدان + سان-تومە جانە پرينسيپي + سالۆادور + سينت-مارتەن + سيريا + ەسۆاتيني + سۆازيلەند + تريستان-دا-كۋنيا + تەركس جانە كايكوس ارالدارى + چاد + فرانتسيانىڭ وڭتۇستىك ايماقتارى + توگو + تايلاند + تاجىكستان + توكەلاۋ + تيمور-لەستە + شىعىس تيمور + تۇرىكمەنستان + تۋنيس + تونگا + تۇركيا + ترينيداد جانە توباگو + تۋۆالۋ + تايۋان + تانزانيا + ۋكراينا + ۋگاندا + ا ق ش-تىڭ سىرتقى كىشى ارالدارى + بىرىككەن ۇلتتار ۇيىمى + امەريكا قۇراما شتاتتارى + ا ق ش + ۋرۋگۆاي + وزبەكستان + ۆاتيكان + سەنت-ۆينسەنت جانە گرەنادين ارالدارى + ۆەنەسۋەلا + بريتاندىق ۆيرگين ارالدارى + ا ق ش-تىڭ ۆيرگين ارالدارى + ۆيەتنام + ۆانۋاتۋ + ۋولليس جانە فۋتۋنا + ساموا + جالعان اكسەنت + بالعان بيدي + كوسوۆو + يەمەن + مايوتتا + وڭتۇستىك افريكا + زامبيا + زيمبابۆە + بەلگىسىز ايماق - ءداستۇرلى نەمىس جازۋى - ستاندارتتى رەزيا جازۋى - 1996 جىلعا دەيىنگى نەمىس جازۋى - 1606 جىلعا دەيىنگى بەرگى ورتا فرانتسۋز ءتىلى - ەرتە ورتا فرانتسۋز ءتىلى - اكادەميالىق - 1943 جىلعى جازۋدىڭ قالىپتاسۋى - اكۋاپەم - ALA-LC رومانيزاتسياسى، 1997 جىلعى نۇسقا - الۋكۋ ديالەكتىسى - انپەزو - پورتۋگال ءتىلىنىڭ 1990 جىلعى جازۋ كەلىسىمى - اران - شىعىس ارميان - باتىس ارميان - وۆەرن - جالپى تۇركى ءالىپبيى - انيي بالانكا ديالەكتىسى - كابۋۆەرديانۋ بارلاۆەنتو ديالەكت توبى - بەيسيك-ەنگليش - باددا - بسياۆ - بسيزبل - بيسكاي - سان-جورجو/ديلا ديالەكتىسى - بلاسل - بوحوريچا ءالىپبيى - بۋنتلينگ - بورنحولم - سيزاۋپ - 1945 جىلعى برازيليالىق پورتۋگال ءتىلى كونۆەنتسياسى - كورنۋ - كرەيس - داينكو ءالىپبيى - سەرب ءتىلىنىڭ ەكاۆ ايتىلىمى - ەرتە ورتا اعىلشىن ءتىلى - فاسكيا - فودوم - حالىقارالىق فونەتيكالىق ءالىپبي - فونكيرش - فونناپا - ورال فونەتيكالىق ءالىپبي - فونكسامپ - گاللو - گاسكون - گحەرد - گ ر ك ل ا س س - گريتال - گ ر م ي س ت ر - حەپبيورن جۇيەسى - حەگنورسك - ح جۇيەسى - سەرب ءتىلىنىڭ يەكاۆ ايتىلىمى - يتيحاسا - يۆانچوۆ - ياۋەر - يۋتپيڭ - جالپى جازۋ - كوچەۋە - ستاندارتتى جازۋ - لاۋكيكا - ليمۋزەن - لانگەدوك - رەزيا ءتىلىنىڭ ليپوۆاز ديالەكتىسى - لتگ1929 - لتگ2007 - لۋنا1998 - مەتەلكو - مونوتوندى - نديۋكا - ناتيسون ديالەكتىسى - نيۋفاۋند - نيكارد - گنيۆا/نجيۆا ديالەكتىسى - زاماناۋي ۆولاپيۋك - وسەاككو/وسوجانە ديالەكتىسى - اعىلشىن ءتىلىنىڭ وكسفورد سوزدىگىندەگى ەملەسى - پاحاۋح2 - پاحاۋح3 - پاحاۋح4 - پاماكا ديالەكتىسى - پەانو - پەحوەيي - پەتر1708 - پينين رومانيزاسياسى - پوليتوندى - كومپيۋتەر - پروۆانس - پۋتەر - قايتا قارالعان جازۋ - كلاسسيكالىق ۆولاپيۋك - رەزيا - رۋمگر - ساحو - شوتلانديانىڭ ستاندارتتى اعىلشىن ءتىلى - سكاۋس - قاراپايىم - ستولۆيتسا/سولبيكا ديالەكتىسى - كابۋۆەرديانۋدىڭ سوتاۆەنتو ديالەكت توبى - سپانگليش - سۋرميران - سۋرسيلۆ - سۋتسيلۆ - سيننەجيل - تايلو - تاراشكەۆيتسا - توڭيوڭ - تۋنۋمييت - بىرىڭعاي جازۋ - بىرىڭعاي قايتا قارالعان جازۋ - ولستەر - يۋنيفون فونەتيكالىق ءالىپبيى - ۆايديكا - ۆالباديا - ۆالەنسيا - ۆاللادەر - ۆەچدرۋكا - ۆيۆارو-ءالپى - ۋەيد-جايىلس جۇيەسى - X جۇيەسى + ءداستۇرلى نەمىس جازۋى + ستاندارتتى رەزيا جازۋى + 1996 جىلعا دەيىنگى نەمىس جازۋى + 1606 جىلعا دەيىنگى بەرگى ورتا فرانتسۋز ءتىلى + ەرتە ورتا فرانتسۋز ءتىلى + اكادەميالىق + 1943 جىلعى جازۋدىڭ قالىپتاسۋى + اكۋاپەم + ALA-LC رومانيزاتسياسى، 1997 جىلعى نۇسقا + الۋكۋ ديالەكتىسى + انپەزو + پورتۋگال ءتىلىنىڭ 1990 جىلعى جازۋ كەلىسىمى + اران + شىعىس ارميان + باتىس ارميان + وۆەرن + جالپى تۇركى ءالىپبيى + انيي بالانكا ديالەكتىسى + كابۋۆەرديانۋ بارلاۆەنتو ديالەكت توبى + بەيسيك-ەنگليش + باددا + بسياۆ + بسيزبل + بيسكاي + سان-جورجو/ديلا ديالەكتىسى + بلاسل + بوحوريچا ءالىپبيى + بۋنتلينگ + بورنحولم + سيزاۋپ + 1945 جىلعى برازيليالىق پورتۋگال ءتىلى كونۆەنتسياسى + كورنۋ + كرەيس + داينكو ءالىپبيى + سەرب ءتىلىنىڭ ەكاۆ ايتىلىمى + ەرتە ورتا اعىلشىن ءتىلى + فاسكيا + فودوم + حالىقارالىق فونەتيكالىق ءالىپبي + فونكيرش + فونناپا + ورال فونەتيكالىق ءالىپبي + فونكسامپ + گاللو + گاسكون + گحەرد + گ ر ك ل ا س س + گريتال + گ ر م ي س ت ر + حەپبيورن جۇيەسى + حەگنورسك + ح جۇيەسى + سەرب ءتىلىنىڭ يەكاۆ ايتىلىمى + يتيحاسا + يۆانچوۆ + ياۋەر + يۋتپيڭ + جالپى جازۋ + كوچەۋە + ستاندارتتى جازۋ + لاۋكيكا + ليمۋزەن + لانگەدوك + رەزيا ءتىلىنىڭ ليپوۆاز ديالەكتىسى + لتگ1929 + لتگ2007 + لۋنا1998 + مەتەلكو + مونوتوندى + نديۋكا + ناتيسون ديالەكتىسى + نيۋفاۋند + نيكارد + گنيۆا/نجيۆا ديالەكتىسى + زاماناۋي ۆولاپيۋك + وسەاككو/وسوجانە ديالەكتىسى + اعىلشىن ءتىلىنىڭ وكسفورد سوزدىگىندەگى ەملەسى + پاحاۋح2 + پاحاۋح3 + پاحاۋح4 + پاماكا ديالەكتىسى + پەانو + پەحوەيي + پەتر1708 + پينين رومانيزاسياسى + پوليتوندى + كومپيۋتەر + پروۆانس + پۋتەر + قايتا قارالعان جازۋ + كلاسسيكالىق ۆولاپيۋك + رەزيا + رۋمگر + ساحو + شوتلانديانىڭ ستاندارتتى اعىلشىن ءتىلى + سكاۋس + قاراپايىم + ستولۆيتسا/سولبيكا ديالەكتىسى + كابۋۆەرديانۋدىڭ سوتاۆەنتو ديالەكت توبى + سپانگليش + سۋرميران + سۋرسيلۆ + سۋتسيلۆ + سيننەجيل + تايلو + تاراشكەۆيتسا + توڭيوڭ + تۋنۋمييت + بىرىڭعاي جازۋ + بىرىڭعاي قايتا قارالعان جازۋ + ولستەر + يۋنيفون فونەتيكالىق ءالىپبيى + ۆايديكا + ۆالباديا + ۆالەنسيا + ۆاللادەر + ۆەچدرۋكا + ۆيۆارو-ءالپى + ۋەيد-جايىلس جۇيەسى + X جۇيەسى - كۇنتىزبە - اقشا ءپىشىمى - سۇرىپتاۋ رەتى - اقشا - ۋاقىت فورماتى (12 نە 24) - جولدى تاسىمالداۋ ءستيلى - ولشەمدەر جۇيەسى - ساندار + كۇنتىزبە + اقشا ءپىشىمى + سۇرىپتاۋ رەتى + اقشا + ەمودجي كورسەتىلىمى + ۋاقىت فورماتى (12 نە 24) + جولدى تاسىمالداۋ ءستيلى + سوزدەردەگى جول بولىنىستەرى + ولشەمدەر جۇيەسى + ساندار + قىسقارعان سوزدەن كەيىنگى سويلەم ءبولىنىسى - بۋددا كۇنتىزبەسى - قىتاي كۇنتىزبەسى - كوپت كۇنتىزبەسى - دانگي كۇنتىزبەسى - ەفيوپيا كۇنتىزبەسى - ەفيوپيانىڭ امەتە-الەم كۇنتىزبەسى - گرەگورياندىق كۇنتىزبە - كونە ەۆرەي كۇنتىزبەسى - ءۇندىستاننىڭ ۇلتتىق كۇنتىزبەسى - يسلام كۇنتىزبەسى - يسلام كۇنتىزبەسى (كەستەلىك، ازاماتتىق ءداۋىر) - يسلام كۇنتىزبەسى (ساۋد ارابياسى، جاڭا اي) - يسلام كۇنتىزبەسى (كەستەلىك، استرونوميالىق ءداۋىر) - يسلام كۇنتىزبەسى (ۋمم ءال-قۇرا) - ISO-8601 كۇنتىزبەسى - جاپون كۇنتىزبەسى - پارسى كۇنتىزبەسى - مينگۋو كۇنتىزبەسى - ەسەپتىك اقشا ءپىشىمى - ستاندارتتى اقشا ءپىشىمى - ءداستۇرلى قىتاي ءتىلىنىڭ سۇرىپتاۋ رەتى - Big5 - سايكەستىككە ارنالعان الدىڭعى سۇرىپتاۋ رەتى - سوزدىك بويىنشا سۇرىپتاۋ رەتى - ادەپكى ۋنيكود سۇرىپتاۋ رەتى - ەموجي سۇرىپتاۋ رەتى - ەۋروپالىق رەتتەۋ ەرەجەلەرى - جەڭىلدەتىلگەن قىتاي ءتىلىنىڭ سۇرىپتاۋ رەتى - GB2312 - تەلەفون كىتاپشاسىنىڭ سۇرىپتاۋ رەتى - پينين سۇرىپتاۋ رەتى - جالپى ماقساتتاعى ىزدەۋ - كورەي ءتىلىنىڭ باستاپقى داۋىسسىزى بويىنشا ىزدەۋ - ستاندارتتى سۇرىپتاۋ رەتى - يەروگليفتەر سىزىقتارىن سۇرىپتاۋ رەتى - ءداستۇرلى سۇرىپتاۋ رەتى - يەروگليفتەر سىزىقتارىن تۇبەگەيلى سۇرىپتاۋ رەتى - جۋين سۇرىپتاۋ رەتى - 12 ساعاتتىق جۇيە (0–11) - 12 ساعاتتىق جۇيە (0–12) - 24 ساعاتتىق جۇيە (0–23) - 24 ساعاتتىق جۇيە (0–24) - جولدى تاسىمالداۋدىڭ ەركىن ءستيلى - جولدى تاسىمالداۋدىڭ قالىپتى ءستيلى - جولدى تاسىمالداۋدىڭ قاتاڭ ءستيلى - مەترلىك جۇيە - بريتانيالىق ولشەمدەر جۇيەسى - امەريكالىق ولشەمدەر جۇيەسى - احوم تسيفرلارى - ءۇندى-اراب ساندارى - ءۇندى-اراب ساندارىنىڭ كەڭەيتىلگەن جۇيەسى - ارميان ساندارى - كىشى ارىپپەن بەرىلگەن ارميان ساندارى - بالي ساندارى - بەنگال ساندارى - براحمي ساندارى - چاكما ساندارى - چام ساندارى - كيريل ساندارى - دەۆاناگاري ساندارى - دەۆيس اكۋرۋ ساندارى - ەفيوپيا ساندارى - تولىق ەندى ساندار - گاراي ساندارى - گرۋزين ساندارى - گۋنجالا گوندي ساندارى - ماساراما گوندي ساندارى - گرەك ساندارى - كىشى ارىپپەن بەرىلگەن گرەك ساندارى - گۋجاراتي ساندارى - گۋرۋڭ حەما ساندارى - گۋرمۋكحي ساندارى - قىتاي وندىق ساندارى - جەڭىلدەتىلگەن قىتاي ساندارى - قارجى سالاسىنداعى جەڭىلدەتىلگەن قىتاي ساندارى - ءداستۇرلى قىتاي ساندارى - قارجى سالاسىنداعى ءداستۇرلى قىتاي ساندارى - يۆريت ساندارى - پاحاۋ ساندارى - نياكەڭ پۋاچۋە حموڭ ساندارى - ياۆا ساندارى - جاپون ساندارى - قارجى سالاسىنداعى جاپون ساندارى - كاياح لي ساندارى - كاۋي ساندارى - كحمەر ساندارى - كاننادا ساندارى - كيرات راي ساندارى - تاي تحام حورا ساندارى - تاي تحام تحام ساندارى - لاوس ساندارى - باتىس ساندارى - لەپچا ساندارى - ليمبۋ ساندارى - ماتەماتيكالىق قالىڭ قارىپتى ساندار - ماتەماتيكالىق قوس سىزىقتى ساندار - ەنى بەكىتىلگەن ماتەماتيكالىق ساندار - ماتەماتيكالىق قالىڭ قارىپتى سانسەريف ساندار - ماتەماتيكالىق سانسەريف ساندار - مالايالام ساندارى - مودي ساندارى - موڭعول ساندارى - مرو ساندارى - مەيتەي-مايەك ساندارى - ميانمار ساندارى - ميانمار شىعىس پحو كارەن ساندارى - ميانمار پاو ساندارى - ميانمار شان ساندارى - ميانمار تاي لايڭ ساندارى - ناگ مۋنداري ساندارى - نكو ساندارى - ول-چيكي ساندارى - ول-ونال ساندارى - وريا ساندارى - يسمانيا ساندارى - سىزىلعان ساندار - حانيفي ساندارى - ريم ساندارى - كىشى ارىپپەن بەرىلگەن ريم ساندارى - ساۋراشترا ساندارى - شارادا ساندارى - كحۋدابادي ساندارى - سينگالا ليت ساندارى - سورا سومپەڭ ساندارى - سۋندا ساندارى - سۋنۋار ساندارى - تاكري ساندارى - جاڭا لۋ جازۋىنىڭ ساندارى - ءداستۇرلى تاميل ساندارى - تاميل ساندارى - تەلۋگۋ ساندارى - تاي ساندارى - تيبەر ساندارى - تيرحۋتا ساندارى - تاڭسا ساندارى - ۆاي ساندارى - ۋاراڭ سيتي ساندارى - ۋانچو ساندارى + بۋددا كۇنتىزبەسى + بۋددا + قىتاي كۇنتىزبەسى + قىتاي + كوپت كۇنتىزبەسى + كوپت + دانگي كۇنتىزبەسى + دانگي + ەفيوپيا كۇنتىزبەسى + ەفيوپيانىڭ + ەفيوپيانىڭ امەتە-الەم كۇنتىزبەسى + ەفيوپيانىڭ امەتە-الەم + گرەگورياندىق كۇنتىزبە + گرەگوريان + كونە ەۆرەي كۇنتىزبەسى + ەۆرەي + ءۇندىستاننىڭ ۇلتتىق كۇنتىزبەسى + ءۇندىستاننىڭ ۇلتتىق + يسلام كۇنتىزبەسى + يسلام + يسلام كۇنتىزبەسى (كەستەلىك، ازاماتتىق ءداۋىر) + يسلام (كەستەلىك، ازاماتتىق ءداۋىر) + يسلام كۇنتىزبەسى (ساۋد ارابياسى، جاڭا اي) + يسلام كۇنتىزبەسى (كەستەلىك، استرونوميالىق ءداۋىر) + يسلام (كەستەلىك، استرونوميالىق ءداۋىر) + يسلام كۇنتىزبەسى (ۋمم ءال-قۇرا) + يسلام (ۋمم ءال-قۇرا) + ISO-8601 كۇنتىزبەسى + جاپون كۇنتىزبەسى + جاپون + پارسى كۇنتىزبەسى + پارسى + مينگۋو كۇنتىزبەسى + مينگۋو + ەسەپتىك اقشا ءپىشىمى + ەسەپتىك + ستاندارتتى اقشا ءپىشىمى + ستاندارت + سايكەستىككە ارنالعان الدىڭعى سۇرىپتاۋ رەتى + سايكەستىك + سوزدىك بويىنشا سۇرىپتاۋ رەتى + سوزدىك + ادەپكى ۋنيكود سۇرىپتاۋ رەتى + ادەپكى ۋنيكود + ەموجي سۇرىپتاۋ رەتى + ەۋروپالىق رەتتەۋ ەرەجەلەرى + تەلەفون كىتاپشاسىنىڭ سۇرىپتاۋ رەتى + تەلەفون كىتاپشاسى + فونەتيكالىق + پينين سۇرىپتاۋ رەتى + پينين + جالپى ماقساتتاعى ىزدەۋ + ىزدەۋ + كورەي ءتىلىنىڭ باستاپقى داۋىسسىزى بويىنشا ىزدەۋ + ستاندارتتى سۇرىپتاۋ رەتى + ستاندارت + يەروگليفتەر سىزىقتارىن سۇرىپتاۋ رەتى + يەروگليفتەر سىزىقتارى + ءداستۇرلى سۇرىپتاۋ رەتى + ءداستۇرلى + يەروگليفتەر سىزىقتارىن تۇبەگەيلى سۇرىپتاۋ رەتى + يەروگليفتەر سىزىقتارى + جۋين سۇرىپتاۋ رەتى + جۋين + ادەپكى + ەمودجي + ءماتىن + 12 ساعاتتىق جۇيە (0–11) + 12 (0–11) + 12 ساعاتتىق جۇيە (0–12) + 12 (1–12) + 24 ساعاتتىق جۇيە (0–23) + 24 (0–23) + 24 ساعاتتىق جۇيە (0–24) + 24 (1–24) + جولدى تاسىمالداۋدىڭ ەركىن ءستيلى + ەركىن + جولدى تاسىمالداۋدىڭ قالىپتى ءستيلى + قالىپتى + جولدى تاسىمالداۋدىڭ قاتاڭ ءستيلى + قاتاڭ + ءبارىن تاسىمالداۋ + ءبارىن ساقتاۋ + قالىپتى + فرازالاردا ساقتاۋ + مەترلىك جۇيە + مەترلىك + بريتانيالىق ولشەمدەر جۇيەسى + بريتانيالىق + امەريكالىق ولشەمدەر جۇيەسى + امەريكالىق + احوم تسيفرلارى + ءۇندى-اراب ساندارى + ءۇندى-اراب ساندارىنىڭ كەڭەيتىلگەن جۇيەسى + ارميان ساندارى + كىشى ارىپپەن بەرىلگەن ارميان ساندارى + بالي ساندارى + بەنگال ساندارى + براحمي ساندارى + چاكما ساندارى + چام ساندارى + كيريل ساندارى + دەۆاناگاري ساندارى + دەۆيس اكۋرۋ ساندارى + ەفيوپيا ساندارى + تولىق ەندى ساندار + گاراي ساندارى + گرۋزين ساندارى + گۋنجالا گوندي ساندارى + ماساراما گوندي ساندارى + گرەك ساندارى + كىشى ارىپپەن بەرىلگەن گرەك ساندارى + گۋجاراتي ساندارى + گۋرۋڭ حەما ساندارى + گۋرمۋكحي ساندارى + قىتاي وندىق ساندارى + جەڭىلدەتىلگەن قىتاي ساندارى + قارجى سالاسىنداعى جەڭىلدەتىلگەن قىتاي ساندارى + ءداستۇرلى قىتاي ساندارى + قارجى سالاسىنداعى ءداستۇرلى قىتاي ساندارى + يۆريت ساندارى + پاحاۋ ساندارى + نياكەڭ پۋاچۋە حموڭ ساندارى + ياۆا ساندارى + جاپون ساندارى + قارجى سالاسىنداعى جاپون ساندارى + كاياح لي ساندارى + كاۋي ساندارى + كحمەر ساندارى + كاننادا ساندارى + كيرات راي ساندارى + تاي تحام حورا ساندارى + تاي تحام تحام ساندارى + لاوس ساندارى + باتىس ساندارى + لەپچا ساندارى + ليمبۋ ساندارى + ماتەماتيكالىق قالىڭ قارىپتى ساندار + ماتەماتيكالىق قوس سىزىقتى ساندار + ەنى بەكىتىلگەن ماتەماتيكالىق ساندار + ماتەماتيكالىق قالىڭ قارىپتى سانسەريف ساندار + ماتەماتيكالىق سانسەريف ساندار + مالايالام ساندارى + مودي ساندارى + موڭعول ساندارى + مرو ساندارى + مەيتەي-مايەك ساندارى + ميانمار ساندارى + ميانمار شىعىس پحو كارەن ساندارى + ميانمار پاو ساندارى + ميانمار شان ساندارى + ميانمار تاي لايڭ ساندارى + ناگ مۋنداري ساندارى + نكو ساندارى + ول-چيكي ساندارى + ول-ونال ساندارى + وريا ساندارى + يسمانيا ساندارى + سىزىلعان ساندار + حانيفي ساندارى + ريم ساندارى + كىشى ارىپپەن بەرىلگەن ريم ساندارى + ساۋراشترا ساندارى + شارادا ساندارى + كحۋدابادي ساندارى + سينگالا ليت ساندارى + سورا سومپەڭ ساندارى + سۋندا ساندارى + سۋنۋار ساندارى + تاكري ساندارى + جاڭا لۋ جازۋىنىڭ ساندارى + ءداستۇرلى تاميل ساندارى + تاميل ساندارى + تەلۋگۋ ساندارى + تاي ساندارى + تيبەر ساندارى + تيرحۋتا ساندارى + تاڭسا ساندارى + ۆاي ساندارى + ۋاراڭ سيتي ساندارى + ۋانچو ساندارى + ءوشىرۋ + قوسۋ - مەترلىك - اعىلشىن - امەريكالىق + مەترلىك + اعىلشىن + امەريكالىق - ءتىل: {0} - جازۋ: {0} - ايماق: {0} + ءتىل: {0} + جازۋ: {0} + ايماق: {0} @@ -1152,14 +1205,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic [ء ا ە ب پ ت ج چ ح د ر ز س ش ع ف ق ك گ ڭ ل م ن ھ و ۇ ۆ ۋ ى ي] [ء ا ە ب پ ت ج چ ح د ر ز س ش ع ف ق ك گ ڭ ل م ن ھ و ۇ ۆ ۋ ى ي] + [\u200E ٫ ٬ ٪ ؉ ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹] [\- ‐‑ – — ، ؛ \: ! ؟ . … '‘’ "“” « » ( ) \[ \] \{ \} § @ * / \& #] ؟ - » - « - - + » + « + + @@ -1167,254 +1221,371 @@ CLDR data files are interpreted according to the LDML specification (http://unic - قاڭ - اقپ - ناۋ - ساۋ - مام - ماۋ - شىل - تام - قىر - قاز - قار - جەل + قاڭ + اقپ + ناۋ + ساۋ + مام + ماۋ + شىل + تام + قىر + قاز + قار + جەل - قاڭتار - اقپان - ناۋرىز - ءساۋىر - مامىر - ماۋسىم - شىلدە - تامىز - قىركۇيەك - قازان - قاراشا - جەلتوقسان - - - - - قاڭ - اقپ - ناۋ - ساۋ - مام - ماۋ - شىل - تام - قىر - قاز - قار - جەل - - - قاڭتار - اقپان - ناۋرىز - ءساۋىر - مامىر - ماۋسىم - شىلدە - تامىز - قىركۇيەك - قازان - قاراشا - جەلتوقسان + قاڭتار + اقپان + ناۋرىز + ءساۋىر + مامىر + ماۋسىم + شىلدە + تامىز + قىركۇيەك + قازان + قاراشا + جەلتوقسان + + + + + كوكتەم باسى + جاڭبىر سۋى + جاندىكتەر ويانۋى + كوكتەمگى توقىراۋ + اشىق اسپان + استىق جاڭبىر + جاز باسى + از تولۋ + استىق ەگۋ + جازعى توقىراۋ + وتكىر ىستىق + شىلىڭگىر ىستىق + كۇزدىڭ باسى + قوڭىر سالقىن + اق شىق + كۇزگى توقىراۋ + سۋىق شىق + قىراۋ ءتۇسۋ + قىس باسى + از قار + قالىڭ قار + قىسقى توقىراۋ + از سۋىق + قاتتى سۋىق + + + كوكتەم باسى + جاڭبىر سۋى + جاندىكتەر ويانۋى + كوكتەمگى توقىراۋ + اشىق اسپان + استىق جاڭبىر + جاز باسى + از تولۋ + استىق ەگۋ + جازعى توقىراۋ + وتكىر ىستىق + شىلىڭگىر ىستىق + كۇزدىڭ باسى + قوڭىر سالقىن + اق شىق + كۇزگى توقىراۋ + سۋىق شىق + قىراۋ ءتۇسۋ + قىس باسى + از قار + قالىڭ قار + قىسقى توقىراۋ + از سۋىق + قاتتى سۋىق + + + كوكتەم باسى + جاڭبىر سۋى + جاندىكتەر ويانۋى + كوكتەمگى توقىراۋ + اشىق اسپان + استىق جاڭبىر + جاز باسى + از تولۋ + استىق ەگۋ + جازعى توقىراۋ + وتكىر ىستىق + شىلىڭگىر ىستىق + كۇزدىڭ باسى + قوڭىر سالقىن + اق شىق + كۇزگى توقىراۋ + سۋىق شىق + قىراۋ ءتۇسۋ + قىس باسى + از قار + قالىڭ قار + قىسقى توقىراۋ + از سۋىق + قاتتى سۋىق + + + + + + + تىشقان + سيىر + بارىس + قويان + ۇلۋ + جىلان + جىلقى + قوي + مەشىن + تاۋىق + يت + دوڭىز + + + تىشقان + سيىر + بارىس + قويان + ۇلۋ + جىلان + جىلقى + قوي + مەشىن + تاۋىق + يت + دوڭىز + + + تىشقان + سيىر + بارىس + قويان + ۇلۋ + جىلان + جىلقى + قوي + مەشىن + تاۋىق + يت + دوڭىز + + + + - EEEE، MMMM d، r(U) + EEEE، MMMM d، r(U) - MMMM d، r(U) + MMMM d، r(U) - MMM d، r + MMM d، r - M/d/yy - - - - - - - - - EEEE، MMMM d، y G - - - - - MMMM d، y G - - - - - MMM d، y G - - - - - M/d/y GGGGG + M/d/yy - {1} {0} + {1}، {0} - {1} {0} + {1}، {0} - {1}، {0} - - - {1}، {0} + {1}، {0} - {1}، {0} + {1}، {0} - - {1}، {0} + + + + + + + + EEEE، MMMM d، y G + + + + + MMMM d، y G + + + + + MMM d، y G + + + + + M/d/y GGGGG + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1}، {0} + + + + + {1}، {0} - d E - y G - M/d/y GGGGG - MMM y G - MMM d، y G - E، MMM d، y G - M/d - E، M/d - E، MMM d - y G - y G - M/y GGGGG - M/d/y GGGGG - E، M/d/y GGGGG - MMM y G - MMM d، y G - E، MMM d، y G - MMMM y G - QQQ y G - QQQQ y G + d E + y G + M/d/y GGGGG + G y-MM-dd، E + MMM y G + MMM d، y G + E، MMM d، y G + M/d + E، M/d + E، MMM d + y G + y G + M/y GGGGG + M/d/y GGGGG + E، M/d/y GGGGG + MMM y G + MMM d، y G + E، MMM d، y G + MMMM y G + QQQ y G + QQQQ y G - y G – y G - y – y G + y G – y G + y – y G - M/y GGGGG – M/y GGGGG - M/y – M/y GGGGG - M/y – M/y GGGGG + M/y GGGGG – M/y GGGGG + M/y – M/y GGGGG + M/y – M/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y GGGGG – M/d/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG + M/d/y – M/d/y GGGGG + M/d/y GGGGG – M/d/y GGGGG + M/d/y – M/d/y GGGGG + M/d/y – M/d/y GGGGG - E، M/d/y – E، M/d/y GGGGG - E، M/d/y GGGGG – E، M/d/y GGGGG - E، M/d/y – E، M/d/y GGGGG - E، M/d/y – E، M/d/y GGGGG + E، M/d/y – E، M/d/y GGGGG + E، M/d/y GGGGG – E، M/d/y GGGGG + E، M/d/y – E، M/d/y GGGGG + E، M/d/y – E، M/d/y GGGGG - MMM y G – MMM y G - MMM – MMM y G - MMM y – MMM y G + MMM y G – MMM y G + MMM – MMM y G + MMM y – MMM y G - MMM d – d، y G - MMM d، y G – MMM d، y G - MMM d – MMM d، y G - MMM d، y – MMM d، y G + MMM d – d، y G + MMM d، y G – MMM d، y G + MMM d – MMM d، y G + MMM d، y – MMM d، y G - E، MMM d – E، MMM d، y G - E، MMM d، y G – E، MMM d، y G - E، MMM d – E، MMM d، y G - E، MMM d، y – E، MMM d، y G + E، MMM d – E، MMM d، y G + E، MMM d، y G – E، MMM d، y G + E، MMM d – E، MMM d، y G + E، MMM d، y – E، MMM d، y G - M – M + M – M - M/d – M/d - M/d – M/d + M/d – M/d + M/d – M/d - E، M/d – E، M/d - E، M/d – E، M/d + E، M/d – E، M/d + E، M/d – E، M/d - MMM – MMM + MMM – MMM - MMM d – d + MMM d – d - E، MMM d – E، MMM d - E، MMM d – E، MMM d + E، MMM d – E، MMM d + E، MMM d – E، MMM d - y – y G + y – y G - M/y – M/y GGGGG - M/y – M/y GGGGG + M/y – M/y GGGGG + M/y – M/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG + M/d/y – M/d/y GGGGG + M/d/y – M/d/y GGGGG + M/d/y – M/d/y GGGGG - E، M/d/y – E، M/d/y GGGGG - E، M/d/y – E، M/d/y GGGGG - E، M/d/y – E، M/d/y GGGGG + E، M/d/y – E، M/d/y GGGGG + E، M/d/y – E، M/d/y GGGGG + E، M/d/y – E، M/d/y GGGGG - MMM – MMM y G - MMM y – MMM y G + MMM – MMM y G + MMM y – MMM y G - MMM d – d، y G - MMM d – MMM d، y G - MMM d، y – MMM d، y G + MMM d – d، y G + MMM d – MMM d، y G + MMM d، y – MMM d، y G - E، MMM d – E، MMM d، y G - E، MMM d – E، MMM d، y G - E، MMM d، y – E، MMM d، y G + E، MMM d – E، MMM d، y G + E، MMM d – E، MMM d، y G + E، MMM d، y – E، MMM d، y G - MMMM – MMMM y G - MMMM y – MMMM y G + MMMM – MMMM y G + MMMM y – MMMM y G @@ -1422,428 +1593,312 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - قاڭتار - اقپان - ناۋرىز - ءساۋىر - مامىر - ماۋسىم - شىلدە - تامىز - قىركۇيەك - قازان - قاراشا - جەلتوقسان - - قاڭتار - اقپان - ناۋرىز - ءساۋىر - مامىر - ماۋسىم - شىلدە - تامىز - قىركۇيەك - قازان - قاراشا - جەلتوقسان - - - - - قاڭتار - اقپان - ناۋرىز - ءساۋىر - مامىر - ماۋسىم - شىلدە - تامىز - قىركۇيەك - قازان - قاراشا - جەلتوقسان - - - قاڭتار - اقپان - ناۋرىز - ءساۋىر - مامىر - ماۋسىم - شىلدە - تامىز - قىركۇيەك - قازان - قاراشا - جەلتوقسان + قاڭتار + اقپان + ناۋرىز + ءساۋىر + مامىر + ماۋسىم + شىلدە + تامىز + قىركۇيەك + قازان + قاراشا + جەلتوقسان - جەك - دۇي - سەي - سار - بەي - جۇم - سەن - - - ج - د - س - س - ب - ج - س + جەك + دۇي + سەي + سار + بەي + جۇم + سەن - جە - دۇ - سە - سا - بە - جۇ - سن + جە + دۇ + سە + سا + بە + جۇ + سن - جەكسەنبى - دۇيسەنبى - سەيسەنبى - سارسەنبى - بەيسەنبى - جۇما - سەنبى + جەكسەنبى + دۇيسەنبى + سەيسەنبى + سارسەنبى + بەيسەنبى + جۇما + سەنبى - - جەك - دۇي - سەي - سار - بەي - جۇم - سەن - - ج - د - س - س - ب - ج - س - - - جە - دۇ - سە - سا - بە - جۇ - سن - - - جەكسەنبى - دۇيسەنبى - سەيسەنبى - سارسەنبى - بەيسەنبى - جۇما - سەنبى + ج + د + س + س + ب + ج + س - 1-توقسان - 2-توقسان - 3-توقسان - 4-توقسان + 1- توقسان + 2- توقسان + 3- توقسان + 4- توقسان - ءبىرىنشى توقسان - ەكىنشى توقسان - ءۇشىنشى توقسان - ءتورتىنشى توقسان + ءبىرىنشى توقسان + ەكىنشى توقسان + ءۇشىنشى توقسان + ءتورتىنشى توقسان - 1-توقسان - 2-توقسان - 3-توقسان - 4-توقسان - - - ءبىرىنشى توقسان - ەكىنشى توقسان - ءۇشىنشى توقسان - ءتورتىنشى توقسان + 1- توقسان + 2- توقسان + 3- توقسان + 4- توقسان - ءتۇن جارىمى - ت د - تۇسكى - ت ك - تاڭعى - تۇستەن كەيىنگى - كەش - تۇنگى + ءتۇن جارىمى + ت د + تۇسكى + ت ك + تاڭعى + تۇستەن كەيىنگى + كەش + تۇنگى - تۇنگى - ت د - تۇسكى - ت ك - تاڭعى - تۇستەن كەيىنگى - كەشكى - تۇنگى + تۇنگى + تۇسكى + تاڭعى + تۇستەن كەيىنگى + كەش + تۇنگى - ءتۇن جارىمى - ت د - تۇسكى - ت ك - تاڭعى - تۇستەن كەيىنگى - كەشى - تۇنگى + ءتۇن جارىمى + ت د + تۇسكى + ت ك + تاڭعى + تۇستەن كەيىنگى + كەشى + تۇنگى - ءتۇن جارىمى - ت د - ءتالتۇس - ت ك - تاڭ - تۇستەن كەيىن - كەش - ءتۇن + تال ءتۇس + تاڭ + تۇستەن كەيىن + كەش + ءتۇن - ءتۇن جارىمى - ت د - تال ءتۇس - ت ك - تاڭ - تۇستەن كەيىن - كەش - ءتۇن + تال ءتۇس - ءتۇن جارىمى - ت د - تال ءتۇس - ت ك - تاڭ - تۇستەن كەيىن - كەش - ءتۇن + ت د + تال ءتۇس + ت ك - ءبىزدىڭ زامانىمىزعا دەيىن - ءبىزدىڭ زامانىمىزعا دەيىن - ءبىزدىڭ زامانىمىز - ءبىزدىڭ زامانىمىز + ءبىزدىڭ زامانىمىزعا دەيىن + ءبىزدىڭ زامانىمىزعا دەيىن + ءبىزدىڭ زامانىمىز + ءبىزدىڭ زامانىمىز - ب ز د - ب ز + ب ز د + ب ز - - ب ز د - ب ز د - ب ز - ب ز - - y d-MMMM، EEEE + y، d- MMMM، EEEE - d-MMMM، y + y، d- MMMM - d-MMM، y + y، d- MMM - dd-MM-y + dd-MM-y - HH:mm:ss zzzz + HH:mm:ss zzzz - HH:mm:ss z + HH:mm:ss z - HH:mm:ss + HH:mm:ss - HH:mm + HH:mm - {1}، {0} + {1}، {0} - {1}, {0} + {1}, {0} - {1}، {0} + {1}، {0} - {1}, {0} + {1}, {0} - {1}, {0} - - - {1}, {0} + {1}, {0} - {1}, {0} - - - {1}, {0} + {1}, {0} - d E - y G - G d-M-y - y MMM G - y d-MMM G - y d-MMM، E G - d-M - d-M، E - d-MMM - d-MMM، E - d-MMMM - اپتاسى-W ايىنىڭ MMMM - اپتاسى-W ايىنىڭ MMMM - M-y - y-d-M - y-d-M، E - y d-MMM - y d-MMM، E - اپتاسى-w جىلدىڭ Y - اپتاسى-w جىلدىڭ Y + d E + G d-M-y + G y-MM-dd، E + G y، d- MMM + G y، d- MMM، E + d-M + d-M، E + d- MMM + d- MMM، E + d- MMMM + MMMM ايىنىڭ W اپتاسى + MMMM ايىنىڭ W اپتاسى + M-y + y-d-M + y-d-M، E + y d- MMM + y d- MMM، E + Y جىلدىڭ w اپتاسى + Y جىلدىڭ w اپتاسى - G y-M – G y-M - G y-M – y-M - G y-M – y-M + G y-M – G y-M + G y-M – y-M + G y-M – y-M - G y-M-d – y-M-d - G y-M-d – G y-M-d - G y-M-d – y-M-d - G y-M-d – y-M-d + G y-M-d – y-M-d + G y-M-d – G y-M-d + G y-M-d – y-M-d + G y-M-d – y-M-d - G y-M-d، E – y-M-d، E - G y-M-d، E – G y-M-d، E - G y-M-d، E – y-M-d، E - G y-M-d، E – y-M-d، E + G y-M-d، E – y-M-d، E + G y-M-d، E – G y-M-d، E + G y-M-d، E – y-M-d، E + G y-M-d، E – y-M-d، E - G y، MMM d–d - G y، MMM d – G y، MMM d - G y، MMM d – MMM d - G y، MMM d – y، MMM d + G y، MMM d–d + G y، MMM d – G y، MMM d + G y، MMM d – MMM d + G y، MMM d – y، MMM d - G y، d MMM، E – d MMM، E - G y، d MMM، E – G y، d MMM، E - G y، d MMM، E – d MMM، E - G y، d MMM، E – y d MMM، E + G y، d MMM، E – d MMM، E + G y، d MMM، E – G y، d MMM، E + G y، d MMM، E – d MMM، E + G y، d MMM، E – y d MMM، E - M – M + M – M - M-d – M-d - M-d – M-d + M-d – M-d + M-d – M-d - M-d، E – M-d، E - M-d، E – M-d، E + M-d، E – M-d، E + M-d، E – M-d، E - MMM–MMM + MMM–MMM - MMM d، E – MMM d، E - MMM d، E – MMM d، E + MMM d، E – MMM d، E + MMM d، E – MMM d، E - y-M – y-M - y-M – y-M + y-M – y-M + y-M – y-M - y-M-d – y-M-d - y-M-d – y-M-d - y-M-d – y-M-d + y-M-d – y-M-d + y-M-d – y-M-d + y-M-d – y-M-d - y-M-d، E – y-M-d، E - y-M-d، E – y-M-d، E - y-M-d، E – y-M-d، E + y-M-d، E – y-M-d، E + y-M-d، E – y-M-d، E + y-M-d، E – y-M-d، E - y، MMM d–d - y، MMM d – MMM d - y، MMM d – y، MMM d + y، MMM d–d + y، MMM d – MMM d + y، MMM d – y، MMM d - y MMM d، E – MMM d، E - y MMM d، E – MMM d، E - y MMM d، E – y MMM d، E + y MMM d، E – MMM d، E + y MMM d، E – MMM d، E + y MMM d، E – y MMM d، E @@ -1851,7060 +1906,4936 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ءداۋىر - - - ءداۋىر - - - ءداۋىر + ءداۋىر - جىل - بىلتىرعى جىل - بيىلعى جىل - كەلەسى جىل + جىل + بىلتىرعى جىل + بيىلعى جىل + كەلەسى جىل - {0} جىلدان كەيىن - {0} جىلدان كەيىن + {0} جىلدان كەيىن + {0} جىلدان كەيىن - {0} جىل بۇرىن - {0} جىل بۇرىن - - - - جىل - بىلتىرعى جىل - بيىلعى جىل - كەلەسى جىل - - {0} جىلدان كەيىن - {0} جىلدان كەيىن - - - {0} جىل بۇرىن - {0} جىل بۇرىن - - - - جىل - بىلتىرعى جىل - بيىلعى جىل - كەلەسى جىل - - {0} جىلدان كەيىن - {0} جىلدان كەيىن - - - {0} جىل بۇرىن - {0} جىل بۇرىن + {0} جىل بۇرىن + {0} جىل بۇرىن - شيرەك - وتكەن توقسان - وسى توقسان - كەلەسى توقسان + شيرەك + وتكەن توقسان + وسى توقسان + كەلەسى توقسان - {0} توقساننان كەيىن - {0} توقساننان كەيىن + {0} توقساننان كەيىن + {0} توقساننان كەيىن - {0} توقسان بۇرىن - {0} توقسان بۇرىن - - - - شيرەك - وتكەن توقسان - وسى توقسان - كەلەسى توقسان - - {0} توقساننان كەيىن - {0} توقساننان كەيىن - - - {0} توقسان بۇرىن - {0} توقسان بۇرىن - - - - شيرەك - وتكەن توقسان - وسى توقسان - كەلەسى توقسان - - {0} توقساننان كەيىن - {0} توقساننان كەيىن - - - {0} توقسان بۇرىن - {0} توقسان بۇرىن + {0} توقسان بۇرىن + {0} توقسان بۇرىن - اي - وتكەن اي - وسى اي - كەلەسى اي + اي + وتكەن اي + وسى اي + كەلەسى اي - {0} ايدان كەيىن - {0} ايدان كەيىن + {0} ايدان كەيىن + {0} ايدان كەيىن - {0} اي بۇرىن - {0} اي بۇرىن - - - - اي - وتكەن اي - وسى اي - كەلەسى اي - - {0} ايدان كەيىن - {0} ايدان كەيىن - - - {0} اي بۇرىن - {0} اي بۇرىن - - - - اي - وتكەن اي - وسى اي - كەلەسى اي - - {0} ايدان كەيىن - {0} ايدان كەيىن - - - {0} اي بۇرىن - {0} اي بۇرىن + {0} اي بۇرىن + {0} اي بۇرىن - اپتا - وتكەن اپتا - وسى اپتا - كەلەسى اپتا + اپتا + وتكەن اپتا + وسى اپتا + كەلەسى اپتا - {0} اپتادان كەيىن - {0} اپتادان كەيىن + {0} اپتادان كەيىن + {0} اپتادان كەيىن - {0} اپتا بۇرىن - {0} اپتا بۇرىن + {0} اپتا بۇرىن + {0} اپتا بۇرىن - {0} اپتاسى - - - اپتا - وتكەن اپتا - وسى اپتا - كەلەسى اپتا - - {0} اپتادان كەيىن - {0} اپتادان كەيىن - - - {0} اپتا بۇرىن - {0} اپتا بۇرىن - - {0} اپتاسى - - - اپتا - وتكەن اپتا - وسى اپتا - كەلەسى اپتا - - {0} اپتادان كەيىن - {0} اپتادان كەيىن - - - {0} اپتا بۇرىن - {0} اپتا بۇرىن - - {0} اپتاسى + {0} اپتاسى - ايداعى اپتا - - - ايداعى اپتا - - - ايداعى اپتا + ايداعى اپتا - كۇن - كەشە - بۇگىن - ەرتەڭ + كۇن + كەشە + بۇگىن + ەرتەڭ - {0} كۇننەن كەيىن - {0} كۇننەن كەيىن + {0} كۇننەن كەيىن + {0} كۇننەن كەيىن - {0} كۇن بۇرىن - {0} كۇن بۇرىن - - - - كۇن - كەشە - بۇگىن - ەرتەڭ - - {0} كۇننەن كەيىن - {0} كۇننەن كەيىن - - - {0} كۇن بۇرىن - {0} كۇن بۇرىن - - - - كۇن - كەشە - بۇگىن - ەرتەڭ - - {0} كۇننەن كەيىن - {0} كۇننەن كەيىن - - - {0} كۇن بۇرىن - {0} كۇن بۇرىن + {0} كۇن بۇرىن + {0} كۇن بۇرىن - جىلداعى كۇن - - - جىلداعى كۇن - - - جىلداعى كۇن + جىلداعى كۇن - اپتا كۇنى - - - اپتا كۇنى - - - اپتا كۇنى + اپتا كۇنى - ايداعى اپتا كۇنى - - - ايداعى اپتا كۇنى - - - ايداعى اپتا كۇنى + ايداعى اپتا كۇنى - وتكەن جەكسەنبى - وسى جەكسەنبى - كەلەسى جەكسەنبى + وتكەن جەكسەنبى + وسى جەكسەنبى + كەلەسى جەكسەنبى - {0} جەكسەنبىدەن كەيىن - {0} جەكسەنبىدەن كەيىن + {0} جەكسەنبىدەن كەيىن + {0} جەكسەنبىدەن كەيىن - {0} جەكسەنبى بۇرىن - {0} جەكسەنبى بۇرىن - - - - وتكەن جەكسەنبى - وسى جەكسەنبى - كەلەسى جەكسەنبى - - {0} جەكسەنبىدەن كەيىن - {0} جەكسەنبىدەن كەيىن - - - {0} جەكسەنبى بۇرىن - {0} جەكسەنبى بۇرىن - - - - وتكەن جەكسەنبى - وسى جەكسەنبى - كەلەسى جەكسەنبى - - {0} جەكسەنبىدەن كەيىن - {0} جەكسەنبىدەن كەيىن - - - {0} جەكسەنبى بۇرىن - {0} جەكسەنبى بۇرىن + {0} جەكسەنبى بۇرىن + {0} جەكسەنبى بۇرىن - وتكەن دۇيسەنبى - وسى دۇيسەنبى - كەلەسى دۇيسەنبى + وتكەن دۇيسەنبى + وسى دۇيسەنبى + كەلەسى دۇيسەنبى - {0} دۇيسەنبىدەن كەيىن - {0} دۇيسەنبىدەن كەيىن + {0} دۇيسەنبىدەن كەيىن + {0} دۇيسەنبىدەن كەيىن - {0} دۇيسەنبى بۇرىن - {0} دۇيسەنبى بۇرىن - - - - وتكەن دۇيسەنبى - وسى دۇيسەنبى - كەلەسى دۇيسەنبى - - {0} دۇيسەنبىدەن كەيىن - {0} دۇيسەنبىدەن كەيىن - - - {0} دۇيسەنبى بۇرىن - {0} دۇيسەنبى بۇرىن - - - - وتكەن دۇيسەنبى - وسى دۇيسەنبى - كەلەسى دۇيسەنبى - - {0} دۇيسەنبىدەن كەيىن - {0} دۇيسەنبىدەن كەيىن - - - {0} دۇيسەنبى بۇرىن - {0} دۇيسەنبى بۇرىن + {0} دۇيسەنبى بۇرىن + {0} دۇيسەنبى بۇرىن - وتكەن سەيسەنبى - وسى سەيسەنبى - كەلەسى سەيسەنبى + وتكەن سەيسەنبى + وسى سەيسەنبى + كەلەسى سەيسەنبى - {0} سەيسەنبىدەن كەيىن - {0} سەيسەنبىدەن كەيىن + {0} سەيسەنبىدەن كەيىن + {0} سەيسەنبىدەن كەيىن - {0} سەيسەنبى بۇرىن - {0} سەيسەنبى بۇرىن - - - - وتكەن سەيسەنبى - وسى سەيسەنبى - كەلەسى سەيسەنبى - - {0} سەيسەنبىدەن كەيىن - {0} سەيسەنبىدەن كەيىن - - - {0} سەيسەنبى بۇرىن - {0} سەيسەنبى بۇرىن - - - - وتكەن سەيسەنبى - وسى سەيسەنبى - كەلەسى سەيسەنبى - - {0} سەيسەنبىدەن كەيىن - {0} سەيسەنبىدەن كەيىن - - - {0} سەيسەنبى بۇرىن - {0} سەيسەنبى بۇرىن + {0} سەيسەنبى بۇرىن + {0} سەيسەنبى بۇرىن - وتكەن سارساەنبى - وسى سارسەنبى - كەلەسى سارسەنبى + وتكەن سارساەنبى + وسى سارسەنبى + كەلەسى سارسەنبى - {0} سارسەنبىدەن كەيىن - {0} سارسەنبىدەن كەيىن + {0} سارسەنبىدەن كەيىن + {0} سارسەنبىدەن كەيىن - {0} سارسەنبى بۇرىن - {0} سارسەنبى بۇرىن - - - - وتكەن سارساەنبى - وسى سارسەنبى - كەلەسى سارسەنبى - - {0} سارسەنبىدەن كەيىن - {0} سارسەنبىدەن كەيىن - - - {0} سارسەنبى بۇرىن - {0} سارسەنبى بۇرىن - - - - وتكەن سارساەنبى - وسى سارسەنبى - كەلەسى سارسەنبى - - {0} سارسەنبىدەن كەيىن - {0} سارسەنبىدەن كەيىن - - - {0} سارسەنبى بۇرىن - {0} سارسەنبى بۇرىن + {0} سارسەنبى بۇرىن + {0} سارسەنبى بۇرىن - وتكەن بەيسەنبى - وسى بەيسەنبى - كەلەسى بەيسەنبى + وتكەن بەيسەنبى + وسى بەيسەنبى + كەلەسى بەيسەنبى - {0} بەيسەنبىدەن كەيىن - {0} بەيسەنبىدەن كەيىن + {0} بەيسەنبىدەن كەيىن + {0} بەيسەنبىدەن كەيىن - {0} بەيسەنبى بۇرىن - {0} بەيسەنبى بۇرىن - - - - وتكەن بەيسەنبى - وسى بەيسەنبى - كەلەسى بەيسەنبى - - {0} بەيسەنبىدەن كەيىن - {0} بەيسەنبىدەن كەيىن - - - {0} بەيسەنبى بۇرىن - {0} بەيسەنبى بۇرىن - - - - وتكەن بەيسەنبى - وسى بەيسەنبى - كەلەسى بەيسەنبى - - {0} بەيسەنبىدەن كەيىن - {0} بەيسەنبىدەن كەيىن - - - {0} بەيسەنبى بۇرىن - {0} بەيسەنبى بۇرىن + {0} بەيسەنبى بۇرىن + {0} بەيسەنبى بۇرىن - وتكەن جۇما - وسى جۇما - كەلەسى جۇما + وتكەن جۇما + وسى جۇما + كەلەسى جۇما - {0} جۇمادان كەيىن - {0} جۇمادان كەيىن + {0} جۇمادان كەيىن + {0} جۇمادان كەيىن - {0} جۇما بۇرىن - {0} جۇما بۇرىن - - - - وتكەن جۇما - وسى جۇما - كەلەسى جۇما - - {0} جۇمادان كەيىن - {0} جۇمادان كەيىن - - - {0} جۇما بۇرىن - {0} جۇما بۇرىن - - - - وتكەن جۇما - وسى جۇما - كەلەسى جۇما - - {0} جۇمادان كەيىن - {0} جۇمادان كەيىن - - - {0} جۇما بۇرىن - {0} جۇما بۇرىن + {0} جۇما بۇرىن + {0} جۇما بۇرىن - وتكەن سەنبى - وسى سەنبى - كەلەسى سەنبى + وتكەن سەنبى + وسى سەنبى + كەلەسى سەنبى - {0} سەنبىدەن كەيىن - {0} سەنبىدەن كەيىن + {0} سەنبىدەن كەيىن + {0} سەنبىدەن كەيىن - {0} سەنبى بۇرىن - {0} سەنبى بۇرىن + {0} سەنبى بۇرىن + {0} سەنبى بۇرىن - - وتكەن سەنبى - وسى سەنبى - كەلەسى سەنبى - - {0} سەنبىدەن كەيىن - {0} سەنبىدەن كەيىن - - - {0} سەنبى بۇرىن - {0} سەنبى بۇرىن - - - - وتكەن سەنبى - وسى سەنبى - كەلەسى سەنبى - - {0} سەنبىدەن كەيىن - {0} سەنبىدەن كەيىن - - - {0} سەنبى بۇرىن - {0} سەنبى بۇرىن - - - - تۇسكە دەيىن/تۇستەن كەيىن - - تۇسكە دەيىن/تۇستەن كەيىن - - - تۇسكە دەيىن/تۇستەن كەيىن + تۇسكە دەيىن/تۇستەن كەيىن - ساعات - وسى ساعات + ساعات + وسى ساعات - {0} ساعاتتان كەيىن - {0} ساعاتتان كەيىن + {0} ساعاتتان كەيىن + {0} ساعاتتان كەيىن - {0} ساعات بۇرىن - {0} ساعات بۇرىن - - - - ساعات - وسى ساعات - - {0} ساعاتتان كەيىن - {0} ساعاتتان كەيىن - - - {0} ساعات بۇرىن - {0} ساعات بۇرىن - - - - ساعات - وسى ساعات - - {0} ساعاتتان كەيىن - {0} ساعاتتان كەيىن - - - {0} ساعات بۇرىن - {0} ساعات بۇرىن + {0} ساعات بۇرىن + {0} ساعات بۇرىن - مينۋت - وسى مينۋت + مينۋت + وسى مينۋت - {0} مينۋتتان كەيىن - {0} مينۋتتان كەيىن + {0} مينۋتتان كەيىن + {0} مينۋتتان كەيىن - {0} مينۋت بۇرىن - {0} مينۋت بۇرىن - - - - مينۋت - وسى مينۋت - - {0} مينۋتتان كەيىن - {0} مينۋتتان كەيىن - - - {0} مينۋت بۇرىن - {0} مينۋت بۇرىن - - - - مينۋت - وسى مينۋت - - {0} مينۋتتان كەيىن - {0} مينۋتتان كەيىن - - - {0} مينۋت بۇرىن - {0} مينۋت بۇرىن + {0} مينۋت بۇرىن + {0} مينۋت بۇرىن - سەكۋند - قازىر + سەكۋند + قازىر - {0} سەكۋندتان كەيىن - {0} سەكۋندتان كەيىن + {0} سەكۋندتان كەيىن + {0} سەكۋندتان كەيىن - {0} سەكۋند بۇرىن - {0} سەكۋند بۇرىن - - - - سەكۋند - قازىر - - {0} سەكۋندتان كەيىن - {0} سەكۋندتان كەيىن - - - {0} سەكۋند بۇرىن - {0} سەكۋند بۇرىن - - - - سەكۋند - قازىر - - {0} سەكۋندتان كەيىن - {0} سەكۋندتان كەيىن - - - {0} سەكۋند بۇرىن - {0} سەكۋند بۇرىن + {0} سەكۋند بۇرىن + {0} سەكۋند بۇرىن - ۋاقىت بەلدەۋى - - - ۋاقىت بەلدەۋى - - - ۋاقىت بەلدەۋى + ۋاقىت بەلدەۋى - {0} ۋاقىتى - {0} جازعى ۋاقىتى - {0} ستاندارتتى ۋاقىتى + {0} ۋاقىتى + {0} جازعى ۋاقىتى + {0} ستاندارتتى ۋاقىتى - دۇنيەجۇزىلىك ۇيلەستىرىلگەن ۋاقىت + دۇنيەجۇزىلىك ۇيلەستىرىلگەن ۋاقىت - بەلگىسىز قالا + بەلگىسىز قالا - اندوررا + اندوررا - دۋباي + دۋباي - كابۋل + كابۋل - انتيگۋا + انتيگۋا - انگيليا + انگيليا - تيرانا + تيرانا - يەرەۆان + يەرەۆان - لۋاندا + لۋاندا - روتەرا + روتەرا - پالمەر + پالمەر - ترول + ترول - سەۆا + سەۆا - موۋسون + موۋسون - دەيۆيس + دەيۆيس - ۆوستوك + ۆوستوك - كەيسي + كەيسي - ديۋمون-ديۋرۆيل + ديۋمون-ديۋرۆيل - ماك-مەردو + ماك-مەردو - ريو-گالەگوس + ريو-گالەگوس - مەندوزا + مەندوزا - سان-حۋان + سان-حۋان - ۋشۋايا + ۋشۋايا - لا-ريوحا + لا-ريوحا - سان-لۋيس + سان-لۋيس - كاتاماركا + كاتاماركا - سالتا + سالتا - جۋجۋي + جۋجۋي - تۋكۋمان + تۋكۋمان - كوردوبا + كوردوبا - بۋەنوس-ايروس + بۋەنوس-ايروس - پاگو-پاگو + پاگو-پاگو - ۆەنا + ۆەنا - پەرت + پەرت - يۋكلا + يۋكلا - دارۆين + دارۆين - ادەلايدا + ادەلايدا - بروكەن-حيل + بروكەن-حيل - مەلبۋرن + مەلبۋرن - حوبارت + حوبارت - ليندەمان + ليندەمان - سيدنەي + سيدنەي - بريسبەن + بريسبەن - ماككۋوري + ماككۋوري - لورد-حاۋ + لورد-حاۋ - ارۋبا + ارۋبا - ماريەحامن + ماريەحامن - باكۋ + باكۋ - ساراەۆو + ساراەۆو - باربادوس + باربادوس - داككا + داككا - بريۋسەل + بريۋسەل - ۋاگادۋگۋ + ۋاگادۋگۋ - سوفيا + سوفيا - باحرەين + باحرەين - بۋجۋمبۋرا + بۋجۋمبۋرا - پورتو-نوۆو + پورتو-نوۆو - سەن-بارتەلەمي + سەن-بارتەلەمي - بەرمۋد ارالدارى + بەرمۋد ارالدارى - برۋنەي + برۋنەي - لا-پاس + لا-پاس - كرالەندەيك + كرالەندەيك - ەيرۋنەپە + ەيرۋنەپە - ريۋ-برانكۋ + ريۋ-برانكۋ - پورتو-ۆەليۋ + پورتو-ۆەليۋ - باو-ۆيستا + باو-ۆيستا - ماناۋس + ماناۋس - كۋيابا + كۋيابا - سانتارەن + سانتارەن - كامپۋ-گراندە + كامپۋ-گراندە - بەلەم + بەلەم - اراگۋاينا + اراگۋاينا - سان-پۋالۋ + سان-پۋالۋ - بايا + بايا - فورتالەزا + فورتالەزا - ماسەيو + ماسەيو - رەسيفي + رەسيفي - نورونيا + نورونيا - ناسساۋ + ناسساۋ - تحيمپحۋ + تحيمپحۋ - گابورونە + گابورونە - مينسك + مينسك - بەليز + بەليز - دوۋسون + دوۋسون - ۋايتحورس + ۋايتحورس - ينۋۆيك + ينۋۆيك - ۆانكۋۆەر + ۆانكۋۆەر - فورت-نەلسون + فورت-نەلسون - دوۋسون-كريك + دوۋسون-كريك - كرەستون + كرەستون - ەدمونتون + ەدمونتون - سۋيات-كاررەنت + سۋيات-كاررەنت - كەمبريج-بەي + كەمبريج-بەي - رەجاينا + رەجاينا - ۆيننيپەگ + ۆيننيپەگ - رەزوليۋت + رەزوليۋت - رانكين-ينلەت + رانكين-ينلەت - اتيكوكان + اتيكوكان - تورونتو + تورونتو - يكالۋيت + يكالۋيت - مونكتون + مونكتون - گاليفاكس + گاليفاكس - گۋس-بەي + گۋس-بەي - گلەيس-بەي + گلەيس-بەي - بلانك-سابلون + بلانك-سابلون - سەنت-جونس + سەنت-جونس - كوكوس ارالدارى + كوكوس ارالدارى - كينشاسا + كينشاسا - لۋبۋمباشي + لۋبۋمباشي - بانگي + بانگي - براززاۆيل + براززاۆيل - سيۋريح + سيۋريح - ابيدجان + ابيدجان - راروتونگا + راروتونگا - پاسحا ارالى + پاسحا ارالى + + + كويايكە - پۋنتا-ارەناس + پۋنتا-ارەناس - سانتياگو + سانتياگو - دۋالا + دۋالا - ءۇرىمشى + ءۇرىمشى - شانحاي + شانحاي - بوگوتا + بوگوتا - كوستا-ريكا + كوستا-ريكا - گاۆانا + گاۆانا - كابو-ۆەردە + كابو-ۆەردە - كيۋراساو + كيۋراساو - كريستماس ارالدارى + كريستماس ارالدارى - نيكوسيا + نيكوسيا - فاماگۋستا + فاماگۋستا - پراگا + پراگا - بيۋزينگەن + بيۋزينگەن - بەرلين + بەرلين - جيبۋتي + جيبۋتي - كوپەنگاگەن + كوپەنگاگەن - دومينيكا + دومينيكا - سانتو-دومينگو + سانتو-دومينگو - الجير + الجير - گالاپاگوس + گالاپاگوس - گۋاياكيل + گۋاياكيل - تاللين + تاللين - كاير + كاير - ەل-ايۋن + ەل-ايۋن - اسمارا + اسمارا - كانار ارالدارى + كانار ارالدارى - سەۋتا + سەۋتا - مادريد + مادريد - ادديس-ابەبا + ادديس-ابەبا - حەلسينكي + حەلسينكي - فيجي + فيجي - ستەنلي + ستەنلي - ترۋك + ترۋك - پوناپە + پوناپە - كۋسايە + كۋسايە - فارەر ارالدارى + فارەر ارالدارى - پاريج + پاريج - ليبرەۆيل + ليبرەۆيل - ۇلىبريتانيا جازعى ۋاقىتى + ۇلىبريتانيا جازعى ۋاقىتى - لوندون + لوندون - گرەنادا + گرەنادا - تبيليسي + تبيليسي - كايەننا + كايەننا - گەرنسي + گەرنسي - اككرا + اككرا - گيبرالتال + گيبرالتال - تۋلە + تۋلە - نۋۋك + نۋۋك - يللوككورتوورميۋت + يللوككورتوورميۋت - دانماركسحاۆن + دانماركسحاۆن - بانجۋل + بانجۋل - كوناكري + كوناكري - گۆادەلۇپا + گۆادەلۇپا - مالابو + مالابو - افينا + افينا - وڭتۇستىك گەورگيا + وڭتۇستىك گەورگيا - گۆاتەمالا + گۆاتەمالا - گۋام + گۋام - بيساۋ + بيساۋ - گايانا + گايانا - حوڭكوڭ + حوڭكوڭ - تەگۋسيگالپا + تەگۋسيگالپا - زاگرەب + زاگرەب - پورت-وف-پرەنس + پورت-وف-پرەنس - بۋداپەشت + بۋداپەشت - جاكارتا + جاكارتا - پونتياناك + پونتياناك - ماكاسار + ماكاسار - جاياپۋرا + جاياپۋرا - يرلانديا ستاندارتتى ۋاقىتى + يرلانديا ستاندارتتى ۋاقىتى - دۋبلين + دۋبلين - يەرۋساليم + يەرۋساليم - مەن ارالى + مەن ارالى - كالكۋتا + كالكۋتا - چاگوس + چاگوس - باگدات + باگدات - تەگەران + تەگەران - رەيكياۆيك + رەيكياۆيك - ريم + ريم - جەرسەي + جەرسەي - يامايكا + يامايكا - اممان + اممان - توكيو + توكيو - نايروبي + نايروبي - بىشكەك + بىشكەك - پنومپەن + پنومپەن - - كانتون + + كانتون - كيريتيماتي + كيريتيماتي - تاراۋا + تاراۋا - كومور ارالدارى + كومور ارالدارى - سەنت-كيتس + سەنت-كيتس - پحەنيان + پحەنيان - سەۋل + سەۋل - كۋۆەيت + كۋۆەيت - كايمان ارالدارى + كايمان ارالدارى - اقتاۋ + اقتاۋ - ورال + ورال - اتىراۋ + اتىراۋ - اقتوبە + اقتوبە - قوستاناي + قوستاناي - قىزىلوردا + قىزىلوردا - الماتى + الماتى - ۆەنتيان + ۆەنتيان - بەيرۋت + بەيرۋت - سەنت-ليۋسيا + سەنت-ليۋسيا - ۆادۋس + ۆادۋس - كولومبو + كولومبو - مونروۆيا + مونروۆيا - ماسەرۋ + ماسەرۋ - ۆينيۋس + ۆينيۋس - ليۋكسەمبۋرگ + ليۋكسەمبۋرگ - ريگا + ريگا - تريپولي + تريپولي - كاسابلانكا + كاسابلانكا - موناكو + موناكو - كيشينەۆ + كيشينەۆ - پودگوريسا + پودگوريسا - ماريگو + ماريگو - انتاناناريۆۋ + انتاناناريۆۋ - كۆاجالەيىن + كۆاجالەيىن - ماجۋرو + ماجۋرو - سكوپيە + سكوپيە - باماكو + باماكو - يانگون + يانگون - حوۆد + حوۆد - ۇلانباتىر + ۇلانباتىر - ماكاو + ماكاو - سايپان + سايپان - مارتينيكا + مارتينيكا - نۋاكشوت + نۋاكشوت - مونتسەررات + مونتسەررات - مالتا + مالتا - ماۆريكي + ماۆريكي - مالديۆ ارالدارى + مالديۆ ارالدارى - بلانتاير + بلانتاير - تيحۋانا + تيحۋانا - ەرموسيلو + ەرموسيلو - سيۋداد-حۋارەس + سيۋداد-حۋارەس - ماساتلان + ماساتلان - چيۋاۋا + چيۋاۋا - بايا-دە-باندەراس + بايا-دە-باندەراس - وحيناگا + وحيناگا - مونتەررەي + مونتەررەي - مەحيكو + مەحيكو - ماتاموروس + ماتاموروس - مەريدا + مەريدا - كانكۋن + كانكۋن - كۋالا-لۋمپۋر + كۋالا-لۋمپۋر - كۋچيڭ + كۋچيڭ - ماپۋتۋ + ماپۋتۋ - ۆيندحۋك + ۆيندحۋك - نۋمەا + نۋمەا - نيامەي + نيامەي - نورفولك + نورفولك - لاگوس + لاگوس - ماناگۋا + ماناگۋا - امستەردام + امستەردام - وسلو + وسلو - كاتماندۋ + كاتماندۋ - ناۋرۋ + ناۋرۋ - نيۋە + نيۋە - چاتەم + چاتەم - وكلەند + وكلەند - ماسكات + ماسكات - پاناما + پاناما - ليما + ليما - تايتي + تايتي - ماركيز ارالدارى + ماركيز ارالدارى - گامبيە + گامبيە - پورت-مورسبي + پورت-مورسبي - بۋگەنۆيل + بۋگەنۆيل - مانيلا + مانيلا - كاراچا + كاراچا - ۆارشاۆا + ۆارشاۆا - ميكەلون + ميكەلون - پيتكەرن + پيتكەرن - پۋەرتو-ريكو + پۋەرتو-ريكو - گازا + گازا - حەۆرون + حەۆرون - ازور ارالدارى + ازور ارالدارى - مادەيرا + مادەيرا - ليسابون + ليسابون - پالاۋ + پالاۋ - اسۋنسيون + اسۋنسيون - كاتار + كاتار - رەيۋنيون + رەيۋنيون - بۋحارەست + بۋحارەست - بەلگراد + بەلگراد - كالينينگراد + كالينينگراد - ماسكەۋ + ماسكەۋ - ۆولگوگراد + ۆولگوگراد - سارىتاۋ + سارىتاۋ - استراحان + استراحان - ۋليانوۆسك + ۋليانوۆسك - كيروۆ + كيروۆ - سامارا + سامارا - ەكاتەرينبۋرگ + ەكاتەرينبۋرگ - ومبى + ومبى - جاڭاسىبىر + جاڭاسىبىر - بارناۋىل + بارناۋىل - تۋمەن + تۋمەن - نوۆوكۋزنەتسك + نوۆوكۋزنەتسك - كراسنويارسك + كراسنويارسك - يركۋتسك + يركۋتسك - چيتا + چيتا - ياكۋتسك + ياكۋتسك - ۆلاديۆاستوك + ۆلاديۆاستوك - حاندىگا + حاندىگا - ساحالين + ساحالين - ۋست-نەرا + ۋست-نەرا - ماگادان + ماگادان - سرەدنەكولىمسك + سرەدنەكولىمسك - كامچاتكا + كامچاتكا - انادىر + انادىر - كيگالي + كيگالي - ەر-رياد + ەر-رياد - گۋادالكانال + گۋادالكانال - ماە + ماە - حارتۋم + حارتۋم - ستوكگولىم + ستوكگولىم - سينگاپۋر + سينگاپۋر - اۋليە ەلەنا ارالى + اۋليە ەلەنا ارالى - ليۋبليانا + ليۋبليانا - لونگير + لونگير - براتيسلاۆا + براتيسلاۆا - فريتاۋن + فريتاۋن - سان-مارينو + سان-مارينو - داكار + داكار - موگاديشۋ + موگاديشۋ - پاراماريبو + پاراماريبو - جۋبا + جۋبا - سان-تومە + سان-تومە - سالۆادور + سالۆادور - لوۋەر-پرينس-كۋوتەر + لوۋەر-پرينس-كۋوتەر - داماسك + داماسك - مبابەنە + مبابەنە - گراند-تەرك + گراند-تەرك - ندجامەنا + ندجامەنا - كەرگەلەن + كەرگەلەن - لومە + لومە - باڭكوك + باڭكوك - دۋشانبە + دۋشانبە - فاكاوفو + فاكاوفو - ديلي + ديلي - اشحابات + اشحابات - تۋنيس + تۋنيس - تونگاتاپۋ + تونگاتاپۋ - ستامبۇل + ستامبۇل - پورت-وف-سپاين + پورت-وف-سپاين - فۋنافۋتي + فۋنافۋتي - تايبەي + تايبەي - دار-ەس-سالام + دار-ەس-سالام - كيەۆ + كيەۆ - سيمفەرول + سيمفەرول - كامپالا + كامپالا - ميدۋەي + ميدۋەي - ۋەيك + ۋەيك - اداك + اداك - نوم + نوم - انكوريج + انكوريج - ياكۋتات + ياكۋتات - سيتكا + سيتكا - جۋنو + جۋنو - مەتلاكاتلا + مەتلاكاتلا - لوس-انجەلەس + لوس-انجەلەس - بويسە + بويسە - فينيكس + فينيكس - دەنۆەر + دەنۆەر - بويلا، سولتۇستىك داكوتا + بويلا، سولتۇستىك داكوتا - نيۋ-سەيلەم، سولتۇستىك داكوتا + نيۋ-سەيلەم، سولتۇستىك داكوتا - سەنتەر، سولتۇستىك داكوتا + سەنتەر، سولتۇستىك داكوتا - چيكاگو + چيكاگو - مەنوميني + مەنوميني - ۆينسەننەس، ينديانا + ۆينسەننەس، ينديانا - پيتەرسبەرگ، ينديانا + پيتەرسبەرگ، ينديانا - تەلل-سيتي، ينديانا + تەلل-سيتي، ينديانا - نوكس، ينديانا + نوكس، ينديانا - ۋيناماك، ينديانا + ۋيناماك، ينديانا - مارەنگو، ينديانا + مارەنگو، ينديانا - يندياناپوليس + يندياناپوليس - لۋيسۆيل + لۋيسۆيل - ۆيۆەي، ينديانا + ۆيۆەي، ينديانا - مونتيسەللو، كەنتۋككي + مونتيسەللو، كەنتۋككي - دەترويد + دەترويد - نيۋ-يورك + نيۋ-يورك - مونتەۆيدەو + مونتەۆيدەو - سامارقاند + سامارقاند - تاشكەنت + تاشكەنت - ۆاتيكان + ۆاتيكان - سەنت-ۆينسەنت + سەنت-ۆينسەنت - كاراكاس + كاراكاس - تورتولا + تورتولا - سەنت-توماس + سەنت-توماس - حوشيمين + حوشيمين - ەفاتە + ەفاتە - ۋولليس + ۋولليس - اپيا + اپيا - ادەن + ادەن - مايوتتا + مايوتتا - يوحاننەسبۋرگ + يوحاننەسبۋرگ - لۋساكا + لۋساكا - حارارە + حارارە - اۋعانستان ۋاقىتى + اۋعانستان ۋاقىتى - ورتالىق افريكا ۋاقىتى + ورتالىق افريكا ۋاقىتى - شىعىس افريكا ۋاقىتى + شىعىس افريكا ۋاقىتى - وڭتۇستىك افريكا ستاندارتتى ۋاقىتى + وڭتۇستىك افريكا ستاندارتتى ۋاقىتى - باتىس افريكا ۋاقىتى - باتىس افريكا ستاندارتتى ۋاقىتى - باتىس افريكا جازعى ۋاقىتى + باتىس افريكا ۋاقىتى - الاسكا ۋاقىتى - الاسكا ستاندارتتى ۋاقىتى - الاسكا جازعى ۋاقىتى + الاسكا ۋاقىتى + الاسكا ستاندارتتى ۋاقىتى + الاسكا جازعى ۋاقىتى - الماتى ۋاقىتى - الماتى ستاندارتتى ۋاقىتى - الماتى جازعى ۋاقىتى + الماتى ۋاقىتى + الماتى ستاندارتتى ۋاقىتى + الماتى جازعى ۋاقىتى - الماتى - الماتى - الماتى قالاسى + الماتى + الماتى + الماتى قالاسى - امازون ۋاقىتى - امازون ستاندارتتى ۋاقىتى - امازون جازعى ۋاقىتى + امازون ۋاقىتى + امازون ستاندارتتى ۋاقىتى + امازون جازعى ۋاقىتى - سولتۇستىك امەريكا ورتالىق ۋاقىتى - سولتۇستىك امەريكا ستاندارتتى ورتالىق ۋاقىتى - ولتۇستىك امەريكا جازعى ورتالىق ۋاقىتى + سولتۇستىك امەريكا ورتالىق ۋاقىتى + سولتۇستىك امەريكا ستاندارتتى ورتالىق ۋاقىتى + ولتۇستىك امەريكا جازعى ورتالىق ۋاقىتى - سولتۇستىك امەريكا شىعىس ۋاقىتى - سولتۇستىك امەريكا ستاندارتتى شىعىس ۋاقىتى - سولتۇستىك امەريكا جازعى شىعىس ۋاقىتى + سولتۇستىك امەريكا شىعىس ۋاقىتى + سولتۇستىك امەريكا ستاندارتتى شىعىس ۋاقىتى + سولتۇستىك امەريكا جازعى شىعىس ۋاقىتى - سولتۇستىك امەريكا تاۋ ۋاقىتى - سولتۇستىك امەريكا ستاندارتتى تاۋ ۋاقىتى - سولتۇستىك امەريكا جازعى تاۋ ۋاقىتى + سولتۇستىك امەريكا تاۋ ۋاقىتى + سولتۇستىك امەريكا ستاندارتتى تاۋ ۋاقىتى + سولتۇستىك امەريكا جازعى تاۋ ۋاقىتى - سولتۇستىك امەريكا تىنىق مۇحيتى ۋاقىتى - سولتۇستىك امەريكا ستاندارتتى تىنىق مۇحيتى ۋاقىتى - سولتۇستىك امەريكا جازعى تىنىق مۇحيتى ۋاقىتى + سولتۇستىك امەريكا تىنىق مۇحيتى ۋاقىتى + سولتۇستىك امەريكا ستاندارتتى تىنىق مۇحيتى ۋاقىتى + سولتۇستىك امەريكا جازعى تىنىق مۇحيتى ۋاقىتى - اپيا ۋاقىتى - اپيا ستاندارتتى ۋاقىتى - اپيا جازعى ۋاقىتى + اپيا ۋاقىتى + اپيا ستاندارتتى ۋاقىتى + اپيا جازعى ۋاقىتى - اقتاۋ ۋاقىتى - اقتاۋ ستاندارتتى ۋاقىتى - اقتاۋ جازعى ۋاقىتى + اقتاۋ ۋاقىتى + اقتاۋ ستاندارتتى ۋاقىتى + اقتاۋ جازعى ۋاقىتى - اقتاۋ - اقتاۋ - اقتاۋ قالاسى + اقتاۋ + اقتاۋ + اقتاۋ قالاسى - اقتوبە ۋاقىتى - اقتوبە ستاندارتتى ۋاقىتى - اقتوبە جازعى ۋاقىتى + اقتوبە ۋاقىتى + اقتوبە ستاندارتتى ۋاقىتى + اقتوبە جازعى ۋاقىتى - اقتوبە - اقتوبە - اقتوبە قالاسى + اقتوبە + اقتوبە + اقتوبە قالاسى - ساۋد ارابياسى ۋاقىتى - ساۋد ارابياسى ستاندارتتى ۋاقىتى - ساۋد ارابياسى جازعى ۋاقىتى + ساۋد ارابياسى ۋاقىتى + ساۋد ارابياسى ستاندارتتى ۋاقىتى + ساۋد ارابياسى جازعى ۋاقىتى - ارگەنتينا ۋاقىتى - ارگەنتينا ستاندارتتى ۋاقىتى - ارگەنتينا جازعى ۋاقىتى + ارگەنتينا ۋاقىتى + ارگەنتينا ستاندارتتى ۋاقىتى + ارگەنتينا جازعى ۋاقىتى - باتىس ارگەنتينا ۋاقىتى - باتىس ارگەنتينا ستاندارتتى ۋاقىتى - باتىس ارگەنتينا جازعى ۋاقىتى + باتىس ارگەنتينا ۋاقىتى + باتىس ارگەنتينا ستاندارتتى ۋاقىتى + باتىس ارگەنتينا جازعى ۋاقىتى - ارمەنيا ۋاقىتى - ارمەنيا ستاندارتتى ۋاقىتى - ارمەنيا جازعى ۋاقىتى + ارمەنيا ۋاقىتى + ارمەنيا ستاندارتتى ۋاقىتى + ارمەنيا جازعى ۋاقىتى - اتلانتيكا ۋاقىتى - اتلانتيكا ستاندارتتى ۋاقىتى - اتلانتيكا جازعى ۋاقىتى + اتلانتيكا ۋاقىتى + اتلانتيكا ستاندارتتى ۋاقىتى + اتلانتيكا جازعى ۋاقىتى - ورتالىق اۋستراليا ۋاقىتى - اۋستراليا ستاندارتتى ورتالىق ۋاقىتى - اۋستراليا جازعى ورتالىق ۋاقىتى + ورتالىق اۋستراليا ۋاقىتى + اۋستراليا ستاندارتتى ورتالىق ۋاقىتى + اۋستراليا جازعى ورتالىق ۋاقىتى - اۋستراليا ورتالىق-باتىس ۋاقىتى - اۋستراليا ستاندارتتى ورتالىق-باتىس ۋاقىتى - اۋستراليا جازعى ورتالىق-باتىس ۋاقىتى + اۋستراليا ورتالىق-باتىس ۋاقىتى + اۋستراليا ستاندارتتى ورتالىق-باتىس ۋاقىتى + اۋستراليا جازعى ورتالىق-باتىس ۋاقىتى - شىعىس اۋستراليا ۋاقىتى - اۋستراليا ستاندارتتى شىعىس ۋاقىتى - اۋستراليا جازعى شىعىس ۋاقىتى + شىعىس اۋستراليا ۋاقىتى + اۋستراليا ستاندارتتى شىعىس ۋاقىتى + اۋستراليا جازعى شىعىس ۋاقىتى - باتىس اۋستراليا ۋاقىتى - اۋستراليا ستاندارتتى باتىس ۋاقىتى - اۋستراليا جازعى باتىس ۋاقىتى + باتىس اۋستراليا ۋاقىتى + اۋستراليا ستاندارتتى باتىس ۋاقىتى + اۋستراليا جازعى باتىس ۋاقىتى - ءازىربايجان ۋاقىتى - ءازىربايجان ستاندارتتى ۋاقىتى - ءازىربايجان جازعى ۋاقىتى + ءازىربايجان ۋاقىتى + ءازىربايجان ستاندارتتى ۋاقىتى + ءازىربايجان جازعى ۋاقىتى - ازور ارالدارى ۋاقىتى - ازور ارالدارى ستاندارتتى ۋاقىتى - ازور ارالدارى جازعى ۋاقىتى + ازور ارالدارى ۋاقىتى + ازور ارالدارى ستاندارتتى ۋاقىتى + ازور ارالدارى جازعى ۋاقىتى - بانگلادەش ۋاقىتى - بانگلادەش ستاندارتتى ۋاقىتى - بانگلادەش جازعى ۋاقىتى + بانگلادەش ۋاقىتى + بانگلادەش ستاندارتتى ۋاقىتى + بانگلادەش جازعى ۋاقىتى - بۋتان ۋاقىتى + بۋتان ۋاقىتى - بوليۆيا ۋاقىتى + بوليۆيا ۋاقىتى - برازيليا ۋاقىتى - برازيليا ستاندارتتى ۋاقىتى - برازيليا جازعى ۋاقىتى + برازيليا ۋاقىتى + برازيليا ستاندارتتى ۋاقىتى + برازيليا جازعى ۋاقىتى - برۋنەي-دارۋسسالام ۋاقىتى + برۋنەي-دارۋسسالام ۋاقىتى - كابو-ۆەردە ۋاقىتى - كابو-ۆەردە ستاندارتتى ۋاقىتى - كابو-ۆەردە جازعى ۋاقىتى + كابو-ۆەردە ۋاقىتى + كابو-ۆەردە ستاندارتتى ۋاقىتى + كابو-ۆەردە جازعى ۋاقىتى - چاموررو ستاندارتتى ۋاقىتى + چاموررو ستاندارتتى ۋاقىتى - چاتەم ۋاقىتى - چاتەم ستاندارتتى ۋاقىتى - چاتەم جازعى ۋاقىتى + چاتەم ۋاقىتى + چاتەم ستاندارتتى ۋاقىتى + چاتەم جازعى ۋاقىتى - چيلي ۋاقىتى - چيلي ستاندارتتى ۋاقىتى - چيلي جازعى ۋاقىتى + چيلي ۋاقىتى + چيلي ستاندارتتى ۋاقىتى + چيلي جازعى ۋاقىتى - قىتاي ۋاقىتى - قىتاي ستاندارتتى ۋاقىتى - قىتاي جازعى ۋاقىتى + قىتاي ۋاقىتى + قىتاي ستاندارتتى ۋاقىتى + قىتاي جازعى ۋاقىتى - كريستماس ارالىنىڭ ۋاقىتى + كريستماس ارالىنىڭ ۋاقىتى - كوكوس ارالدارىنىڭ ۋاقىتى + كوكوس ارالدارىنىڭ ۋاقىتى - كولۋمبيا ۋاقىتى - كولۋمبيا ستاندارتتى ۋاقىتى - كولۋمبيا جازعى ۋاقىتى + كولۋمبيا ۋاقىتى + كولۋمبيا ستاندارتتى ۋاقىتى + كولۋمبيا جازعى ۋاقىتى - كۋك ارالدارىنىڭ ۋاقىتى - كۋك ارالدارىنىڭ ستاندارتتى ۋاقىتى - كۋك ارالدارىنىڭ جازعى ۋاقىتى + كۋك ارالدارىنىڭ ۋاقىتى + كۋك ارالدارىنىڭ ستاندارتتى ۋاقىتى + كۋك ارالدارىنىڭ جازعى ۋاقىتى - كۋبا ۋاقىتى - كۋبا ستاندارتتى ۋاقىتى - كۋبا جازعى ۋاقىتى + كۋبا ۋاقىتى + كۋبا ستاندارتتى ۋاقىتى + كۋبا جازعى ۋاقىتى - دەيۆيس ۋاقىتى + دەيۆيس ۋاقىتى - ديۋمون-ديۋرۆيل ۋاقىتى + ديۋمون-ديۋرۆيل ۋاقىتى - شىعىس تيمور ۋاقىتى + شىعىس تيمور ۋاقىتى - پاسحا ارالى ۋاقىتى - پاسحا ارالى ستاندارتتى ۋاقىتى - پاسحا ارالى جازعى ۋاقىتى + پاسحا ارالى ۋاقىتى + پاسحا ارالى ستاندارتتى ۋاقىتى + پاسحا ارالى جازعى ۋاقىتى - ەكۆادور ۋاقىتى + ەكۆادور ۋاقىتى - ورتالىق ەۋروپا ۋاقىتى - ورتالىق ەۋروپا ستاندارتتى ۋاقىتى - ورتالىق ەۋروپا جازعى ۋاقىتى + ورتالىق ەۋروپا ۋاقىتى + ورتالىق ەۋروپا ستاندارتتى ۋاقىتى + ورتالىق ەۋروپا جازعى ۋاقىتى - شىعىس ەۋروپا ۋاقىتى - شىعىس ەۋروپا ستاندارتتى ۋاقىتى - شىعىس ەۋروپا جازعى ۋاقىتى + شىعىس ەۋروپا ۋاقىتى + شىعىس ەۋروپا ستاندارتتى ۋاقىتى + شىعىس ەۋروپا جازعى ۋاقىتى - قيىر شىعىس ەۋروپا ۋاقىتى + قيىر شىعىس ەۋروپا ۋاقىتى - باتىس ەۋروپا ۋاقىتى - باتىس ەۋروپا ستاندارتتى ۋاقىتى - باتىس ەۋروپا جازعى ۋاقىتى + باتىس ەۋروپا ۋاقىتى + باتىس ەۋروپا ستاندارتتى ۋاقىتى + باتىس ەۋروپا جازعى ۋاقىتى - فولكلەند ارالدارى ۋاقىتى - فولكلەند ارالدارى ستاندارتتى ۋاقىتى - فولكلەند ارالدارى جازعى ۋاقىتى + فولكلەند ارالدارى ۋاقىتى + فولكلەند ارالدارى ستاندارتتى ۋاقىتى + فولكلەند ارالدارى جازعى ۋاقىتى - فيجي ۋاقىتى - فيجي ستاندارتتى ۋاقىتى - فيجي جازعى ۋاقىتى + فيجي ۋاقىتى + فيجي ستاندارتتى ۋاقىتى + فيجي جازعى ۋاقىتى - فرانتسۋز گۆياناسى ۋاقىتى + فرانتسۋز گۆياناسى ۋاقىتى - فرانتسيانىڭ وڭتۇستىك ايماعى جانە انتاركتيكا ۋاقىتى + فرانتسيانىڭ وڭتۇستىك ايماعى جانە انتاركتيكا ۋاقىتى - گالاپاگوس ۋاقىتى + گالاپاگوس ۋاقىتى - گامبە ۋاقىتى + گامبە ۋاقىتى - گرۋزيا ۋاقىتى - گرۋزيا ستاندارتتى ۋاقىتى - گرۋزيا جازعى ۋاقىتى + گرۋزيا ۋاقىتى + گرۋزيا ستاندارتتى ۋاقىتى + گرۋزيا جازعى ۋاقىتى - گيلبەرت ارالدارىنىڭ ۋاقىتى + گيلبەرت ارالدارىنىڭ ۋاقىتى - گرينۆيچ ۋاقىتى + گرينۆيچ ۋاقىتى - شىعىس گرەنلانديا ۋاقىتى - شىعىس گرەنلانديا ستاندارتتى ۋاقىتى - شىعىس گرەنلانديا جازعى ۋاقىتى + شىعىس گرەنلانديا ۋاقىتى + شىعىس گرەنلانديا ستاندارتتى ۋاقىتى + شىعىس گرەنلانديا جازعى ۋاقىتى - باتىس گرەنلانديا ۋاقىتى - باتىس گرەنلانديا ستاندارتتى ۋاقىتى - باتىس گرەنلانديا جازعى ۋاقىتى + باتىس گرەنلانديا ۋاقىتى + باتىس گرەنلانديا ستاندارتتى ۋاقىتى + باتىس گرەنلانديا جازعى ۋاقىتى - پارسى شىعاناعى ستاندارتتى ۋاقىتى + پارسى شىعاناعى ستاندارتتى ۋاقىتى - گايانا ۋاقىتى + گايانا ۋاقىتى + + + + + گاۆاي جانە الەۋت ارالدارى ستاندارتتى ۋاقىتى - گاۆاي جانە الەۋت ارالدارى ۋاقىتى - گاۆاي جانە الەۋت ارالدارى ستاندارتتى ۋاقىتى - گاۆاي جانە الەۋت ارالدارى جازعى ۋاقىتى + گاۆاي جانە الەۋت ارالدارى ۋاقىتى + گاۆاي جانە الەۋت ارالدارى ستاندارتتى ۋاقىتى + گاۆاي جانە الەۋت ارالدارى جازعى ۋاقىتى - حوڭكوڭ ۋاقىتى - حوڭكوڭ ستاندارتتى ۋاقىتى - حوڭكوڭ جازعى ۋاقىتى + حوڭكوڭ ۋاقىتى + حوڭكوڭ ستاندارتتى ۋاقىتى + حوڭكوڭ جازعى ۋاقىتى - حوۆد ۋاقىتى - حوۆد ستاندارتتى ۋاقىتى - حوۆد جازعى ۋاقىتى + حوۆد ۋاقىتى + حوۆد ستاندارتتى ۋاقىتى + حوۆد جازعى ۋاقىتى - ءۇندىستان ستاندارتتى ۋاقىتى + ءۇندىستان ستاندارتتى ۋاقىتى - ءۇندى مۇحيتى ۋاقىتى + ءۇندى مۇحيتى ۋاقىتى - ءۇندى-قىتاي ۋاقىتى + ءۇندى-قىتاي ۋاقىتى - ورتالىق يندونەزيا ۋاقىتى + ورتالىق يندونەزيا ۋاقىتى - شىعىس يندونەزيا ۋاقىتى + شىعىس يندونەزيا ۋاقىتى - باتىس يندونەزيا ۋاقىتى + باتىس يندونەزيا ۋاقىتى - يران ۋاقىتى - يران ستاندارتتى ۋاقىتى - يران جازعى ۋاقىتى + يران ۋاقىتى + يران ستاندارتتى ۋاقىتى + يران جازعى ۋاقىتى - يركۋتسك ۋاقىتى - يركۋتسك ستاندارتتى ۋاقىتى - يركۋتسك جازعى ۋاقىتى + يركۋتسك ۋاقىتى + يركۋتسك ستاندارتتى ۋاقىتى + يركۋتسك جازعى ۋاقىتى - يزرايل ۋاقىتى - يزرايل ستاندارتتى ۋاقىتى - يزرايل جازعى ۋاقىتى + يزرايل ۋاقىتى + يزرايل ستاندارتتى ۋاقىتى + يزرايل جازعى ۋاقىتى - جاپونيا ۋاقىتى - جاپونيا ستاندارتتى ۋاقىتى - جاپونيا جازعى ۋاقىتى + جاپونيا ۋاقىتى + جاپونيا ستاندارتتى ۋاقىتى + جاپونيا جازعى ۋاقىتى - قازاق ەلى ۋاقىتى + قازاق ەلى ۋاقىتى - قازاق ەلى + قازاق ەلى - شىعىس قازاق ەلى ۋاقىتى + شىعىس قازاق ەلى ۋاقىتى - شىعىش قازاق ەلى + شىعىش قازاق ەلى - باتىس قازاق ەلى ۋاقىتى + باتىس قازاق ەلى ۋاقىتى - باتىس قازاق ەلى + باتىس قازاق ەلى - كورەيا ۋاقىتى - كورەيا ستاندارتتى ۋاقىتى - كورەيا جازعى ۋاقىتى + كورەيا ۋاقىتى + كورەيا ستاندارتتى ۋاقىتى + كورەيا جازعى ۋاقىتى - كۋسايە ۋاقىتى + كۋسايە ۋاقىتى - كراسنويارسك ۋاقىتى - كراسنويارسك ستاندارتتى ۋاقىتى - كراسنويارسك جازعى ۋاقىتى + كراسنويارسك ۋاقىتى + كراسنويارسك ستاندارتتى ۋاقىتى + كراسنويارسك جازعى ۋاقىتى - قىرعىزستان ۋاقىتى + قىرعىزستان ۋاقىتى - قىرعىزستان + قىرعىزستان - لاين ارالدارى ۋاقىتى + لاين ارالدارى ۋاقىتى - لورد-حاۋ ۋاقىتى - لورد-حاۋ ستاندارتتى ۋاقىتى - لورد-حاۋ جازعى ۋاقىتى + لورد-حاۋ ۋاقىتى + لورد-حاۋ ستاندارتتى ۋاقىتى + لورد-حاۋ جازعى ۋاقىتى - ماگادان ۋاقىتى - ماگادان ستاندارتتى ۋاقىتى - ماگادان جازعى ۋاقىتى + ماگادان ۋاقىتى + ماگادان ستاندارتتى ۋاقىتى + ماگادان جازعى ۋاقىتى - مالايزيا ۋاقىتى + مالايزيا ۋاقىتى - مالديۆ ارالدارى ۋاقىتى + مالديۆ ارالدارى ۋاقىتى - ماركيز ارالدارى ۋاقىتى + ماركيز ارالدارى ۋاقىتى - مارشال ارالدارى ۋاقىتى + مارشال ارالدارى ۋاقىتى - ماۆريكيي ۋاقىتى - ماۆريكيي ستاندارتتى ۋاقىتى - ماۆريكيي جازعى ۋاقىتى + ماۆريكيي ۋاقىتى + ماۆريكيي ستاندارتتى ۋاقىتى + ماۆريكيي جازعى ۋاقىتى - موۋسون ۋاقىتى + موۋسون ۋاقىتى - مەكسيكا تىنىق مۇحيت ۋاقىتى - مەكسيكا ستاندارتتى تىنىق مۇحيت ۋاقىتى - مەكسيكا جازعى تىنىق مۇحيت ۋاقىتى + مەكسيكا تىنىق مۇحيت ۋاقىتى + مەكسيكا ستاندارتتى تىنىق مۇحيت ۋاقىتى + مەكسيكا جازعى تىنىق مۇحيت ۋاقىتى - ۇلانباتىر ۋاقىتى - ۇلانباتىر ستاندارتتى ۋاقىتى - ۇلانباتىر جازعى ۋاقىتى + ۇلانباتىر ۋاقىتى + ۇلانباتىر ستاندارتتى ۋاقىتى + ۇلانباتىر جازعى ۋاقىتى - ماسكەۋ ۋاقىتى - ماسكەۋ ستاندارتتى ۋاقىتى - ماسكەۋ جازعى ۋاقىتى + ماسكەۋ ۋاقىتى + ماسكەۋ ستاندارتتى ۋاقىتى + ماسكەۋ جازعى ۋاقىتى - ميانما ۋاقىتى + ميانما ۋاقىتى - ناۋرۋ ۋاقىتى + ناۋرۋ ۋاقىتى - نەپال ۋاقىتى + نەپال ۋاقىتى - جاڭا كالەدونيا ۋاقىتى - جاڭا كالەدونيا ستاندارتتى ۋاقىتى - جاڭا كالەدونيا جازعى ۋاقىتى + جاڭا كالەدونيا ۋاقىتى + جاڭا كالەدونيا ستاندارتتى ۋاقىتى + جاڭا كالەدونيا جازعى ۋاقىتى - جاڭا زەلانديا ۋاقىتى - جاڭا زەلانديا ستاندارتتى ۋاقىتى - جاڭا زەلانديا جازعى ۋاقىتى + جاڭا زەلانديا ۋاقىتى + جاڭا زەلانديا ستاندارتتى ۋاقىتى + جاڭا زەلانديا جازعى ۋاقىتى - نيۋفاۋندلەند ۋاقىتى - نيۋفاۋندلەند ستاندارتتى ۋاقىتى - نيۋفاۋندلەند جازعى ۋاقىتى + نيۋفاۋندلەند ۋاقىتى + نيۋفاۋندلەند ستاندارتتى ۋاقىتى + نيۋفاۋندلەند جازعى ۋاقىتى - نيۋە ۋاقىتى + نيۋە ۋاقىتى - نورفولك ارالى ۋاقىتى - نورفولك ارالى ستاندارتتى ۋاقىتى - نورفولك ارالى جازعى ۋاقىتى + نورفولك ارالى ۋاقىتى + نورفولك ارالى ستاندارتتى ۋاقىتى + نورفولك ارالى جازعى ۋاقىتى - فەرناندۋ-دي-نورونيا ۋاقىتى - فەرناندۋ-دي-نورونيا ستاندارتتى ۋاقىتى - فەرناندۋ-دي-نورونيا جازعى ۋاقىتى + فەرناندۋ-دي-نورونيا ۋاقىتى + فەرناندۋ-دي-نورونيا ستاندارتتى ۋاقىتى + فەرناندۋ-دي-نورونيا جازعى ۋاقىتى - جاڭاسىبىر ۋاقىتى - جاڭاسىبىر ستاندارتتى ۋاقىتى - جاڭاسىبىر جازعى ۋاقىتى + جاڭاسىبىر ۋاقىتى + جاڭاسىبىر ستاندارتتى ۋاقىتى + جاڭاسىبىر جازعى ۋاقىتى - ومبى ۋاقىتى - ومبى ستاندارتتى ۋاقىتى - ومبى جازعى ۋاقىتى + ومبى ۋاقىتى + ومبى ستاندارتتى ۋاقىتى + ومبى جازعى ۋاقىتى - پاكىستان ۋاقىتى - پاكىستان ستاندارتتى ۋاقىتى - پاكىستان جازعى ۋاقىتى + پاكىستان ۋاقىتى + پاكىستان ستاندارتتى ۋاقىتى + پاكىستان جازعى ۋاقىتى - پالاۋ ۋاقىتى + پالاۋ ۋاقىتى - پاپۋا – جاڭا گۆينەيا ۋاقىتى + پاپۋا – جاڭا گۆينەيا ۋاقىتى - پاراگۆاي ۋاقىتى - پاراگۆاي ستاندارتتى ۋاقىتى - پاراگۆاي جازعى ۋاقىتى + پاراگۆاي ۋاقىتى + پاراگۆاي ستاندارتتى ۋاقىتى + پاراگۆاي جازعى ۋاقىتى - پەرۋ ۋاقىتى - پەرۋ ستاندارتتى ۋاقىتى - پەرۋ جازعى ۋاقىتى + پەرۋ ۋاقىتى + پەرۋ ستاندارتتى ۋاقىتى + پەرۋ جازعى ۋاقىتى - فيليپين ارالدارى ۋاقىتى - فيليپين ارالدارى ستاندارتتى ۋاقىتى - فيليپين ارالدارى جازعى ۋاقىتى + فيليپين ارالدارى ۋاقىتى + فيليپين ارالدارى ستاندارتتى ۋاقىتى + فيليپين ارالدارى جازعى ۋاقىتى - فەنيكس ارالدارى ۋاقىتى + فەنيكس ارالدارى ۋاقىتى - سەن-پەر جانە ميكەلون ۋاقىتى - سەن-پەر جانە ميكەلون ستاندارتتى ۋاقىتى - سەن-پەر جانە ميكەلون جازعى ۋاقىتى + سەن-پەر جانە ميكەلون ۋاقىتى + سەن-پەر جانە ميكەلون ستاندارتتى ۋاقىتى + سەن-پەر جانە ميكەلون جازعى ۋاقىتى - پيتكەرن ۋاقىتى + پيتكەرن ۋاقىتى - پونپەي ۋاقىتى + پونپەي ۋاقىتى - پحەنيان ۋاقىتى + پحەنيان ۋاقىتى - قىزىلوردا ۋاقىتى - قىزىلوردا ستاندارتتى ۋاقىتى - قىزىلوردا جازعى ۋاقىتى + قىزىلوردا ۋاقىتى + قىزىلوردا ستاندارتتى ۋاقىتى + قىزىلوردا جازعى ۋاقىتى - قىزىلوردا - قىزىلوردا - قىزىلوردا قالاسى + قىزىلوردا + قىزىلوردا + قىزىلوردا قالاسى - رەيۋنون ۋاقىتى + رەيۋنون ۋاقىتى - روتەرا ۋقىتى + روتەرا ۋقىتى - ساحالين ۋاقىتى - ساحالين ستاندارتتى ۋاقىتى - ساحالين جازعى ۋاقىتى + ساحالين ۋاقىتى + ساحالين ستاندارتتى ۋاقىتى + ساحالين جازعى ۋاقىتى - ساموا ۋاقىتى - ساموا ستاندارتتى ۋاقىتى - ساموا جازعى ۋاقىتى + ساموا ۋاقىتى + ساموا ستاندارتتى ۋاقىتى + ساموا جازعى ۋاقىتى - سەيشەل ارالدارى ۋاقىتى + سەيشەل ارالدارى ۋاقىتى - سينگاپۋر ستاندارتتى ۋاقىتى + سينگاپۋر ستاندارتتى ۋاقىتى - سولومون ارالدارى ۋاقىتى + سولومون ارالدارى ۋاقىتى - وڭتۇستىك گەورگيا ۋاقىتى + وڭتۇستىك گەورگيا ۋاقىتى - سۋرينام ۋاقىتى + سۋرينام ۋاقىتى - سەۆا ۋاقىتى + سەۆا ۋاقىتى - تايتي ۋاقىتى + تايتي ۋاقىتى - تايبەي ۋاقىتى - تايبەي ستاندارتتى ۋاقىتى - تايبەي جازعى ۋاقىتى + تايبەي ۋاقىتى + تايبەي ستاندارتتى ۋاقىتى + تايبەي جازعى ۋاقىتى - تاجىكستان ۋاقىتى + تاجىكستان ۋاقىتى - توكەلاۋ ۋاقىتى + توكەلاۋ ۋاقىتى - تونگا ۋاقىتى - تونگا ستاندارتتى ۋاقىتى - تونگا كازعى ۋاقىتى + تونگا ۋاقىتى + تونگا ستاندارتتى ۋاقىتى + تونگا كازعى ۋاقىتى - ترۋك ۋاقىتى + ترۋك ۋاقىتى - تۇرىكمەنستان ۋاقىتى - تۇرىكمەنستان ستاندارتتى ۋاقىتى - تۇرىكمەنستان جازعى ۋاقىتى + تۇرىكمەنستان ۋاقىتى + تۇرىكمەنستان ستاندارتتى ۋاقىتى + تۇرىكمەنستان جازعى ۋاقىتى - تۋۆالۋ ۋاقىتى + تۋۆالۋ ۋاقىتى - ۋرۋگۆاي ۋاقىتى - ۋرۋگۆاي ستاندارتتى ۋاقىتى - ۋرۋگۆاي جازعى ۋاقىتى + ۋرۋگۆاي ۋاقىتى + ۋرۋگۆاي ستاندارتتى ۋاقىتى + ۋرۋگۆاي جازعى ۋاقىتى - وزبەكستان ۋاقىتى - وزبەكستان ستاندارتتى ۋاقىتى - وزبەكستان جازعى ۋاقىتى + وزبەكستان ۋاقىتى + وزبەكستان ستاندارتتى ۋاقىتى + وزبەكستان جازعى ۋاقىتى - ۆانۋاتۋ ۋاقىتى - ۆانۋاتۋ ستاندارتتى ۋاقىتى - ۆانۋاتۋ جازعى ۋاقىتى + ۆانۋاتۋ ۋاقىتى + ۆانۋاتۋ ستاندارتتى ۋاقىتى + ۆانۋاتۋ جازعى ۋاقىتى - ۆەنەسۋەلا ۋاقىتى + ۆەنەسۋەلا ۋاقىتى - ۆلاديۆوستوك ۋاقىتى - ۆلاديۆوستوك ستاندارتتى ۋاقىتى - ۆلاديۆوستوك جازعى ۋاقىتى + ۆلاديۆوستوك ۋاقىتى + ۆلاديۆوستوك ستاندارتتى ۋاقىتى + ۆلاديۆوستوك جازعى ۋاقىتى - ۆولگوگراد ۋاقىتى - ۆولگوگراد ستاندارتتى ۋاقىتى - ۆولگوگراد جازعى ۋاقىتى + ۆولگوگراد ۋاقىتى + ۆولگوگراد ستاندارتتى ۋاقىتى + ۆولگوگراد جازعى ۋاقىتى - ۆوستوك ۋاقىتى + ۆوستوك ۋاقىتى - ۋەيك ارالى ۋاقىتى + ۋەيك ارالى ۋاقىتى - ۋولليس جانە فۋتۋنا ۋاقىتى + ۋولليس جانە فۋتۋنا ۋاقىتى - ياكۋتسك ۋاقىتى - ياكۋتسك ستاندارتتى ۋاقىتى - ياكۋتسك جازعى ۋاقىتى + ياكۋتسك ۋاقىتى + ياكۋتسك ستاندارتتى ۋاقىتى + ياكۋتسك جازعى ۋاقىتى - ەكاتەرينبۋرگ ۋاقىتى - ەكاتەرينبۋرگ ستاندارتتى ۋاقىتى - ەكاتەرينبۋرگ جازعى ۋاقىتى + ەكاتەرينبۋرگ ۋاقىتى + ەكاتەرينبۋرگ ستاندارتتى ۋاقىتى + ەكاتەرينبۋرگ جازعى ۋاقىتى - يۋكون ۋاقىتى + يۋكون ۋاقىتى - سان ەمەس + سان ەمەس - 0 مىڭ - 0 مىڭ - 00 مىڭ - 00 مىڭ - 000 مىڭ - 000 مىڭ - 0 ميلليون - 0 ميلليون - 00 ميلليون - 00 ميلليون - 000 ميلليون - 000 ميلليون - 0 ميلليارد - 0 ميلليارد - 00 ميلليارد - 00 ميلليارد - 000 ميلليارد - 000 ميلليارد - 0 تريلليون - 0 تريلليون - 00 تريلليون - 00 تريلليون - 000 تريلليون - 000 تريلليون + 0 مىڭ + 0 مىڭ + 00 مىڭ + 00 مىڭ + 000 مىڭ + 000 مىڭ + 0 ميلليون + 0 ميلليون + 00 ميلليون + 00 ميلليون + 000 ميلليون + 000 ميلليون + 0 ميلليارد + 0 ميلليارد + 00 ميلليارد + 00 ميلليارد + 000 ميلليارد + 000 ميلليارد + 0 تريلليون + 0 تريلليون + 00 تريلليون + 00 تريلليون + 000 تريلليون + 000 تريلليون - 0 مىڭ - 0 مىڭ - 00 مىڭ - 00 مىڭ - 000 مىڭ - 000 مىڭ - 0 ميلليون - 0 ميلليون - 00 ميلليون - 00 ميلليون - 000 ملن - 000 ملن - 0 ميلليارد - 0 ميلليارد - 00 ملرد - 00 ملرد - 000 ملرد - 000 ملرد - 0 تريلليون - 0 تريلليون - 00 ترلن - 00 ترلن - 000 ترلن - 000 ترلن + 0 مىڭ + 0 مىڭ + 00 مىڭ + 00 مىڭ + 000 مىڭ + 000 مىڭ + 0 ميلليون + 0 ميلليون + 00 ميلليون + 00 ميلليون + 000 ملن + 000 ملن + 0 ميلليارد + 0 ميلليارد + 00 ملرد + 00 ملرد + 000 ملرد + 000 ملرد + 0 تريلليون + 0 تريلليون + 00 ترلن + 00 ترلن + 000 ترلن + 000 ترلن - 0 مىڭ ¤ - 0 مىڭ ¤ - 00 مىڭ ¤ - 00 مىڭ ¤ - 000 مىڭ ¤ - 000 مىڭ ¤ - 0 ميلليون ¤ - 0 ميلليون ¤ - 00 ميلليون ¤ - 00 ميلليون ¤ - 000 ميلليون ¤ - 000 ميلليون ¤ - 0 ميلليارد ¤ - 0 ميلليارد ¤ - 00 ميلليارد ¤ - 00 ميلليارد ¤ - 000 ميلليارد ¤ - 000 ميلليارد ¤ - 0 تريلليون ¤ - 0 تريلليون ¤ - 00 تريلليون ¤ - 00 تريلليون ¤ - 000 تريلليون ¤ - 000 تريلليون ¤ + ¤ 0 مىڭ + ¤ 0 مىڭ + ¤ 00 مىڭ + ¤ 00 مىڭ + ¤ 000 مىڭ + ¤ 000 مىڭ + ¤ 0 ميلليون + ¤ 0 ميلليون + ¤ 00 ميلليون + ¤ 00 ميلليون + ¤ 000 ملن + ¤ 000 ملن + ¤ 0 ميلليارد + ¤ 0 ميلليارد + ¤ 00 ملرد + ¤ 00 ملرد + ¤ 000 ملرد + ¤ 000 ملرد + ¤ 0 تريلليون + ¤ 0 تريلليون + ¤ 00 ترلن + ¤ 00 ترلن + ¤ 000 ترلن + ¤ 000 ترلن - بىرىككەن اراب امىرلىكتەرىنىڭ ديرحامى - ب ا ءا ديرحامى - ب ا ءا ديرحامى + بىرىككەن اراب امىرلىكتەرىنىڭ ديرحامى + ب ا ءا ديرحامى + ب ا ءا ديرحامى - اۋعانستان افگانيى - اۋعانستان افگانيى - اۋعانستان افگانيى + اۋعانستان افگانيى - البانيا لەگى - البانيا لەگى - البانيا لەگى + البانيا لەگى - ارمەنيا درامى - ارمەنيا درامى - ارمەنيا درامى + ارمەنيا درامى - نيدەرلاند انتيل گۋلدەنى - نيدەرلاند انتيل گۋلدەنى - نيدەرلاند انتيل گۋلدەنى + نيدەرلاند انتيل گۋلدەنى - انگولا كۆانزاسى - انگولا كۆانزاسى - انگولا كۆانزاسى + انگولا كۆانزاسى - ارگەنتينا پەسوسى - ارگەنتينا پەسوسى - ارگەنتينا پەسوسى + ارگەنتينا پەسوسى - اۋستراليا دوللارى - اۋستراليا دوللارى - اۋستراليا دوللارى + اۋستراليا دوللارى - ارۋبا فلورينى - ارۋبا فلورينى - ارۋبا فلورينى + ارۋبا فلورينى - ءازىربايجان ماناتى - ءازىربايجان ماناتى - ءازىربايجان ماناتى + ءازىربايجان ماناتى - بوسنيا جانە گەرتسەگوۆينا ايىرباستالمالى ماركاسى - بوسنيا جانە گەرتسەگوۆينا ايىرباستالمالى ماركاسى - بوسنيا جانە گەرتسەگوۆينا ايىرباستالمالى ماركاسى + بوسنيا جانە گەرتسەگوۆينا ايىرباستالمالى ماركاسى - باربادوس دوللارى - باربادوس دوللارى - باربادوس دوللارى + باربادوس دوللارى - بانگلادەش تاكاسى - بانگلادەش تاكاسى - بانگلادەش تاكاسى + بانگلادەش تاكاسى - ڭولگاريا لەۆى - ڭولگاريا لەۆى - ڭولگاريا لەۆى + ڭولگاريا لەۆى - باحرەين دينارى - باحرەين دينارى - باحرەين دينارى + باحرەين دينارى - بۋرۋندي فرانكى - بۋرۋندي فرانكى - بۋرۋندي فرانكى + بۋرۋندي فرانكى - بەرمۋد دوللارى - بەرمۋد دوللارى - بەرمۋد دوللارى + بەرمۋد دوللارى - برۋنەي دوللارى - برۋنەي دوللارى - برۋنەي دوللارى + برۋنەي دوللارى - بوليۆيا بوليۆيانوسى - بوليۆيا بوليۆيانوسى - بوليۆيا بوليۆيانوسى + بوليۆيا بوليۆيانوسى - برازيليا رەالى - برازيليا رەالى - برازيليا رەالى + برازيليا رەالى - باگام دوللارى - باگام دوللارى - باگام دوللارى + باگام دوللارى - بۋتان نگۋلترۋمى - بۋتان نگۋلترۋمى - بۋتان نگۋلترۋمى + بۋتان نگۋلترۋمى - بوتسۆانا پۋلاسى - بوتسۆانا پۋلاسى - بوتسۆانا پۋلاسى + بوتسۆانا پۋلاسى - بەلارۋس رۋبىلى - بەلارۋس رۋبىلى - بەلارۋس رۋبىلى + بەلارۋس رۋبىلى - بەليز دوللارى - بەليز دوللارى - بەليز دوللارى + بەليز دوللارى - كانادا دوللارى - كانادا دوللارى - كانادا دوللارى + كانادا دوللارى - كونگو فرانكى - كونگو فرانكى - كونگو فرانكى + كونگو فرانكى - شۆەيساريا فرانكى - شۆەيساريا فرانكى - شۆەيساريا فرانكى + شۆەيساريا فرانكى - چيلي پەسوسى - چيلي پەسوسى - چيلي پەسوسى + چيلي پەسوسى - قىتاي يۋانى (وفشور) - قىتاي يۋانى (وفشور) - قىتاي يۋانى (وفشور) + قىتاي يۋانى (وفشور) - قىتاي يۋانى - قىتاي يۋانى - قىتاي يۋانى + قىتاي يۋانى - كولۋمبيا پەسوسى - كولۋمبيا پەسوسى - كولۋمبيا پەسوسى + كولۋمبيا پەسوسى - كوستا-ريكا كولونى - كوستا-ريكا كولونى - كوستا-ريكا كولونى + كوستا-ريكا كولونى - كۋبا ايىرباستالمالى پەسوسى - كۋبا ايىرباستالمالى پەسوسى - كۋبا ايىرباستالمالى پەسوسى + كۋبا ايىرباستالمالى پەسوسى - كۋبا پەسوسى - كۋبا پەسوسى - كۋبا پەسوسى + كۋبا پەسوسى - كابو-ۆەردە ەسكۋدوسى - كابو-ۆەردە ەسكۋدوسى - كابو-ۆەردە ەسكۋدوسى + كابو-ۆەردە ەسكۋدوسى - چەح كرونى - چەح كرونى - چەح كرونى + چەح كرونى - جيبۋتي فرانكى - جيبۋتي فرانكى - جيبۋتي فرانكى + جيبۋتي فرانكى - دار كرونى - دار كرونى - دار كرونى + دار كرونى - دومينيكان پەسوسى - دومينيكان پەسوسى - دومينيكان پەسوسى + دومينيكان پەسوسى - الجير دينارى - الجير دينارى - الجير دينارى + الجير دينارى - مىسىر فۋنتى - مىسىر فۋنتى - مىسىر فۋنتى + مىسىر فۋنتى - ەريترەيا ناكفاس - ەريترەيا ناكفاس - ەريترەيا ناكفاس + ەريترەيا ناكفاس - ەفيوپيا بىرى - ەفيوپيا بىرى - ەفيوپيا بىرى + ەفيوپيا بىرى - ەۋرو - ەۋرو - ەۋرو + ەۋرو - فيجي دوللارى - فيجي دوللارى - فيجي دوللارى + فيجي دوللارى - فولكلەند ارالدارىنىڭ فۋنتى - فولكلەند ارالدارىنىڭ فۋنتى - فولكلەند ارالدارىنىڭ فۋنتى + فولكلەند ارالدارىنىڭ فۋنتى - بريتاندىق فۋنت - بريتاندىق فۋنت - بريتاندىق فۋنت + بريتاندىق فۋنت - گرۋزيا لاريى - گرۋزيا لاريى - گرۋزيا لاريى + گرۋزيا لاريى - گانا سەديى - گانا سەديى - گانا سەديى + گانا سەديى - گيبراتال فۋنتى - گيبراتال فۋنتى - گيبراتال فۋنتى + گيبراتال فۋنتى - گامبيا دالاسيى - گامبيا دالاسيى - گامبيا دالاسيى + گامبيا دالاسيى - گۆينەيا فرانكى - گۆينەيا فرانكى - گۆينەيا فرانكى + گۆينەيا فرانكى - گۆاتەمالا كەتسالى - گۆاتەمالا كەتسالى - گۆاتەمالا كەتسالى + گۆاتەمالا كەتسالى - گايانا دوللارى - گايانا دوللارى - گايانا دوللارى + گايانا دوللارى - حوڭكوڭ دوللارى - حوڭكوڭ دوللارى - حوڭكوڭ دوللارى + حوڭكوڭ دوللارى - گوندۋراس ليمپيراسى - گوندۋراس ليمپيراسى - گوندۋراس ليمپيراسى + گوندۋراس ليمپيراسى - حورۆاتيا كۋناسى - حورۆاتيا كۋناسى - حورۆاتيا كۋناسى + حورۆاتيا كۋناسى - گايتي گۋردى - گايتي گۋردى - گايتي گۋردى + گايتي گۋردى - ماجار فورينتى - ماجار فورينتى - ماجار فورينتى + ماجار فورينتى - يندونەزيا رۋپياسى - يندونەزيا رۋپياسى - يندونەزيا رۋپياسى + يندونەزيا رۋپياسى - يزرايل جاڭا شەكەلى - يزرايل جاڭا شەكەلى - يزرايل جاڭا شەكەلى + يزرايل جاڭا شەكەلى - ءۇندىستان رۋپياسى - ءۇندىستان رۋپياسى - ءۇندىستان رۋپياسى + ءۇندىستان رۋپياسى - يراك دينارى - يراك دينارى - يراك دينارى + يراك دينارى - يران ريالى - يران ريالى - يران ريالى + يران ريالى - يسلانديا كروناسى - يسلانديا كروناسى - يسلانديا كروناسى + يسلانديا كروناسى - يامايكا دوللارى - يامايكا دوللارى - يامايكا دوللارى + يامايكا دوللارى - يوردانيا دينارى - يوردانيا دينارى - يوردانيا دينارى + يوردانيا دينارى - جاپون يەناسى - جاپون يەناسى - جاپون يەناسى + جاپون يەناسى - Vote كەنيا شيللينگى - Vote كەنيا شيللينگى - Vote كەنيا شيللينگى + كەنيا شيللينگى + كەنيا شيللينگى + كەنيا شيللينگى - قىرعىس سومى - قىرعىس سومى - قىرعىس سومى + قىرعىس سومى - كامبودجا ريەلى - كامبودجا ريەلى - كامبودجا ريەلى + كامبودجا ريەلى - كومور ارالدارى فرانكى - كومور ارالدارى فرانكى - كومور ارالدارى فرانكى + كومور ارالدارى فرانكى - سولتۇستىك كورەيا ۆونى - سولتۇستىك كورەيا ۆونى - سولتۇستىك كورەيا ۆونى + سولتۇستىك كورەيا ۆونى - وڭتۇستىك كورەيا ۆونى - وڭتۇستىك كورەيا ۆونى - وڭتۇستىك كورەيا ۆونى + وڭتۇستىك كورەيا ۆونى - كۋۆەيت دينارى - كۋۆەيت دينارى - كۋۆەيت دينارى + كۋۆەيت دينارى - كايمان ارالدارى دوللارى - كايمان ارالدارى دوللارى - كايمان ارالدارى دوللارى + كايمان ارالدارى دوللارى - قازاق تەڭگەسى - قازاق تەڭگەسى - قازاق تەڭگەسى - + قازاق تەڭگەسى + - لاوس كيپى - لاوس كيپى - لاوس كيپى + لاوس كيپى - ليۆان فۋنتى - ليۆان فۋنتى - ليۆان فۋنتى + ليۆان فۋنتى - شري-لانكا رۋپياسى - شري-لانكا رۋپياسى - شري-لانكا رۋپياسى + شري-لانكا رۋپياسى - ليبەريا دوللارى - ليبەريا دوللارى - ليبەريا دوللارى + ليبەريا دوللارى - لەسوتو ءلوتيى - لەسوتو ءلوتيى - لەسوتو ءلوتيى + لەسوتو ءلوتيى - ليۆيا دينارى - ليۆيا دينارى - ليۆيا دينارى + ليۆيا دينارى - ماروككو دينارى - ماروككو دينارى - ماروككو دينارى + ماروككو دينارى - مولدوۆا لەيى - مولدوۆا لەيى - مولدوۆا لەيى + مولدوۆا لەيى - مالاگاسي ءارياريى - مالاگاسي ءارياريى - مالاگاسي ءارياريى + مالاگاسي ءارياريى - ماكەدونيا دينارى - ماكەدونيا دينارى - ماكەدونيا دينارى + ماكەدونيا دينارى - ميانما كياتى - ميانما كياتى - ميانما كياتى + ميانما كياتى - موڭعوليا تۋگريكى - موڭعوليا تۋگريكى - موڭعوليا تۋگريكى + موڭعوليا تۋگريكى - ماكاو پاتاكاسى - ماكاو پاتاكاسى - ماكاو پاتاكاسى + ماكاو پاتاكاسى - ماۆريتانيا ۋگياسى - ماۆريتانيا ۋگياسى - ماۆريتانيا ۋگياسى + ماۆريتانيا ۋگياسى - ماۆريكيي رۋپياسى - ماۆريكيي رۋپياسى - ماۆريكيي رۋپياسى + ماۆريكيي رۋپياسى - مالديۆ رۋفياسى - مالديۆ رۋفياسى - مالديۆ رۋفياسى + مالديۆ رۋفياسى - مالاۆي كۆاچاسى - مالاۆي كۆاچاسى - مالاۆي كۆاچاسى + مالاۆي كۆاچاسى - مەكسيكا پەسوسى - مەكسيكا پەسوسى - مەكسيكا پەسوسى + مەكسيكا پەسوسى - مالايزيا رينگگيتى - مالايزيا رينگگيتى - مالايزيا رينگگيتى + مالايزيا رينگگيتى - موزامبيك مەتيكالى - موزامبيك مەتيكالى - موزامبيك مەتيكالى + موزامبيك مەتيكالى - ناميبيا دوللارى - ناميبيا دوللارى - ناميبيا دوللارى + ناميبيا دوللارى - نيگەريا نايراسى - نيگەريا نايراسى - نيگەريا نايراسى + نيگەريا نايراسى - نيكاراگۋا كوردوباسى - نيكاراگۋا كوردوباسى - نيكاراگۋا كوردوباسى + نيكاراگۋا كوردوباسى - نورۆەگيا كرونى - نورۆەگيا كرونى - نورۆەگيا كرونى + نورۆەگيا كرونى - نەپال رۋپياسى - نەپال رۋپياسى - نەپال رۋپياسى + نەپال رۋپياسى - جاڭا زەلانديا دوللارى - جاڭا زەلانديا دوللارى - جاڭا زەلانديا دوللارى + جاڭا زەلانديا دوللارى - ومان ريالى - ومان ريالى - ومان ريالى + ومان ريالى - پاناما بالبواسى - پاناما بالبواسى - پاناما بالبواسى + پاناما بالبواسى - پەرۋ سولى - پەرۋ سولى - پەرۋ سولى + پەرۋ سولى - پاپۋا - جاڭا گۆينەيا كيناسى - پاپۋا - جاڭا گۆينەيا كيناسى - پاپۋا - جاڭا گۆينەيا كيناسى + پاپۋا - جاڭا گۆينەيا كيناسى - فيليپپين پەسوسى - فيليپپين پەسوسى - فيليپپين پەسوسى + فيليپپين پەسوسى - پاكىستان رۋپياسى - پاكىستان رۋپياسى - پاكىستان رۋپياسى + پاكىستان رۋپياسى - پولشا زلوتىسى - پولشا زلوتىسى - پولشا زلوتىسى + پولشا زلوتىسى - پاراگۆاي گۋارانيى - پاراگۆاي گۋارانيى - پاراگۆاي گۋارانيى + پاراگۆاي گۋارانيى - كاتار ريالى - كاتار ريالى - كاتار ريالى + كاتار ريالى - رۋمىنيا لەيى - رۋمىنيا لەيى - رۋمىنيا لەيى + رۋمىنيا لەيى - سەربيا دينارى - سەربيا دينارى - سەربيا دينارى + سەربيا دينارى - رەسەي رۋبىلى - رەسەي رۋبىلى - رەسەي رۋبىلى + رەسەي رۋبىلى - رۋاندا فرانكى - رۋاندا فرانكى - رۋاندا فرانكى + رۋاندا فرانكى - ساۋد ارابياسىنىڭ ريالى - ساۋد ارابياسىنىڭ ريالى - ساۋد ارابياسىنىڭ ريالى + ساۋد ارابياسىنىڭ ريالى - سولومون ارالدارى دوللارى - سولومون ارالدارى دوللارى - سولومون ارالدارى دوللارى + سولومون ارالدارى دوللارى - سەيشەل رۋپياسى - سەيشەل رۋپياسى - سەيشەل رۋپياسى + سەيشەل رۋپياسى - سۋدان فۋنتى - سۋدان فۋنتى - سۋدان فۋنتى + سۋدان فۋنتى - شۆەسيا كرونى - شۆەسيا كرونى - شۆەسيا كرونى + شۆەسيا كرونى - سينگاپۋر دوللارى - سينگاپۋر دوللارى - سينگاپۋر دوللارى + سينگاپۋر دوللارى - اۋليە ەلەنا ارالى فۋنتى - اۋليە ەلەنا ارالى فۋنتى - اۋليە ەلەنا ارالى فۋنتى + اۋليە ەلەنا ارالى فۋنتى - سەررا-لەونە لەونەسى - سەررا-لەونە لەونەسى - سەررا-لەونە لەونەسى + سەررا-لەونە لەونەسى - سەررا-لەونە لەونەسى (1964—2022) - سەررا-لەونە لەونەسى (1964—2022) - سەررا-لەونە لەونەسى (1964—2022) + سەررا-لەونە لەونەسى (1964—2022) - سومالي شيللينگى - سومالي شيللينگى - سومالي شيللينگى + سومالي شيللينگى - سۋرينام دوللارى - سۋرينام دوللارى - سۋرينام دوللارى + سۋرينام دوللارى - وڭتۇستىك سۋدان فۋنتى - وڭتۇستىك سۋدان فۋنتى - وڭتۇستىك سۋدان فۋنتى + وڭتۇستىك سۋدان فۋنتى - سانت-تومە مەن پرينسيپي دوبراسى - سانت-تومە مەن پرينسيپي دوبراسى - سانت-تومە مەن پرينسيپي دوبراسى + سانت-تومە مەن پرينسيپي دوبراسى - سيريا فۋنتى - سيريا فۋنتى - سيريا فۋنتى + سيريا فۋنتى - سۆازيلەند ليلانگەنيى - سۆازيلەند ليلانگەنيى - سۆازيلەند ليلانگەنيى + سۆازيلەند ليلانگەنيى - تاي باتى - تاي باتى - تاي باتى + تاي باتى - تاجىك سومونيى - تاجىك سومونيى - تاجىك سومونيى + تاجىك سومونيى - تۇىكمەن ماناتى - تۇىكمەن ماناتى - تۇىكمەن ماناتى + تۇىكمەن ماناتى - تۋنيس دينارى - تۋنيس دينارى - تۋنيس دينارى + تۋنيس دينارى - تونگا پاانگاسى - تونگا پاانگاسى - تونگا پاانگاسى + تونگا پاانگاسى - تۇرىك ليراسى - تۇرىك ليراسى - تۇرىك ليراسى + تۇرىك ليراسى - ترينيداد جانە توباگو دوللارى - ترينيداد جانە توباگو دوللارى - ترينيداد جانە توباگو دوللارى + ترينيداد جانە توباگو دوللارى - جاڭا تايبەي دوللارى - جاڭا تايبەي دوللارى - جاڭا تايبەي دوللارى + جاڭا تايبەي دوللارى - تانزانيا شيللينگى - تانزانيا شيللينگى - تانزانيا شيللينگى + تانزانيا شيللينگى - ۋكراينا گريۆناسى - ۋكراينا گريۆناسى - ۋكراينا گريۆناسى + ۋكراينا گريۆناسى - ۋگاندا شيللينگى - ۋگاندا شيللينگى - ۋگاندا شيللينگى + ۋگاندا شيللينگى - ا ق ش دوللارى - ا ق ش دوللارى - ا ق ش دوللارى + ا ق ش دوللارى - ۋرۋگۆاي پەسوسى - ۋرۋگۆاي پەسوسى - ۋرۋگۆاي پەسوسى + ۋرۋگۆاي پەسوسى - وزبەك سومى - وزبەك سومى - وزبەك سومى + وزبەك سومى - ۆەنەسۋەلا بوليۆارى - ۆەنەسۋەلا بوليۆارى - ۆەنەسۋەلا بوليۆارى + ۆەنەسۋەلا بوليۆارى - ۆەتنام دونگى - ۆەتنام دونگى - ۆەتنام دونگى + ۆەتنام دونگى - ۆانۋاتۋ ۆاتۋى - ۆانۋاتۋ ۆاتۋى - ۆانۋاتۋ ۆاتۋى + ۆانۋاتۋ ۆاتۋى - ساموا تالاسى - ساموا تالاسى - ساموا تالاسى + ساموا تالاسى - ورتالىق افريكانىڭ فرانكى - ورتالىق افريكانىڭ فرانكى - ورتالىق افريكانىڭ فرانكى + ورتالىق افريكانىڭ فرانكى - شىعىس كاريب دوللارى - شىعىس كاريب دوللارى - شىعىس كاريب دوللارى + شىعىس كاريب دوللارى + + + كاريب گۋلدەرى + كاريب گۋلدەرى + كاريب گۋلدەرى - باتىس افريكانىڭ فرانكى - باتىس افريكانىڭ فرانكى - باتىس افريكانىڭ فرانكى + باتىس افريكانىڭ فرانكى - فرانسۋز پولينەزيا فرانكى - فرانسۋز پولينەزيا فرانكى - فرانسۋز پولينەزيا فرانكى + فرانسۋز پولينەزيا فرانكى - بەلگىسىز اقشا - (بەلگىسىز اقشا بىرلىگى) - (بەلگىسىز اقشا) + بەلگىسىز اقشا + (بەلگىسىز اقشا) + (بەلگىسىز اقشا) - يەمەن ريالى - يەمەن ريالى - يەمەن ريالى + يەمەن ريالى - وڭتۇستىك افريكا ءرەندى - وڭتۇستىك افريكا ءرەندى - وڭتۇستىك افريكا ءرەندى + وڭتۇستىك افريكا ءرەندى - زامبيا كۆاچاسى - زامبيا كۆاچاسى - زامبيا كۆاچاسى + زامبيا كۆاچاسى + + + زيمباب التىنى + زيمباب التىنى + زيمباب التىنى - ناۋرىزعا {0} كۇن قالدي. - ناۋرىز مەيرامىنا {0} كۇن قالدى. - مۇرات {0}- سىنىپقا كوشتى. + {0} كۇن + {0} كۇن + مۇرات {0}- سىنىپقا كوشتى. - دەسي{0} + دەسي{0} - سانتي{0} + سانتي{0} - ميلي{0} + ميلي{0} - ميكرو{0} + ميكرو{0} - نانو{0} + نانو{0} - پيكو{0} + پيكو{0} - فەمتو{0} + فەمتو{0} - اتتو{0} + اتتو{0} - زەپتو{0} + زەپتو{0} - يوكتو{0} + يوكتو{0} - رونتو{0} + رونتو{0} - كۆەكتو{0} + كۆەكتو{0} - دەكا{0} + دەكا{0} - گەكتو{0} + گەكتو{0} - كيلو{0} + كيلو{0} - مەگا{0} + مەگا{0} - گيگا{0} + گيگا{0} - تەرا{0} + تەرا{0} - پەتا{0} + پەتا{0} - ەكسا{0} + ەكسا{0} - زەتا{0} + زەتا{0} - يوتا{0} + يوتا{0} - رونا{0} + رونا{0} - كۋەتا{0} + كۋەتا{0} - كيبي{0} + كيبي{0} - مەبي{0} + مەبي{0} - گيبي{0} + گيبي{0} - تەبي{0} + تەبي{0} - پەبي{0} + پەبي{0} - ەكسبي{0} + ەكسبي{0} - زەبي{0} + زەبي{0} - يوبي{0} + يوبي{0} - شارشى {0} - شارشى {0} + شارشى {0} + شارشى {0} - تەكشە {0} - تەكشە {0} + تەكشە {0} + تەكشە {0} - - تارتىلىس كۇشى - {0} تارتىلىس كۇشى - {0} تارتىلىس كۇشى - - - مەتىر/شارشى سەكۋند - {0} مەتىر/شارشى سەكۋند - {0} مەتىر/شارشى سەكۋند - - - اينالىم - {0} اينالىم - {0} اينالىم - - - راديان - {0} راديان - {0} راديان - - - گرادۋس - {0} گرادۋس - {0} گرادۋس - - - اركمينۋت - {0} اركمينۋت - {0} اركمينۋت - - - اركسەكۋند - {0} اركسەكۋند - {0} اركسەكۋند - - - شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - - - گەكتار - {0} گەكتار - {0} گەكتار - - - شارشى مەتىر - {0} شارشى مەتىر - {0} شارشى مەتىر - {0}/شارشى مەتىر - - - شارشى سانتيمەتىر - {0} شارشى سانتيمەتىر - {0} شارشى سانتيمەتىر - {0}/شارشى سانتيمەتىر - - - شارشى ميل - {0} شارشى ميل - {0} شارشى ميل - {0}/شارشى ميل - - - اكر - {0} اكر - {0} اكر - - - شارشى يارد - {0} شارشى يارد - {0} شارشى يارد - - - شارشى فۋت - {0} شارشى فۋت - {0} شارشى فۋت - - - شارشى ديۋيم - {0} شارشى ديۋيم - {0} شارشى ديۋيم - {0} شارشى ديۋيم - - - دۋنام - {0} دۋنام - {0} دۋنام - - - كارات - {0} كارات - {0} كارات - - ميليگرام/دەسيليتىر - {0} ميليگرام/دەسيمەتىر - {0} ميليگرام/دەسيمەتىر + {0} ميليگرام/دەسيمەتىر + {0} ميليگرام/دەسيمەتىر - ميليمول/ليتىر - {0} ميليمول/ليتىر - {0} ميليمول/ليتىر + {0} ميليمول/ليتىر + {0} ميليمول/ليتىر - - ەلەمەنت - {0} ەلەمەنت - {0} ەلەمەنت + + بولىك + {0} بولىك + {0} بولىك - - ميلليوندىق ۇلەس - {0} ميلليوندىق ۇلەس - {0} ميلليوندىق ۇلەس + + {0} ميلليوندىق ۇلەس + {0} ميلليوندىق ۇلەس - پايىز - {0} پايىز - {0} پايىز + {0} پايىز + {0} پايىز - پروميللە - {0} پروميللە - {0} پروميللە + {0} پروميللە + {0} پروميللە - پروميرياد - {0} پروميرياد - {0} پروميرياد + {0} پروميرياد + {0} پروميرياد - - مول - {0} مول - {0} مول + + گليۋكوزا + {0} گليۋكوزا + {0} گليۋكوزا - ليتىر/كيلومەتىر - {0} ليتىر/كيلومەتىر - {0} ليتىر/كيلومەتىر + {0} ليتىر/كيلومەتىر + {0} ليتىر/كيلومەتىر - ليتىر/100 كيلومەتىر - {0} ليتىر/100 كيلومەتىر - {0} ليتىر/100 كيلومەتىر - - - ميل/گاللون - {0} ميل/گاللون - {0} ميل/گاللون - - - ميل/يمپ گاللون - {0} ميل/يمپ گاللون - {0} ميل/يمپ گاللون + {0} ليتىر/100 كيلومەتىر + {0} ليتىر/100 كيلومەتىر - پەتابايت - {0} پەتابايت - {0} پەتابايت + {0} پەتابايت + {0} پەتابايت - تەرابايت - {0} تەرابايت - {0} تەرابايت + {0} تەرابايت + {0} تەرابايت - تەرابيت - {0} تەرابيت - {0} تەرابيت + {0} تەرابيت + {0} تەرابيت - گيگابايت - {0} گيگابايت - {0} گيگابايت + {0} گيگابايت + {0} گيگابايت - گيگابيت - {0} گيگابيت - {0} گيگابيت + {0} گيگابيت + {0} گيگابيت - مەگابايت - {0} مەگابايت - {0} مەگابايت + {0} مەگابايت + {0} مەگابايت - مەگابيت - {0} مەگابيت - {0} مەگابيت + {0} مەگابيت + {0} مەگابيت - كيلوبايت - {0} كيلوبايت - {0} كيلوبايت + {0} كيلوبايت + {0} كيلوبايت - كيلوبيت - {0} كيلوبيت - {0} كيلوبيت + {0} كيلوبيت + {0} كيلوبيت - بايت - {0} بايت - {0} بايت + {0} بايت + {0} بايت - بيت - {0} بيت - {0} بيت - - - عاسىر - {0} عاسىر - {0} عاسىر - - - ون جىلدىق - {0} ون جىلدىق - {0} ون جىلدىق - - - جىل - {0} جىل - {0} جىل - جىلىنا {0} - - - توقسان - {0} توقسان - {0} توقسان - {0}/توقسان + {0} بيت + {0} بيت - اي - {0} اي - {0} اي - ايىنا {0} + ايىنا {0} - اپتا - {0} اپتا - {0} اپتا - اپتاسىنا {0} + اپتاسىنا {0} - كۇن - {0} كۇن - {0} كۇن - كۇنىنە {0} + كۇنىنە {0} - ساعات - {0} ساعات - {0} ساعات - ساعاتىنا {0} + ساعاتىنا {0} - مينۋت - {0} مينۋت - {0} مينۋت - مينۋتىنا {0} + مينۋتىنا {0} - سەكۋند - {0} سەكۋند - {0} سەكۋند - سەكۋندىنا {0} - - - ميليسەكۋند - {0} ميليسەكۋند - {0} ميليسەكۋند - - - ميكروسەكۋند - {0} ميكروسەكۋند - {0} ميكروسەكۋند - - - نانوسەكۋند - {0} نانوسەكۋند - {0} نانوسەكۋند - - - امپەر - {0} امپەر - {0} امپەر - - - ميليامپەر - {0} ميليامپەر - {0} ميليامپەر - - - وم - {0} وم - {0} وم - - - ۆولت - {0} ۆولت - {0} ۆولت - - - كيلوكالوريا - {0} كيلوكالوريا - {0} كيلوكالوريا - - - كالوريا - {0} كالوريا - {0} كالوريا - - - كيلوجوۋل - {0} كىلوجوۋل - {0} كىلوجوۋل - - - جوۋل - {0} جوۋل - {0} جوۋل - - - كيلوۆات-ساعات - {0} كيلوۆات-ساعات - {0} كيلوۆات-ساعات - - - ەلەكتونۆولت - {0} ەلەكترونۆولت - {0} ەلەكترونۆولت - - - بريتاندىق جىلۋ بىرلىگى - {0} بريتاندىق جىلۋ بىرلىگى - {0} بريتاندىق جىلۋ بىرلىگى - - - ا ق ش تەرمى - {0} ا ق ش تەرمى - {0} ا ق ش تەرمى - - - فۋنت-كۇش - {0} فۋنت-كۇش - {0} فۋنت-كۇش + سەكۋندىنا {0} - نيۋتون - {0} نيۋتون - {0} نيۋتون + {0} نيۋتون + {0} نيۋتون - كيلوۆات-ساعات/100 كيلومەتىر - {0} كيلوۆات-ساعات/100 كيلومەتىر - {0} كيلوۆات-ساعات/100 كيلومەتىر - - - گيگاگەرس - {0} گيگاگەرس - {0} گيگاگەرس - - - مەگاگەرس - {0} مەگاگەرس - {0} مەگاگەرس - - - كيلوگەرس - {0} كيلوگەرس - {0} كيلوگەرس - - - گەرس - {0} گەرس - {0} گەرس + {0} كيلوۆات-ساعات/100 كيلومەتىر + {0} كيلوۆات-ساعات/100 كيلومەتىر - باسپالىق em + باسپالىق em - پيكسەل + پيكسەل - مەگاپيكسەل + مەگاپيكسەل - پيكسەل/سانتيمەتىر + پيكسەل/سانتيمەتىر - پيكسەل/ديۋيم - - - جەر راديۋسى - {0} جەر راديۋسى - {0} جەر راديۋسى - - - كيلومەتىر - {0} كيلومەتىر - {0} كيلومەتىر - {0}/كيلومەتىر - - - مەتىر - {0}/مەتىر - {0}/مەتىر - {0}/مەتىر - - - دەسيمەتىر - {0}/دەسيمەتىر - {0}/دەسيمەتىر - - - سانتيمەتىر - {0}/سانتيمەتىر - {0}/سانتيمەتىر - {0}/سانتيمەتىر - - - ميليمەتىر - {0} ميليمەتىر - {0} ميليمەتىر - - - ميكرومەتىر - {0} ميكرومەتىر - {0} ميكرومەتىر - - - نانومەتىر - {0} نانومەتىر - {0} نانومەتىر - - - پيكومەتىر - {0} پيكومەتىر - {0} پيكومەتىر - - - ميل - {0} ميل - {0} ميل - - - يارد - {0} يارد - {0} يارد - - - فۋت - {0}/فۋت - {0}/فۋت - {0}/فۋت - - - ديۋيم - {0} ديۋيم - {0} ديۋيم - {0}/ديۋيم - - - پارسەك - {0} پارسەك - {0} پارسەك - - - جارىق جىلى - {0} جارىق جىلى - {0} جارىق جىلى - - - استرونوميالىق بىرلىك - {0} استرونوميالىق بىرلىك - {0} استرونوميالىق بىرلىك - - - فۋرلوڭ - {0} فۋرلوڭ - {0} فۋرلوڭ - - - فاتوم - {0} فاتوم - {0} فاتوم - - - تەڭىز ميلى - {0} تەڭىز ميلى - {0} تەڭىز ميلى - - - سكانديناۆيالىق ميل - {0} سكانديناۆيالىق ميلى - {0} سكانديناۆيالىق ميلى - - - پۋنكت - {0} پۋنكت - {0} پۋنكت - - - كۇن راديۋسى - {0} كۇن راديۋسى - {0} كۇن راديۋسى + پيكسەل/ديۋيم - ليۋكس - {0} ليۋكس - {0} ليۋكس + {0} ليۋكس + {0} ليۋكس - كاندەلا - {0} كاندەلا - {0} كاندەلا + {0} كاندەلا + {0} كاندەلا - ليۋمەن - {0} ليۋمەن - {0} ليۋمەن - - - كۇن جارىقتىعى - {0} كۇن جارىقتىعى - {0} كۇن جارىقتىعى + {0} ليۋمەن + {0} ليۋمەن - مەتىرلىك توننا - {0} مەتىرلىك توننا - {0} مەتىرلىك توننا - - - كيلوگرام - {0} كيلوگرام - {0} كيلوگرام - {0}/كيلوگرام + {0} مەتىرلىك توننا + {0} مەتىرلىك توننا - گرام - {0} گرام - {0} گرام - {0}/گرام - - - ميليگرام - {0} ميليگرام - {0} ميليگرام - - - ميكروگرام - {0} ميكروگرام - {0} ميكروگرام - - - توننا - {0} تن - {0} تن - - - ستوۋن - {0} ستوۋن - {0} ستوۋن + {0}/g - فۋنت - {0} فۋنت - {0} فۋنت - {0}/فۋنت + lb - - ۋنسيا - {0} ۋنسيا - {0} ۋنسيا - {0}/ۋنسيا - - - تروي ۋنسياسى - {0} تروۋ ۋنسياسى - {0} تروۋ ۋنسياسى - - - كارات - {0} كارات - {0} كارات - - - دالتون - {0} دالتون - {0} دالتون - - - جەر ماسساسى - {0} جەر ماسساسى - {0} جەر ماسساسى - - - كۇن ماسساسى - {0} كۇن ماسساسى - {0} كۇن ماسساسى - - - گران - {0} گران - {0} گران - - - گيگاۆات - {0} گيگاۆات - {0} گيگاۆات - - - مەگاۆات - {0} مەگاۆات - {0} مەگاۆات - - - كيلوۆات - {0} كيلوۆات - {0} كيلوۆات - - - ۆات - {0} ۆات - {0} ۆات - - - ميليۆات - {0} ميليۆات - {0} ميليۆات - - - ات كۇشى - {0} ات كۇشى - {0} ات كۇشى - - - ميليمەتىر سىناپ باعاناسى - {0} ميليمەتىر سىناپ باعاناسى - {0} ميليمەتىر سىناپ باعاناسى - - - فۋنت-كۇش/شارشى ديۋيم - {0} فۋنت-كۇش/شارشى ديۋيم - {0} فۋنت-كۇش/شارشى ديۋيم - - - ديۋيم سىناپ باعاناسى - {0} ديۋيم سىناپ باعاناسى - {0} ديۋيم سىناپ باعاناسى - - - بار - {0} بار - {0} بار - - - ميليبار - {0} ميليبار - {0} ميليبار - - - اتموسفەرا - {0} اتموسفەرا - {0} اتموسفەرا - - - پاسكال - {0} پاسكال - {0} پاسكال - - - گەكتوپاسكال - {0} گەكتوپاسكال - {0} گەكتوپاسكال - - - كيلوپاسكال - {0} كيلوپاسكال - {0} كيلوپاسكال - - - مەگاپاسكال - {0} مەگاپاسكال - {0} مەگاپاسكال - - - كيلومەتىر/ساعات - {0} كيلومەتىر/ساعات - {0} كيلومەتىر/ساعات - - - مەتىر/سەكۋند - {0} مەتىر/سەكۋند - {0} مەتىر/سەكۋند - - - ميل/ساعات - {0} ميل/ساعات - {0} ميل/ساعات - - - ءتۇيىن - {0} ءتۇيىن - {0} ءتۇيىن - - - بوفورت - {0} بوفورت - {0} بوفورت + + مەركۋري ءديۋيمى + {0} مەركۋري ءديۋيمى + {0} مەركۋري ءديۋيمى - تەمپەراتۋرا گرادۋسى - {0} گرادۋس - {0} گرادۋس + تەمپەراتۋرا گرادۋسى + {0} گرادۋس + {0} گرادۋس - سەلسي گرادۋسى - {0} سەلسي گرادۋسى - {0} سەلسي گرادۋسى + {0} سەلسي گرادۋسى + {0} سەلسي گرادۋسى - فارانگەيت گرادۋسى - {0} فارانگەيت گرادۋسى - {0} فارانگەيت گرادۋسى + {0} فارانگەيت گرادۋسى + {0} فارانگەيت گرادۋسى - كەلۆين - {0} كەلۆين - {0} كەلۆين - - - فۋنت-كۇش-فۋت - {0} فۋنت-كۇش-فۋت - {0} فۋنت-كۇش-فۋت + {0} كەلۆين + {0} كەلۆين - نيۋتون-مەتىر - {0} نيۋتون-مەتىر - {0} نيۋتون-مەتىر + {0} نيۋتون-مەتىر + {0} نيۋتون-مەتىر - - تەكشە كيلومەتىر - {0} تەكشە كيلومەتىر - {0} تەكشە كيلومەتىر - - - تەكشە مەتىر - {0} تەكشە مەتىر - {0} تەكشە مەتىر - {0}/تەكشە مەتىر - - - تەكشە سانتيمەتىر - {0} تەكشە سانتيمەتىر - {0} تەكشە سانتيمەتىر - {0}/تەكشە سانتيمەتىر - - - تەكشە ميل - {0} تەكشە ميل - {0} تەكشە ميل - - - تەكشە يارد - {0} تەكشە يارد - {0} تەكشە يارد - - - تەكشە فۋت - {0} تەكشە فۋت - {0} تەكشە فۋت - - - تەكشە ديۋيم - {0} تەكشە ديۋيم - {0} تەكشە ديۋيم - - - مەگاليتر - {0} مەگاليتر - {0} مەگاليتر - - - گەكتوليتىر - {0} گەكتوليرىر - {0} گەكتوليرىر - - - ليتىر - {0} ليتىر - {0} ليتىر - {0}/ليتىر - - - دەسيليتىر - {0} دەسيليتىر - {0} دەسيليتىر - - - سانتيليتىر - {0} سانتيليتىر - {0} سانتيليتىر - - - ميليليتىر - {0} ميليليتىر - {0} ميليليتىر - - - مەتىرلىك پينتا - {0} مەتىرلىك پينتا - {0} مەتىرلىك پينتا - - - مەتىرلىك كەسە - {0} مەتىرلىك كەسە - {0} مەتىرلىك كەسە - - - اكر-فۋت - {0} اكر-فۋت - {0} اكر-فۋت - - - بۋشەل - {0} بۋشەل - {0} بۋشەل - - - گاللون - {0} گاللون - {0} گاللون - {0}/گاللون - - - يمپ گاللون - {0} يمپ گاللون - {0} يمپ گاللون - {0} يمپ گاللون - - - كۆارتا - {0} كۆارتا - {0} كۆارتا - - - پينتا - {0} پينتا - {0} پينتا - - - كەسە - {0} كەسە - {0} كەسە - - - سۇيىق ۋنسيا - {0} سۇيىق ۋنسيا - {0} سۇيىق ۋنسيا + + سۇ. ۋن. + {0} سۇ. ۋن. + {0} سۇ. ۋن. - يمپ سۇيىق ۋنسيا - يمپ سۇيىق ۋنسيا - {0} يمپ سۇيىق ۋنسيا + يمپ سۇيىق ۋنسيا + {0} يمپ سۇيىق ۋنسيا - - اس قاسىق - {0} اس قاسىق - {0} اس قاسىق + + ستەراديان + {0} ستەراديان + {0} ستەراديان - - شاي قاسىق - {0} شاي قاسىق - {0} شاي قاسىق + + كاتال + {0} كاتال + {0} كاتال - - باررەل - {0} باررەل - {0} باررەل + + كۋلون + {0} كۋلون + {0} كۋلون - - دەسەرت قاسىعى - {0} دەسەرت قاسىعى - {0} دەسەرت قاسىعى + + فاراد + {0} فاراد + {0} فاراد - - يمپ دەسەرت قاسىعى - {0} يمپ دەسەرت قاسىعى - {0} يمپ دەسەرت قاسىعى + + حەنري + {0} حەنري + {0} حەنري - - تامشى - {0} تامشى - {0} تامشى + + سيمەنس + {0} سيمەنس + {0} سيمەنس - - دراحما - {0} دراحما - {0} دراحما + + كالو. + {0} كالو. + {0} كالو. - - جيگگەر - {0} جيگگەر - {0} جيگگەر + + بەككەرەل + {0} بەككەرەل + {0} بەككەرەل - - شوكىم - {0} شوكىم - {0} شوكىم + + زيۆەرت + {0} زيۆەرت + {0} زيۆەرت - - يمپ كۆارتا - {0} يمپ كۆارتا - {0} يمپ كۆارتا + + گىرەي + {0} گىرەي + {0} گىرەي - - جارىق - {0} جارىق - {0} جارىق + + كيلوگرام-كۇش + {0} كيلوگرام-كۇش + {0} كيلوگرام-كۇش - - ميللياردتىق ۇلەس - {0} ميىللياردتىق ۇلەس - {0} ميللياردتىق ۇلەس + + ت + {0} تەسلا + {0} تەسلا - - ءتۇن - {0} ءتۇن - {0} ءتۇن - {0}/ءتۇن + + ۋەبەر + {0} ۋەبەر + {0} ۋەبەر + + + {0} ميللياردتىق ۇلەس + {0} ميللياردتىق ۇلەس - نەگىزگى باعىت - {0} شىعىس - {0} سولتۇستىك - {0} وڭتۇستىك - {0} باتىس + نەگىزگى باعىت + {0} شىعىس + {0} سولتۇستىك + {0} وڭتۇستىك + {0} باتىس - د{0} + د{0} - س{0} + س{0} - مل{0} + مل{0} - مك{0} + مك{0} - ن{0} + ن{0} - پ{0} + پ{0} - ف{0} + ف{0} - ا{0} + ا{0} - ز{0} + ز{0} - ي{0} + ي{0} - ر{0} + ر{0} - ك{0} + ك{0} - دا{0} + دا{0} - گ{0} + گ{0} - كل{0} + كل{0} - مگ{0} + مگ{0} - گگ{0} + گگ{0} - ت{0} + ت{0} - پت{0} + پت{0} - ە{0} + ە{0} - زت{0} + زت{0} - يت{0} + يت{0} - رن{0} + رن{0} - كت{0} + كت{0} - كي{0} + كي{0} - مب{0} + مب{0} - گي{0} + گي{0} - تب{0} + تب{0} - پب{0} + پب{0} - ەب{0} + ەب{0} - زب{0} + زب{0} - يب{0} + يب{0} - تارتىلىس كۇشى - {0} تارتىلىس كۇشى - {0} تارتىلىس كۇشى + تارتىلىس كۇشى + {0} تارتىلىس كۇشى + {0} تارتىلىس كۇشى - مەتىر/شارشى سەكۋند - {0} مەتىر/شارشى سەكۋند - {0} مەتىر/شارشى سەكۋند + مەتىر/شارشى سەكۋند + {0} مەتىر/شارشى سەكۋند + {0} مەتىر/شارشى سەكۋند - اينالىم - {0} اينالىم - {0} اينالىم + اينالىم + {0} اينالىم + {0} اينالىم - راديان - {0} راديان - {0} راديان + راديان + {0} راديان + {0} راديان - گرادۋس - {0} گرادۋس - {0} گرادۋس + گرادۋس + {0} گرادۋس + {0} گرادۋس - اركمينۋت - {0} اركمينۋت - {0} اركمينۋت + اركمينۋت + {0} اركمينۋت + {0} اركمينۋت - اركسەكۋند - {0} اركسەكۋند - {0} اركسەكۋند + اركسەكۋند + {0} اركسەكۋند + {0} اركسەكۋند - شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - {0}/شارشى كيلومەتىر + شارشى كيلومەتىر + {0}/شارشى كيلومەتىر + {0}/شارشى كيلومەتىر + {0}/شارشى كيلومەتىر - گەكتار - {0} گەكتار - {0} گەكتار + گەكتار + {0} گەكتار + {0} گەكتار - شارشى مەتىر - {0} شارشى مەتىر - {0} شارشى مەتىر - {0}/شارشى مەتىر + شارشى مەتىر + {0} شارشى مەتىر + {0} شارشى مەتىر + {0}/شارشى مەتىر - شارشى سانتيمەتىر - {0} شارشى سانتيمەتىر - {0} شارشى سانتيمەتىر - {0}/شارشى سانتيمەتىر + شارشى سانتيمەتىر + {0} شارشى سانتيمەتىر + {0} شارشى سانتيمەتىر + {0}/شارشى سانتيمەتىر - شارشى ميل - {0} شارشى ميل - {0} شارشى ميل - {0}/شارشى ميل + شارشى ميل + {0} شارشى ميل + {0} شارشى ميل + {0}/شارشى ميل - اكر - {0} اكر - {0} اكر + اكر + {0} اكر + {0} اكر - شارشى يارد - {0} شارشى يارد - {0} شارشى يارد + شارشى يارد + {0} شارشى يارد + {0} شارشى يارد - شارشى فۋت - {0} شارشى فۋت - {0} شارشى فۋت + شارشى فۋت + {0} شارشى فۋت + {0} شارشى فۋت - شارشى ديۋيم - {0} شارشى ديۋيم - {0} شارشى ديۋيم - {0} شارشى ديۋيم + شارشى ديۋيم + {0} شارشى ديۋيم + {0} شارشى ديۋيم + {0} شارشى ديۋيم - دۋنام - {0} دۋنام - {0} دۋنام + دۋنام + {0} دۋنام + {0} دۋنام - كارات - {0} كارات - {0} كارات + كارات + {0} كارات + {0} كارات - ميليگرام/دەسيليتىر + ميليگرام/دەسيليتىر - ميليمول/ليتىر + ميليمول/ليتىر - ەلەمەنت - {0} ەلەمەنت - {0} ەلەمەنت + ەلەمەنت + {0} ەلەمەنت + {0} ەلەمەنت - - ميلليوندىق ۇلەس + + بولىك + {0} بولىك + {0} بولىك + + + ميلليوندىق ۇلەس + {0} ميلليوندىق ۇلەس + {0} ميلليوندىق ۇلەس - پايىز + پايىز - پروميللە + پروميللە - پروميرياد + پروميرياد - مول - {0} مول - {0} مول + مول + {0} مول + {0} مول + + + گليۋكوزا + {0} گليۋكوزا + {0} گليۋكوزا - ليتىر/كيلومەتىر + ليتىر/كيلومەتىر - ليتىر/100 كيلومەتىر + ليتىر/100 كيلومەتىر - ميل/گاللون - {0} ميل/گاللون - {0} ميل/گاللون + ميل/گاللون + {0} ميل/گاللون + {0} ميل/گاللون - ميل/يمپ گاللون - {0} ميل/يمپ گاللون - {0} ميل/يمپ گاللون + ميل/يمپ گاللون + {0} ميل/يمپ گاللون + {0} ميل/يمپ گاللون - پەتابايت + پەتابايت - تەرابايت + تەرابايت - تەرابيت + تەرابيت - گيگابايت + گيگابايت - گيگابيت + گيگابيت - مەگابايت + مەگابايت - مەگابيت + مەگابيت - كيلوبايت + كيلوبايت - كيلوبيت + كيلوبيت - بايت + بايت - بيت + بيت - عاسىر - {0} عاسىر - {0} عاسىر + عاسىر + {0} عاسىر + {0} عاسىر - ون جىلدىق - {0} ون جىلدىق - {0} ون جىلدىق + ون جىلدىق + {0} ون جىلدىق + {0} ون جىلدىق - جىل - {0} جىل - {0} جىل - جىلىنا {0} + جىل + {0} جىل + {0} جىل + جىلىنا {0} - توقسان - {0} توقسان - {0} توقسان - {0}/توقسان + توقسان + {0} توقسان + {0} توقسان + {0}/توقسان - اي - {0} اي - {0} اي - {0}/اي + اي + {0} اي + {0} اي + {0}/اي - اپتا - {0} اپتا - {0} اپتا - {0}/اپتا + اپتا + {0} اپتا + {0} اپتا + {0}/اپتا - كۇن - {0} كۇن - {0} كۇن - {0}/كۇن + كۇن + {0} كۇن + {0} كۇن + {0}/كۇن - ساعات - {0} ساعات - {0} ساعات - {0}/ساعات + ساعات + {0} ساعات + {0} ساعات + {0}/ساعات - مينۋت - {0} مينۋت - {0} مينۋت - {0}/مينۋت + مينۋت + {0} مينۋت + {0} مينۋت + {0}/مينۋت - سەكۋند - {0} سەكۋند - {0} سەكۋند - {0}/سەكۋند + سەكۋند + {0} سەكۋند + {0} سەكۋند + {0}/سەكۋند - ميليسەكۋند - {0} ميليسەكۋند - {0} ميليسەكۋند + ميليسەكۋند + {0} ميليسەكۋند + {0} ميليسەكۋند - ميكروسەكۋند - {0} ميكروسەكۋند - {0} ميكروسەكۋند + ميكروسەكۋند + {0} ميكروسەكۋند + {0} ميكروسەكۋند - نانوسەكۋند - {0} نانوسەكۋند - {0} نانوسەكۋند + نانوسەكۋند + {0} نانوسەكۋند + {0} نانوسەكۋند - امپەر - {0} امپەر - {0} امپەر + امپەر + {0} امپەر + {0} امپەر - ميليامپەر - {0} ميليامپەر - {0} ميليامپەر + ميليامپەر + {0} ميليامپەر + {0} ميليامپەر - وم - {0} وم - {0} وم + وم + {0} وم + {0} وم - ۆولت - {0} ۆولت - {0} ۆولت + ۆولت + {0} ۆولت + {0} ۆولت - كيلوكالوريا - {0} كيلوكالوريا - {0} كيلوكالوريا + كيلوكالوريا + {0} كيلوكالوريا + {0} كيلوكالوريا - كالوريا - {0} كالوريا - {0} كالوريا + كالوريا + {0} كالوريا + {0} كالوريا - كيلوجوۋل - {0} كىلوجوۋل - {0} كىلوجوۋل + كيلوجوۋل + {0} كىلوجوۋل + {0} كىلوجوۋل - جوۋل - {0} جوۋل - {0} جوۋل + جوۋل + {0} جوۋل + {0} جوۋل - كيلوۆات-ساعات - {0} كيلوۆات-ساعات - {0} كيلوۆات-ساعات + كيلوۆات-ساعات + {0} كيلوۆات-ساعات + {0} كيلوۆات-ساعات - ەلەكتونۆولت - {0} ەلەكترونۆولت - {0} ەلەكترونۆولت + ەلەكتونۆولت + {0} ەلەكترونۆولت + {0} ەلەكترونۆولت - بريتاندىق جىلۋ بىرلىگى - {0} بريتاندىق جىلۋ بىرلىگى - {0} بريتاندىق جىلۋ بىرلىگى + بريتاندىق جىلۋ بىرلىگى + {0} بريتاندىق جىلۋ بىرلىگى + {0} بريتاندىق جىلۋ بىرلىگى - ا ق ش تەرمى - {0} ا ق ش تەرمى - {0} ا ق ش تەرمى + ا ق ش تەرمى + {0} ا ق ش تەرمى + {0} ا ق ش تەرمى - فۋنت-كۇش - {0} فۋنت-كۇش - {0} فۋنت-كۇش + فۋنت-كۇش + {0} فۋنت-كۇش + {0} فۋنت-كۇش - نيۋتون + نيۋتون - كيلوۆات-ساعات/100 كيلومەتىر + كيلوۆات-ساعات/100 كيلومەتىر - گيگاگەرس - {0} گيگاگەرس - {0} گيگاگەرس + گيگاگەرس + {0} گيگاگەرس + {0} گيگاگەرس - مەگاگەرس - {0} مەگاگەرس - {0} مەگاگەرس + مەگاگەرس + {0} مەگاگەرس + {0} مەگاگەرس - كيلوگەرس - {0} كيلوگەرس - {0} كيلوگەرس + كيلوگەرس + {0} كيلوگەرس + {0} كيلوگەرس - گەرس - {0} گەرس - {0} گەرس + گەرس + {0} گەرس + {0} گەرس - جەر راديۋسى - {0} جەر راديۋسى - {0} جەر راديۋسى + جەر راديۋسى + {0} جەر راديۋسى + {0} جەر راديۋسى - كيلومەتىر - {0} كيلومەتىر - {0} كيلومەتىر - {0}/كيلومەتىر + كيلومەتىر + {0} كيلومەتىر + {0} كيلومەتىر + {0}/كيلومەتىر - مەتىر - {0}/مەتىر - {0}/مەتىر - {0}/مەتىر + مەتىر + {0}/مەتىر + {0}/مەتىر + {0}/مەتىر - دەسيمەتىر - {0}/دەسيمەتىر - {0}/دەسيمەتىر + دەسيمەتىر + {0}/دەسيمەتىر + {0}/دەسيمەتىر - سانتيمەتىر - {0}/سانتيمەتىر - {0}/سانتيمەتىر - {0}/سانتيمەتىر + سانتيمەتىر + {0}/سانتيمەتىر + {0}/سانتيمەتىر + {0}/سانتيمەتىر - ميليمەتىر - {0} ميليمەتىر - {0} ميليمەتىر + ميليمەتىر + {0} ميليمەتىر + {0} ميليمەتىر - ميكرومەتىر - {0} ميكرومەتىر - {0} ميكرومەتىر + ميكرومەتىر + {0} ميكرومەتىر + {0} ميكرومەتىر - نانومەتىر - {0} نانومەتىر - {0} نانومەتىر + نانومەتىر + {0} نانومەتىر + {0} نانومەتىر - پيكومەتىر - {0} پيكومەتىر - {0} پيكومەتىر + پيكومەتىر + {0} پيكومەتىر + {0} پيكومەتىر - ميل - {0} ميل - {0} ميل + ميل + {0} ميل + {0} ميل - يارد - {0} يارد - {0} يارد + يارد + {0} يارد + {0} يارد - فۋت - {0}/فۋت - {0}/فۋت - {0}/فۋت + فۋت + {0}/فۋت + {0}/فۋت + {0}/فۋت - ديۋيم - {0} ديۋيم - {0} ديۋيم - {0}/ديۋيم + ديۋيم + {0} ديۋيم + {0} ديۋيم + {0}/ديۋيم - پارسەك - {0} پارسەك - {0} پارسەك + پارسەك + {0} پارسەك + {0} پارسەك - جارىق جىلى - {0} جارىق جىلى - {0} جارىق جىلى + جارىق جىلى + {0} جارىق جىلى + {0} جارىق جىلى - استرونوميالىق بىرلىك - {0} استرونوميالىق بىرلىك - {0} استرونوميالىق بىرلىك + استرونوميالىق بىرلىك + {0} استرونوميالىق بىرلىك + {0} استرونوميالىق بىرلىك - فۋرلوڭ - {0} فۋرلوڭ - {0} فۋرلوڭ + فۋرلوڭ + {0} فۋرلوڭ + {0} فۋرلوڭ - فاتوم - {0} فاتوم - {0} فاتوم + فاتوم + {0} فاتوم + {0} فاتوم - تەڭىز ميلى - {0} تەڭىز ميلى - {0} تەڭىز ميلى + تەڭىز ميلى + {0} تەڭىز ميلى + {0} تەڭىز ميلى - سكانديناۆيالىق ميل - {0} سكانديناۆيالىق ميلى - {0} سكانديناۆيالىق ميلى + سكانديناۆيالىق ميل + {0} سكانديناۆيالىق ميلى + {0} سكانديناۆيالىق ميلى - پۋنكت - {0} پۋنكت - {0} پۋنكت + پۋنكت + {0} پۋنكت + {0} پۋنكت - كۇن راديۋسى - {0} كۇن راديۋسى - {0} كۇن راديۋسى + كۇن راديۋسى + {0} كۇن راديۋسى + {0} كۇن راديۋسى - ليۋكس + ليۋكس - كاندەلا + كاندەلا - ليۋمەن + ليۋمەن - كۇن جارىقتىعى - {0} كۇن جارىقتىعى - {0} كۇن جارىقتىعى + كۇن جارىقتىعى + {0} كۇن جارىقتىعى + {0} كۇن جارىقتىعى - مەتىرلىك توننا - {0} توننا - {0} توننا + مەتىرلىك توننا + {0} توننا + {0} توننا - كيلوگرام - {0} كيلوگرام - {0} كيلوگرام - {0}/كيلوگرام + كيلوگرام + {0} كگ + {0} كگ + {0}‎/kg - گرام - {0} گرام - {0} گرام - {0}/گرام + گرام + {0} گرام + {0} گرام - ميليگرام - {0} ميليگرام - {0} ميليگرام + {0} ميليگرام + {0} ميليگرام - ميكروگرام - {0} ميكروگرام - {0} ميكروگرام + ميكروگرام + {0} ميكروگرام + {0} ميكروگرام - توننا - {0} تن - {0} تن + توننا + {0} تن + {0} تن - ستوۋن - {0} ستوۋن - {0} ستوۋن + ستوۋن + {0} ستوۋن + {0} ستوۋن - فۋنت - {0} فۋنت - {0} فۋنت - {0}/فۋنت + {0} فۋنت + {0} فۋنت + {0}/فۋنت - ۋنسيا - {0} ۋنسيا - {0} ۋنسيا - {0}/ۋنسيا + ۋنسيا + {0} ۋنسيا + {0} ۋنسيا + {0}/ۋنسيا - تروي ۋنسياسى - {0} تروۋ ۋنسياسى - {0} تروۋ ۋنسياسى + تروي ۋنسياسى + {0} تروۋ ۋنسياسى + {0} تروۋ ۋنسياسى - كارات - {0} كارات - {0} كارات + كارات + {0} كارات + {0} كارات - دالتون - {0} دالتون - {0} دالتون + دالتون + {0} دالتون + {0} دالتون - جەر ماسساسى - {0} جەر ماسساسى - {0} جەر ماسساسى + جەر ماسساسى + {0} M⊕ + {0} M⊕ - كۇن ماسساسى - {0} كۇن ماسساسى - {0} كۇن ماسساسى + كۇن ماسساسى + {0} M☉ + {0} M☉ - گران - {0} گران - {0} گران + گران + {0} گران + {0} گران - گيگاۆات - {0} گيگاۆات - {0} گيگاۆات + گيگاۆات + {0} گيگاۆات + {0} گيگاۆات - مەگاۆات - {0} مەگاۆات - {0} مەگاۆات + مەگاۆات + {0} مەگاۆات + {0} مەگاۆات - كيلوۆات - {0} كيلوۆات - {0} كيلوۆات + كيلوۆات + {0} كيلوۆات + {0} كيلوۆات - ۆات - {0} ۆات - {0} ۆات + ۆات + {0} ۆات + {0} ۆات - ميليۆات - {0} ميليۆات - {0} ميليۆات + ميليۆات + {0} ميليۆات + {0} ميليۆات - ات كۇشى - {0} ات كۇشى - {0} ات كۇشى + ات كۇشى + {0} ات كۇشى + {0} ات كۇشى - ميليمەتىر سىناپ باعاناسى - {0} ميليمەتىر سىناپ باعاناسى - {0} ميليمەتىر سىناپ باعاناسى + ميليمەتىر سىناپ باعاناسى + {0} ميليمەتىر سىناپ باعاناسى + {0} ميليمەتىر سىناپ باعاناسى + + + مەركۋري ءديۋيمى + {0} مەركۋري ءديۋيمى + {0} مەركۋري ءديۋيمى - فۋنت-كۇش/شارشى ديۋيم - {0} فۋنت-كۇش/شارشى ديۋيم - {0} فۋنت-كۇش/شارشى ديۋيم + فۋنت-كۇش/شارشى ديۋيم + {0} فۋنت-كۇش/شارشى ديۋيم + {0} فۋنت-كۇش/شارشى ديۋيم - ديۋيم سىناپ باعاناسى - {0} ديۋيم سىناپ باعاناسى - {0} ديۋيم سىناپ باعاناسى + ديۋيم سىناپ باعاناسى + {0} ديۋيم سىناپ باعاناسى + {0} ديۋيم سىناپ باعاناسى - بار - {0} بار - {0} بار + بار + {0} بار + {0} بار - ميليبار - {0} ميليبار - {0} ميليبار + ميليبار + {0} ميليبار + {0} ميليبار - اتموسفەرا - {0} اتموسفەرا - {0} اتموسفەرا + اتموسفەرا + {0} اتموسفەرا + {0} اتموسفەرا - پاسكال - {0} پاسكال - {0} پاسكال + پاسكال + {0} پاسكال + {0} پاسكال - گەكتوپاسكال - {0} گەكتوپاسكال - {0} گەكتوپاسكال + گەكتوپاسكال + {0} گەكتوپاسكال + {0} گەكتوپاسكال - كيلوپاسكال - {0} كيلوپاسكال - {0} كيلوپاسكال + كيلوپاسكال + {0} كيلوپاسكال + {0} كيلوپاسكال - مەگاپاسكال - {0} مەگاپاسكال - {0} مەگاپاسكال + مەگاپاسكال + {0} مەگاپاسكال + {0} مەگاپاسكال - كيلومەتىر/ساعات - {0} كيلومەتىر/ساعات - {0} كيلومەتىر/ساعات + كيلومەتىر/ساعات + {0} كيلومەتىر/ساعات + {0} كيلومەتىر/ساعات - مەتىر/سەكۋند - {0} مەتىر/سەكۋند - {0} مەتىر/سەكۋند + مەتىر/سەكۋند + {0} مەتىر/سەكۋند + {0} مەتىر/سەكۋند - ميل/ساعات - {0} ميل/ساعات - {0} ميل/ساعات + ميل/ساعات + {0} ميل/ساعات + {0} ميل/ساعات - ءتۇيىن - {0} ءتۇيىن - {0} ءتۇيىن + ءتۇيىن + {0} ءتۇيىن + {0} ءتۇيىن - بوفورت - {0} بوفورت - {0} بوفورت + بوفورت + {0} بوفورت + {0} بوفورت - سەلسي گرادۋسى + سەلسي گرادۋسى - فارانگەيت گرادۋسى + فارانگەيت گرادۋسى - كەلۆين + كەلۆين - فۋنت-كۇش-فۋت - {0} فۋنت-كۇش-فۋت - {0} فۋنت-كۇش-فۋت + فۋنت-كۇش-فۋت + {0} فۋنت-كۇش-فۋت + {0} فۋنت-كۇش-فۋت - نيۋتون-مەتىر + نيۋتون-مەتىر - تەكشە كيلومەتىر - {0} تەكشە كيلومەتىر - {0} تەكشە كيلومەتىر + تەكشە كيلومەتىر + {0} تەكشە كيلومەتىر + {0} تەكشە كيلومەتىر - تەكشە مەتىر - {0} تەكشە مەتىر - {0} تەكشە مەتىر - {0}/تەكشە مەتىر + تەكشە مەتىر + {0} تەكشە مەتىر + {0} تەكشە مەتىر + {0}/تەكشە مەتىر - تەكشە سانتيمەتىر - {0} تەكشە سانتيمەتىر - {0} تەكشە سانتيمەتىر - {0}/تەكشە سانتيمەتىر + تەكشە سانتيمەتىر + {0} تەكشە سانتيمەتىر + {0} تەكشە سانتيمەتىر + {0}/تەكشە سانتيمەتىر - تەكشە ميل - {0} تەكشە ميل - {0} تەكشە ميل + تەكشە ميل + {0} تەكشە ميل + {0} تەكشە ميل - تەكشە يارد - {0} تەكشە يارد - {0} تەكشە يارد + تەكشە يارد + {0} تەكشە يارد + {0} تەكشە يارد - تەكشە فۋت - {0} تەكشە فۋت - {0} تەكشە فۋت + تەكشە فۋت + {0} تەكشە فۋت + {0} تەكشە فۋت - تەكشە ديۋيم - {0} تەكشە ديۋيم - {0} تەكشە ديۋيم + تەكشە ديۋيم + {0} تەكشە ديۋيم + {0} تەكشە ديۋيم - مەگاليتر - {0} مەگاليتر - {0} مەگاليتر + مەگاليتر + {0} مەگاليتر + {0} مەگاليتر - گەكتوليتىر - {0} گەكتوليرىر - {0} گەكتوليرىر + گەكتوليتىر + {0} گەكتوليرىر + {0} گەكتوليرىر - ليتىر - {0} ليتىر - {0} ليتىر - {0}/ليتىر + ليتىر + {0} ليتىر + {0} ليتىر + {0}/ليتىر - دەسيليتىر - {0} دەسيليتىر - {0} دەسيليتىر + دەسيليتىر + {0} دەسيليتىر + {0} دەسيليتىر - سانتيليتىر - {0} سانتيليتىر - {0} سانتيليتىر + سانتيليتىر + {0} سانتيليتىر + {0} سانتيليتىر - ميليليتىر - {0} ميليليتىر - {0} ميليليتىر + ميليليتىر + {0} ميليليتىر + {0} ميليليتىر - مەتىرلىك پينتا - {0} مەتىرلىك پينتا - {0} مەتىرلىك پينتا + مەتىرلىك پينتا + {0} مەتىرلىك پينتا + {0} مەتىرلىك پينتا - مەتىرلىك كەسە - {0} مەتىرلىك كەسە - {0} مەتىرلىك كەسە + مەتىرلىك كەسە + {0} مەتىرلىك كەسە + {0} مەتىرلىك كەسە + + + سۇ. ۋن. + {0} سۇ. ۋن. + {0} سۇ. ۋن. - اكر-فۋت - {0} اكر-فۋت - {0} اكر-فۋت + اكر-فۋت + {0} اكر-فۋت + {0} اكر-فۋت - بۋشەل - {0} بۋشەل - {0} بۋشەل + بۋشەل + {0} بۋشەل + {0} بۋشەل - گاللون - {0} گاللون - {0} گاللون - {0}/گاللون + گاللون + {0} گاللون + {0} گاللون + {0}/گاللون - يمپ گاللون - {0} يمپ گاللون - {0} يمپ گاللون - {0} يمپ گاللون + يمپ گاللون + {0} يمپ گاللون + {0} يمپ گاللون + {0} يمپ گاللون - كۆارتا - {0} كۆارتا - {0} كۆارتا + كۆارتا + {0} كۆارتا + {0} كۆارتا - پينتا - {0} پينتا - {0} پينتا + پينتا + {0} پينتا + {0} پينتا - كەسە - {0} كەسە - {0} كەسە + كەسە + {0} كەسە + {0} كەسە - سۇيىق ۋنسيا - {0} سۇيىق ۋنسيا - {0} سۇيىق ۋنسيا + سۇيىق ۋنسيا + {0} سۇيىق ۋنسيا + {0} سۇيىق ۋنسيا - يمپ سۇيىق ۋنسيا - {0} يمپ سۇيىق ۋنسيا - {0} يمپ سۇيىق ۋنسيا + يمپ سۇيىق ۋنسيا + {0} يمپ سۇيىق ۋنسيا + {0} يمپ سۇيىق ۋنسيا - اس قاسىق - {0} اس قاسىق - {0} اس قاسىق + اس قاسىق + {0} اس قاسىق + {0} اس قاسىق - شاي قاسىق - {0} شاي قاسىق - {0} شاي قاسىق + شاي قاسىق + {0} شاي قاسىق + {0} شاي قاسىق - باررەل - {0} باررەل - {0} باررەل + باررەل + {0} باررەل + {0} باررەل - دەسەرت قاسىعى - {0} دەسەرت قاسىعى - {0} دەسەرت قاسىعى + دەسەرت قاسىعى + {0} دەسەرت قاسىعى + {0} دەسەرت قاسىعى - يمپ دەسەرت قاسىعى - {0} يمپ دەسەرت قاسىعى - {0} يمپ دەسەرت قاسىعى + يمپ دەسەرت قاسىعى + {0} يمپ دەسەرت قاسىعى + {0} يمپ دەسەرت قاسىعى - تامشى - {0} تامشى - {0} تامشى + تامشى + {0} تامشى + {0} تامشى - دراحما - {0} دراحما - {0} دراحما + دراحما + {0} دراحما + {0} دراحما - جيگگەر - {0} جيگگەر - {0} جيگگەر + جيگگەر + {0} جيگگەر + {0} جيگگەر - شوكىم - {0} شوكىم - {0} شوكىم + شوكىم + {0} شوكىم + {0} شوكىم - يمپ كۆارتا - {0} يمپ كۆارتا - {0} يمپ كۆارتا + يمپ كۆارتا + {0} يمپ كۆارتا + {0} يمپ كۆارتا + + + ستەراديان + {0} sr + {0} sr + + + كاتال + {0} كاتال + {0} كاتال + + + كۋلون + {0} كۋلون + {0} كۋلون + + + فاراد + {0} فاراد + {0} فاراد + + + حەنري + {0} حەنري + {0} حەنري + + + سيمەنس + {0} S + {0} S + + + كالو. + {0} كالو. + {0} كالو. + + + بەككەرەل + {0} بك + {0} بك + + + زيۆەرت + {0} زيۆەرت + {0} زيۆەرت + + + گىرەي + {0} گىرەي + {0} گىرەي + + + كيلوگرام-كۇش + {0} كيلوگرام-كۇش + {0} كيلوگرام-كۇش + + + ت + {0} تەسلا + {0} تەسلا + + + ۋەبەر + {0} ۋەبەر + {0} ۋەبەر - جارىق - {0} جارىق - {0} جارىق + جارىق + {0} جارىق + {0} جارىق - - ميللياردتىق ۇلەس + + ميللياردتىق ۇلەس + {0} ميللياردتىق ۇلەس + {0} ميللياردتىق ۇلەس - ءتۇن - {0} ءتۇن - {0} ءتۇن - {0}/ءتۇن + ءتۇن + {0} ءتۇن + {0} ءتۇن + {0}/ءتۇن - باعىت - {0} ش - {0} س - {0} و - {0} ب + باعىت + {0} ش + {0} س + {0} و + {0} ب - - د{0} - - - س{0} - - - مل{0} - - - مك{0} - - - ن{0} - - - پ{0} - - - ف{0} - - - ا{0} - - - ز{0} - - - ي{0} - - - ر{0} - - - ك{0} - - - دا{0} - - - گ{0} - - - كل{0} - - - مگ{0} - - - گگ{0} - - - ت{0} - - - پت{0} - - - ە{0} - - - زت{0} - - - يت{0} - - - رن{0} - - - كت{0} - - - كي{0} - - - مب{0} - - - گي{0} - - - تب{0} - - - پب{0} - - - ەب{0} - - - زب{0} - - - يب{0} - - - تارتىلىس كۇشى - {0} تارتىلىس كۇشى - {0} تارتىلىس كۇشى + + بولىك + {0} بولىك + {0} بولىك - - مەتىر/شارشى سەكۋند - {0} مەتىر/شارشى سەكۋند - {0} مەتىر/شارشى سەكۋند + + {0} ميلليوندىق ۇلەس + {0} ميلليوندىق ۇلەس - - اينالىم - {0} اينالىم - {0} اينالىم - - - راديان - {0} راديان - {0} راديان - - - گرادۋس - - - اركمينۋت - - - اركسەكۋند - - - شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - {0}/شارشى كيلومەتىر - - - گەكتار - {0} گەكتار - {0} گەكتار - - - شارشى مەتىر - {0} شارشى مەتىر - {0} شارشى مەتىر - {0}/شارشى مەتىر - - - شارشى سانتيمەتىر - {0} شارشى سانتيمەتىر - {0} شارشى سانتيمەتىر - {0}/شارشى سانتيمەتىر - - - شارشى ميل - {0} شارشى ميل - {0} شارشى ميل - {0}/شارشى ميل - - - اكر - {0} اكر - {0} اكر - - - شارشى يارد - {0} شارشى يارد - {0} شارشى يارد - - - شارشى فۋت - {0} شارشى فۋت - {0} شارشى فۋت - - - شارشى ديۋيم - {0} شارشى ديۋيم - {0} شارشى ديۋيم - {0} شارشى ديۋيم - - - دۋنام - {0} دۋنام - {0} دۋنام - - - كارات - {0} كارات - {0} كارات - - - ميليگرام/دەسيليتىر - - - ميليمول/ليتىر - - - ەلەمەنت - {0} ەلەمەنت - {0} ەلەمەنت - - - ميلليوندىق ۇلەس - - - مول - {0} مول - {0} مول - - - ليتىر/كيلومەتىر - - - ليتىر/100 كيلومەتىر - - - ميل/گاللون - {0} ميل/گاللون - {0} ميل/گاللون - - - ميل/يمپ گاللون - {0} ميل/يمپ گاللون - {0} ميل/يمپ گاللون + + گليۋكوزا + {0} گليۋكوزا + {0} گليۋكوزا - B - - - عاسىر - {0} عاسىر - {0} عاسىر - - - ون جىلدىق - {0} ون جىلدىق - {0} ون جىلدىق - - - جىل - {0} جىل - {0} جىل - جىلىنا {0} - - - توقسان - {0} توقسان - {0} توقسان - {0}/توقسان - - - اي - {0} اي - {0} اي - {0}/اي - - - اپتا - {0} اپتا - {0} اپتا - {0}/اپتا - - - كۇن - {0} كۇن - {0} كۇن - {0}/كۇن - - - ساعات - {0} ساعات - {0} ساعات - {0}/ساعات - - - مينۋت - {0} مينۋت - {0} مينۋت - {0}/مينۋت - - - سەكۋند - {0} سەكۋند - {0} سەكۋند - {0}/سەكۋند - - - ميليسەكۋند - {0} ميليسەكۋند - {0} ميليسەكۋند - - - ميكروسەكۋند - {0} ميكروسەكۋند - {0} ميكروسەكۋند - - - نانوسەكۋند - {0} نانوسەكۋند - {0} نانوسەكۋند - - - امپەر - {0} امپەر - {0} امپەر - - - ميليامپەر - {0} ميليامپەر - {0} ميليامپەر - - - وم - {0} وم - {0} وم - - - ۆولت - {0} ۆولت - {0} ۆولت - - - كيلوكالوريا - {0} كيلوكالوريا - {0} كيلوكالوريا - - - كالوريا - {0} كالوريا - {0} كالوريا - - - كيلوجوۋل - {0} كىلوجوۋل - {0} كىلوجوۋل - - - جوۋل - {0} جوۋل - {0} جوۋل - - - كيلوۆات-ساعات - {0} كيلوۆات-ساعات - {0} كيلوۆات-ساعات - - - ەلەكتونۆولت - {0} ەلەكترونۆولت - {0} ەلەكترونۆولت - - - بريتاندىق جىلۋ بىرلىگى - {0} بريتاندىق جىلۋ بىرلىگى - {0} بريتاندىق جىلۋ بىرلىگى - - - ا ق ش تەرمى - {0} ا ق ش تەرمى - {0} ا ق ش تەرمى - - - فۋنت-كۇش - {0} فۋنت-كۇش - {0} فۋنت-كۇش - - - كيلوۆات-ساعات/100 كيلومەتىر - - - گيگاگەرس - {0} گيگاگەرس - {0} گيگاگەرس - - - مەگاگەرس - {0} مەگاگەرس - {0} مەگاگەرس - - - كيلوگەرس - {0} كيلوگەرس - {0} كيلوگەرس - - - گەرس - {0} گەرس - {0} گەرس - - - جەر راديۋسى - {0} جەر راديۋسى - {0} جەر راديۋسى - - - كيلومەتىر - {0} كيلومەتىر - {0} كيلومەتىر - {0}/كيلومەتىر - - - مەتىر - {0}/مەتىر - {0}/مەتىر - {0}/مەتىر - - - دەسيمەتىر - {0}/دەسيمەتىر - {0}/دەسيمەتىر - - - سانتيمەتىر - {0}/سانتيمەتىر - {0}/سانتيمەتىر - {0}/سانتيمەتىر - - - ميليمەتىر - {0} ميليمەتىر - {0} ميليمەتىر - - - ميكرومەتىر - {0} ميكرومەتىر - {0} ميكرومەتىر - - - نانومەتىر - {0} نانومەتىر - {0} نانومەتىر - - - پيكومەتىر - {0} پيكومەتىر - {0} پيكومەتىر - - - ميل - {0} ميل - {0} ميل - - - يارد - {0} يارد - {0} يارد - - - فۋت - {0}/فۋت - {0}/فۋت - {0}/فۋت - - - ديۋيم - {0} ديۋيم - {0} ديۋيم - {0}/ديۋيم - - - پارسەك - {0} پارسەك - {0} پارسەك - - - جارىق جىلى - {0} جارىق جىلى - {0} جارىق جىلى - - - استرونوميالىق بىرلىك - {0} استرونوميالىق بىرلىك - {0} استرونوميالىق بىرلىك - - - فۋرلوڭ - {0} فۋرلوڭ - {0} فۋرلوڭ - - - فاتوم - {0} فاتوم - {0} فاتوم - - - تەڭىز ميلى - {0} تەڭىز ميلى - {0} تەڭىز ميلى - - - سكانديناۆيالىق ميل - {0} سكانديناۆيالىق ميلى - {0} سكانديناۆيالىق ميلى - - - پۋنكت - {0} پۋنكت - {0} پۋنكت - - - كۇن راديۋسى - {0} كۇن راديۋسى - {0} كۇن راديۋسى - - - ليۋكس - - - كاندەلا - - - ليۋمەن - - - كۇن جارىقتىعى - {0} كۇن جارىقتىعى - {0} كۇن جارىقتىعى - - - مەتىرلىك توننا - {0} توننا - {0} توننا + B - كيلوگرام - {0} كيلوگرام - {0} كيلوگرام - {0}/كيلوگرام + kg + {0}kg + {0}kg + {0}‎/kg - گرام - {0} گرام - {0} گرام - {0}/گرام + {0}g + {0}g + {0}/g - ميليگرام - {0} ميليگرام - {0} ميليگرام + mg + {0}mg + {0}mg - ميكروگرام - {0} ميكروگرام - {0} ميكروگرام + {0}μg + {0}μg - توننا - {0} توننا - {0} توننا - - - ستوۋن - {0} ستوۋن - {0} ستوۋن + {0}tn + {0}tn - فۋنت - {0} فۋنت - {0} فۋنت - {0}/فۋنت + lb + {0}lb + {0}lb - ۋنسيا - {0} ۋنسيا - {0} ۋنسيا - {0}/ۋنسيا + oz + {0}oz + {0}oz + {0}/oz - تروي ۋنسياسى - {0} تروۋ ۋنسياسى - {0} تروۋ ۋنسياسى + oz t + {0}oz t + {0}oz t - كارات - {0} كارات - {0} كارات + {0}CD + {0}CD - دالتون - {0} دالتون - {0} دالتون + Da + {0}Da + {0}Da - جەر ماسساسى - {0} جەر ماسساسى - {0} جەر ماسساسى + M⊕ + {0}M⊕ + {0}M⊕ - كۇن ماسساسى - {0} كۇن ماسساسى - {0} كۇن ماسساسى + M☉ + {0}M☉ + {0}M☉ - گران - {0} گران - {0} گران + gr + {0}gr + {0}gr - - گيگاۆات - {0} گيگاۆات - {0} گيگاۆات + + مەركۋري ءديۋيمى + {0} مەركۋري ءديۋيمى + {0} مەركۋري ءديۋيمى - - مەگاۆات - {0} مەگاۆات - {0} مەگاۆات + + سۇ. ۋن. + {0} سۇ. ۋن. + {0} سۇ. ۋن. - - كيلوۆات - {0} كيلوۆات - {0} كيلوۆات + + كاتال + {0} كاتال + {0} كاتال - - ۆات - {0} ۆات - {0} ۆات + + كۋلون + {0} كۋلون + {0} كۋلون - - ميليۆات - {0} ميليۆات - {0} ميليۆات + + فاراد + {0} فاراد + {0} فاراد - - ات كۇشى - {0} ات كۇشى - {0} ات كۇشى + + حەنري + {0} حەنري + {0} حەنري - - ميليمەتىر سىناپ باعاناسى - {0} ميليمەتىر سىناپ باعاناسى - {0} ميليمەتىر سىناپ باعاناسى + + كالو. + {0} كالو. + {0} كالو. - - فۋنت-كۇش/شارشى ديۋيم - {0} فۋنت-كۇش/شارشى ديۋيم - {0} فۋنت-كۇش/شارشى ديۋيم + + بەككەرەل + {0} بك + {0} بك - - ديۋيم سىناپ باعاناسى - {0} ديۋيم سىناپ باعاناسى - {0} ديۋيم سىناپ باعاناسى + + زيۆەرت + {0} زيۆەرت + {0} زيۆەرت - - بار - {0} بار - {0} بار + + گىرەي + {0} گىرەي + {0} گىرەي - - ميليبار - {0} ميليبار - {0} ميليبار + + كيلوگرام-كۇش + {0} كيلوگرام-كۇش + {0} كيلوگرام-كۇش - - اتموسفەرا - {0} اتموسفەرا - {0} اتموسفەرا + + ت + {0} ت + {0} ت - - پاسكال - {0} پاسكال - {0} پاسكال + + ۋەبەر + {0} ۋەبەر + {0} ۋەبەر - - گەكتوپاسكال - {0} گەكتوپاسكال - {0} گەكتوپاسكال + + {0} ميللياردتىق ۇلەس + {0} ميللياردتىق ۇلەس - - كيلوپاسكال - {0} كيلوپاسكال - {0} كيلوپاسكال - - - مەگاپاسكال - {0} مەگاپاسكال - {0} مەگاپاسكال - - - كيلومەتىر/ساعات - {0} كيلومەتىر/ساعات - {0} كيلومەتىر/ساعات - - - مەتىر/سەكۋند - {0} مەتىر/سەكۋند - {0} مەتىر/سەكۋند - - - ميل/ساعات - {0} ميل/ساعات - {0} ميل/ساعات - - - ءتۇيىن - {0} ءتۇيىن - {0} ءتۇيىن - - - بوفورت - {0} بوفورت - {0} بوفورت - - - سەلسي گرادۋسى - - - فارانگەيت گرادۋسى - - - كەلۆين - - - فۋنت-كۇش-فۋت - {0} فۋنت-كۇش-فۋت - {0} فۋنت-كۇش-فۋت - - - نيۋتون-مەتىر - - - تەكشە كيلومەتىر - {0} تەكشە كيلومەتىر - {0} تەكشە كيلومەتىر - - - تەكشە مەتىر - {0} تەكشە مەتىر - {0} تەكشە مەتىر - {0}/تەكشە مەتىر - - - تەكشە سانتيمەتىر - {0} تەكشە سانتيمەتىر - {0} تەكشە سانتيمەتىر - {0}/تەكشە سانتيمەتىر - - - تەكشە ميل - {0} تەكشە ميل - {0} تەكشە ميل - - - تەكشە يارد - {0} تەكشە يارد - {0} تەكشە يارد - - - تەكشە فۋت - {0} تەكشە فۋت - {0} تەكشە فۋت - - - تەكشە ديۋيم - {0} تەكشە ديۋيم - {0} تەكشە ديۋيم - - - مەگاليتر - {0} مەگاليتر - {0} مەگاليتر - - - گەكتوليتىر - {0} گەكتوليرىر - {0} گەكتوليرىر - - - ليتىر - {0} ليتىر - {0} ليتىر - {0}/ليتىر - - - دەسيليتىر - {0} دەسيليتىر - {0} دەسيليتىر - - - سانتيليتىر - {0} سانتيليتىر - {0} سانتيليتىر - - - ميليليتىر - {0} ميليليتىر - {0} ميليليتىر - - - مەتىرلىك پينتا - {0} مەتىرلىك پينتا - {0} مەتىرلىك پينتا - - - مەتىرلىك كەسە - {0} مەتىرلىك كەسە - {0} مەتىرلىك كەسە - - - اكر-فۋت - {0} اكر-فۋت - {0} اكر-فۋت - - - بۋشەل - {0} بۋشەل - {0} بۋشەل - - - گاللون - {0} گاللون - {0} گاللون - {0}/گاللون - - - يمپ گاللون - {0} يمپ گاللون - {0} يمپ گاللون - {0} يمپ گاللون - - - كۆارتا - {0} كۆارتا - {0} كۆارتا - - - پينتا - {0} پينتا - {0} پينتا - - - كەسە - {0} كەسە - {0} كەسە - - - سۇيىق ۋنسيا - {0} سۇيىق ۋنسيا - {0} سۇيىق ۋنسيا - - - يمپ سۇيىق ۋنسيا - {0} يمپ سۇيىق ۋنسيا - {0} يمپ سۇيىق ۋنسيا - - - اس قاسىق - {0} اس قاسىق - {0} اس قاسىق - - - شاي قاسىق - {0} شاي قاسىق - {0} شاي قاسىق - - - باررەل - {0} باررەل - {0} باررەل - - - دەسەرت قاسىعى - {0} دەسەرت قاسىعى - {0} دەسەرت قاسىعى - - - يمپ دەسەرت قاسىعى - {0} يمپ دەسەرت قاسىعى - {0} يمپ دەسەرت قاسىعى - - - تامشى - {0} تامشى - {0} تامشى - - - دراحما - {0} دراحما - {0} دراحما - - - جيگگەر - {0} جيگگەر - {0} جيگگەر - - - شوكىم - {0} شوكىم - {0} شوكىم - - - يمپ كۆارتا - {0} يمپ كۆارتا - {0} يمپ كۆارتا - - - جارىق - {0} جارىق - {0} جارىق - - - ميللياردتىق ۇلەس - - - ءتۇن - {0} ءتۇن - {0} ءتۇن - {0}/ءتۇن - - - باعىت - {0} ش - {0} س - {0} و - {0} ب - - {0}، {1} - {0}، {1} - {0} جانە {1} - {0} جانە {1} + {0}، {1} + {0}، {1} + {0} جانە {1} + {0} جانە {1} - {0}، {1} - {0}، {1} - {0} نە {1} - {0} نە {1} - - - {0}، {1} - {0}، {1} - {0} نە {1} - {0} نە {1} - - - {0}، {1} - {0}، {1} - {0} نە {1} - {0} نە {1} - - - {0}، {1} - {0}، {1} - {0} جانە {1} - {0} جانە {1} - - - {0}، {1} - {0}، {1} - {0} جانە {1} - {0} جانە {1} - - - {0}، {1} - {0}، {1} - {0}، {1} - {0}، {1} + {0}، {1} + {0}، {1} + {0} نە {1} + {0} نە {1} - {0} {1} - {0} {1} - {0} {1} - {0} {1} + {0} {1} + {0} {1} + {0} {1} + {0} {1} - {0}، {1} - {0}، {1} - {0}، {1} - {0}، {1} + {0}، {1} + {0}، {1} - ءيا:ءيا - جوق:جوق + ءيا:ءيا + جوق:جوق - {0} — بارلىعى - {0} — ۇيلەسىمدى - {0} — ەنگىزىلگەن - {0} — كەڭەيتىلگەن - {0} سولعا قاراتىلعان - {0} وڭعا قاراتىلعان - {0} — تاريحي - {0} — ءارتۇرلى - {0} — باسقا - {0} — جازۋلار - {0} سىزىق - {0} سىزىق - {0} — جول استى تاڭبا - {0} — جول ءۇستى تاڭبا - ارەكەت - افريكا جازۋلارى - امەريكا جازۋلارى - جانۋار - جانۋار نە تابيعات - كورسەتكى - دەنە - جالعان ءپىشىن - برايل جازۋى - عيمارات - ءتىزىم ماركەرلەرى/جۇلدىزدار - داۋىسسىز چامو - اقشا تاڭبالارى - سىزىقشا/بايلانىس - سان - دينگبات - سىرلى بەلگى - تومەن باعىتتالعان كورسەتكىلەر - تومەن جانە جوعارى باعىتتالعان كورسەتكىلەر - شىعىس ازيا جازۋلارى - ەموجي - ەۋروپا جازۋلارى - ايەل - تۋ - تۋلار - تاماق پەن سۋسىن - ءپىشىم - ءپىشىم جانە بوس ورىن - تولىق ەندى ءپىشىم نۇسقالارى - گەومەتريالىق ءپىشىن - جارتى ەندى ءپىشىم نۇسقالارى - قىتاي جازۋى - قىتاي جازۋىنىڭ كىلتتەرى - حانچا - قىتاي جازۋى (جەڭىلدەتىلگەن) - قىتاي جازۋى (ءداستۇرلى) - جۇرەك - كونە جازۋلار - قىتاي جازۋىن سيپاتتاۋ تاڭبالارى - جاپون كانا جازۋى - كانبۋن - كانجي - پەرنە - سولعا باعىتتالعان كورسەتكىلەر - سولعا جانە وڭعا باعىتتالعان كورسەتكىلەر - ارىپتىك تاڭبالار - قولدانىسى شەكتەۋلى - ەركەك - ماتەماتيكالىق تاڭبالار - تاياۋ شىعىس جازۋلارى - ءارتۇرلى - قازىرگى زامان جازۋلارى - وزگەرتكىۋ - مۋزىكالىق تاڭبالار - تابيعات - بوس ورىنسىز - ساندار - نىساندار - باسقا - جۇپتاسقان - ادام - فونەتيكالىق ءالىپبي - پىشىندىك جازۋ - ورىن - وسىمدىك - تىنىس بەلگىلەرى - وڭعا باعىتتالعان كورسەتكىلەر - بەلگىلەر/تاڭبالار - كىشى نۇسقالارى - سمايىل - سمايىلدار مەن ادامدار - وڭتۇستىك ازيا جازۋلارى - وڭتۇستىك-شىعىس ازيا جازۋلارى - بوس ورىن - سپورت - تاڭبالار - تەحنيكالىق تاڭبالار - ەكپىن بەلگىلەرى - ساياحات - ساياحات جانە ورىندار - جوعارى باعىتتالعان كورسەتكىلەر - وزگەرمەلى پىشىندەر - داۋىستى چامو - اۋا رايى - باتىس ازيا جازۋلارى - بوس ورىن + {0} — بارلىعى + {0} — ۇيلەسىمدى + {0} — ەنگىزىلگەن + {0} — كەڭەيتىلگەن + {0} سولعا قاراتىلعان + {0} وڭعا قاراتىلعان + {0} — تاريحي + {0} — ءارتۇرلى + {0} — باسقا + {0} — جازۋلار + {0} سىزىق + {0} سىزىق + {0} — جول استى تاڭبا + {0} — جول ءۇستى تاڭبا + ارەكەت + افريكا جازۋلارى + امەريكا جازۋلارى + جانۋار + جانۋار نە تابيعات + كورسەتكى + دەنە + جالعان ءپىشىن + برايل جازۋى + عيمارات + ءتىزىم ماركەرلەرى/جۇلدىزدار + داۋىسسىز چامو + اقشا تاڭبالارى + سىزىقشا/بايلانىس + سان + دينگبات + سىرلى بەلگى + تومەن باعىتتالعان كورسەتكىلەر + تومەن جانە جوعارى باعىتتالعان كورسەتكىلەر + شىعىس ازيا جازۋلارى + ەموجي + ەۋروپا جازۋلارى + ايەل + تۋ + تۋلار + تاماق پەن سۋسىن + ءپىشىم + ءپىشىم جانە بوس ورىن + تولىق ەندى ءپىشىم نۇسقالارى + گەومەتريالىق ءپىشىن + جارتى ەندى ءپىشىم نۇسقالارى + قىتاي جازۋى + قىتاي جازۋىنىڭ كىلتتەرى + حانچا + قىتاي جازۋى (جەڭىلدەتىلگەن) + قىتاي جازۋى (ءداستۇرلى) + جۇرەك + كونە جازۋلار + قىتاي جازۋىن سيپاتتاۋ تاڭبالارى + جاپون كانا جازۋى + كانبۋن + كانجي + پەرنە + سولعا باعىتتالعان كورسەتكىلەر + سولعا جانە وڭعا باعىتتالعان كورسەتكىلەر + ارىپتىك تاڭبالار + قولدانىسى شەكتەۋلى + ەركەك + ماتەماتيكالىق تاڭبالار + تاياۋ شىعىس جازۋلارى + ءارتۇرلى + قازىرگى زامان جازۋلارى + وزگەرتكىۋ + مۋزىكالىق تاڭبالار + تابيعات + بوس ورىنسىز + ساندار + نىساندار + باسقا + جۇپتاسقان + ادام + فونەتيكالىق ءالىپبي + پىشىندىك جازۋ + ورىن + وسىمدىك + تىنىس بەلگىلەرى + وڭعا باعىتتالعان كورسەتكىلەر + بەلگىلەر/تاڭبالار + كىشى نۇسقالارى + سمايىل + سمايىلدار مەن ادامدار + وڭتۇستىك ازيا جازۋلارى + وڭتۇستىك-شىعىس ازيا جازۋلارى + بوس ورىن + سپورت + تاڭبالار + تەحنيكالىق تاڭبالار + ەكپىن بەلگىلەرى + ساياحات + ساياحات جانە ورىندار + جوعارى باعىتتالعان كورسەتكىلەر + وزگەرمەلى پىشىندەر + داۋىستى چامو + اۋا رايى + باتىس ازيا جازۋلارى + بوس ورىن - قيعاش - وپتيكالىق ولشەم - قيعاشتالعان - ەنى - سالماق - قيعاش - جازۋ - ءماتىن - تاقىرىپشا - كورسەتۋ - حابارلاندىۋ - كەرى قيعاشتالعان - تىك - قيعاشتالعان - قاتتى قيعاش - قاتتى تۇرلەنگەن - قوسىمشا تۇرلەنگەن - تۇرلەنگەن - جارتىلاي سىزىلعان - قالىپتى - جارتىلاي كەڭەيتىلگەن - كەڭەيتىلگەن - قوسىمشا كەڭەيتىلگەن - قاتتى كەڭەيتىلگەن - جۇقا - تىم اشىق - جارىق - جاتىلاي جارىق - كىتاپ - تۇراقتى - ورتاشا - جارتىلاي قالىڭ - جۋان - وتە جۋان - قارا - قاپ-قارا - تىك بولشەكتەر - باس ارىپتەر اراسى - تاڭداۋلى ليگاتۋرالار - قيعاش سىزىقتى بولشەكتەر - قاتار ساندار - ەسكى تاڭبالار - تاق ساندار - سالىستىرمالى ساندار - كىشى باس ارىپتەر - كەستەلىك ساندار - جولاقتى ءنول + قيعاش + وپتيكالىق ولشەم + قيعاشتالعان + ەنى + سالماق + قيعاش + جازۋ + ءماتىن + تاقىرىپشا + كورسەتۋ + حابارلاندىۋ + كەرى قيعاشتالعان + تىك + قيعاشتالعان + قاتتى قيعاش + قاتتى تۇرلەنگەن + قوسىمشا تۇرلەنگەن + تۇرلەنگەن + جارتىلاي سىزىلعان + قالىپتى + جارتىلاي كەڭەيتىلگەن + كەڭەيتىلگەن + قوسىمشا كەڭەيتىلگەن + قاتتى كەڭەيتىلگەن + جۇقا + تىم اشىق + جارىق + جاتىلاي جارىق + كىتاپ + تۇراقتى + ورتاشا + جارتىلاي قالىڭ + جۋان + وتە جۋان + قارا + قاپ-قارا + تىك بولشەكتەر + باس ارىپتەر اراسى + تاڭداۋلى ليگاتۋرالار + قيعاش سىزىقتى بولشەكتەر + قاتار ساندار + ەسكى تاڭبالار + تاق ساندار + سالىستىرمالى ساندار + كىشى باس ارىپتەر + كەستەلىك ساندار + جولاقتى ءنول - und kk + und kk - {given} {surname} {generation}، {credentials} + {given} {surname} {generation}، {credentials} - {given-informal} + {given-informal} - {surname} + {surname} - {given-informal} + {given-informal} - {given-monogram-allCaps}{surname-monogram-allCaps} + {given-monogram-allCaps}{surname-monogram-allCaps} - {given-informal-monogram-allCaps} - - - {given} {surname} {generation}، {credentials} + {given-informal-monogram-allCaps} - {given-informal} + {given-informal} - {surname} + {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {given-initial} {surname} + {given-initial} {surname} - {given-informal} + {given-informal} - {surname} + {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {surname} {given} + {surname} {given} - {surname} {given-informal} + {surname} {given-informal} - {surname} + {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps}{given-monogram-allCaps} + {surname-monogram-allCaps}{given-monogram-allCaps} - {surname-monogram-allCaps}{given-informal-monogram-allCaps} - - - {surname} {given} + {surname-monogram-allCaps}{given-informal-monogram-allCaps} - {surname} {given-informal} + {surname} {given-informal} - {surname} + {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {surname} {given-initial} + {surname} {given-initial} - {surname} {given-initial} + {surname} {given-initial} - {surname} + {surname} - {given-informal} + {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} - {surname-core}، {given} {given2} {surname-prefix} + {surname-core}، {given} {given2} {surname-prefix} - {surname}، {given-informal} + {surname}، {given-informal} - {surname-core}، {given} {surname-prefix} + {surname-core}، {given} {surname-prefix} - {surname}، {given-informal} + {surname}، {given-informal} - {surname}، {given} + {surname}، {given} - {surname}، {given-informal} + {surname}، {given-informal} - اسەم + اسەم - مۇرات - كارىباي + مۇرات + كارىباي - قالاجان - ∅∅∅ - قايرات + قالاجان + ∅∅∅ + قايرات - مىرزا - ماقسات - ماكە - توقماحامبەتۇلى - ∅∅∅ - بالقىباي - ∅∅∅ - ∅∅∅ - ∅∅∅ + مىرزا + ماقسات + ماكە + توقماحامبەتۇلى + ∅∅∅ + بالقىباي + ∅∅∅ + ∅∅∅ + ∅∅∅ - سينباد + سينباد - كەيت - مۇللەر + كەيت + مۇللەر - سەسيليا - حەمىش - شتوبەر + سەسيليا + حەمىش + شتوبەر - پروءەسسوت - ادا كورنەليا - نەلي - سەزار مارتين - فون - بريۋل - گونسالەس - جۋنيور - ءتىس دارىگەرى + پروءەسسوت + ادا كورنەليا + نەلي + سەزار مارتين + فون + بريۋل + گونسالەس + جۋنيور + ءتىس دارىگەرى diff --git a/make/data/cldr/common/main/kl.xml b/make/data/cldr/common/main/kl.xml index 83f3643a1ef..e5a4b9e1c85 100644 --- a/make/data/cldr/common/main/kl.xml +++ b/make/data/cldr/common/main/kl.xml @@ -376,7 +376,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd @@ -1034,6 +1034,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 @@ -1193,7 +1199,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} millimoli per literi {0} millimoli per literi - + {0} millioni ilaa {0} millioni ilaa @@ -1448,7 +1454,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kvadratfod - + millioni ilaa @@ -1657,7 +1663,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mmol/L {0}mmol/L - + {0}ppm {0}ppm diff --git a/make/data/cldr/common/main/km.xml b/make/data/cldr/common/main/km.xml index f07aa1d935f..31c141661e4 100644 --- a/make/data/cldr/common/main/km.xml +++ b/make/data/cldr/common/main/km.xml @@ -48,6 +48,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ អាស៊ែបៃហ្សង់ អាហ្ស៊ែរី បាស្គៀ + បាលូឈី បាលី បាសា បេឡារុស @@ -62,7 +63,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ស៊ីកស៊ីកា អានី បាម្បារា - បង់ក្លាដែស + បង់ក្លា ទីបេ ប្រ៊ីស្តុន បូដូ @@ -160,7 +161,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ហ៊ីងលីង ហ៊ីលីហ្គេណុន ម៉ុង - ក្រូអាត + ក្រូអាស៊ី សូប៊ីលើ ហៃទី ហុងគ្រី @@ -222,6 +223,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ បាហ្វៀ កូឡូញ ឃឺដ + ឃឺដ + ឃឺរម៉ាន់ជី គូមីគ កូមី កូនីស @@ -457,7 +460,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ យ៉ីឌីស យរូបា ញីនហ្កាទូ - កន្តាំង + កាតាំង ចិនកាតាំង ហ្សួង តាម៉ាហ្សៃម៉ារ៉ុកស្តង់ដា @@ -657,6 +660,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ចិន កូឡុំប៊ី កោះ​ឃ្លីភឺតុន + សាខ កូស្តារីកា គុយបា កាប់វែរ @@ -887,50 +891,89 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ប្រតិទិន - ទម្រង់រូបិយបណ្ណ + ទម្រង់រូបិយប័ណ្ណ លំដាប់​តម្រៀប - រូបិយបណ្ណ + រូបិយប័ណ្ណ + រូបរាងរូបអារម្មណ៍ វដ្តម៉ោង (12 vs 24) - របៀបចុះបន្ទាត់ + ការចុះបន្ទាត់ភាសា CJK + ការចុះបន្ទាត់ក្នុងពាក្យ ប្រព័ន្ធវាស់វែង លេខ + ការបំបែកប្រយោគបន្ទាប់ពី Abbr ។ ប្រតិទិនពុទ្ធសាសនា + ពុទ្ធសាសនា ប្រតិទិន​ចិន + ចិន ប្រតិទិនកបទិច - ប្រតិទិនកូរ៉េ + កប់ទិក + ប្រតិទិនថានហ្គី + ថានហ្គី ប្រតិទិន​អេត្យូពី + អេត្យូពី ប្រតិទិនអេត្យូពីអាម៉េតេ​អាលែម - ប្រតិទិន​ហ្សកហ្ស៊ី + អេត្យូពីអាម៉េតេ​អាលែម + ប្រតិទិនហ្គ្រីហ្គររៀន + ហ្គ្រីហ្គររៀន ប្រតិទិនហេប្រឺ + ហេប្រឺ ប្រតិទិនអ៊ីស្លាម + ហ៊ីជ្រី ប្រតិទិនអ៊ិស្លាម (តារាង, សម័យស៊ីវិល) + ហ៊ីជ្រី (តាមតារាង, សម័យស៊ីវិល) ប្រតិទិនអ៊ិស្លាម (អ៊ុំអាល់គូរ៉ា) - ប្រតិទិន ISO-8601 + ហ៊ីជ្រី (អ៊ុំអាល់គូរ៉ា) + ប្រតិទិនហ្គ្រីហ្គររៀន (ឆ្នាំនៅពីមុខ) ប្រតិទិន​ជប៉ុន + ជប៉ុន ប្រតិទិនពែក្ស + ពែក្ស ប្រតិទិនមីងគ័រ - ទម្រង់រូបិយបណ្ណគណនី - ទម្រង់រូបិយបណ្ណបទដ្ឋាន + មីងគ័រ + ទម្រង់រូបិយប័ណ្ណគណនេយ្យ + គណនេយ្យ + ទម្រង់រូបិយប័ណ្ណស្តង់ដា + ស្តង់ដា លំដាប់​តម្រៀប​យូនីកូដ​លំនាំដើម - ស្វែងរក​ទូទៅ - លំដាប់​តម្រៀប​ស្តង់ដារ + យូនីកូដ​លំនាំដើម + ការស្វែងរកក្នុងគោលបំណងទូទៅ + ស្វែងរក + លំដាប់​តម្រៀប​ស្តង់ដា + ស្តង់ដា + លំនាំដើម + រូបអារម្មណ៍ + អក្សរ ប្រព័ន្ធ 12 ម៉ោង (0–11) + 12 (0–11) ប្រព័ន្ធ 12 ម៉ោង (1–12) + 12 (1–12) ប្រព័ន្ធ 24 ម៉ោង (0–23) + 24 (0–23) ប្រព័ន្ធ 24 ម៉ោង (1–24) - របៀបចុះបន្ទាត់ខ្លី - របៀបចុះបន្ទាត់ធម្មតា - របៀបចុះបន្ទាត់តឹងរឹង - ប្រព័ន្ធវាស់វែងម៉ាទ្រិក - ប្រព័ន្ធវាស់វែងចក្រព័ទ្ធ - ប្រព័ន្ធវាស់វែងអាមេរិក + 24 (1–24) + បែបបទចុះបន្ទាត់ធូររលុង + ធូររលុង + បែបបទចុះបន្ទាត់ធម្មតា + ធម្មតា + បែបបទចុះបន្ទាត់តឹងរ៉ឹង + តឹងរ៉ឹង + បំបែកទាំងអស់ + រក្សាទាំងអស់ + ធម្មតា + រក្សាក្នុងឃ្លា + ប្រព័ន្ធម៉ែត្រ + ម៉ែត្រ + ប្រព័ន្ធរង្វាស់អង់គ្លេស + ចក្រភពអង់គ្លេស + ប្រព័ន្ធរង្វាស់សហរដ្ឋអាម៉េរិក + សហរដ្ឋអាម៉េរិក លេខ​ឥណ្ឌា-អារ៉ាប់ លេខ​ឥណ្ឌា-អារ៉ាប់​ពង្រីក លេខ​អាមេនី លេខ​តូច​អាមេនី - លេខ​បង់ក្លាដែស + លេខ​បង់ក្លា លេខចាក់ម៉ា លេខ​ឌីវ៉ាណាការី លេខ​អេត្យូពី @@ -966,6 +1009,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ លេខ​ថៃ លេខទីបេ លេខវ៉ៃ + បិទ + បើក រង្វាស់​ប្រវែង @@ -1025,6 +1070,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} នៅ​ម៉ោង {0} + + {1} នៅម៉ោង {0} + @@ -1033,23 +1081,41 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} នៅ​ម៉ោង {0} + + {1} នៅម៉ោង {0} + {1}, {0} + + {1} {0} + + + {1} {0} + {1}, {0} + + {1} {0} + + + {1} {0} + d E y G + M/y G + E d/M/y G MMM y G d MMM y G E, d MMM y G + ម៉HH v d/M E d/M d MMM @@ -1380,6 +1446,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} នៅ​ម៉ោង {0} + + {1} នៅម៉ោង {0} + @@ -1388,23 +1457,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} នៅ​ម៉ោង {0} + + {1} នៅម៉ោង {0} + {1}, {0} + + {1} នៅម៉ោង {0} + {1}, {0} + + {1} នៅម៉ោង {0} + d E y G + M/y G + E d/M/y G MMM y G d MMM y G E d MMM y G + ម៉HH v d/M E d/M d MMM @@ -2136,6 +2217,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ អ៊ីស្ទ័រ + + កូយអៃកេ + ពុនតា អារ៉េណា @@ -2401,9 +2485,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ភ្នំពេញ - អ៊ីនដឺប៊ូរី - - កាន់តុន @@ -3073,9 +3154,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ម៉ោង​នៅ​អាហ្វ្រិក​ខាង​លិច - ម៉ោង​ស្តង់ដារ​នៅ​អាហ្វ្រិក​ខាង​លិច - ម៉ោងនៅ​អាហ្វ្រិក​​​ខាងលិច​​នារដូវ​ក្ដៅ​ + ម៉ោង​នៅ​អាហ្វ្រិក​ខាង​លិច @@ -3425,6 +3504,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ម៉ោង​នៅ​ហ្គីយ៉ាន + + + ម៉ោង​ស្តង់ដារ​​នៅ​ហាវៃ-អាល់ដ្យូសិន + + ម៉ោង​​នៅ​ហាវៃ-អាល់ដ្យូសិន @@ -3971,7 +4055,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00¤ - #,##0.00 ¤ + #,##0.00 ¤ #,##0.00¤;(#,##0.00¤) @@ -3981,30 +4065,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ¤0 ពាន់ - ¤ 0 ពាន់ - ¤00 ពាន់ - ¤ 00 ពាន់ - ¤000 ពាន់ - ¤ 000 ពាន់ - ¤0 លាន - ¤ 0 លាន - ¤00 លាន - ¤ 00 លាន - ¤000 លាន - ¤ 000 លាន - ¤0 ប៊ីលាន - ¤ 0 ប៊ីលាន - ¤00 ប៊ីលាន - ¤ 00 ប៊ីលាន - ¤000 ប៊ីលាន - ¤ 000 ប៊ីលាន - ¤0 ទ្រីលាន - ¤ 0 ទ្រីលាន - ¤00 ទ្រីលាន - ¤ 00 ទ្រីលាន - ¤000 ទ្រីលាន - ¤ 000 ទ្រីលាន + 0ពាន់¤ + 0ពាន់ ¤ + 00 ពាន់¤ + 00 ពាន់ ¤ + 000 ពាន់¤ + 000 ពាន់ ¤ + 0 លាន¤ + 0 លាន ¤ + 00 លាន¤ + 00 លាន ¤ + 000 លាន¤ + 000 លាន ¤ + 0 ប៊ីលាន¤ + 0 ប៊ីលាន ¤ + 00 ប៊ីលាន¤ + 00 ប៊ីលាន ¤ + 000 ប៊ីលាន¤ + 000 ប៊ីលាន ¤ + 0 ទ្រីលាន¤ + 0 ទ្រីលាន ¤ + 00 ទ្រីលាន¤ + 00 ទ្រីលាន ¤ + 000 ទ្រីលាន¤ + 000 ទ្រីលាន ¤ @@ -4022,7 +4106,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ដ្រាំ​អាមេនី - ហ្គីឌិន​ហុល្លង់​អង់ទីលៀន + ហ្គីលឌ័រអាំងទីលហូឡង់ ក្វាន់ហ្សា​អង់ហ្គោឡា @@ -4367,7 +4451,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ រីយ៉ាលកាតា - រីយ៉ាលកាតា លូ​រូម៉ានី @@ -4495,6 +4578,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ដុល្លារ​ការ៉ាប៊ីន​ខាង​កើត + + ហ្គីលឌ័រការីបៀន + ហ្គីលឌ័រការីបៀន + ហ្វ្រង់ CFA អាហ្វ្រិកខាងលិច @@ -4517,6 +4604,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ក្វាចាហ្សំប៊ី + + ហ្កូលស៊ីមបាវ៉េ + ហ្កូលស៊ីមបាវ៉េ + {0}+ @@ -4663,7 +4754,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ មិល្លីម៉ូលក្នុងមួយលីត្រ {0} មិល្លីម៉ូលក្នុងមួយលីត្រ - + ផ្នែកក្នុងមួយលាន {0} ផ្នែកក្នុងមួយលាន @@ -5128,6 +5219,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ រង្វាស់ពែង {0} រង្វាស់ពែង + + អោនស៍រាវម៉ែត្រ + {0} អោនស៍រាវម៉ែត្រ + {0} អាហ្វីត @@ -5174,17 +5269,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ត្រាម {0} ត្រាម - - ពន្លឺ - {0} ពន្លឺ + + ប៊ែកគ័ររែល + {0} ប៊ែកគ័ររែល - + ផ្នែកក្នុងមួយប៊ីលាន {0} ផ្នែកក្នុងមួយប៊ីលាន - យប់ - {0} យប់ {0} ក្នុងមួយយប់ @@ -5486,7 +5579,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ពន្លឺ {0} ពន្លឺ - + ផ្នែក/ប៊ីលាន @@ -5590,7 +5683,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} វ. - {0} សេះ + {0}hp mmHg @@ -5625,18 +5718,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}L - - ពន្លឺ - {0} ពន្លឺ - - + {0}ppb - - យប់ - {0} យប់ - {0}/យប់ - diff --git a/make/data/cldr/common/main/kn.xml b/make/data/cldr/common/main/kn.xml index 344df888bb8..53ceb0c9116 100644 --- a/make/data/cldr/common/main/kn.xml +++ b/make/data/cldr/common/main/kn.xml @@ -286,6 +286,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಬಫಿಯ ಕಲೊಗ್ನಿಯನ್ ಕುರ್ದಿಷ್ + ಕುರ್ದಿಷ್ + ಕುರ್ಮಂಜಿ ಕುಮೈಕ್ ಕುಟೇನಾಯ್ ಕೋಮಿ @@ -816,6 +818,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಚೀನಾ ಕೊಲಂಬಿಯಾ ಕ್ಲಿಪ್ಪರ್‌ಟಾನ್ ದ್ವೀಪ + ಸಾರ್ಕ್ ಕೊಸ್ಟಾ ರಿಕಾ ಕ್ಯೂಬಾ ಕೇಪ್ ವರ್ಡೆ @@ -1062,34 +1065,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಸಂಖ್ಯೆ ವಿಂಗಡಣೆ ವಿಂಗಡಣೆ ಸಾಮರ್ಥ್ಯ ಕರೆನ್ಸಿ + ಎಮೋಜಿ ಪ್ರೆಸೆಂಟೇಶನ್ ಕಾಲ ಚಕ್ರ (12 ವಿರುದ್ಧ 24) ಲೈನ್ ಬ್ರೇಕ್ ಶೈಲಿ + ಪದಗಳ ಮಧ್ಯ ಲೈನ್ ಬ್ರೇಕ್‌ಗಳು ಮಾಪನ ವ್ಯವಸ್ಥೆ ಸಂಖ್ಯೆಗಳು + ಸಂಕ್ಷಿಪ್ತರೂಪದ ನಂತರ ವಾಕ್ಯ ವಿರಾಮ ಸಮಯ ವಲಯ ಸ್ಥಳೀಯ ಭಿನ್ನತೆ ಖಾಸಗಿ ಬಳಕೆ ಬೌದ್ಧರ ಕ್ಯಾಲೆಂಡರ್ + ಬೌದ್ಧ ಚೈನೀಸ್ ಕ್ಯಾಲೆಂಡರ್ + ಚೈನೀಸ್ ಕೋಪ್ಟಿಕ್ ಕ್ಯಾಲೆಂಡರ್ + ಕೋಪ್ಟಿಕ್ ಡಾಂಗಿ ಕ್ಯಾಲೆಂಡರ್ + ಡಾಂಗಿ ಇಥಿಯೋಪಿಕ್ ಕ್ಯಾಲೆಂಡರ್ + ಇಥಿಯೋಪಿಕ್ ಇಥಿಯೋಪಿಕ್ ಅಮೆಟೆ ಅಲೆಮ್ ಕ್ಯಾಲೆಂಡರ್ + ಇಥಿಯೋಪಿಕ್ ಅಮೆಟೆ ಅಲೆಮ್ ಗ್ರೆಗೋರಿಯನ್ ಕ್ಯಾಲೆಂಡರ್ + ಗ್ರೆಗೋರಿಯನ್ ಹೀಬ್ರೂ ಕ್ಯಾಲೆಂಡರ್ + ಹೀಬ್ರೂ ಭಾರತೀಯ ರಾಷ್ಟ್ರೀಯ ಕ್ಯಾಲೆಂಡರ್ + ಭಾರತೀಯ ರಾಷ್ಟ್ರೀಯ ಇಸ್ಲಾಮಿಕ್ ಕ್ಯಾಲೆಂಡರ್ + ಹಿಜ್ರಿ ಇಸ್ಲಾಮಿಕ್-ಸಿವಿಲ್ ಕ್ಯಾಲೆಂಡರ್ + ಹಿಜ್ರಿ (ಟ್ಯಾಬುಲರ್, ನಾಗರಿಕ ಯುಗ) ಇಸ್ಲಾಮಿಕ್‌ ಕ್ಯಾಲೆಂಡರ್‌ (ಸೌದಿ ಅರೇಬಿಯಾ, ಸೈಟಿಂಗ್‌)bia, sighting) ಇಸ್ಲಾಮಿಕ್ ಕ್ಯಾಲೆಂಡರ್ (ಉಮ್ ಅಲ್-ಖುರಾ) + ಹಿಜ್ರಿ (ಉಮ್ ಅಲ್-ಖುರಾ) ISO-8601 ಕ್ಯಾಲೆಂಡರ್ ಜಪಾನೀಸ್ ಕ್ಯಾಲೆಂಡರ್ + ಜಪಾನೀಸ್ ಪರ್ಷಿಯನ್ ಕ್ಯಾಲೆಂಡರ್ + ಪರ್ಷಿಯನ್ ಮಿಂಗೋ ಕ್ಯಾಲೆಂಡರ್ + ಮಿಂಗೋ ಅಕೌಂಟಿಂಗ್ ಕರೆನ್ಸಿ ಸ್ವರೂಪ + ಅಕೌಂಟಿಂಗ್ ಪ್ರಮಾಣಿತ ಕರೆನ್ಸಿ ಸ್ವರೂಪ + ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಚಿಹ್ನೆಗಳನ್ನು ವಿಂಗಡಿಸಿ ನಿರ್ಲಕ್ಷಿಸಿದ ಚಿಹ್ನೆಗಳನ್ನು ವಿಂಗಡಿಸಿ ಉಚ್ಛಾರಣೆಯನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ವಿಂಗಡಿಸಿ @@ -1099,20 +1122,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಮೊದಲು ಅಪ್ಪರ್‌ಕೇಸ್ ಅನ್ನು ವಿಂಗಡಿಸಿ ಕೇಸ್ ಇನ್‌ಸೆಂಟೀವ್ ಅನ್ನು ವಿಂಗಡಿಸಿ ಕೇಸ್‌ ಸೆನ್ಸಿಟೀವ್‌‌ ವಿಂಗಡಿಸಿ - ಸಾಂಪ್ರದಾಯಿಕ ಚೀನಾದ ಅನುಕ್ರಮ ವಿನ್ಯಾಸ - ದೊಡ್ಡ ಐದು ಹೊಂದಾಣಿಕೆಯ ಸಲುವಾಗಿ ಹಿಂದಿನ ವಿಂಗಡಣಾ ಕ್ರಮ ಡಿಕ್ಷನರಿ ಅನುಕ್ರಮ ವಿನ್ಯಾಸ ಡೀಫಾಲ್ಟ್ ಯೂನಿಕೋಡ್ ವಿಂಗಡಣೆ ಕ್ರಮ + ಡೀಫಾಲ್ಟ್ ಯೂನಿಕೋಡ್ ಯುರೋಪಿನ ಅನುಕ್ರಮ ನಿಯಮಗಳು - ಸರಳೀಕೃತ ಚೈನೀಸ್ ವಿಂಗಡಣೆ ಕ್ರಮ - GB2312 ಫೋನ್‌ಬುಕ್ ವಿಂಗಡಣೆ ಕ್ರಮ ಉಚ್ಛಾರಣಾನುರೂಪವಾಗಿ ವಿಂಗಡಣೆ ಕ್ರಮ ಪಿನ್‌ಯಿನ್ ವಿಂಗಡಣೆ ಕ್ರಮ ಸಾಮಾನ್ಯ- ಉದ್ದೇಶ ಹುಡುಕಾಟ + ಹುಡುಕಾಟ ಹಂಗುಲ್ ಆದ್ಯಕ್ಷರ ವ್ಯಂಜನದ ಮೂಲಕ ಹುಡುಕಿ ಪ್ರಮಾಣೀಕೃತ ವಿಂಗಡಣೆ ಕ್ರಮ + ಪ್ರಮಾಣೀಕೃತ ಸ್ಟ್ರೋಕ್ ವಿಂಗಡಣೆ ಕ್ರಮ ಸಾಂಪ್ರದಾಯಿಕ ವಿಂಗಡಣೆ ಕ್ರಮ + ಸಾಂಪ್ರದಾಯಿಕ ರ್ಯಾಡಿಕಲ್-ಸ್ಟ್ರೋಕ್ ವಿಂಗಡಣೆ ಕ್ರಮ ಸಾಮಾನ್ಯ ಸ್ಥಿತಿಯನ್ನು ಹೊರತುಪಡಿಸಿ ವಿಂಗಡಿಸಿ ಸಾಮಾನ್ಯವಾದ ಯೂನಿಕೋಡ್ ಅನ್ನು ವಿಂಗಡಿಸಿ @@ -1126,18 +1151,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಪೂರ್ಣಅಗಲಕ್ಕೆ ಅರೆಅಗಲಕ್ಕೆ ಸಂಖ್ಯೆ + ಡೀಫಾಲ್ಟ್ + ಎಮೋಜಿ + ಪಠ್ಯ 12 ಗಂಟೆ ವ್ಯವಸ್ಥೆ (0–11) + 12 (0–11) 12 ಗಂಟೆ ವ್ಯವಸ್ಥೆ (1–12) + 12 (1–12) 24 ಗಂಟೆ ವ್ಯವಸ್ಥೆ (0–23) + 24 (0–23) 24 ಗಂಟೆ ವ್ಯವಸ್ಥೆ (1–24) + 24 (1–24) ಲೂಸ್ ಲೈನ್ ಬ್ರೇಕ್ ಶೈಲಿ + ಲೂಸ್ ಸಾಮಾನ್ಯ ಲೈನ್ ಬ್ರೇಕ್ ಶೈಲಿ + ಸಾಮಾನ್ಯ ಕಟ್ಟುನಿಟ್ಟಾದ ಲೈನ್ ಬ್ರೇಕ್ ಶೈಲಿ + ಕಟ್ಟು ನಿಟ್ಟು + ಎಲ್ಲವನ್ನು ಬ್ರೇಕ್ ಮಾಡಿ + ಎಲ್ಲವನ್ನು ಇರಿಸಿಕೊಳ್ಳಿ + ಸಾಮಾನ್ಯ + ಪದಗುಚ್ಛಗಳಲ್ಲಿ ಇರಿಸಿಕೊಳ್ಳಿ ಯುಎಸ್ ಬಿಜಿಎನ್ ಲಿಪ್ಯಂತರಣ ಯುಎಸ್ ಜಿಇಜಿಎನ್ ಲಿಪ್ಯಂತರಣ ಮೆಟ್ರಿಕ್ ಪದ್ಧತಿ + ಮೆಟ್ರಿಕ್ ಇಂಪಿರಿಯಲ್ ಮಾಪನ ವ್ಯವಸ್ಥೆ + ಯುನೈಟೆಡ್ ಕಿಂಗ್‌ಡಮ್ ಅಮೇರಿಕಾದ ಮಾಪನಾ ವ್ಯವಸ್ಥೆ + ಅಮೇರಿಕಾ ಅರೇಬಿಕ್-ಇಂಡಿಕ್ ಅಂಕೆಗಳು ವಿಸ್ತರಿಸಲಾದ ಅರೇಬಿಕ್-ಇಂಡಿಕ್ ಅಂಕೆಗಳು ಆರ್ಮೇನಿಯಾದ ಸಂಖ್ಯೆಗಳು @@ -1182,6 +1224,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಟಿಬೇಟಿಯನ್ ಅಂಕೆಗಳು ಸಾಂಪ್ರದಾಯಿಕ ಸಂಖ್ಯೆಗಳು ವಾಯ್ ಅಂಕೆಗಳು + ಆಫ್ + ಆನ್ ಮೆಟ್ರಿಕ್ @@ -1203,13 +1247,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [₹ {ರೂ}] - - [\--﹣ ‑ ‒ −⁻₋ ➖] - [,,﹐︐ ، ٫ 、﹑、︑] - - - [,,﹐︐ ٫] - @@ -1274,7 +1311,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - GGGGG y-MM-dd + G y-MM-dd @@ -1302,6 +1339,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1310,9 +1350,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + d E + E, M/d/y G d/M E, d/M dd-MM @@ -1394,20 +1438,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - ಜನ - ಫೆಬ್ರ - ಮಾರ್ಚ್ - ಏಪ್ರಿ - ಮೇ - ಜೂನ್ - ಜುಲೈ - ಆಗ - ಸೆಪ್ಟೆಂ - ಅಕ್ಟೋ - ನವೆಂ - ಡಿಸೆಂ - ಫೆ @@ -1491,24 +1521,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಸಂಜೆ ರಾತ್ರಿ - - AM - PM - ಮಧ್ಯರಾತ್ರಿ - AM - PM - - - AM - PM - - - AM - PM @@ -1581,6 +1597,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} ರಂದು {0} ಸಮಯಕ್ಕೆ + + {1} {0} ಸಮಯಕ್ಕೆ + @@ -1589,6 +1608,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} ರಂದು {0} ಸಮಯಕ್ಕೆ + + {1} {0} ಸಮಯಕ್ಕೆ + @@ -1605,6 +1627,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} ಗೆ + d E @@ -2013,12 +2038,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಶುಕ್ರವಾರಗಳ ಹಿಂದೆ - - - {0} ಶುಕ್ರವಾರದ ಹಿಂದೆ - {0} ಶುಕ್ರವಾರಗಳ ಹಿಂದೆ - - ಕಳೆದ ಶನಿವಾರ ಈ ಶನಿವಾರ @@ -2035,9 +2054,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ AM/PM - - AM/PM - ಗಂಟೆ ಈ ಗಂಟೆ @@ -2438,6 +2454,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಈಸ್ಟರ್ + + ಕೊಯಯ್ಕಿ + ಪುಂತಾ ಅರೇನಾಸ್ @@ -2703,10 +2722,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ನೋಮ್ ಪೆನ್ - ಎಂಡರ್ಬರಿ - - - ಕ್ಯಾಂಟನ್ + ಕ್ಯಾಂಟನ್ ಐಲ್ಯಾಂಡ್ ಕಿರಿತಿಮತಿ @@ -3382,9 +3398,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ಪಶ್ಚಿಮ ಆಫ್ರಿಕಾ ಸಮಯ - ಪಶ್ಚಿಮ ಆಫ್ರಿಕಾ ಪ್ರಮಾಣಿತ ಸಮಯ - ಪಶ್ಚಿಮ ಆಫ್ರಿಕಾ ಬೇಸಿಗೆ ಸಮಯ + ಪಶ್ಚಿಮ ಆಫ್ರಿಕಾ ಸಮಯ @@ -3767,6 +3781,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಗಯಾನಾ ಸಮಯ + + + ಹವಾಯಿ-ಅಲ್ಯುಟಿಯನ್ ಪ್ರಮಾಣಿತ ಸಮಯ + + ಹವಾಯಿ-ಅಲ್ಯುಟಿಯನ್ ಸಮಯ @@ -4220,6 +4239,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಚುಕ್ ಸಮಯ + + + ಟರ್ಕಿ ಸಮಯ + ಟರ್ಕಿ ಪ್ರಮಾಣಿತ ಸಮಯ + ಟರ್ಕಿ ಬೇಸಿಗೆ ಸಮಯ + + ತುರ್ಕ್‌ಮೇನಿಸ್ತಾನ್ ಸಮಯ @@ -4374,8 +4400,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -5195,6 +5219,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಪೂರ್ವ ಕೆರೀಬಿಯನ್ ಡಾಲರ್ ಪೂರ್ವ ಕೆರೀಬಿಯನ್ ಡಾಲರ್‌ಗಳು + + ಕೆರೆಬಿಯನ್ ಗಿಲ್ಡರ್ + ಕೆರೆಬಿಯನ್ ಗಿಲ್ಡರ್ + ಕೆರೆಬಿಯನ್ ಗಿಲ್ಡರ್‌ಗಳು + ಪಶ್ಚಿಮ ಆಫ್ರಿಕಾದ CFA ಫ್ರಾಂಕ್ ಪಶ್ಚಿಮ ಆಫ್ರಿಕಾದ CFA ಫ್ರಾಂಕ್ @@ -5226,6 +5255,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಜಾಂಬಿಯಾ ಕ್ವಾಚ ಜಾಂಬಿಯಾ ಕ್ವಾಚಗಳು + + ಜಿಂಬಾಬ್ವಿಯನ್ ಗೋಲ್ಡ್ + ಜಿಂಬಾಬ್ವಿಯನ್ ಗೋಲ್ಡ್ + ಜಿಂಬಾಬ್ವಿಯನ್ ಗೋಲ್ಡ್ + {0}+ @@ -5611,7 +5645,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ವಸ್ತುಗಳ {0} ವಸ್ತುಗಳಲ್ಲಿ - + + ಪಾರ್ಟ್ಸ್ + {0} ಪಾರ್ಟ್ + {0} ಪಾರ್ಟ್ಸ್ + + neuter ಪ್ರತಿ ಮಿಲಿಯನ್ ಭಾಗಗಳು {0} ಪ್ರತಿ ಮಿಲಿಯನ್ ಭಾಗವು @@ -5681,6 +5720,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಮೋಲ್‌ಗಳ {0} ಮೋಲ್‌ಗಳಲ್ಲಿ + + {0} ಗ್ಲೂಕೋಸ್ + {0} ಗ್ಲೂಕೋಸ್ + neuter ಲೀಟರ್‌ಗಳು ಪ್ರತಿ ಕಿಲೋಮೀಟರಿಗೆ @@ -5881,6 +5924,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಶತಮಾನಕ್ಕೆ {0} ಶತಮಾನದ {0} ಶತಮಾನದಲ್ಲಿ + {0} ಶತಮಾನ {0}ಶತಮಾನಗಳು {0} ಶತಮಾನಗಳನ್ನು {0} ಶತಮಾನಗಳಿಗೆ @@ -5903,11 +5947,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ neuter - {0} ವರ್ಷವು + {0} ವರ್ಷ {0} ವರ್ಷವನ್ನು {0} ವರ್ಷಕ್ಕೆ {0} ವರ್ಷದ {0} ವರ್ಷದಲ್ಲಿ + {0} ವರ್ಷ {0} ವರ್ಷಗಳು {0} ವರ್ಷಗಳನ್ನು {0} ವರ್ಷಗಳಿಗೆ @@ -5975,7 +6020,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ neuter - {0} ಗಂಟೆಯು + {0} ಗಂಟೆ {0} ಗಂಟೆಯನ್ನು {0} ಗಂಟೆಗೆ {0} ಗಂಟೆಯ @@ -6360,7 +6405,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಡಾಟ್‌ಗಳು - ಭೂಮಿಯ ತ್ರಿಜ್ಯ {0} ಭೂಮಿಯ ತ್ರಿಜ್ಯ {0} ಭೂಮಿಯ ತ್ರಿಜ್ಯ @@ -6714,10 +6758,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಕ್ಯಾರೆಟ್‌ಗಳ {0} ಕ್ಯಾರೆಟ್‌ಗಳಲ್ಲಿ - - {0} ಡಿಎ - {0} ಡಿಎ - ಭೂಮಿಯ ದ್ರವ್ಯರಾಶಿಗಳು {0} ಭೂಮಿಯ ದ್ರವ್ಯರಾಶಿ @@ -6806,15 +6846,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ neuter ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ಗಳು {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ ಅನ್ನು + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌‌ಗೆ + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌‌ನ + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌‌ನಲ್ಲಿ {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ಗಳು - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ಗಳು - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ಗಳು - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ಗಳು - {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌ಗಳು + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌‌ಗಳನ್ನು + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌‌ಗಳಿಗೆ + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌‌ಗಳ + {0} ಮರ್ಕ್ಯುರಿ ಮಿಲಿಮೀಟರ್‌‌ಗಳಲ್ಲಿ + + + ಮರ್ಕ್ಯೂರಿ + {0} ಮರ್ಕ್ಯೂರಿ + {0} ಮರ್ಕ್ಯೂರಿ ಪೌಂಡ್ಸ್-ಫೋರ್ಸ್ ಪ್ರತಿ ಚದರ ಇಂಚಿಗೆ @@ -7209,6 +7254,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಮೆಟ್ರಿಕ್‌ ಕಪ್‌ಗಳ {0} ಮೆಟ್ರಿಕ್‌ ಕಪ್‌ಗಳಲ್ಲಿ + + ಮೆಟ್ರಿಕ್ ಫ್ಲೂಯ್ಡ್ ಔನ್ಸ್‌ಗಳು + {0} ಮೆಟ್ರಿಕ್ ಫ್ಲೂಯ್ಡ್ ಔನ್ಸ್ + {0} ಮೆಟ್ರಿಕ್ ಫ್ಲೂಯ್ಡ್ ಔನ್ಸ್‌ಗಳು + ಎಕರೆ-ಅಡಿ {0} ಎಕರೆ-ಅಡಿ @@ -7293,9 +7343,73 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಇಂಪಿರಿಯಲ್ ಕ್ವಾರ್ಟ್ {0} ಇಂಪಿರಿಯಲ್ ಕ್ವಾರ್ಟ್ + + ಸ್ಟೆರಾಡಿಯನ್ಸ್ + {0} ಸ್ಟೆರಾಡಿಯನ್ + {0} ಸ್ಟೆರಾಡಿಯನ್ಸ್ + + + ಕ್ಯಾಟಲ್ಸ್ + {0} ಕ್ಯಾಟಲ್ + {0} ಕ್ಯಾಟಲ್ಸ್ + + + ಕೂಲಂಬ್ಸ್ + {0} ಕೂಲಂಬ್ + {0} ಕೂಲಂಬ್ಸ್ + + + ಫ್ಯಾರಡ್ಸ್ + {0} ಫ್ಯಾರಡ್ + {0} ಫ್ಯಾರಡ್ಸ್ + + + ಹೆನ್ರಿಸ್ + {0} ಹೆನ್ರಿ + {0} ಹೆನ್ರಿಸ್ + + + ಸೀಮೆನ್ಸ್ + {0} ಸೀಮೆನ್ಸ್ + {0} ಸೀಮೆನ್ಸ್ + + + ಕ್ಯಾಲೋರಿಗಳು [IT] + {0} ಕ್ಯಾಲೋರಿ [IT] + {0} ಕ್ಯಾಲೋರಿಗಳು [IT] + + + ಬೆಕೆರೆಲ್ಸ್ + {0} ಬೆಕೆರೆಲ್ + {0} ಬೆಕೆರೆಲ್ಸ್ + + + ಸೀವೆರ್ಟ್ + {0} ಸೀವೆರ್ಟ್ + {0} ಸೀವೆರ್ಟ್ಸ್ + + + ಗ್ರೇಸ್ + {0} ಗ್ರೇ + {0} ಗ್ರೇಸ್ + + + ಕಿಲೋಗ್ರಾಮ್ಸ್-ಫೋರ್ಸ್ + {0} ಕಿಲೋಗ್ರಾಂ-ಫೋರ್ಸ್ + {0} ಕಿಲೋಗ್ರಾಂ-ಫೋರ್ಸ್ + + + ಟೆಸ್ಲಾಸ್ + {0} ಟೆಸ್ಲಾ + {0} ಟೆಸ್ಲಾಸ್ + + + ವೆಬರ್ಸ್ + {0} ವೆಬರ್ + {0} ವೆಬರ್ಸ್ + neuter - ಲೈಟ್ {0} ಲೈಟ್ {0} ಲೈಟ್ ಅನ್ನು {0} ಲೈಟ್‌ಗೆ @@ -7307,7 +7421,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಲೈಟ್‌‌ನ {0} ಲೈಟ್‌ನಲ್ಲಿ - + neuter ಪಾರ್ಟ್ಸ್ ಪರ್ ಬಿಲಿಯನ್ {0} ಪಾರ್ಟ್ಸ್ ಪರ್ ಬಿಲಿಯನ್ @@ -7530,7 +7644,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ವಸ್ತು {0} ವಸ್ತು - + + ಪಾರ್ಟ್ + {0} ಪಾರ್ಟ್ + {0} ಪಾರ್ಟ್ + + ಭಾಗಗಳು/ಮಿಲಿಯನ್ {0} ಭಾಪ್ರಮಿ {0} ಭಾಪ್ರಮಿ @@ -7549,6 +7668,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಮೋಲ್ {0} ಮೋಲ್ + + Glc + {0} Glc + {0} Glc + ಲೀಟರ್‌ಗಳು/ಕಿಮೀ {0} ಲೀ/ಕಿ.ಮೀ @@ -7908,8 +8032,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಸ್ಕ್ಯಾಂ.ಮೈ - {0} smi - {0} smi ಪಾಯಿಂಟ್‌ಗಳು @@ -8317,12 +8439,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ಕ್ವಾ.ಇಂಪ್ {0} ಕ್ವಾ.ಇಂಪ್ + + {0} sr + {0} sr + + + ಕ್ಯಾಟ್ + {0} ಕ್ಯಾಟ್ + {0} ಕ್ಯಾಟ್ + + + {0} H + {0} H + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + ಲೈಟ್ {0} ಲೈಟ್ {0} ಲೈಟ್ - + ಪಾರ್ಟ್ಸ್/ಬಿಲಿಯನ್ @@ -8479,7 +8643,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ವಸ್ತು {0}ವಸ್ತು - + + ಪಾರ್ಟ್ + {0} ಪಾರ್ಟ್ + {0} ಪಾರ್ಟ್ + + ಭಾಪ್ರಮಿ {0}ಭಾಪ್ರಮಿ {0}ಭಾಪ್ರಮಿ @@ -8497,6 +8666,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ಮೋಲ್ {0}ಮೋಲ್ + + Glc + {0} Glc + {0} Glc + ಲೀ/ಕಿಮೀ @@ -9090,16 +9264,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt-Imp. {0}qt-Imp. - - ಲೈಟ್ - {0} ಲೈಟ್ - {0} ಲೈಟ್ + + ಕ್ಯಾಟ್ + {0} ಕ್ಯಾಟ್ + {0} ಕ್ಯಾಟ್ + + + cal-IT ರಾತ್ರಿಗಳು - {0} ರಾತ್ರಿಯು - {0} ರಾತ್ರಿಗಳು - {0}/ರಾತ್ರಿಗೆ {0}ಪೂ @@ -9459,7 +9633,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ಕ್ಯಾಥಿ - ಮಲ್ಲರ್ + ಮುಲ್ಲರ್ ಝಝಿಲಿಯಾ diff --git a/make/data/cldr/common/main/ko.xml b/make/data/cldr/common/main/ko.xml index 893a89500e8..dd0a8ad6869 100644 --- a/make/data/cldr/common/main/ko.xml +++ b/make/data/cldr/common/main/ko.xml @@ -296,6 +296,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 바피아어 콜로그니안어 쿠르드어 + 쿠르드어 + 쿠르만지 쿠믹어 쿠테네어 코미어 @@ -419,7 +421,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 오세트어 오세이지어 오스만 터키어 - 펀잡어 + 펀자브어 판가시난어 팔레비어 팜팡가어 @@ -866,6 +868,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 중국 콜롬비아 클리퍼턴섬 + 사크 코스타리카 쿠바 카보베르데 @@ -948,6 +951,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 세인트키츠 네비스 북한 대한민국 + 한국 쿠웨이트 케이맨 제도 카자흐스탄 @@ -1159,33 +1163,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 숫자 정렬 정렬 강도 통화 + 이모티콘 표시 시간표시법(12시, 24시) 줄바꿈 스타일 + 단어의 줄바꿈 계량법 숫자 + 약어 뒤 문장 구분 시간대 방언 공개 여부 불교력 + 불교 음력 + 콥트력 + 콥트 단기력 + 단기 에티오피아력 + 에티오피아 에티오피아 아메테 알렘력 + 에티오피아 아메테 알렘 양력 + 히브리력 + 히브리 인도력 히즈라력 + 히즈라 히즈라 상용력 + 히즈라 상용 히즈라력(움 알 쿠라) + 히즈라(움 알 쿠라) ISO-8601 달력 일본력 + 일본 페르시안력 + 페르시안 대만력 + 대만 회계 통화 형식 + 회계 표준 통화 형식 + 표준 기호 정렬 기호 무시 정렬 악센트 일반 정렬 @@ -1195,22 +1218,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 대문자 우선 정렬 대/소문자 무시 정렬 대/소문자 구분 정렬 - 중국어 번체 정렬 순서 (Big5) 호환성을 위해 이전 정렬 순서 + 호환성 사전 정렬순 + 사전 기본 유니코드 정렬 순서 + 기본 유니코드 유럽 정렬 규칙 - 중국어 간체 정렬 순서 (GB2312) 전화번호부순 + 전화번호부 소리나는 대로 정렬 순서 + 소리나는 대로 병음순 + 병음 범용 검색 + 검색 한글 자음으로 검색 표준 정렬 순서 + 표준 자획순 + 자획 전통 역법 + 전통 부수순 + 부수 주음순 + 주음 표준화 없이 정렬 유니코드 표준화 정렬 숫자별 정렬 @@ -1223,18 +1256,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 전각 반각 숫자 + 기본 + 이모티콘 + 텍스트 12시간제(0–11) + 12(0–11) 12시간제(1–12) + 12(1–12) 24시간제(0–23) + 24(0–23) 24시간제(1–24) + 24(1–24) 줄바꿈 - 넓게 + 넓게 줄바꿈 - 보통 + 보통 줄바꿈 - 좁게 + 좁게 + 모두 분리 + 모두 유지 + 일반 + 구 단위 유지 미국 지명위원회(BGN) 유엔 지명전문가 그룹(UNGEGN) 미터법 + 미터법 야드파운드법 + 영국식 미국 계량법 + 미국식 아라비아-인도식 숫자 확장형 아라비아-인도식 숫자 아르메니아 숫자 @@ -1292,6 +1342,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 티벳 숫자 전통적인 숫자 바이 숫자 + + 미터법 @@ -1312,9 +1364,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1551,6 +1600,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h:mm B h:mm:ss d일 + E B h시 E B h:mm E B h:mm:ss d일 (E) @@ -1567,6 +1617,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H시 a h:mm a h:mm:ss + a h시 v + H시 v MMM M. d. M. d. (E) @@ -1751,14 +1803,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h:mm B h:mm:ss d일 + E B h시 E B h:mm E B h:mm:ss d일 (E) d일 EEEE + E a h시 E a h:mm E a h:mm:ss G y년 + G y/M GGGGG y/M/d + G y/M/d (E) G y년 M월 G y년 M월 d일 G y년 M월 d일 (E) @@ -1768,6 +1824,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm:ss a h:mm a h:mm:ss + a h시 v + H시 v M월 M. d. M. d. (E) @@ -2041,50 +2099,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 저녁 - - 자정 - 정오 - 아침 - 오전 - 오후 - 저녁 - - - 자정 오전 - 정오 오후 - 아침 - 오전 - 오후 - 저녁 - - - 아침 - 오전 - 오후 - 저녁 - - - - 아침 - 오전 - 오후 - 저녁 - - 오전 오후 - 아침 - 오전 - 오후 - 저녁 - @@ -2180,16 +2203,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h:mm B h:mm:ss d일 + (E) B h시 (E) B h:mm (E) B h:mm:ss d일 (E) d일 EEEE + (E) a h (E) a h:mm (E) HH:mm (E) a h:mm:ss (E) HH:mm:ss G y년 + G y/M GGGGG y/M/d + G y/M/d (E) G y년 MMM G y년 MMM d일 G y년 MMM d일 (E) @@ -2203,6 +2230,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ a h:mm:ss v H시 m분 s초 v a h:mm v + a h시 v + H시 v M월 M. d. M. d. (E) @@ -2328,11 +2357,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM d일~d일 - M월 d일 ~ M월 d일 + MMM d일~MMM d일 - M월 d일 (E) ~ d일 (E) - M월 d일 (E) ~ M월 d일 (E) + MMM d일 (E)~d일 (E) + MMM d일 (E)~MMM d일 (E) LLLL–LLLL @@ -2356,17 +2385,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ y년 M월~M월 - y년 M월 ~ y년 M월 + y년 MMM~y년 MMM y년 M월 d일~d일 - y년 M월 d일 ~ M월 d일 - y년 M월 d일 ~ y년 M월 d일 + y년 MMM d일~MMM d일 + y년 MMM d일~y년 MMM d일 - y년 M월 d일 (E) ~ d일 (E) - y년 M월 d일 (E) ~ M월 d일 (E) - y년 M월 d일 (E) ~ y년 M월 d일 (E) + y년 MMM d일 (E)~d일 (E) + y년 MMM d일 (E)~MMM d일 (E) + y년 MMM d일 (E)~y년 MMM d일 (E) y년 M월 d일 EEEE ~ d일 EEEE @@ -2374,8 +2403,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ y년 M월 d일 EEEE ~ y년 M월 d일 EEEE - y년 MMMM ~ MMMM - y년 MMMM ~ y년 MMMM + y년 MMMM~MMMM + y년 MMMM~y년 MMMM @@ -3329,6 +3358,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 이스터 섬 + + 코이아이케 + 푼타아레나스 @@ -3594,9 +3626,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 프놈펜 - 엔더베리 - - 칸톤 @@ -4273,9 +4302,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 서아프리카 시간 - 서아프리카 표준시 - 서아프리카 하계 표준시 + 서아프리카 시간 @@ -4392,30 +4419,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 오스트레일리아 중부 시간 - 오스트레일리아 중부 표준시 - 오스트레일리아 중부 하계 표준시 + 호주 중부 시간 + 호주 중부 표준시 + 호주 중부 하계 표준시 - 오스트레일리아 중서부 시간 - 오스트레일리아 중서부 표준시 - 오스트레일리아 중서부 하계 표준시 + 호주 중서부 시간 + 호주 중서부 표준시 + 호주 중서부 하계 표준시 - 오스트레일리아 동부 시간 - 오스트레일리아 동부 표준시 - 오스트레일리아 동부 하계 표준시 + 호주 동부 시간 + 호주 동부 표준시 + 호주 동부 하계 표준시 - 오스트레일리아 서부 시간 - 오스트레일리아 서부 표준시 - 오스트레일리아 서부 하계 표준시 + 호주 서부 시간 + 호주 서부 표준시 + 호주 서부 하계 표준시 @@ -4663,6 +4690,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 가이아나 시간 + + + 하와이 알류샨 표준시 + + 하와이 알류샨 시간 @@ -4766,9 +4798,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 대한민국 시간 - 대한민국 표준시 - 대한민국 하계 표준시 + 한국 시간 + 한국 표준시 + 한국 하계 표준시 @@ -5113,6 +5145,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 추크 시간 + + + 터키 시간 + 터키 표준시 + 터키 일광 절약 시간 + + 투르크메니스탄 시간 @@ -5228,8 +5267,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -5528,7 +5565,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 이집트 파운드 - 에리트리아 나크파 + 에리트레아 낙파 스페인 페세타(예금) @@ -5988,7 +6025,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 튀르키예 리라 - 튀르키예 리라 트리니다드 토바고 달러 @@ -6078,6 +6114,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 동카리브 달러 + + 카리브 길더 + 카리브 길더 + 특별인출권 @@ -6148,6 +6188,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 짐바브웨 달러 + + 짐바브웨 골드 + 짐바브웨 골드 + 짐바브웨 달러 (2009) @@ -6354,10 +6398,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 리터당 밀리몰 리터당 {0}밀리몰 + + 분율 + {0}분율 + {0}몰 + + 포도당 + {0}포도당 + 킬로미터당 리터 킬로미터당 {0}리터 @@ -6734,6 +6786,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 수은주밀리미터 {0}수은주밀리미터 + + 수은주 + {0}수은주 + 제곱인치당 파운드 {0}제곱인치당 파운드 @@ -6868,6 +6924,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 미터식 컵 {0}미터식 컵 + + 미터식 액량 온스 + {0}미터식 액량 온스 + 에이커 피트 {0}에이커 피트 @@ -6942,12 +7002,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 영국 쿼트 {0}영국 쿼트 - - {0}ppb + + 스테라디안 + {0}스테라디안 + + + 캐탈 + {0}캐탈 + + + 쿨롬 + {0}쿨롬 + + + 패럿 + {0}패럿 + + + 헨리 + {0}헨리 + + + 지멘스 + {0}지멘스 + + + 칼로리[IT] + {0}칼로리[IT] + + + 베크렐 + {0}베크렐 + + + 시버트 + {0}시버트 + + + 그레이 + {0}그레이 + + + 킬로그램힘 + {0}킬로그램힘 + + + 테슬라 + {0}테슬라 + + + 웨버 + {0}웨버 + + + 광속 + {0}광속 - - {0}박 1박당 {0} @@ -7026,12 +7137,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 항목 {0}개 항목 - + + {0}part + + {0}ppm {0}mol + + Glc + {0}Glc + {0}L/km @@ -7371,6 +7489,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmHg {0}mmHg + + {0}Hg + {0}psi @@ -7466,6 +7587,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mc + + {0}fl oz m. + {0}ac ft @@ -7527,7 +7651,50 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt Imp. - + + {0}sr + + + {0}kat + + + {0}C + + + {0}F + + + {0}H + + + {0}S + + + cal-IT + {0}cal-IT + + + {0}Bq + + + {0}Sv + + + {0}Gy + + + {0}kgf + + + {0}T + + + {0}Wb + + + {0}light + + {0}ppb @@ -7540,6 +7707,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + {0}part + + + Glc + {0}Glc + B @@ -7567,23 +7741,64 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}HP + + {0}Hg + {0}mph B{0} + + {0}fl oz m. + dsp Imp {0}dsp-Imp - - {0}ppb + + {0}sr - - - {0}박 - {0}/박 + + {0}kat + + + {0}C + + + {0}F + + + {0}H + + + {0}S + + + cal-IT + {0}cal-IT + + + {0}Bq + + + {0}Sv + + + {0}Gy + + + {0}kgf + + + {0}T + + + {0}Wb + + + {0}light diff --git a/make/data/cldr/common/main/kok.xml b/make/data/cldr/common/main/kok.xml index 061136411d8..a26bb0ab07f 100644 --- a/make/data/cldr/common/main/kok.xml +++ b/make/data/cldr/common/main/kok.xml @@ -27,12 +27,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic आरागोनिस ओबोलो अंगिका - अरेबिक - आधुनिक प्रमाणित अरेबिक + अरबी + आधुनिक प्रमाणित अरबी मापुचे अरापाहो नाझदी अरबी - आसामी + असमिया असु अस्टुरियान अटिकामेक्वु @@ -42,6 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic अझरबैजानी अझेरी बष्किर + Baluchi बालिनीज बस्सा बेलारुशियन @@ -55,7 +56,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic सिकसिका अनी बंबारा - बांग्ला + बांगला तिबेटी ब्रेटन बोडो @@ -102,7 +103,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic डोगरीब झर्मा डोग्री - लोवर सोर्बियन + सकयलें सोर्बियन डुआला दिवेही जोला-फोन्यी @@ -160,8 +161,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic हैदा हवायियान दक्षिणी हैदा - हिब्रू + हेब्रेव हिन्दी + हिन्दी (रोमी) हिंग्लीश हिलीगायनॉन मोंग @@ -177,7 +179,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic आयबन ईबिबियो इंडोनेशियन - इन्टरलिंग् + इन्टरलिंग्वे इग्बो सिच्युआन यी इनूपेयाक् @@ -227,13 +229,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic बाफिया कोलोनियन कर्दिश + कर्दिश + कुर्मनजी कुमयक कोमी कोर्निश क्वाकवाला कुवी किर्गिझ - लॅटिन + लातीन लाडिनो लांगी लक्झेम्बर्गीश @@ -296,13 +300,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic नामा नॉर्वेजियन बोकमाल उत्तर डेबेले - लोवर जर्मन + सकयलें जर्मन नेपाळी नेवारी डोंगा नियास नायान - डच + हाॅलँडी फ्लेमिश क्वासीयो नॉर्वेजियन नायनोर्स्क @@ -311,7 +315,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic नोगाय नको दक्षिण डेबेले - उत्तरीय सोथो + उत्तरी सोथो न्युयर नावाजो नांन्जा @@ -464,7 +468,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic चिनी, कॅण्टोनीस झ्हुन्ग प्रमाणीत मॉरोक्कन तमाझीट - चिनी + चीनी चिनी, मंडारीन सोंपी चिनी सोंपी मंडारीन चिनी @@ -472,7 +476,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic पारंपारीक मंडारीन चिनी झुलू झुनी - अणकार सामुग्री ना + भाशीक मजकूर ना झाझा @@ -510,7 +514,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -522,7 +526,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -546,11 +550,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic अस्तंत आफ्रिका मध्य अमेरिका उदेंत आफ्रिका - उत्तरीय आफ्रिका + उत्तरी आफ्रिका मध्य आफ्रिका - दक्षिण आफ्रिका + दक्षिणी आफ्रिका अमेरिकास - उत्तरीय अमेरिका + उत्तरी अमेरिका कॅरिबियन उदेंत आशिया दक्षिण आशिया @@ -565,85 +569,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic अस्तंत आशिया युरोप उदेंत युरोप - उत्तर युरोप + उत्तरी येरोप अस्तंत युरोप उप-सहाराई आफ्रिका लॅटीन अमेरिका - असेंशन आयलँड - अंडोरा - युनाइटेड अरब इमीरात + असँसांव जुंवो + आंडोरा + संयुक्त अरबी अमीरात अफगानिस्तान - एँटिगुआ आनी बारबुडा - अंगुला - अल्बानीया - आर्मीनीया + अँटिगुआ आनी बार्बुडा + अँग्विला + आल्बान्या + अर्मेनिया अंगोला अंटार्क्टिका - अर्जेंटिना - अमेरिकी सामोआ + आर्जेंटीना + अमेरिकेचो सामोआ ऑस्ट्रिया - ऑस्ट्रेलीया + ऑस्ट्रेलिया अरुबा - अलांड जुवे - अजरबैजान - बोस्निया आनी हेर्जेगोविना - बारबाडोस + ओलँड जुंवे + आजरबैजान + बॉस्निया आनी हर्जेगोविना + बार्बाडोस बांगलादेश बेल्जियम - बुर्किना फॅसो - बल्गेरीया - बेहरेन + बुर्कीना फासो + बुल्गारिया + बाहरेन बुरुंडी बेनीन - सॅंट बार्थेल्मी + सांव बार्टोलोमेव बर्मुडा ब्रूनेई - बोलिव्हिया - कॅरिबियन निदरलँड + बोलिविया + कॅरिबियन नॅदरलँड ब्राझील - बहामास + बाहामास भूतान - बोवट आयलँड - बोत्सवाना + बोउवे जुंवो + बोट्स्वाना बेलारूस बेलिझ कॅनडा - कोकोस (कीलिंग) आयलँड - कोंगो - किंशासा - कोंगो (डीआरसी) - मध्य अफ्रीकी लोकसत्तकराज्य + कोकोस (कीलिंग) जुंवे + काँगो - किंशासा + मदलें अफ्रीकी प्रजासत्तो कोंगो - ब्राझाविला - कोंगो (प्रजासत्ताक) - स्विट्ज़रलैंड - कोत द’ईवोआर - आयवोरी कोस्ट - कुक आयलँड्स + काँगो - ब्राज़ाविल + स्वित्झरलँड + कोस्ता दो मारफ़ीम + कुक जुंवे चिली - कॅमेरून + कॅमरून चीन कोलंबिया - क्लिपरटॉन आयलँड + क्लिपर्टन जुंवो + सार्क कोस्ता रिका क्युबा - केप वर्दी - कुरसावो - क्रिसमस आयलँड - सायप्रस + काबो वेर्दे + कुरासाव + ख्रिसमस जुंवो + सिप्रुस चेकिया - चेक लोकसत्ताक जर्मनी - दिगो गार्सिया + डिएगो गार्सिया जिबूती डेनमार्क - डोमिनीका - डोमिनिकन प्रजासत्ताक - अल्जेरिया - सिटा आनी मेलिल्ला - इक्वाडोर + डोमिनिका + डोमिनिकन प्रजासत्तो + अल्जीरिया + सेउता आनि मेलिया + एक्वाडोर एस्टोनिया - ईजिप्त - अस्तंत सहारा - इरिट्रिया + एजिप्त + अस्तंती सहारा + एरिट्रिया स्पेन इथियोपिया युरोपियन युनियन @@ -651,89 +653,87 @@ CLDR data files are interpreted according to the LDML specification (http://unic फिनलँड फिजी फ़ॉकलैंड आइलैंड्स - फ़ॉकलैंड आइलैंड्स (इलास मालविनास) - मायक्रोनेशिया - फैरो आयलँड्स + मायक्रोनिशिया + फेरो जुंवे फ्रान्स - गॅबोन + गाबॉन युनायटेड किंगडम - युके - ग्रेनॅडा + संयुक्त राजवट + ग्रेनाडा जॉर्जिया - फ्रेन्च गयाना - गर्नसी + फ्रांसेझ गियॅना + गॅर्नजी घाना जिब्राल्टर ग्रीनलँड - गॅम्बिया - गुएनिया - ग्वाडेलोप - इक्वेटोरियल गुएनिया + गाम्बिया + गिनी + ग्वाडलूप + भूमध्यरेखी गिनी ग्रीस - दक्षिण जोर्जिया आनी दक्षिण सॅण्डविच आयलँड्स + दक्षिण जॉर्जिया आनी दक्षिण सँडविच जुंवे ग्वाटेमाला गुआम - गुअनिया-बिसाउ - गयाना - हाँग काँग एसएआर चीन - हाँग काँग - हर्ड ऍंड मॅक्डोनाल्ड आयलँड्स - हॉनडुरस - क्रोयेशीया + गिनी-बिसाउ + गियॅना + हाँग काँग + हर्ड आनि मॅक्डोनल्ड जुंवे + हाँडूरास + क्रोएशिया हैती - हंगेरी - कॅनरी आयलैंड्स - इंडोनेशीया + हंगरी + कानारियास जुंवे + इंडोनिशिया आयरलँड - इस्त्राइल - इसले ऑफ मॅन + इज्राएल + मॅनाचो जुंवो भारत - ब्रिटिश हिंद महासागरीय क्षेत्र + ब्रिटनाचो हिंदी महासागर प्रांत + शागस जुंवे इराक इरान - आइसलैंड + आइसलँड इटली जर्सी जमैका जॉर्डन जपान - केनया - किर्गिझस्तान - कंबोडिया - किरिबाती + केनिया + किर्गिस्तान + कॅम्बोडिया + किरिबास कोमोरोस - सेंट किट्स आनी नेविस + सांव क्रिस्टोवांव आनी नेविस उत्तर कोरिया दक्षिण कोरिया कुवेत - कैमेन आइलैंड्स - कझाकस्तान + केमॅन जुंवे + कजाखस्तान लाओस - लेबनान - सँट लुसिया - लिचेंस्टीन + लेबनन + सांता लूसिया + लिश्टेंस्टाइन श्री लंका - लायबेरीया - लिसोथो - लिथुआनिया - लक्सेमबर्ग - लॅटविया - लीबिया + लायबिरिया + लेसोथो + लितुआनिया + लुक्सेमबर्ग + लाटविया + लिबिया मोरोक्को - मोनॅको - माल्डोवा - मॉन्टॅनग्रो + मोनाको + मॉल्डोवा + मोंटेनेग्रो सॅंट मार्टिन - माडागास्कर - मार्शल आयलँड्स + मॅडागास्कर + मार्शल जुंवे उत्तर मॅसिडोनिया माली - म्यानमार (बर्मा) + म्यानमार मंगोलिया - मकाव एसएआर चीन - मकाव - उत्तरी मरिना आयसलैण्ड - मार्टीनिक + मकाव + उत्तरी मारियाना जुंवे + मार्टिनीक मॉरिटानिया मॉन्टसेराट माल्टा @@ -742,107 +742,107 @@ CLDR data files are interpreted according to the LDML specification (http://unic मलावी मेक्सिको मलेशिया - मॉझांबीक - नामीबिया - न्यू कॅलिडोनिया + मोजाम्बिक + नामिबिया + नोवो कॅलेडोनिया नायजर - नॉरफॉक आयलँड - नायजेरिया - निकारगुवा + नॉरफोक जुंवो + नायजिरिया + निकारागुआ नॅदरलँड नॉर्वे नेपाळ - नावरू - नीयू - न्युझीलॅन्ड - आओटेरोआ न्युझीलॅन्ड + नाउरु + निउए + नोवो झीलॅंड + आओतेरोआ ओमान - पनामा + पानामा पेरू - फ्रेन्च पोलिनेसिया - पापुआ न्यु गिनी - फिलीपिन्झ + फ्रांसेझ पॉलिनिशिया + पापुआ नोवो गिनी + फिलिपीन्स पाकिस्तान - पोलंड - सँ. पायरे आनी मिकेलन - पिटकॅरन आयलँड्स - प्युएर्तो रिको - पेलेस्टीनियन प्रांत - पेलेस्टायन - पुर्तगाल - पलाऊ - पैराग्वे - कतार + पोलँड + सांव पेद्रु आनी मिकेलांव + पिटकॅर्न जुंवे + पोर्टो रिको + पालेसटीन + पालेसटीनी प्रांत + पुर्तुगाल + पालाउ + पॅरग्वे + कातार आवटलायींग ओशेनिया - रीयूनियन - रोमानीया + रेयुनियांव + रोमेनिया सर्बिया रूस - रवांडा - सऊदी अरेबिया - सोलोमन आइलँड्स + रुआंडा + साउदी अरब + सोलोमन जुंवे सेशेल्स - सूडान + सुदान स्वीडन - सिंगापूर - सेंट हेलिना + सिंगापुर + सांता हेलेना स्लोवेनिया - स्वालबार्ड आनी जान मेयन + स्वालबार्ड आनी यान मायेन स्लोवाकिया - सिएरा लियॉन - सॅन मारीनो - सिनिगल + सेर्रा लेओं + सान मारीनो + सेनेगाल सोमालिया - सुरीनाम - दक्षिण सुडान - साओ टोम आनी प्रिन्सिप + सुरिनाम + दक्षिण सुदान + सांव टोमे आनी प्रिंसिपे एल साल्वाडोर - सिंट मार्टेन + सांव मोर्टिन (नॅदरलँड) सिरिया - इस्वातिनी - स्वाझिलँड - त्रिस्तान दा कुन्हा - तुर्क्स आनी कॅकोज आयलँड्स + एस्वातीनी + ट्रीस्टांव दा कुन्ह्या + तुर्क आनी कायकोस जुंवे चाड - फ्रेंच दक्षिणी प्रांत + फ्रांसेझ दक्षिणी प्रांत टोगो थायलँड - तजीकिस्तान - टोकलाऊ + ताजीकिस्तान + टोकलाउ तिमोर-लेस्ते - ईस्ट तिमूर + उदेंत तिमोर तुर्कमेनिस्तान - ट्यूनीशिया - टोंगा + टुनिसिया + टाँगा तुर्की - ट्रिनीदाद आनी टोबॅगो - टुवालू - तायवान - तांझानिया + तुर्किया + त्रिनदाड आनी तोबाग + तुवालू + ताइवान + तांजानिया युक्रेन युगांडा - यु. एस. मायनर आवटलायींग आयलँड्‍स - युनायटेड नेशन्स + संयुक्त राज्यांचे पयशिल्ले धाकटे जुंवे + संयुक्त राष्ट्रां युनायटेड स्टेट्स युएस - उरूग्वे - उझ्बेकिस्तान - वॅटिकन सिटी - सेंट विंसेंट ऐंड द ग्रेनेडाइंस - विनेझुएला - ब्रिटिश वर्जिन आयलँड्स - यु. एस. वर्जिन आयलँड्‍स - व्हिएतनाम - वनौतू - वालिस आनी फ्यूचूना + उरुग्वे + उज्बेकिस्तान + वॅटिकन शार + सांव विसेंट आनी ग्रानाडीनस + वेनेजुएला + ब्रिटनाचे विर्जिन जुंवे + संयुक्त राज्यांचे विर्जिन जुंवे + विएतनाम + वानुआतु + वॉलिस आनी फुतुना सामोआ स्युडो-ऍक्सेंट स्युडो-बिडी कोसोवो येमेन - मेयोट - दक्षिण आफ्रीका - झांबिया + मायोट + दक्षिण आफ्रिका + जाम्बिया जिम्बाब्वे अज्ञात प्रांत @@ -851,43 +851,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic चलनाचें स्वरूप वर्गवारी क्रम चलन + इमोजी सादरीकरण वराचें चक्र (12 वि 24) रेग खंड करपाची शैली + शब्दां भितर ओळी मोडप मापन प्रणाली संख्या + वाक्य विराम उपरांत Abbr. बौद्ध दिनदर्शिका + बौध्द धर्म चीनी दिनदर्शिका + चीनी कॉप्टिक दिनदर्शिका + कॉप्टिक डांगी दिनदर्शिका + डांगी इथियोपिक दिनदर्शिका + इथियोपिक इथियोपिक अमिटी आलेम दिनदर्शिका + इथियोपिक ग्रेगोरियन कॅलॅण्डर + ग्रेगोरियन हिब्रू दिनदर्शिका + हिब्रू भारतीय राष्ट्रीय दिनदर्शिका + भारतीय राष्ट्रीय ईस्लामीक दिनदर्शिका + ईस्लामीक ईस्लामीक दिनदर्शिका (कोश्टक, नागरी शक) + ईस्लामीक (कोश्टक, नागरी शक) ईस्लामीक दिनदर्शिका (उम अल-कुरा) + ईस्लामीक (उम अल-कुरा) आयएसओ-8601 दिनदर्शिका जपानी दिनदर्शिका + जपानी पर्शियन दिनदर्शिका + पर्शियन मिंगुआ दिनदर्शिका (अणकाराची कुरू: जाका चिनी दिनदर्शिकेचें प्रजासत्ताक", "रिपब्लिकन दिनदर्शिका") + मिंगुआ लेखा चलन स्वरूप + लेखा चलन प्रमाणित चलन स्वरुप + प्रमाणित डिफॉल्ट युनिकोड वर्गवारी क्रम + डिफॉल्ट युनिकोड सामान्य-उद्देशान केल्लो सोद + सोद प्रमाणित वर्गवारी क्रम + वर्गवारी + डिफॉल्ट + इमोजी + लिखीत 12 वरांची यंत्रणा (0–11) + 12 (0–11) 12 वरांची यंत्रणा (1–12) + 12 (1–12) 24 वरांची यंत्रणा (0–23) + 24 (0–23) 24 वरांची यंत्रणा (1–24) + 24 (1–24) सुटी रेग खंड शैली + सुटी सामान्य रेग खंड शैली + सामान्य सक्तीची रेग खंड शैली + सक्तीची + सगळें मोडून उडोवप + सगळें दवरात + सामान्य + वाक्यांशांत दवरात मॅट्रीक प्रणाली + मॅट्रीक भव्य मापन प्रणाली + UK युएस मापन प्रणाली + US अरेबिक-भारतीय अंक विस्तारीत अरेबीक-भारतीय अंक आर्मेनियन संख्या @@ -928,6 +968,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic थाय अंक तिबेतियन अंक वाई अंक + बंद करचें + चालू मॅट्रिक @@ -1009,37 +1051,46 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d + E a h:mm + E a h:mm:ss y G + d-M-y GGGGG MMM y G - d MMM y G + d MMM, y G E d, MMM y G + a h + a h:mm + a h:mm:ss d-M E, d-M d MMM - E d, MMM + E, d MMM d MMMM y G y G - M-y GGGG + M-y GGGGG d-M-y GGGGG - E, d/M/y GGGGG + E, d-M-y GGGGG MMM y G - d MMM y G - E, d MMM y G + d MMM, y G + E, d MMM, y G MMMM y G QQQ y G QQQQ y G {0} – {1} + + h – h B + - YG – YG - y–y G + y G – y G + y – y G - M-y GGGG – M-y GGGG - M-y GGGGG – M y - M-y GGGGG – M-y + M/y GGGGG – M/y GGGGG + M/y – M/y GGGGG + M/y – M/y GGGGG d-M-y GGGGG – d-M-y @@ -1049,14 +1100,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d-M-Y GGGGG – E-d-M-y - E, d-M-y GGGGG – E, d-M-y GGGGG + E, d/M/y GGGGG – E, d/M/y GGGGG E, d-M-y GGGGG – E, d-M-y - E,dd-MM-y GGGGG – E,dd-MM-y + E, d/M/y – E, d/M/y GGGGG MMM y G – MMM y G MMM y G–MMM - MMM y G – MMM y + MMM y – MMM y G d-MMM y G–d @@ -1065,10 +1116,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic d MMM y G – d MMM y - e, d MMM y G – e, d MMM + E, d MMM – E, d MMM, y G E, d MMM y G – E, d MMM y G E, d MMM y G – E, d MMM - E, d MMM y G – E, d MMM y + E, d MMM, y – E, d MMM, y G a h – a h @@ -1102,62 +1153,54 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH – HH v - - M–M - - d-M – d-M - d-M – d-M + d/M – d/M + d/M – d/M E, d-M – E, d-M E, d-M, E d-M - MMM–MMM + MMM – MMM d–d MMM d MMM – d MMM - E, d MMM – E, d MMM + E, d MMM – E, d MMM E, d MMM – E, d MMM - y–y G + y – y G - M-y – M-y GGGGG - M/y – M/y GGGGG + M/y – M/y GGGGG + M/y – M/y GGGGG d-M-y – d-M-y GGGGG - d-M-y – d-M-y GGGGG d/M/y – d/M/y GGGGG - E, d/M/y – E, d/M/y GGGGG - E, d/M/y – E, d/M/y GGGGG - E, d/M/y – E, d/M/y GGGGG + E, d/M/y – E, d/M/y GGGGG + E, d/M/y – E, d/M/y GGGGG + E, d/M/y – E, d/M/y GGGGG MMM–MMM y G - MMM y G – MMM y + MMM y – MMM y G d–d MMM, y G - d MMM – d MMM, y G - d, MMM y – d, MMM y G + d MMM – d MMM, y G + d MMM, y – d MMM, y G E, d MMM – E, d MMM, yG E, d, MMM y – E, d, MMM y G - E, d, MMM y – E, d, MMM y G - - - MMMM – MMMM y G - MMMM y – MMMM y G + E, d MMM, y – E, d MMM, y G @@ -1165,6 +1208,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + जाने + फेब्रु + मार्च + एप्री + मे + जून + जुल + ऑग + सप्टें + ऑक्टो + नोव्हें + डिसें + + + जा + फे + मा + + मे + जू + जु + + + + नो + डि + जानेवारी फेब्रुवारी @@ -1192,9 +1263,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic ऑग सप्टें ऑक्टो - नो + नोव्हें डिसे + + जा + फे + मा + + मे + जू + जु + + + + नो + डि + @@ -1209,13 +1294,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic शे - आय + सोम - मंगळ - बुध + मंगळार + बुधवार बिरे - शुक्र - शेन + शुक्रार + शेनवार आयतार @@ -1237,6 +1322,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic शु शे + + + सो + मंगळार + बुधवार + बिरे + शुक्रार + शेनवार + @@ -1254,30 +1348,79 @@ CLDR data files are interpreted according to the LDML specification (http://unic 4थें त्रैमासीक + + + तिम्ह1 + तिम्ह2 + तिम्ह3 + तिम्ह4 + + + + मध्यान + सकाळ + दनपार + सांज + रात + + मध्यान a - p + PM + सकाळ + दनपार + सांज + रात + मध्यानरात सकाळीं सांजे + सकाळीं + दनपारां + सांजे + राती + + + + + मध्यान + सकाळ + दनपार + सांज + रात + + + मध्यान + सकाळ + दनपार + सांज + रात + + + मध्यानरात + सकाळीं + सांजे + सकाळीं + दनपारां + सांजे + राती + क्रिस्ता आदीं क्रिस्तपूर्व शक - क्रिस्तशक इसवी सन क्रिस्तपूर्व BCE क्रि.श. - CE क्रि.आ. @@ -1342,6 +1485,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} वरांचेर + + {1} {0} वरांचेर + @@ -1350,6 +1496,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} वरांचेर + + {1} {0} वरांचेर + @@ -1358,6 +1507,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + @@ -1366,44 +1518,106 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + - d-M + B h:mm + B h:mm:ss + E B h:mm + E B h:mm:ss + M/y G + E, d-M-y G + MMM y G + d MMM, y G + E, d MMM, y G + a h:mm + a h:mm:ss + a h:mm:ss v + a h:mm v + a h वाजतां v + d/M d-M, E d MMM E, d MMM d MMMM + MMMM हाचो सप्तक W + MMMM हाचो सप्तक W M-y d-M-y d-M-y, E - MMM, y + MMM y d MMM, y MMMM, y + Y हाचो सप्तक w + Y हाचो सप्तक w - {0} – {1} + + B h – B h + + + B h:mm – B h:mm + + + d – d + + + y G – y G + y – y G + GGGGG M-y – GGGGG M-y - GGGGG M-y – M-y - GGGGG M-y – M-y + M/y – M/y G - GGGGG d-M-y – d-M-y - GGGGG d-M-y – GGGGG d-M-y - GGGGG d-M-y – d-M-y - GGGGG d-M-y – d-M-y + d/M/y – d/M/y G + d/M/y G – d/M/y G + d/M/y – d/M/y G + d/M/y – d/M/y G - GGGGG d-M-y, E – d-M-y, E - GGGGG d-M-y, E – GGGGG d-M-y, E - GGGGG d-M-y, E – d-M-y, E - GGGGG d-M-y, E – d-M-y, E + E, d/M/y – E, d/M/y G + E, d/M/y G – E, d/M/y G + E, d/M/y – E, d/M/y G + E, d/M/y – E, d/M/y G - - M–M + + MMM y G – MMM y G + MMM – MMM y G + MMM y – MMM y G + + + d – d MMM, y G + d MMM, y G – d MMM, y G + d MMM – d MMM, y G + d MMM, y – d MMM, y G + + + E, d MMM – E, d MMM, y G + E, d MMM, y G – E, d MMM, y G + E, d MMM – E, d MMM, y G + E, d MMM, y – E, d MMM, y G + + + a h – a h + a h–h + + + a h:mm – a h:mm + + + HH:mm – HH:mm + + + a h:mm – a h:mm v + + + HH – HH v - d-M –d-M + d/M – d/M d-M –d-M @@ -1411,19 +1625,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic d-M, E – d-M, E - MMM – MMM + MMM – MMM + + + d – d MMM + d MMM – d MMM + + + E, d MMM – E, d MMM + E, d MMM – E, d MMM + + + y – y - M-y – M-y + M/y – M/y M-y – M-y d-M-y – d-M-y - d-M-y – d-M-y + d/M/y – d/M/y d-M-y – d-M-y - d-M-y, E – d-M-y, E + E, d/M/y – E, d/M/y d-M-y, E – d-M-y, E d-M-y, E – d-M-y, E @@ -1438,8 +1663,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d MMM –E, d MMM y - E, d MMM – E, d MMM y - E, d MMM y – E, d MMM y + E, d MMM – E, d MMM, y + E, d MMM, y – E, d MMM, y MMMM – MMMM y @@ -1451,6 +1676,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + चैत्र वैशाख @@ -1466,22 +1705,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic फाल्गुन - - - - - - - - - - - - १० - ११ - १२ - - @@ -1496,42 +1719,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic वर्स - फाटलें वर्स + पोरूं हें वर्स फुडलें वर्स + {0} वर्सान {0} वर्सांनीं + {0} वर्स आदीं {0} वर्सां आदीं + पोरूं + हें वर्स + फुडलें वर्स + + {0} वर्सान + {0} वर्सांनीं + - {0} वर्स आदीं + {0} वर्स आदीं + {0} वर्सां आदीं + + + + पोरूं + हें वर्स + फुडलें वर्स + + {0}वर्सान + {0}वर्सांनीं + + + {0}वर्स आदीं + {0}वर्सां आदीं त्रैमासीक - फाटलो त्रैमासीक - हो त्रैमासीक - फुडलो त्रैमासीक + फाटलें तिम्हयनाळें + हें तिम्हयनाळें + फुडलें तिम्हयनाळें - {0} त्रैमासीकांत + {0} तिम्हयनाळ्यान + {0} तिम्हयनाळ्यांनीं - {0} त्रैमासीकां आदीं + {0} तिम्हयनाळें आदीं + {0} तिम्हयनाळे आदीं फाटलें तिम्ह. हें तिम्ह. फुडलें तिम्ह. + + {0} तिम्हयनाळ्यान + {0} तिम्हयनाळ्यांनीं + + + {0} तिम्ह. आदीं + {0} तिम्ह. आदीं + फाटलें तिम्ह हें तिम्ह फुडलें तिम्ह + + {0}तिम्हयनाळ्यान + {0}तिम्हयनाळ्यांनीं + + + {0}तिम्ह आदीं + {0}तिम्ह आदीं + म्हयनो @@ -1539,29 +1803,81 @@ CLDR data files are interpreted according to the LDML specification (http://unic हो म्हयनो फुडलो म्हयनो + {0} म्हयन्यान {0} म्हयन्यानीं - {0} म्हयन्यां आदीं + {0} म्हयनो आदीं + {0} म्हयने आदीं + + + + फाटलो म्ह. + हो म्ह. + फुडलो म्ह. + + {0} म्हयन्यान + {0} म्हयन्यानीं + + + {0} म्ह. आदीं + {0} म्ह. आदीं + + + + फाटलो म्ह + हो म्ह + फुडलो म्ह + + {0}म्हयन्यान + {0}म्हयन्यानीं + + + {0}म्ह आदीं + {0}म्ह आदीं सप्तक - निमाणो सप्तक + फाटलो सप्तक हो सप्तक फुडलो सप्तक + {0} सप्तकान {0} सप्तकांनीं + {0} सप्तक आदीं {0} सप्तकां आदीं {0} चो सप्तक - - - {0} सप्त. आदीं + + फाटलो सप्तक + हो सप्तक + फुडलो सप्तक + + {0} सप्तकान + {0} सप्तकांनीं + + {0} सप्तक आदीं + {0} सप्तकां आदीं + + + + फाटलो सप्त + हो सप्त + फुडलो सप्त + + {0}सप्तकान + {0}सप्तकांनीं + + + {0}सप्त आदीं + {0}सप्त आदीं + + {0} चो सप्त म्हयन्यातलो सप्तक @@ -1572,12 +1888,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic आयज फाल्यां + {0} दिसान {0} दिसानीं + {0} दीस आदीं {0} दीस आदीं + + + {0} दिसान + {0} दिसानीं + + + + + {0}दिसान + {0}दिसानीं + + + {0}दी आदीं + {0}दी आदीं + + वर्साचो दीस @@ -1585,144 +1919,286 @@ CLDR data files are interpreted according to the LDML specification (http://unic सप्तकाचो दीस - म्हयन्यातलो सप्तकीय दीस + म्हयन्यांत दीसाचो प्रसंग + + + म्हयन्यांत दीसाचो प्रसंग + + + म्हयन्यांत दीसाचो प्रसंग फाटलो आयतार हो आयतार फुडलो आयतार + {0} आयतारान {0} आयतारानीं + {0} आयतार आदीं {0} आयतारां आदीं + + फाटलो आयत + हो आयत + फुडलो आयत + + {0} आयतारान + {0} आयतारानीं + + + {0} आयत. आदीं + {0} आयत आदीं + + + + फाटलो आ + हो आ + फुडलो आ + + {0} आयतारान + {0} आयतारानीं + + + {0} आ आदीं + {0} आ आदीं + + - निमाणो सोमार + फाटलो सोमार हो सोमार फुडलो सोमार + {0} सोमारान {0} सोमारानीं + {0} सोमार आदीं {0} सोमारां आदीं - निमाणो सोम. + फाटलो सोम. हो सोम. फुडलो सोम. + + {0} सोमारान + {0} सोमारानीं + + + {0} सोम. आदीं + {0} सोम. आदीं + - निमाणो सो. - हो सो. - फुडलो सो. + फाटलो सो + हो सो + फुडलो सो + + {0} सोमारान + {0} सोमारानीं + + + {0} सो आदीं + {0} सो आदीं + - निमाणो मंगळार + फाटलो मंगळार हो मंगळार फुडलो मंगळार + {0} मंगळारान {0} मंगळारानीं + {0} मंगळार आदीं {0} मंगळारां आदीं - निमाणो मंगळ. - हो मंगळ. - फुडलो मंगळ. + फाटलो मंग. + हो मंग. + फुडलो मंग. + + {0} मंगळारान + {0} मंगळारानीं + + + {0} मंग. आदीं + {0} मंग. आदीं + - फाटलो मं. - हो मं. - फुडलो मं. + फाटलो मं + हो मं + फुडलो मं + + {0} मंगळारान + {0} मंगळारानीं + + + {0} मं आदीं + {0} मं आदीं + फाटलो बुधवार हो बुधवार फुडलो बुधवार + {0} बुधवारान {0} बुधवारानीं + {0} बुधवार आदीं {0} बुधवारां आदीं - निमाणो बुध. + फाटलो बुध. हो बुध. फुडलो बुध. - - - निमाणो बु. - हो बु. - फुडलो बु. - - - निमाणो गुरुवार - हो गुरुवार - फुडलो गुरुवार - {0} गुरुवारानीं + {0} बुधवारान + {0} बुधवारानीं - {0} गुरुवारां आदीं + {0} बुध. आदीं + {0} बुध. आदीं + + + + फाटलो बु + हो बु + फुडलो बु + + {0} बुधवारान + {0} बुधवारानीं + + + {0} बु आदीं + {0} बु आदीं + + + + फाटलो बिरेस्तार + हो बिरेस्तार + फुडलो बिरेस्तार + + {0} बिरेस्तारान + {0} बिरेस्तारानीं + + + {0} बिरेस्तार आदीं + {0} बिरेस्तारां आदीं - निमाणो गुरु. - हो गुरु. - फुडलो गुरु. - - - निमाणो गु. - हो गु. - फुडलो गु. - - - निमाणो शुक्रार - हो शुक्रार - फुडलो शुक्रार + फाटलो ब्रेस्त. + हो ब्रेस्त. + फुडलो ब्रेस्त. - {0} शुक्रारानीं + {0} बिरेस्तारान + {0} बिरेस्तारानीं - {0} शुक्रारां आदीं + {0} ब्रेस्त. आदीं + {0} ब्रेस्त. आदीं + + + + फाटलो ब्रे + हो ब्रे + फुडलो ब्रे + + {0} बिरेस्तारान + {0} बिरेस्तारानीं + + + {0} ब्रे आदीं + {0} ब्रे आदीं + + + + फाटलो सुक्रार + हो सुक्रार + फुडलो सुक्रार + + {0} सुक्रारान + {0} सुक्रारानीं + + + {0} सुक्रार आदीं + {0} सुक्रारां आदीं - निमाणो शुक्र. - हो शुक्र. - फुडलो शुक्र. + फाटलो सुक्र. + हो सुक्र. + फुडलो सुक्र. + + {0} सुक्रारान + {0} सुक्रारानीं + + + {0} सुक्र. आदीं + {0} सुक्र. आदीं + - निमाणो शु. - हो शु. - फुडलो शु. + फाटलो सुक्र + हो सुक्र + फुडलो सुक्र + + {0} सुक्रारान + {0} सुक्रारानीं + + + {0} सुक्र आदीं + {0} सुक्र आदीं + - निमाणो शेनवार + फाटलो शेनवार हो शेनवार फुडलो शेनवार + {0} शेनवारान {0} शेनवारानीं + {0} शेनवार आदीं {0} शेनवारां आदीं - निमाणो शेन. + फाटलो शेन. हो शेन. फुडलो शेन. + + {0} शेनवारान + {0} शेनवारानीं + + + {0} शेन. आदीं + {0} शेन. आदीं + - निमाणो शे. - हो शे. - फुडलो शेन. + फाटलो शे + हो शे + फुडलो शे + + {0} शेनवारान + {0} शेनवारानीं + + + {0} शे आदीं + {0} शे आदीं + AM/PM @@ -1731,54 +2207,114 @@ CLDR data files are interpreted according to the LDML specification (http://unic वर हें वर + {0} वरान {0} वरांनीं - {0} वरा आदीं + {0} वर आदीं + {0} वरां आदीं + + + + + {0} वरान + {0} वरांनीं + + + {0} वर आदीं + {0} वरां आदीं + + + + + {0}वरान + {0}वरांनीं + + + {0}वर आदीं + {0}वरां आदीं मिनीट - हें मिनीट + हो मिनूट - {0} मिन्टां + {0} मिणटान + {0} मिणटांनी - {0} मिन्टां आदीं + {0} मिनूट आदीं + {0} मिणटां आदीं हो मिन. + + {0} मिणटान + {0} मिण. + + + {0} मिण. आदीं + {0} मिण. आदीं + हो मिन + + {0}मिणटान + {0}मिण + + + {0}मिण आदीं + {0}मिण आदीं + सेकंद आतां - {0} सेकंदानीं + {0} सॅकंडान + {0} सॅकंडानीं - {0} सेकंद आदीं + {0} सॅकंड आदीं + {0} सॅकंड आदीं + + {0} सॅकंडान + {0} सॅकंडानीं + - {0} से. आदीं + {0} सॅक. आदीं + {0} सॅक. आदीं + + + + + {0}सॅकंडान + {0}सॅकंडानीं + + + {0}सॅक आदीं + {0}सॅक आदीं वेळ झोन - झोन + क्षेत्र + + + क्षेत्र {0} वेळ {0} डेलायट वेळ - {0} प्रमाणित वेळ + {0} प्रमाण वेळ समन्वित वैश्विक वेळ @@ -2129,6 +2665,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ईस्टर + + कोयहायक + पुंटा अरेनास @@ -2355,7 +2894,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic इसले ऑफ मॅन - कोलकाता + कोलकाता, बॉम्बाईं, पणजी चागोस @@ -2394,9 +2933,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic फ्नोम पेन्ह - इंडरबरी - - कांटोन @@ -3066,9 +3602,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - अस्तंत आफ्रिका वेळ - अस्तंत आफ्रिका प्रमाणित वेळ - अस्तंत आफ्रिका ग्रीष्म वेळ + अस्तंत आफ्रिका वेळ @@ -3418,6 +3952,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic गुयाना वेळ + + + हवाई-अलेयुशिन प्रमाणीत वेळ + + हवाई-अलेयुशिन वेळ @@ -3929,189 +4468,859 @@ CLDR data files are interpreted according to the LDML specification (http://unic 0/0 + + + #,##,##0.### + + + 0हज 0 हजार + 00हज 00 हजार - 000 हजार - 0 दशलक्ष - 00 दशलक्ष - 000 दशलक्ष + 0लाख + 0 लाख + 00लाख + 00 लाख + 0कोटी + 0 कोटी + 00कोटी + 00 कोटी + 0अब्ज 0 अब्ज + 00अब्ज 00 अब्ज - 000 अब्ज - 0 ट्रिलियन - 00 ट्रिलियन - 000 ट्रिलियन + 0निख + 0 निखर्व + 00निख + 00 निखर्व + 000निख + 000 निखर्व + 0हज'.'निख'.' + 0 हजार निखर्व - 0B - 00B - 000B + 0हज + 0हज + 00हज + 00हज + 0लाख + 0लाख + 00लाख + 00लाख + 0कोटी + 0कोटी + 00कोटी + 00कोटी + 0अब्ज + 0अब्ज + 00अब्ज + 00अब्ज + 0निख + 0निख + 00निख + 00निख + 000निख + 000निख + 0हज'.'निख'.' + 0हज'.'निख'.' + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + ¤#,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + + + ¤ #,##,##0.00 + #,##,##0.00 + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + ¤#,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + - ¤#,##0.00;(¤#,##0.00) - ¤ #,##0.00;(¤ #,##0.00) - #,##0.00;(#,##0.00) + ¤#,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 - ¤0K - ¤ 0K - ¤00K - ¤ 00K - ¤000K - ¤ 000K - ¤0M - ¤ 0M - ¤00M - ¤ 00M - ¤000M - ¤ 000M - ¤0B - ¤ 0B - ¤00B - ¤ 00B - ¤000B - ¤ 000B - ¤0T - ¤ 0T - ¤00T - ¤ 00T - ¤000T - ¤ 000T + ¤0हज + ¤ 0हज + ¤0हज + ¤ 0हज + ¤00हज + ¤ 00हज + ¤00हज + ¤ 00हज + ¤0लाख + ¤ 0लाख + ¤0लाख + ¤ 0लाख + ¤00लाख + ¤ 00लाख + ¤00लाख + ¤ 00लाख + ¤0कोटी + ¤ 0कोटी + ¤0कोटी + ¤ 0कोटी + ¤00कोटी + ¤ 00कोटी + ¤00कोटी + ¤ 00कोटी + ¤0अब्ज + ¤ 0अब्ज + ¤0अब्ज + ¤ 0अब्ज + ¤00अब्ज + ¤ 00अब्ज + ¤00अब्ज + ¤ 00अब्ज + ¤0निख + ¤ 0निख + ¤0निख + ¤ 0निख + ¤00निख + ¤ 00निख + ¤00निख + ¤ 00निख + ¤000निख + ¤ 000निख + ¤000निख + ¤ 000निख + ¤0हज'.'निख'.' + ¤ 0हज'.'निख'.' + ¤0हज'.'निख'.' + ¤ 0हज'.'निख'.' + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr + + + + + + + ¤000LCr + ¤000LCr युनाइटेड अरब इमीरॅट्स दिरहम - युएई दिरहम्स अफगाण अफगाणी - अफगाण अफगाणीस अल्बेनियन लेक - अल्बेनियन लेके अर्मेनियन ड्राम - अर्मेनियन ड्राम्स + अर्मेनियन ड्राम + अर्मेनियन ड्राम नॅदरलँड अँटिलियन गिल्डर - नॅदरलँड अँटिलियन गिल्डर्स अंगोलन क्वॉन्ज - अंगोलन क्वॉन्ज्स + अंगोलन क्वॉन्ज + अंगोलन क्वॉन्ज अर्जेंटिना पेसो + अर्जेंटिना पेसोस अर्जेंटिना पेसोस ऑस्ट्रेलियाई डॉलर - ऑस्ट्रेलियाई डॉलर्स अरुबान फ्लोरिन अज़रबैजानी मनात - अज़रबैजानी मनात्स बोस्निया-हेर्जेगोविना रुपांतरीत मार्क - बोस्निया-हेर्जेगोविना रुपांतरीत मार्क्स बार्बाडियान डॉलर + बार्बाडियान डॉलर्स बार्बाडियान डॉलर्स बांगलादेशी टाका - बांगलादेशी टाकास + बांगलादेशी टाका + बांगलादेशी टाका बल्गेरियन लेव - बल्गेरियन लेवा बहरिनी डिनार - बहरिनी डिनार्स बुरुंडी फ्रँक बरमुदान डॉलर - बरमुदान डॉलर्स ब्रूनेई डॉलर - ब्रूनेई डॉलर्स बोलिव्हियन बोलिवियानो + बोलिव्हियन बोलिवियानोस बोलिव्हियन बोलिवियानोस ब्राझिलियन रियाल + ब्राझिलियन रियाल्स ब्राझिलियन रियाल्स बहामियन डॉलर - बहामियन डॉलर्स भुतानीज नागल्ट्रम - भुतानीज नागल्ट्रम्स + भुतानीज नागल्ट्रम + भुतानीज नागल्ट्रम बोत्सवाना पुला - बोत्सवाना पुलास बैलोरुसियन् रूबल - बैलोरुसियन् रूबल्स р. बेलिझ डॉलर - बेलिझ डॉलर्स कॅनाडियन डॉलर - कॅनाडियन डॉलर्स काँगोलिसी फ्रँक - काँगोलिसी फ्रँक्स + काँगोलिसी फ्रँक + काँगोलिसी फ्रँक स्विस फ्रँक - स्विस फ्रँक्स चिली पेसो - चिली पेसोस चिनी युआन (ऑफशोर) @@ -4121,168 +5330,143 @@ CLDR data files are interpreted according to the LDML specification (http://unic कोलंबियन पेसो - कोलंबियन पेसोस कोस्ता रिका कॉलॉन - कोस्ता रिका कॉलॉन्स क्युबान रुपांतरीत पेसो - क्युबान रुपांतरीत पेसोस क्युबान पेसो - क्युबान पेसोस केप वर्दे एस्कुडो - केप वर्दे एस्कुडो्स चेक कोरुना - चेक कोरुनास जिबूती फ्रँक - जिबूती फ्रँक्स डॅनिश क्रोन + डॅनिश क्रोनर डॅनिश क्रोनर डोमिनिकन पेसो - डोमिनिकन पेसोस अल्जेरियाई डिनार - अल्जेरियाई डिनार्स ईजिप्ती पावंड - ईजिप्ती पावंड्स + ईजिप्ती पावंड + ईजिप्ती पावंड इरिट्रियन नाक्फा - इरिट्रियन नाक्फास इथियोपियाई बिरर - इथियोपियाई बिरर्स युरो + युरोस युरोस फिजी डॉलर - फिजी डॉलर्स फ़ॉकलैंड आइलैंड्स पावंड - फ़ॉकलैंड आइलैंड्स पावंड्स ब्रिटिश पावंड + ब्रिटिश पावंड्स ब्रिटिश पावंड्स जॉर्जियन लारी - जॉर्जियन लारीस घानाई सेडी - घानाई सेडीस जिब्राल्टर पावंड + जिब्राल्टर पावंड्स जिब्राल्टर पावंड्स गॅम्बियन दलासी - गॅम्बियन दलासीस गिनीन फ्रँक - गिनीन फ्रँक्स ग्वाटेमाला कुएट्झल - ग्वाटेमाला कुएट्झल्स गयाना डॉलर - गयाना डॉलर्स हाँग काँग डॉलर - हाँग काँग डॉलर्स होंडुरान लेम्पिरा - होंडुरान लेम्पिरास क्रोयेषियन् कुना - क्रोयेषियन् कुनास हैतीयन गौर्डे - हैतीयन गौर्डेस हंगेरियन फोरिंट - हंगेरियन फोरिंट्स इंडोनेशियन रुपिया इस्त्रायली न्यु शेकेल - इस्त्रायली न्यु शेकेल्स भारतीय रुपया इराकी डिनार - इराकी डिनार्स + इराकी डिनार + इराकी डिनार ईरानी रियाल - ईरानी रियाल्स आईस्लान्डिक क्रोना - आईस्लान्डिक क्रोनुर जमैकन डॉलर - जमैकन डॉलर्स + जमैकन डॉलर + जमैकन डॉलर जॉर्डनियन डिनार - जॉर्डनियन डिनार्स जपानी येन केनयाई शिलिंग - केनयाई शिलिंग्स किरगिझस्तान सोम - किरगिझस्तान सोम्स कंबोडियन रियाल - कंबोडियन रियाल्स कोमोरियन फ्रँक - कोमोरियन फ्रँक्स उत्तर कोरियन वॉन @@ -4292,136 +5476,111 @@ CLDR data files are interpreted according to the LDML specification (http://unic कुवेती डिनार - कुवेती डिनार्स कैमेन आइलैंड्स डॉलर - कैमेन आइलैंड्स डॉलर्स + कैमेन आइलैंड्स डॉलर + कैमेन आइलैंड्स डॉलर कझाकस्तानी टेंग - कझाकस्तानी टेंग्स लाओ किप - लाओ किप्स लिबानेस पावंड - लिबानेस पावंड्स श्री लंका रुपया लायबेरियन डॉलर - लायबेरियन डॉलर्स लिसोथो लोटि - लिसोथो लोटिस लीबियान डिनार - लीबियान डिनार्स मोरक्कन दिरहम - मोरक्कन दिरहम्स मोल्दोवान लियू - मोल्दोवान लेई मलागासी एरियारी - मलागासी एरियारीस मसीडोनियन् डिनर - मसीडोनियन् डिनारी म्यानमार क्यात + म्यानमार क्यात्स म्यानमार क्यात्स मंगोलियन तुगरिक - मंगोलियन तुगरिक्स मकानेसे पटका - मकानेसे पटकास मॉरिटानिया उगिया - मॉरिटानिया उगियास मॉरिशस रुपी - मॉरिशस रुपया मालदिवी रुफिया - मालदिवी रुफियास मलावियन क्वाचा - मलावियन क्वाचास मेक्सिकन पेसो - मेक्सिकन पेसोस मलेशियाई रिंग्गित - मलेशियाई रिंग्गित्स मोझांबिकन मेटिकल - मोझांबिकन मेटिकल्स नामीबिया डॉलर - नामीबिया डॉलर्स नायजेरियन नायरा - नायजेरियन नायरास निकारागुआन कॉर्डोबा + निकारागुआन कॉर्डोबास निकारागुआन कॉर्डोबास नॉर्वेगन क्रोन - नॉर्वेगन क्रोनर नेपाळी रुपया न्युझीलॅन्ड डॉलर - न्युझीलॅन्ड डॉलर्स ओमानी रियाल - ओमानी रियाल्स पानामानियन बाल्बोआ - पानामानियन बाल्बोआस पेरिवियन सोल - पेरुवियन सोल्स पापुआ न्यु गिनी किना फिलिपिनी पेसो - फिलिपिनी पेसोस PHP @@ -4429,99 +5588,86 @@ CLDR data files are interpreted according to the LDML specification (http://unic पोलिष झ्लोटी - पोलिष झ्लोटी्स पराग्वेन गौरानी - पराग्वेन गौरानीस कतारी रियाल - कतारी रियाल्स रोमानियन् लियू - रोमानियन् लेई रॉन लेई सर्बियन डिनार - सर्बियन डिनार्स रुसी रुबल + रुसी रुबल्स रुसी रुबल्स रवांडा फ्रँक - रवांडा फ्रँक्स सौदी रियाल - सौदी रियाल्स सोलोमन आयलँड्स डॉलर - सोलोमन आयलँड डॉलर्स + सोलोमन आयलँड्स डॉलर + सोलोमन आयलँड्स डॉलर सेशेल्लोइस रुपी - सेशेल्लोइस रुपया सुदानी पावंड - सुदानी पावंड्स स्वीदीष क्रोन - स्वीदीष क्रोनोर सिंगापूरी डॉलर - सिंगापूरी डॉलर्स + सिंगापूरी डॉलर + सिंगापूरी डॉलर सेंट हेलिना पावंड - सेंट हेलिना पावंड्स सिएरा लियॉनी लियॉन - सिएरा लियॉनी लियॉन्स सिएरा लियॉनी लियॉन (1964—2022) - सिएरा लियॉनी लियॉन्स (1964—2022) सोमाली शिलिंग - सोमाली शिलिंग्स सुरीनामी डॉलर - सुरीनामी डॉलर्स दक्षिण सुडानी पावंड - दक्षिण सुडानी पावंड्स साओ टोम आनी प्रिन्सिप डोब्रा - साओ टोम आनी प्रिन्सिप डोब्रास सिरियन पावंड - सिरियन पावंड्स + सिरियन पावंड + सिरियन पावंड स्वाजी लिलांगेनी - स्वाजी एमालांगेनी थाई बाट ताजिकिस्तानी सोमोनी + ताजिकिस्तानी सोमोनीस ताजिकिस्तानी सोमोनीस @@ -4529,7 +5675,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ट्यूनीशियन डिनार - ट्यूनीशियन डिनार्स टोंगन पांगा @@ -4539,84 +5684,89 @@ CLDR data files are interpreted according to the LDML specification (http://unic ट्रिनीडाड आनी टोबॅगो डॉलर - ट्रिनीडाड आनी टोबॅगो डॉलर्स न्यू तायवान डॉलर - न्यू तायवान डॉलर्स तंजानिया शिलिंग - तंजानिया शिलिंग्स युक्रेनियन् रिव्निया - युक्रेनियन् रिव्नियास युगांडा शिलिंग - युगांडा शिलिंग्स युएस डॉलर + युएस डॉलर्स युएस डॉलर्स उरुग्वेन पेसो - उरुग्वेन पेसोस उज़्बेकिस्तानी सोम विनेझुएला बोलिव्हर - विनेझुएला बोलिव्हर्स + विनेझुएला बोलिव्हर + विनेझुएला बोलिव्हर वियतनामी डोंग वानूआतू वातू - वानूआतू वातूस समोआई टाला मध्य अफ्रीकी सीएफए फ्रँक - मध्य अफ्रीकी सीएफए फ्रँक्स उदेंत कॅरिबियन डॉलर - उदेंत कॅरिबियन डॉलर्स + + + कॅरिबियन गिल्डर + कॅरिबियन गिल्डर + कॅरिबियन गिल्डर अस्तंत आफ्रिकी सीएफए फ्रँक - अस्तंत आफ्रिकी सीएफए फ्रँक्स सीएफपी फ्रँक - सीएफपी फ्रँक्स अज्ञात चलन + (अज्ञात चलन) (अज्ञात चलन) येमेनी रियाल - येमेनी रियाल्स दक्षिण आफ्रिकन रँड झांबियन क्वाचा - झांबियन क्वाचास + + + झिंबाब्वेचें भांगर + झिंबाब्वेचें भांगर + झिंबाब्वेचें भांगर {0}+ + + {0} वांटो + {0} वांटे + {0}व्या उजव्या वाटेन वच. + @@ -4709,23 +5859,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic चवकोण {0} + चवकोन {0} चौरस {0} घनाकार {0} + घन {0} घन {0} {0}-{1} + {0} G {0} जी-फोर्स परिभ्रमण + {0} rev {0} परिभ्रमणां + {0} रे {0} रेडियन @@ -4733,219 +5888,282 @@ CLDR data files are interpreted according to the LDML specification (http://unic आर्कसेकंद + {0}″ {0} आर्कसेकंद - चौरस किलोमीटर - {0} चौरस किलोमीटर - दर चौरस किलोमीटर {0} + चौकोन किलोमीटर + {0} चौकोन किलोमीटर + {0} चौकोन किलोमीटर + दर चौकोन किलोमीटर {0} + {0} ha {0} हॅक्टर - चौरस मीटर - {0} चौरस मीटर - दर चौरस मिटर {0} + चौकोन मीटर + {0} चौकोन मीटर + {0} चौकोन मीटर + दर चौकोन मिटर {0} - चौरस सेंटिमीटर + {0} सेमी² {0} चौरस सेंटिमीटर दर चौरस सेंटिमीटर {0} - चौरस मायल - {0} चौरस मायल - दर चौरस मायल {0} + चौकोन मील + दर चौकोन मील {0} + {0} ac {0} एकर - चौरस यार्ड - {0} चौरस यार्ड + चौकोन यार्ड + {0} चौकोन यार्ड + {0} चौकोन यार्ड - चौरस फूट + चौकोन फुट + {0} चौकोन फुट {0} चौरस फूट - चौरस इंच - {0} चौरस इंच - दर चौरस इंच {0} + चौकोन इंच + {0} चौकोन इंच + {0} चौकोन इंच + दर चौकोन इंच {0} + {0} डुनाम {0} डुनाम्स + {0} kt {0} कॅरट्स मिलिग्राम/डेसिलिटर + {0} mg/dL {0} मिलिग्राम/डेसिलिटर मिलिमोल्स/लि + {0} mmol/L {0} मिलिमोल्स/लि + {0} वस्त {0} वस्ती - + पार्ट पर मिलियन + {0} ppm {0} पार्ट पर मिलियन टक्को + {0}% {0} टक्को + {0}‰ {0} दरमायल + {0}‱ {0} परमिरियड मोल्स + {0} मोल {0} मोल्स लिटर/किलोमीटर + {0} L/km {0} लिटर/किलोमीटर लिटर/100किलोमीटर + {0} लि/100किमी {0} लिटर/100किलोमीटर मैल दर गॅलोन + {0} mpg {0} मैल दर गॅलोन मैल दर इंपिरियल गॅलोन + {0} mpg Imp. {0} मैल दर इंपिरियल गॅलोन पेटाबायट + {0} PB {0} पेटाबायट + {0} TB {0} टेराबायट टेराबिट्स + {0} Tb {0} टेराबिट्स + {0} GB {0} गिगाबायट गिगाबिट + {0} Gb {0} गिगाबिट मॅगाबायट + {0} MB {0} मॅगाबायट मॅगाबिट + {0} Mb {0} मॅगाबिट + {0} kB {0} किलोबायट किलोबिट + {0} kb {0} किलोबिट - शतकां - {0} शतकां + शेंकडे + {0} शेंकडो + {0} शेंकडे दशकां + {0} दशक {0} दशकां - दर वर्सा {0} + {0} वर्स + {0} वर्सां + दर वर्स {0} - क्वार्टर्स + तिम्हयनाळे + {0} तिम्हयनाळें + {0} तिम्हयनाळे + {0}/तिम्हयनाळें + {0} म्हयनो + {0} म्ह दर म्हयनो {0} + सप्तकां + {0} सप्तक + {0} सप्तकां दर सप्तकाक {0} दर दिसा {0} + {0} वर {0} वरां दर वरा {0} + मिणटां + {0} मिन {0} मिण्टां - दर मिनीट {0} + दर मिनूट {0} - सेकंद + सॅकंड + {0} सॅकंड {0} सेकंदांनी दर सेकंद {0} + मिलीसॅकंड + {0} मिलीसॅकंड {0} मिलिसेकंदांनी मायक्रोसेकंदांनी + {0} मायक्रोसॅकंड {0} मायक्रोसेकंदांनी - {0} नॅनोसेकंदांनी + नॅनोसॅकंड + {0} नॅसॅक + {0} नॅनोसॅकंड एम्पियर + {0} A {0} एम्पियर मिलिएम्पियर + {0} mA {0} मिलिएम्पियर + {0} Ω {0} ओम + {0} V {0} वो किलोकॅलरीज + {0} kcal {0} किलोकॅलरीज कॅलरीज + {0} cal {0} कॅलरीज कॅलरीज + {0} kcal {0} कॅलरीज + {0} kJ {0} किलोज्युल + {0} J {0} ज्युल किलोवॅट-वरां + {0} kWh {0} किलोवॅट-वरां इलॅक्ट्रॉनवॉल्ट्स + {0} eV {0} इलॅक्ट्रॉनवॉल्ट्स ब्रिटिश थर्मल युनिट्स + {0} ब्रिटीश थर्मल युनीट {0} ब्रिटिश थर्मल युनिट्स @@ -4953,172 +6171,221 @@ CLDR data files are interpreted according to the LDML specification (http://unic पावंड ऑफ फोर्स + {0} lbf {0} पावंड ऑफ फोर्स + {0} न्यु {0} न्युटन किलोवॉट-वर/१००किलोमीटर + {0} किवॉवर/१००किमी {0} किलोवॉट-वर/१००किलोमीटर गिगाहर्ट्झ + {0} GHz {0} गिगाहर्ट्झ मॅगाहर्ट्झ + {0} MHz {0} मॅगाहर्ट्झ किलोहर्ट्झ + {0} kHz {0} किलोहर्ट्झ हर्ट्झ + {0} Hz {0} हर्ट्झ टायपोग्रॅफिक एम + {0} em {0} ems + चित्र-तत्वां + {0} px {0} पिक्सेल्स + मॅगा-चित्र-तत्वां + {0} MP {0} मॅगोपिक्सेल्स दर सेंटिमीटराक पिक्सेल - दर सेंटिमीटराक पिक्सेल {0} + {0} ppcm + दर सेंटिमीटराक चित्र-तत्वां {0} दर इंचाक पिक्सेल्स + {0} ppi दर इंचाक पिक्सेल {0} दर सेंटिमीटर ठिपके + {0} ppcm दर सेंटिमीटर ठिपके {0} दर इंचाक ठिपके + {0} ppi दर इंचाक ठिपके {0} + + चित्र-तत्वां + पृथ्वी त्रिज्या + {0} R⊕ {0} पृथ्वी त्रिज्या किलोमीटर + {0} किमी {0} किलोमीटर दर किलोमीटर {0} मीटर + {0} मी {0} मीटर दर मिटर {0} डेसीमीटर + {0} डेमी {0} डेसीमीटर सेंटिमीटर + {0} सेमी {0} सेंटिमीटर दर सेंटिमीटर {0} मिलिमीटर + {0} मिमी {0} मिलिमिटर मायक्रोमीटर + {0} μm {0} मायक्रोमीटर नॅनोमीटर + {0} nm {0} नॅनोमीटर पिकोमीटर + {0} pm {0} पिकोमिटर + {0} mi {0} मायल्स + {0} yd {0} यार्ड दर फूट {0} + {0} in {0} इंच दर इंच {0} पासेक्स + {0} pc {0} पासेक्स + {0} ly {0} प्रकाश वर्सां खगोलशास्त्रीय प्रमाण + {0} au {0} खगोलशास्त्रीय प्रमाण + {0} फर्लोंग {0} फर्लांग + {0} fth {0} फॅदम नॉटिकल मायल्स + {0} nmi {0} नॉटिकल्स मायल्स मायल-स्कँडिनेव्हियन + {0} smi {0} मायल्स-स्कँडिनेव्हियन + {0} pt {0} पॉयंट्स + {0} R☉ {0} सौर त्रिज्या + {0} lx {0} लक्स कॅन्डेला + {0} cd {0} कॅन्डेला ल्युमन + {0} lm {0} ल्युमन + {0} L☉ {0} सौर ल्युमिनोसायटिस मॅट्रिक टन + {0} t {0} मॅट्रिक टन किलोग्राम + {0} किग्रा {0} किलोग्राम {0}/किलोग्राम मिलिग्राम + {0} मिग्रा {0} मिलिग्राम मायक्रोग्राम + {0} μg {0} मायक्रोग्राम + {0} lb {0} पौंड {0} दर पौंड @@ -5127,237 +6394,300 @@ CLDR data files are interpreted according to the LDML specification (http://unic ट्रॉय औंस + {0} oz t {0} ट्रॉय औंस + {0} कॅ {0} कॅरट + {0} Da {0} डाल्टन + {0} M⊕ {0} पृथ्वी वस्तुमान + {0} M☉ {0} सौर वस्तुमान गिगावॉट्स + {0} GW {0} गिगावॉट्स मेगावॅट + {0} MW {0} मेगावॅट किलोवॅट + {0} kW {0} किलोवॅट + {0} W {0} वॅट मिलिवॅट + {0} mW {0} मिलिवॅट हॉर्सपावर + {0} hp {0} हॉर्सपावर मिलिमीटर ऑफ मर्क्युरी + {0} mm Hg {0} मिलिमीटर ऑफ मर्क्युरी - पावंड दर चौरस इंच - {0} पावंड दर चौरस इंच + पावंड दर चौकोन इंच + {0} psi + {0} पावंड दर चौकोन इंच इंचेस ऑफ मर्क्युरी + {0} inHg {0} इंचेस ऑफ मर्क्युरी + {0} पट्टी {0} पट्ट्यो मिलिबार + {0} mbar {0} मिलिबार अटमोसपियर + {0} atm {0} अटमोसपियर पास्कल + {0} Pa {0} पास्कल हेक्टोपास्कल + {0} hPa {0} हेक्टोपास्कल किलोपास्कल + {0} kPa {0} किलोपास्कल मेगापास्कल + {0} MPa {0} किलोपास्कल्स मीटर प्रती सेकंद + {0} kn {0} नॉट अंश तापमान + {0} अंश तापमान {0} अंश तापमान अंश सेल्सियस + {0}°C {0} अंश सेल्सियस + {0}°F {0} अंश फारेनहायट केल्वीन + {0} K {0} केल्वीन + {0} lbf⋅ft {0} पावंड-फूट न्युटन-मीटर + {0} N⋅m {0} न्युटन-मीटर - क्युबीक किलोमीटर - {0} क्युबीक किलोमीटर + घन किलोमीटर + {0} घन किलोमीटर + {0} घन किलोमीटर क्युबीक मीटर - {0} क्युबीक मीटर + {0} घन मीटर + {0} घन मीटर + {0} दर घन मीटर - क्युबीक सेंटीमीटर - {0} क्युबीक सेंटीमीटर - {0} दर क्युबीक सेंटीमीटर + घन सेंटीमीटर + {0} घन सेंटीमीटर + {0} घन सेंटीमीटर + {0} दर घन सेंटिमीटर - क्युबीक मील - {0} क्युबीक मील + घन मील + {0} घन मील + {0} घन मील - क्युबीक यार्ड - {0} क्युबीक यार्ड + घन यार्ड + {0} घन यार्ड + {0} घन यार्ड - क्युबीक फूट - {0} क्युबीक फूट + घन फुट + {0} घन फुट + {0} घन फुट - क्युबीक इंच - {0} क्युबीक इंच + घन इंच + {0} घन इंच + {0} घन इंच मॅगालिटर + {0} ML {0} मॅगालिटर हॅक्टोलीटर + {0} लि {0} लिटर {0}/लिटर डेसिलीटर + {0} dL {0} डेसिलीटर सेंटिलीटर + {0} cL {0} सेंटिलीटर मिलिलिटर + {0} मिलि {0} मिलिलिटर मॅट्रिक पाइंट + {0} mpt {0} मॅट्रिक पाइंट मॅट्रिक कप + {0} mc {0} मॅट्रिक कप एकर-फूट + {0} ac ft {0} एकर-फूट + {0} बुशेल {0} बुशेल्स गॅलोन + {0} गॅ {0} गॅलोन दर गॅलोन {0} इंपिरियल गॅलोन + {0} गॅल इंप. {0} इंप. गॅलोन {0} दर इंप. गॅलोन क्वार्त + {0} क्वा {0} क्वार्त + {0} pt {0} पाइंट फ्लुइड औंस + {0} fl oz US {0} फ्लुइड औंस इंपिरियल फ्लुइड औंस + {0} fl oz Imp. {0} इंप. फ्लुइड औंस व्हडलें कुलेर + {0} tbsp {0} व्हडलें कुलेर कुलेर + {0} कु {0} कुलेर डिझर्ट कुलेर + {0} dstspn {0} डिझर्ट कुलेर इंपिरियल डिझर्ट कुलेर + {0} dstspn Imp {0} इंप. डिझर्ट कुलेर ड्रॅम + {0} ड्रॅम फ्लु {0} ड्रॅम इंपिरियल क्वार्त + {0} qt Imp. {0} इंप. क्वार्त + + पंद्रस + {0} पंद्रस + {0} पंद्रस + प्रकाश + {0} प्रकाश {0} प्रकाश - राती + {0} रात {0} राती दर रात {0} - मुख्य दिका + मुखेळ दिशा {0} उदेंत {0} उत्तर {0} दक्षिण @@ -5382,18 +6712,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic मी/से² + {0} मी/से² {0} मी/से² रेडियन + {0} रे {0} रे अंश + {0} अंश {0} अंश आमि + {0} आर्कमिनीट {0} आर्कमिनीट @@ -5401,6 +6735,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic किमी² + {0} किमी² {0} किमी² {0}/किमी² @@ -5409,16 +6744,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic मीटर² + {0} मी² {0} मी² {0}/मी² सेमी² + {0} सेमी² {0} सेमी² {0}/सेमी² चौ मायल + {0} चौ मा {0} चौ मा @@ -5429,10 +6767,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic चौ फूट + {0} चौ फू {0} चौ फू डुनाम्स + {0} डुनाम {0} डुनाम @@ -5446,9 +6786,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic वस्त + {0} वस्त {0} वस्त - + पार्ट/मिलियन @@ -5459,6 +6800,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic मोल + {0} मोल {0} मोल @@ -5466,10 +6808,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic लि/100किमी + {0} लि/100किमी {0} लि/100किमी मैल/गॅ + {0} mpg {0} mpg @@ -5486,65 +6830,86 @@ CLDR data files are interpreted according to the LDML specification (http://unic बायट + {0} बायट {0} बायट बिट + {0} बिट {0} बिट + {0} श {0} श दशक + {0} दशक {0} दशक वर्सां + {0} वर्स {0} वर्सां - {0}/वर्सां + {0}/वर्स + + + तिम्ह + {0} तिम्ह + {0} तिम्ह + {0}/तिम्ह - म्हयने - {0} म्हयने + म्ह + {0} म्ह + {0} म्ह {0}/म्ह - सप्तक + सप्तकां + {0} सप्तक {0} सप्तक - {0}/स + {0}/सप्तक दीस + {0} दीस {0} दीस - {0}/दी + {0}/दीस वरां + {0} वर {0} वर {0}/वर - मिण्टां + मिण. + {0} मिन {0} मिनीट {0}/मिनीट सेकंदांनी - {0} सेकंद + {0} सॅक + {0} सॅक {0}/से मिलिसेकंदांनी + {0} मिसॅक {0} मिलिसेकंद - μsecs + मायसॅक + {0} मायसॅक + {0} मायसॅक नॅनोसेकंदांनी - {0} नॅसे + {0} नॅसॅक + {0} नॅसॅक एम्प्स @@ -5560,6 +6925,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Cal + {0} kcal {0} Cal @@ -5579,6 +6945,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic युएस थर्म + {0} युएस थर्म्स {0} युएस थर्म्स @@ -5586,51 +6953,61 @@ CLDR data files are interpreted according to the LDML specification (http://unic न्युटन + {0} न्यु {0} न्यु किवॉवर/१००किमी + {0} किवॉवर/१००किमी {0} किवॉवर/१००किमी पिक्सेल्स - मॅगोपिक्सेल्स + मॅगा-चित्र-तत्वां dpcm + {0} ppcm {0} dpcm dpi + {0} ppi {0} dpi ठिपके + {0} px {0} ठिपके किमी + {0} किमी {0} किमी {0}/किमी मी + {0} मी {0} मी {0}/मी डेमी + {0} डेमी {0} डेमी सेमी + {0} सेमी {0} सेमी {0}/सेमी मिमी + {0} मिमी {0} मिमी @@ -5641,6 +7018,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic फूट + {0} फूट {0} फूट @@ -5672,24 +7050,29 @@ CLDR data files are interpreted according to the LDML specification (http://unic किग्रा + {0} किग्रा {0} किग्रा {0}/किग्रा ग्राम + {0} ग्राम {0} ग्राम {0}/ग्रा मिग्रा + {0} मिग्रा {0} मिग्रा टन + {0} टन {0} टन स्टोन + {0} स्टोन {0} स्टोन @@ -5697,6 +7080,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic औंस + {0} औंस {0} औंस {0}/औंस @@ -5705,6 +7089,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic कॅरट + {0} कॅ {0} कॅ @@ -5718,6 +7103,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic कण + {0} कण {0} कण @@ -5728,23 +7114,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic पट्टी + {0} पट्टी {0} पट्टी किमी/व + {0} किमी/व {0} किमी/व मी/से + {0} मी/से {0} मी/से मा/व + {0} मा/व {0} मा/व नॉट + + अंश तापमान + अं. से @@ -5756,15 +7149,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic किमी³ + {0} किमी³ {0} किमी³ मी³ + {0} मी³ {0} मी³ {0}/मी³ सेमी³ + {0} सेमी³ {0} सेमी³ {0}/सेमी³ @@ -5779,11 +7175,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic लिटर + {0} लि {0} लि {0}/लि मिलि + {0} मिलि {0} मिलि @@ -5794,16 +7192,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic गॅ + {0} गॅ {0} गॅ {0}/गॅलो युएस इंप.गॅलोन + {0} गॅल इंप. {0} गॅल इंप. {0}/गॅलोन इंप. क्वा + {0} क्वा {0} क्वा @@ -5811,14 +7212,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic कप + {0} क {0} क कु + {0} कु {0} कु बॅरल + {0} बॅरल {0} बॅरल @@ -5829,38 +7233,49 @@ CLDR data files are interpreted according to the LDML specification (http://unic थेंबो + {0} थेंबो {0} थेंबो ड्रॅम फ्लुइड + {0} ड्रॅम फ्लु {0} ड्रॅम फ्लु जिगर + {0} जिगर {0} जिगर चिमटी + {0} चिमटी {0} चिमटी क्वार्त इंप + + पंद्र + {0} पंद्र + {0} पंद्र + प्रकाश + {0} प्रकाश {0} प्रकाश राती + {0} रात {0} राती {0}/रात - दिका + दिशा {0} उदें {0} उत्त - {0} द - {0} अ + {0} दक्ष + {0} अस @@ -5874,71 +7289,90 @@ CLDR data files are interpreted according to the LDML specification (http://unic पि{0} + {0} G {0}Gs + {0} मी/से² {0}मी/से² + {0} rev {0}rev + {0} रे {0}रे + {0} अंश {0}° + {0} आर्कमिनीट {0}′ + {0} किमी² {0}किमी² + {0} ha {0}ha + {0} मी² {0}मी² + {0} सेमी² {0}सेमी² mi² + {0} चौ मा {0}mi² + {0} ac {0}ac yd² + {0} yd² {0}yd² - ft² + {0} चौ फू {0}ft² + {0} in² {0}in² डुनाम + {0} डुनाम {0}डुनाम + {0} kt {0}kt + {0} mg/dL {0}mg/dL mmol/L + {0} वस्त {0}वस्त - + ppm + {0} ppm {0}ppm @@ -5948,365 +7382,482 @@ CLDR data files are interpreted according to the LDML specification (http://unic + {0} मोल {0}मोल L/km + {0} L/km {0}L/km + {0} लि/100किमी {0}लि/100किमी + {0} mpg {0}mpg + {0} mpg Imp. {0}mpg Imp. + {0} PB {0}PB TB + {0} TB {0}TB + {0} Tb {0}Tb GB + {0} GB {0}GB + {0} Gb {0}Gb + {0} MB {0}MB + {0} Mb {0}Mb kB + {0} kB {0}kB + {0} kb {0}kb B + {0} बायट {0}B + {0} बिट {0}बिट + {0}श {0}श - {0}दशक + दश + {0}दश + {0}दश - वर्सा - {0}व + वर्स + {0}वर्स + {0}वर्स + {0}/वर्स + + + तिम्ह + {0}तिम्ह + {0}तिम्ह + {0}/तिम्ह - म्हयनो + म्ह + {0}म्ह {0}म्ह - - {0}स + सप्त + {0}सप्तक + {0}सप्त + {0}/सप्त + दी + {0}दी {0}दी वर - {0}व + {0}वर + {0}वर मिनीट - {0} मि + {0}मिन + {0}मिण सेकंद - {0}से + {0}सॅक + {0}सॅक मिलिसे + {0} मिसॅक {0}मिसे - {0}μs + मायसॅक + {0}मायसॅक + {0}मायसॅक नॅसे - {0}नॅसे + {0}नॅसॅक + {0}नॅसॅक एम्प + {0} A {0}A mA + {0} mA {0}mA + {0} Ω {0}Ω + {0} V {0}V + {0} kcal {0}kcal + {0} cal {0}cal + {0} kcal {0}Cal kJ + {0} kJ {0}kJ + {0} J {0}J kWh + {0} kWh {0}kWh eV + {0} eV {0}eV + {0} Btu {0}Btu + {0} युएस थर्म्स {0}युएस थर्म्स lbf + {0} lbf {0}lbf न्यु + {0} न्यु {0}न्यु + {0} किवॉवर/१००किमी {0}किवॉवर/१००किमी + {0} GHz {0}GHz + {0} MHz {0}MHz + {0} kHz {0}kHz + {0} Hz {0}Hz + {0} em {0}em px + {0} px {0}px - मॅपि + मॅगा-चित्र-तत्वां + {0} MP {0}MP - - {0}ppcm - + {0} ppi {0}ppi + {0} ppcm {0}dpcm + {0} ppi {0}dpi ठिपको + {0} px {0}ठिपको + {0} R⊕ {0}R⊕ + {0} किमी {0}किमी + {0} मी {0}मी + {0} डेमी {0}डेमी + {0} सेमी {0}सेमी + {0} μm {0}μm + {0} nm {0}nm + {0} pm {0}pm + {0} mi {0}mi + {0} yd {0}yd + {0} फूट {0}फूट + {0} in {0}in + {0} au {0}au + {0} fur {0}fur + {0} smi {0}smi + {0} pt {0}pt + {0} R☉ {0}R☉ + {0} lx {0}lx + {0} cd {0}cd + {0} lm {0}lm L☉ + {0} L☉ {0}L☉ + {0} t {0}t + {0} किग्रा {0}किग्रा + {0} ग्राम {0}ग्रा + {0} मिग्रा {0}मिग्रा + {0} μg {0}μg + {0} टन {0}टन + {0} स्टोन {0}स्टोन lb + {0} lb {0}# + {0} औंस {0}औंस oz t + {0} oz t {0}oz t + {0} कॅ {0}कॅ Da + {0} Da {0}Da M⊕ + {0} M⊕ {0}M⊕ M☉ + {0} M☉ {0}M☉ + {0} कण {0}कण + {0} GW {0}GW MW + {0} MW {0}MW + {0} kW {0}kW + {0} W {0}W + {0} mW {0}mW + {0} hp {0}hp mmHg + {0} mm Hg {0}mmHg + {0} psi {0}psi ″ Hg + {0} inHg {0}″ Hg + {0} पट्टी {0}पट्टी + {0} mbar {0}mb + {0} atm {0}atm + {0} Pa {0}Pa + {0} hPa {0}hPa + {0} kPa {0}kPa + {0} MPa {0}MPa + {0} मी/से {0}मी/से + {0} मा/व {0}मा/व @@ -6314,143 +7865,186 @@ CLDR data files are interpreted according to the LDML specification (http://unic °F + {0}°F {0}° + {0} K {0}K + {0} lbf⋅ft {0}lbf⋅ft + {0} N⋅m {0}N⋅m + {0} किमी³ {0}किमी³ + {0} मी³ {0}मी³ + {0} mi³ {0}mi³ + {0} yd³ {0}yd³ + {0} ft³ {0}ft³ + {0} in³ {0}in³ + {0} ML {0}ML + {0} hL {0}hL + {0} लि {0}लि + {0} dL {0}dL + {0} cL {0}cL + {0} मिलि {0}मिलि pt + {0} mpt {0}mpt + {0} mc {0}mc + {0} ac ft {0}ac ft बुशेल + {0} bu {0}bu + {0} गॅ {0}गॅ {0}/गॅ + {0} गॅल इंप. {0}गॅलइंप. {0}/गॅलइंप. qt + {0} क्वा {0}qt pt + {0} pt {0}pt + {0} क {0}क fl oz + {0} fl oz US {0}fl oz Imp fl oz + {0} fl oz Imp. {0}fl oz Im + {0} tbsp {0}tbsp tsp + {0} कु {0}tsp + {0} बॅरल {0}बॅरल dsp + {0} dstspn {0}dsp dsp Imp + {0} dstspn Imp {0}dsp-Imp + {0} थेंबो {0}थेंबो fl.dr. + {0} ड्रॅम फ्लु {0}fl.dr. + {0} जिगर {0}जिगर + {0} चिमटी {0}चिमटी qt Imp + {0} qt Imp. {0}qt-Imp. + + पंद्र + {0} पंद्र + {0} पंद्र + प्रकाश + {0} प्रकाश {0} प्रकाश - राती + {0}रात {0}राती - {0}/रात + दिशा {0}उदें {0}उत्त - {0}द - {0}अ + {0}दक्ष + {0}अस @@ -6459,6 +8053,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}, वा {1} {0} वा {1} + + {0}, or {1} + {0} or {1} + {0}, {1} {0}, {1} @@ -6491,6 +8089,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} — तरेकवार {0} — हेर लिपयो — {0} + {0} आघात {0} आघात सबस्क्रिप्ट {0} सुपरस्क्रिप्ट {0} @@ -6647,51 +8246,174 @@ CLDR data files are interpreted according to the LDML specification (http://unic स्लॅश शून्य - und kok - ko si ta te vi yue zh + und kok kok_Latn + informal + + {title} {given} {given2} {surname} {surname2} {generation}, {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {given-monogram-allCaps}{given2-monogram-allCaps}{surname-monogram-allCaps}{surname2-monogram-allCaps} + + + {given-informal-monogram-allCaps}{surname-monogram-allCaps}{surname2-monogram-allCaps} + + + {given} {given2-initial} {surname} {generation}, {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {given-initial} {given2-initial} {surname} + + + {given-informal} {surname-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname} {surname2} {title} {given} {given2} {generation}, {credentials} + + + {surname} {surname2} {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps}{given-informal-monogram-allCaps} + + + {surname} {given} {given2-initial} {generation}, {credentials} + + + {surname} {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname} {given-initial} {given2-initial} + + + {surname} {given-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname-core}, {given} {given2} {surname-prefix} + + + {surname} {surname2}, {given-informal} + + + {surname-core}, {given} {given2-initial} {surname-prefix} + + + {surname}, {given-informal} + + + {surname-core}, {given-initial} {given2-initial} {surname-prefix} + + + {surname}, {given-informal} + दिशा - उमेश - भंडारकर + शांति + गांवकर - अतुल - मनोहर - प्रभुकोंकार + मारिया + हेलेना + फर्नॅन्डेज - श्री. - उमेश भंडारकर - साक्षी - अनुसुया कुंकळ्येकार - ∅∅∅ - प्रभु - मावजो - क. + श्री + फ्रांसिस शावियेर + फोर्सु + जुआंव आंतोन + दे + सोजा + ए मेनेजेस + धा. एमपी सिंदबाद - आरवी - कामत + काथा + बाउमान - मनोहर - माधव - नायक + जाजिला + हामिश + स्टोबा प्रो. डॉ. - विक्रम सिंह - विकी - रामचरण दास - शेणवी कुंकळ्येकार - शर्मा - सरदेसाय + आडा कोर्नेलिया + नील + सेजार मार्टिन + वॉन + ब्रूह्ल + गॉन्जालेज डोमिंगो जेआर बी.ए. एल.एल.बी diff --git a/make/data/cldr/common/main/kok_Latn.xml b/make/data/cldr/common/main/kok_Latn.xml index e7566ebdaaa..89ff58c34ef 100644 --- a/make/data/cldr/common/main/kok_Latn.xml +++ b/make/data/cldr/common/main/kok_Latn.xml @@ -13,34 +13,504 @@ CLDR data files are interpreted according to the LDML specification (http://unic + Afrikaans + Akan + Amharic Arbi + Adhunik Promann Orbi + Osomiya + Asturian + Azerbaijani + Azeri + Baluchi + Belarusian + Bulgarian + Haryanvi + Bhojpuri + Anii + Bangla + Breton + Bodo + Bosnian + Catalao + Cebuano + Cherokee + Chek + Swampy Cree + Chuvax + Welx + Denmarkez + Jermon + Jermon (Austria) + Jermon (Switzerland) + Dogri + Sokoilem Sorbian + Ewe Grik Inglix + Inglix (Australia) + Inglix (Canada) + Inglix (Sõyukt Razvott) + Inglix (Amerikechim Sõyukt Rajyam) + Esperanto Ispanhol + Ispanhol (Latin Amerika) + Ispanhol (Meksiko) + Estonian + Bask + Farsi + Fula + Finlandez + Filipino + Faroez Fransez + Fransez (Canada) + Fransez (Switzerland) + Ostonti Frisian + Ayerlandez + Ga + Scottish Gaelic + Galician + Gujarati + Hausa + Hebrev + Hindi + Romi Hindi + Croatian + Voilem Sorbian + Hungarian + Armenian + Interlingua + Indonesian + Interlingue + Igbo + Sichuan Yi + Ayslandez + Italian + Japani + Javanez + Georgian + Kabuverdianu + Kaingang + Kazakh + Khmer Kon’nodd + Korean Konknni + Kaxmiri + Kurdez + Kurdez + Kurmanji + Kuvi + Kyrgyz + Latin + Luxembourgez + Ligurian + Lombard + Lao + Lithuanian + Latvian + Maithili + Maori + Masedonian + Malayalam + Mongolian + Manipuri Moratthi + Malay + Maltez + Sabar bhaso + Burmez + Sokoilem Jermon + Nepali + Hollandi + Hollandi (Beljiom) + Norwegian Nynorsk + Norwegian + N’Ko + Ut’tori Sotho + Occitan + Oromo + Odia + Punjabi + Nigerian Pidgin + Polandez + Prussian + Pashto + Portugez + Portugez (Brazil) + Portugez (Portugal) + Kechua + Rajasthani + Romansh + Romanian + Roxyan + Kinyarwanda + Sanskrit + Yakut + Santali + Sardinian + Sindhi + Sinhala + Slovak + Slovenian + Somali + Albanian + Serbian + Southern Sotho + Sundanez + Sweedez + Swahili + Syriac + Silesian + Tamil + Telugu + Tajik + Thai + Tigrinya + Turkmen + Tswana + Tongan + Turki + Tatar + Uyghur + Ukrainian + Onollkhi bhas + Urdu + Uzbek + Venixan + Vietnamez + Makhuwa + Wolof + Khosa + Kangri + Yoruba + Nheengatu + Cantonez + Chini, Cantonez + Zhuang Chini + Chini, Mandarin + Sompi Chini + Sompi Mandarin Chini + Paromporik Chini + Paromporik Mandarin Chini + Zulu + Bhaxik mozkur na + + + + + + sonvsar + Afrika + Ut’tor Amerika + Dokxinn Amerika + Oxiania + Ostonti Afrika + Modlo America + Udenti Afrika + Ut’tori Amerika + Modlo Afrika + Dokxinni Afrika + Purai Amerika + Ut’tori Amerika + Caribean + Udenti Asia + Dokxinni Asia + Dokxinn-udent Asia + Dokxinni Yerop + Australasia + Melanesia + Micronesia Prant + Polinesia + Asia + Modlo Asia + Ostonti Asia + Yerop + Udenti Yerop + Ut’tori Yerop + Ostonti Yerop + Saharache Dokxinnek Afrika + Latin Amerika + Ascensanv Zunvo + Andorra + Sõyukt Orbi Emirat + Afghanistan + Antigua ani Barbuda + Anguila + Albania + Armenia + Angola + Antarktika + Argentina + Amerikecho Samoa + Austria + Australia + Aruba + Oland Zunve + Azerbaijan + Bosnia ani Herzegovina + Barbados + Bangladex + Beljiom + Burkina Faso + Bulgaria + Bahrain + Burundi + Benin + São Bartolomev + Bermudas + Brunei + Bolivia + Caribean Netherlands + Brazil + Bahamas + Bhutan + Bouve Zunvo + Botswana + Belarus + Belize + Canada + Cocos (Keeling) Zunve + Congo - Kinshasa + Modlem Afriki Porjeraj + Congo - Brazzavil + Switzerland + Costa do Marfim + Cook Zunve + Chili + Camaroon Chin + Colombia + Clipperton Zunvo + Sark + Costa Rica + Cuba + Cabo Verde + Curaçao + Christmas Zunvo Siprus + Chekia Jermon + Diego Garcia + Djibuti + Denmark + Dominika + Dominican Porjeraj + Algeria + Ceuta ani Meliya + Equador + Estonia Ejipt + Ostonti Sahara + Eritrea Ispania + Ethiopia + Yeropi Ekvott + Yuro kxetr + Finland + Fiji + Fokland Zunve + Malvinas Zunve + Maicronesia + Fero Zunve Frans + Gabon + Sõyukt Razvott + Grenada + Georgia + Fransez Guiana + Guernzy + Ghana + Gibraltar + Greenland + Gambia + Gini + Guadalup + Bhuinmodlogitacho Gini Gres + Dokxinn Georgia ani Dokxinn Sandwich Zunve + Guatemala + Guam + Gini-Bissau + Guiana + Hong Kong + Heard ani McDonald Zunve + Honduras + Croaxia + Haiti + Hungary + Canarias Zunve + Indonesia + Ayerland + Israel + Menacho Zunvo Bharot + Britanacho Hindi Mahasagor Prant + Xagos Zunve + Irak + Iran + Aysland Italia + Jersy + Jamaica + Jordan + Japan + Kenya + Kyrgyzstan + Cambodia + Kiribas + Comoros + São Cristovão ani Nevis + Ut’tor Korea + Dokxinn Korea + Kuwait + Cayman Zunve + Kazakhstan + Laos + Lebanon + Santa Lucia + Lixtenstain + Sri Lanka + Laibiria + Lesotho + Lithuania + Luksemborg + Latvia Libia + Morokko + Monaco + Moldova + Montenegro + São Martinho (Frans) + Madagascar + Marxal Zunve Ut’tor Masedonia + Mali + Myanmar + Mongolia + Macao + Ut’tori Mariana Zunvo + Martinik + Mauritania + Montserrat + Malta + Maurixos + Maldiv + Malawi + Meksiko + Malayxia + Mozambique + Namibia + Novo Caledonia + Naiger + Norfok Zunvo + Naigeria + Nicaragua + Netherlands + Norway + Nepal + Nauru + Niue + Novo Zeeland + Aoteroa + Oman + Panama + Peru + Fransez Polinesia + Papua Novo Gini + Phillipines + Pakistan + Poland + São Pedro ani Miquelão + Pitcairn Zunve + Porto Rico + Palestin + Palestini Prant + Portugal + Palau + Paraguay + Qatar + Poixilo Oxiania + Reunião + Romenia + Serbia Roxya + Ruanda + Saudi Orob + Solomon Zunve + Seyxels + Sudan + Sweeden + Singapur + Santa Helena + Slovenia + Svalbard ani Yan Mayen + Slovakia + Serra Leõ + San Marino + Senegal + Somalia + Surinam + Dokxinn Sudan + São Tomé ani Príncipe + El Salvador + São Martinho (Netherlands) + Siria + Eswatini + Tristão da Cunha + Turk ani Caicos Zunve + Chad + Fransez Dokxinni Prant + Togo + Thailand + Tajikistan + Tokolau + Timor-Leste + Udent Timor + Turkmenistan + Tunisia + Tonga + Turkiya + Trindade ani Tobag + Tuvalu + Taiwan + Tanzania + Yukrain + Yuganda + Sõyukt Rajyanche Poixile Dhaktte Zunve + Sõyukt Raxttram + Amerikechim Sõyukt Rajyam + Uruguay + Uzbekistan + Vatikan Xar + São Vicent ani Granadinas + Venezuela + Britanache Virgin Zunve + Sõyukt Rajyanche Virgin Zunve + Vietnam + Vanuatu + Wollis ani Futuna + Samoa + Kosovo + Yemen + Mayott + Dokxinn Afrika + Zambia + Zimbabwe + Onollkhi Prant + + Britix + Ameriki + Bhas: {0} Lipi: {0} @@ -48,9 +518,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - [aã b cç d eêẽ f g h iĩ j k l m nñ oôõ p q r s t u v w x y z] - [áàăâåäā æ éèĕëē íìĭîïī óòŏöøō œ úùŭûüū ÿ] - [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [aã b cç d eêẽ f g h iĩ j k l m nñ oôõø p q r s t u v w x y z] + [áàăâåäā æ éèĕëē íìĭîïī óòŏöō œ úùŭûüū ÿ] + [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” « » ( ) \[ \] § @ * / \& # † ‡ ′ ″] @@ -85,6 +555,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} 'vaztam' + + {1}, {0} 'vaztam' + @@ -93,33 +566,43 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} 'vaztam' + + {1}, {0} 'vaztam' + {1}, {0} - - {1}, {0} - {1}, {0} - - {1}, {0} - + B h 'vaztam' + B h:mm + B h:mm:ss + E B h 'vaztam' + E B h:mm 'vaztam' + E B h:mm:ss + E, d + E a h 'vaztam' + E a h:mm  E a h:mm:ss - y G + M-y G d-M-y GGGGG + E, d-M-y G MMM y G d MMM, y G E, d MMM, y G a h + HH'v' a h:mm a h:mm:ss + a h 'vaztam' v + HH'v' v d-M E, d-M d MMM @@ -139,10 +622,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic + B h – B h 'vaztam' h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -288,6 +771,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mar Abr Mai + Jun Jul Ago Set @@ -295,20 +779,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nov Dez - - J - F - M - A - M - J - J - A - S - O - N - D - Janer Febrer @@ -352,15 +822,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Suk Son - - A - S - M - B - B - S - S - Ai Sm @@ -404,30 +865,76 @@ CLDR data files are interpreted according to the LDML specification (http://unic 1lem timhoinallem 2rem timhoinallem 3rem timhoinallem - 4tem timhoinallem + 4them timhoinallem + + + + + 1lem timhoinallem + 2rem timhoinallem + 3rem timhoinallem + 4them timhoinallem + + modhyan + sokall + donpar + sanj + rat + + + md + a + p + sk + dp + sj + rt + + modhyanrat sokallim sanje + sokallim + donparam + sanje + rati + + modhyan + sokall + donpar + sanj + rat + + + md + sk + dp + sj + rt + + modhyanrat sokallim sanje + sokallim + donparam + sanje + rati Krista Adim - KA Anno Domini - AD KA @@ -490,6 +997,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} 'vaztam' + + {1}, {0} 'vaztam' + @@ -498,48 +1008,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} 'vaztam' + + {1}, {0} 'vaztam' + {1}, {0} - - {1}, {0} - {1}, {0} - - {1}, {0} - - B h + B h 'vaztam' B h:mm B h:mm:ss + E B h 'vaztam' E B h:mm E B h:mm:ss + E a h 'vaztam' E a h:mm E a h:mm:ss - y G + M/y G d-M-y G + E, d-M-y G MMM y G d MMM, y G E, d MMM, y G - a h + a h 'vaztam' + HH'v' a h:mm a h:mm:ss a h:mm:ss v a h:mm v + a h 'vaztam' v + HH'v' v d/M dd-MM, E d MMM E, d MMM d MMMM + MMMM -'acho' 'suman' W MMMM -'acho' 'suman' W - M-y + M/y d-M-y E, d-M-y MMM y @@ -548,12 +1062,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMMM y QQQ y QQQQ y + Y -'acho' 'suman' w Y -'acho' 'suman' w - B h – B h - B h – h + B h 'vaztam' – B h 'vaztam' + B h – h 'vaztam' B h:mm – B h:mm @@ -563,10 +1078,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic d – d - - y G – y G - y – y G - M/y G – M/y G M/y – M/y G @@ -602,11 +1113,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, d MMM, y – E, d MMM, y G - a h – a h - a h–h + a h 'vaztam' – a h 'vaztam' + a h–h 'vaztam' - HH – HH + HH–HH'v' a h:mm – a h:mm @@ -627,11 +1138,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH:mm – HH:mm v - a h – a h v - a h–h v + a h 'vaztam' – a h 'vaztam' v + a h–h 'vaztam' v - HH – HH v + HH–HH'v' v M – M @@ -698,45 +1209,43 @@ CLDR data files are interpreted according to the LDML specification (http://unic yug - - yug - - - yug - voros - fattlem voros - hem voros + porum + ondum fuddlem voros + {0} vorsan {0} vorsanim + {0} voros adim {0} vorsam adim - voros - fattlem voros - hem voros + porum + ondum fuddlem voros + {0} vorsan {0} vorsanim + {0} voros adim {0} vorsam adim - voros - fattlem voros - hem voros + porum + ondum fuddlem voros + {0}vorsan {0}vorsanim + {0}voros adim {0}vorsam adim @@ -746,9 +1255,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic hem timhoinallem fuddlem timhoinallem + {0} timhoinallean {0} timhoinalleanim + {0} timhoinallem adim {0} timhoinalle adim @@ -758,9 +1269,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic hem timho. fuddlem timho. + {0} timhoinallean {0} timhoinalleanim + {0} timho. adim {0} timho. adim @@ -770,9 +1283,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic hem timh fuddlem timh + {0}timhoinallean {0}timhoinalleanim + {0}timh adim {0}timh adim @@ -782,9 +1297,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho mhoino fuddlo mhoino + {0} mhoinean {0} mhoineanim + {0} mhoino adim {0} mhoine adim @@ -794,9 +1311,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho mho. fuddlo mho. + {0} mhoinean {0} mhoineanim + {0} mho. adim {0} mho. adim @@ -806,9 +1325,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho mh fuddlo mh + {0}mhoinean {0}mhoineanim + {0}mh adim {0}mh adim @@ -818,25 +1339,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho suman fuddlo suman + {0} sumanan {0} sumananim + {0} suman adim {0} suman adim {0} cho suman - suman - fattlo suman - ho suman - fuddlo suman + {0} sumanan {0} sumananim - - {0} suman adim - - {0} cho suman sum @@ -844,9 +1360,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho sum fuddlo sum + {0}sumanan {0}sumananim + {0}sum adim {0}sum adim {0} cho sum @@ -854,9 +1372,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic mhoineacho suman - - mhoineacho suman - mhoineacho sum. @@ -866,23 +1381,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic aiz faleam + {0} disan {0} disanim + {0} dis adim {0} dis adim - dis - kal - aiz - faleam + {0} disan {0} disanim - - {0} dis adim - d @@ -890,38 +1401,45 @@ CLDR data files are interpreted according to the LDML specification (http://unic aiz fal + {0}disan {0}disanim + {0}d adim {0}d adim vorsacho dis - - vorsacho dis - vorsacho d. sumanacho dis - - sumanacho dis - sumanacho d. + + mhoineant disacho prosong + + + mhoineant disacho prosong + + + mhoineant disacho prosong + fattlo Aitar ho Aitar fuddlo Aitar + {0} Aitaran {0} Aitaranim + {0} Aitar adim {0} Aitaram adim @@ -930,9 +1448,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Ait. fuddlo Ait. + {0} Aitaran {0} Aitaranim + {0} Ait. adim {0} Ait. adim @@ -941,9 +1461,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Ai fuddlo Ai + {0} Aitaran {0} Aitaranim + {0} Ai adim {0} Ai adim @@ -952,9 +1474,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Somar fuddlo Somar + {0} Somaran {0} Somaranim + {0} Somar adim {0} Somaram adim @@ -963,9 +1487,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Som. fuddlo Som. + {0} Somaran {0} Somaranim + {0} Som. adim {0} Som. adim @@ -974,9 +1500,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Sm fuddlo Sm + {0} Somaran {0} Somaranim + {0} Sm adim {0} Sm adim @@ -985,9 +1513,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Mongllar fuddlo Mongllar + {0} Mongllaran {0} Mongllaranim + {0} Mongllar adim {0} Mongllaram adim @@ -996,9 +1526,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Mon. fuddlo Mon. + {0} Mongllaran {0} Mongllaranim + {0} Mon. adim {0} Mon. adim @@ -1007,9 +1539,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Mg fuddlo Mg + {0} Mongllaran {0} Mongllaranim + {0} Mg adim {0} Mg adim @@ -1018,9 +1552,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Budhvar fuddlo Budhvar + {0} Budhvaran {0} Budhvaranim + {0} Budhvar adim {0} Budhvaram adim @@ -1029,9 +1565,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Bud. fuddlo Bud. + {0} Budhvaran {0} Budhvaranim + {0} Bud. adim {0} Bud. adim @@ -1040,9 +1578,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Bu fuddlo Bu + {0} Budhvaran {0} Budhvaranim + {0} Bu adim {0} Bu adim @@ -1051,9 +1591,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Birestar fuddlo Birestar + {0} Birestaran {0} Birestaranim + {0} Birestar adim {0} Birestaram adim @@ -1062,9 +1604,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Bre. fuddlo Bre. + {0} Birestaran {0} Birestaranim + {0} Bre. adim {0} Bre. adim @@ -1073,9 +1617,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Br fuddlo Br + {0} Birestaran {0} Birestaranim + {0} Br adim {0} Br adim @@ -1084,9 +1630,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Sukrar fuddlo Sukrar + {0} Sukraran {0} Sukraranim + {0} Sukrar adim {0} Sukraram adim @@ -1095,9 +1643,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Suk. fuddlo Suk. + {0} Sukraran {0} Sukraranim + {0} Suk. adim {0} Suk. adim @@ -1106,9 +1656,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Su fuddlo Su + {0} Sukraran {0} Sukraranim + {0} Su adim {0} Su adim @@ -1117,9 +1669,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Sonvar fuddlo Sonvar + {0} Sonvaran {0} Sonvaranim + {0} Sonvar adim {0} Sonvaram adim @@ -1128,9 +1682,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Son. fuddlo Son. + {0} Sonvaran {0} Sonvaranim + {0} Son. adim {0} Son. adim @@ -1139,48 +1695,46 @@ CLDR data files are interpreted according to the LDML specification (http://unic ho Sn fuddlo Sn + {0} Sonvaran {0} Sonvaranim + {0} Sn adim {0} Sn adim - - AM/PM - AM/PM - - AM/PM - vor hem vor + {0} voran {0} voranim + {0} vor adim {0} voram adim - vor - hem vor + {0} voran {0} voranim + {0} vor adim {0} voram adim - vor - hem vor + {0}voran {0}voranim + {0}vor adim {0}voram adim @@ -1188,9 +1742,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic minut ho minut + {0} mintan {0} mintanim + {0} minut adim {0} mintam adim @@ -1198,9 +1754,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic min. ho min. + {0} mintan {0} min. + {0} min. adim {0} min. adim @@ -1208,9 +1766,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic min ho min + {0}mintan {0}min + {0}min adim {0}min adim @@ -1218,29 +1778,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic sekond atam + {0} sekondan {0} sekondanim + {0} sekond adim {0} sekond adim sek. - atam + {0} sekondan {0} sekondanim + {0} sek. adim {0} sek. adim sek - atam + {0}sekondan {0}sekondanim + {0}sek adim {0}sek adim @@ -1250,29 +1814,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic kxetr - - kxetr - {0} Vell - {0} Dis-uzvadd vachovp Vell + {0} Dis-uzvadd Vachovp Vell {0} Promann Vell + + + Vixvacho Somonvoyit Vell + + + + Onollkhi Zago + + + Kolkata, Bombaim, Ponnji + - Greenwich Mean Time + Greenwich Promann Vell - - - - #,##,##0.### - - - @@ -1315,7 +1880,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤#,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + + + ¤ #,##,##0.00 + #,##,##0.00 @@ -1323,219 +1893,817 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + + + ¤ #,##,##0.00 + #,##,##0.00 ¤0hoz + ¤ 0hoz ¤00hoz + ¤ 00hoz ¤0lak + ¤ 0lak ¤00lak + ¤ 00lak ¤0ko + ¤ 0ko ¤00ko + ¤ 00ko ¤0obz + ¤ 0obz ¤00obz + ¤ 00obz ¤0nikh + ¤ 0nikh ¤00nikh + ¤ 00nikh ¤000nikh + ¤ 000nikh ¤0hoz'.'nikh'.' + ¤ 0hoz'.'nikh'.' + + {0} vantto + {0} vantte + {0}vya uzvya vatten voch. + + + maikro{0} + + + {0} dor {1} + + + choukon {0} + choukon {0} + + + ghon {0} + ghon {0} + + + {0}-{1} + + + onx + {0} onx + {0} onx + + + choukon kilomiter + {0} choukon kilomiter + {0} choukon kilomiter + {0} dor choukon kilomiter + + + choukon miter + {0} choukon miter + {0} choukon miter + {0} dor choukon miter + + + choukon centimiter + {0} choukon centimiter + {0} choukon centimiter + {0} dor choukon centimiter + + + choukon mil + {0} choukon mil + {0} choukon mil + {0} dor choukon mil + + + choukon yard + {0} choukon yard + {0} choukon yard + + + choukon fut + {0} choukon fut + {0} choukon fut + + + choukon inch + {0} choukon inch + {0} choukon inch + {0} dor choukon inch + + + petabayt + {0} petabayt + {0} petabayt + + + terabayt + {0} terabayt + {0} terabayt + + + {0} terabit + + + gigabayt + {0} gigabayt + {0} gigabayt + + + {0} gigabit + + + megabayt + {0} megabayt + {0} megabayt + + + {0} megabit + + + kilobayt + {0} kilobayt + {0} kilobayt + + + {0} kilobit + + + bayt + {0} bayt + {0} bayt + xekdde + {0} xekddo {0} xekdde doskam + {0} dosok {0} doskam - vorsam + {0} voros {0} vorsam dor voros {0} timhoinalle + {0} timhoinallem {0} timhoinalle {0}/timhoinallem mhoine + {0} mhoino {0} mhoine dor mhoino {0} - suman - {0} suman dor sumanak {0} - dis - {0} dis dor disa {0} - voram + {0} vor {0} voram dor vora {0} mintam + {0} minut {0} mintam dor minut {0} sekond + {0} sekond {0} sekond dor sekond {0} milisekond + {0} milisekond {0} milisekond maikrosekond + {0} maikrosekond {0} maikrosekond nanosekond + {0} nanosekond {0} nanosekond + + chitr-totvam + {0} chitr-totv + {0} chitr-totvam + + + mega-chitr-totvam + {0} mega-chitr-totv + {0} mega-chitr-totvam + + + dor centimiterak chitr-totvam + {0} dor centimiterak chitr-totv + {0} dor centimiterak chitr-totvam + + + dor inchak chitr-totvam + {0} dor inchak chitr-totv + {0} dor inchak chitr-totvam + + + kilomiter + {0} kilomiter + {0} kilomiter + {0} dor kilomiter + + + miter + {0} miter + {0} miter + {0} per miter + + + decimiter + {0} decimiter + {0} decimiter + + + centimiter + {0} centimiter + {0} centimiter + {0} dor centimiter + + + millimiter + {0} millimiter + {0} millimiter + + + maikromiter + {0} maikromiter + {0} maikromiter + + + nanomiter + {0} nanomiter + {0} nanomiter + + + picomiter + {0} picomiter + {0} picomiter + + + mil + {0} mil + {0} mil + + + paund dor choukon inch + {0} paund dor choukon inch + {0} paund dor choukon inch + + + onx tapman + {0} onx tapman + {0} onx tapman + + + onx Celsius + {0} onx Celsius + {0} onx Celsius + + + onx Fahrenheit + {0} onx Fahrenheit + {0} onx Fahrenheit + + + ghon kilomiter + {0} ghon kilomiter + {0} ghon kilomiter + + + ghon miter + {0} ghon miter + {0} ghon miter + {0} dor ghon miter + + + ghon centimiter + {0} ghon centimiter + {0} ghon centimiter + {0} dor ghon centimiter + + + ghon mil + {0} ghon mil + {0} ghon mil + + + ghon yard + {0} ghon yard + {0} ghon yard + + + ghon fut + {0} ghon fut + {0} ghon fut + + + ghon inch + {0} ghon inch + {0} ghon inch + + + pondros + {0} pondros + {0} pondros + - rati + {0} rat {0} rati dor rat {0} + + mukhel dixa + {0} udent + {0} ut’tor + {0} dokxin + {0} Ostont + + + onx + {0} onx + {0} onx + + + PBayt + + + TBayt + + + Tbit + + + GBayt + + + Gbit + + + MBayt + + + Mbit + + + kBayt + + + kbit + + + bayt + {0} bayt + {0} bayt + x + {0} x {0} x dos + {0} dos {0} dos vorsam + {0} voros {0} vorsam {0}/voros timho + {0} timho {0} timho {0}/timho mho + {0} mho {0} mho {0}/mho suman + {0} suman {0} suman {0}/suman dis + {0} dis {0} dis {0}/dis voram + {0} vor {0} vor {0}/vor sek + {0} sek {0} sek {0}/sek msek + {0} msek {0} msek μsek + {0} μsek {0} μsek nanosek + {0} nsek {0} nsek + + chitr-totvam + + + mega-chitr-totvam + + + mil + + + onx tapman + + + onx C + + + onx F + + + pondr + {0} pondr + {0} pondr + rati + {0} rat {0} rati {0}/rat + + dixa + {0} UD + {0} UT + {0} DO + {0} OS + + + onx + + + PBayt + + + TBayt + + + GBayt + + + MBayt + + + kBayt + + + B + {0}B + {0}B + + + {0}bit + {0}bit + - x + {0}x {0}x - dos + {0}dos {0}dos - vorsam + {0}voros {0}vorsam - {0}/voros - timho + {0}timho {0}timho - {0}/timho - mho + {0}mho {0}mho - {0}/mho sum + {0}sum {0}sum {0}/sum d + {0}d {0}d + {0}/d vor + {0}vor {0}vor - {0}/vor + {0}min {0}min - sek + {0}sek {0}sek - {0}/sek - msek + {0}msek {0}msek - μsek + {0}μsek {0}μsek nsek + {0}nsek {0}nsek - - rati - {0}rati - {0}/rat + + pondr + {0} pondr + {0} pondr + + {0}rat + {0}rati + + + dixa + {0}UD + {0}UT + {0}DO + {0}OS + + + + {0}, ani {1} + {0} ani {1} + + + {0}, vo {1} + {0} vo {1} + + + {0}, vo {1} + {0} vo {1} + + + {0}, vo {1} + {0} vo {1} + + + {0}, & {1} + {0} & {1} + + + {0} ani {1} + + + {0} {1} + {0} {1} + {0} {1} + {0} {1} + + + + + hoi:h + na:n + + + + und kok kok_Latn + informal + + {title} {given} {given2} {surname} {surname2} {generation}, {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {given-monogram-allCaps}{given2-monogram-allCaps}{surname-monogram-allCaps}{surname2-monogram-allCaps} + + + {given-informal-monogram-allCaps}{surname-monogram-allCaps}{surname2-monogram-allCaps} + + + {given} {given2-initial} {surname} {generation}, {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {given-initial} {given2-initial} {surname} + + + {given-informal} {surname-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname} {surname2} {title} {given} {given2} {generation}, {credentials} + + + {surname} {surname2} {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps}{given-informal-monogram-allCaps} + + + {surname} {given} {given2-initial} {generation}, {credentials} + + + {surname} {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname} {given-initial} {given2-initial} + + + {surname} {given-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname-core}, {given} {given2} {surname-prefix} + + + {surname} {surname2}, {given-informal} + + + {surname-core}, {given} {given2-initial} {surname-prefix} + + + {surname}, {given-informal} + + + {surname-core}, {given-initial} {given2-initial} {surname-prefix} + + + {surname}, {given-informal} + + + Prema + + + Shanti + Gaonkar + + + Maria + Helena + Fernandes + + + Mr. + Francisco Xavier + Forsu + Joao Anton + de + Souza + e Menezes + Dk + MP + + + Sinbad + + + Käthe + Müller + + + Zäzilia + Hamish + Stöber + + + Prof. Dr. + Ada Cornelia + Neele + César Martín + von + Brühl + González Domingo + Jr + MD DDS + + diff --git a/make/data/cldr/common/main/ks.xml b/make/data/cldr/common/main/ks.xml index 5592cc9b897..58b33083aa0 100644 --- a/make/data/cldr/common/main/ks.xml +++ b/make/data/cldr/common/main/ks.xml @@ -923,7 +923,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ISO-8601 کیلنڈر جاپٲنؠ کیلنڑَر جموٗریٲتی چیٖنی کیلَنڑَر - رؠوٲتی چیٖنی تِرتیٖب فون بُک تَرتیٖب آسان بَناونہٕ آمُت چیٖنی پیٖنیَن تَرتیٖب معیٲری ترتیٖب آڈر @@ -2175,9 +2174,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic نوم پؠنہہ - - اؠنڑربیری - کِرِتِماتی @@ -2846,9 +2842,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - مغربی افریٖقا ٹایِم - مغربی افریٖقا سٹینڈرڈ ٹایِم - مغربی افریٖقا سَمَر ٹایِم + مغربی افریٖقا ٹایِم @@ -3224,6 +3218,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic گُیَنا ٹایِم + + + حَواے اؠلیوٗٹِیَن سٹینڑاڑ ٹایِم + + حَواے اؠلیوٗٹِیَن ٹایِم @@ -3669,6 +3668,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic ٹٔرک ٹایِم + + + تُرکی ٹایِم + تُرکی سٹینڑاڑ ٹایِم + تُرکی سَمَر ٹایِم + + ترکمانستان ٹائم diff --git a/make/data/cldr/common/main/ks_Deva.xml b/make/data/cldr/common/main/ks_Deva.xml index 6cdc96cfc00..26c540fe3cb 100644 --- a/make/data/cldr/common/main/ks_Deva.xml +++ b/make/data/cldr/common/main/ks_Deva.xml @@ -115,7 +115,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd diff --git a/make/data/cldr/common/main/ksf.xml b/make/data/cldr/common/main/ksf.xml index d2f9e02e439..aa7a59dc790 100644 --- a/make/data/cldr/common/main/ksf.xml +++ b/make/data/cldr/common/main/ksf.xml @@ -557,6 +557,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/ksh.xml b/make/data/cldr/common/main/ksh.xml index 1e34fe41add..43af5f40d04 100644 --- a/make/data/cldr/common/main/ksh.xml +++ b/make/data/cldr/common/main/ksh.xml @@ -763,10 +763,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic japaanesche Kaländer pärsesche Kaländer rotschineesesche Kaländer - zoteert nohm tradizjonäll schineesesch Big5 zotehrt wi em Wööterbohch standattmähßesch zotehrt nohm Unicode - zoteert nohm eijfacher schineesesch GB2312 zoteert wi em Tollefoonbooch zoteert noh de Pinjin Ömschreff vum Schineesesch Söhke @@ -1629,9 +1627,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wäß-Affrekaanesche Zigg - Jewöhnlijje Wäß-Affrekaanesche Zigg - Wäß-Affrekaanesche Sommerzigg + Wäß-Affrekaanesche Zigg @@ -1801,6 +1797,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/ku.xml b/make/data/cldr/common/main/ku.xml index f9e1ec94a62..dc0a5fe47f7 100644 --- a/make/data/cldr/common/main/ku.xml +++ b/make/data/cldr/common/main/ku.xml @@ -27,7 +27,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic aragonî obolo angîkayî - erebîya bakurê şamê + erebîya bakurê Şamê erebî erebîya modern a standard mapuçî @@ -40,7 +40,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic avarî awadhî aymarayî - azerî + azerbaycanî başkîrî belûcî balînî @@ -51,7 +51,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic benayî bulgarî haryanvîyî - belucîya rojavayî + belûcîya rojavayî bojpûrî bîslamayî bînîyî @@ -61,10 +61,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic bambarayî bengalî tîbetî + bextiyarî bretonî bodoyî bosnî akooseyî + buriat bugî blînî katalanî @@ -84,12 +86,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic çeyenî çîkasawî kurdî (soranî) - kurdî (navîn) + kurdî (navendî) çilkotînî korsîkayî + qiptî mîçîfî krîya rojhilat ya başûrî - kriya bejayî + krîya bejayî krîya rojhilat ya bakurî krîya mûsî zimanê karolina algonquianî @@ -98,11 +101,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic slavîya kenîseyî çuvaşî weylsî - danmarkî + danîmarkî dakotayî dargînî tayîtayî almanî + almanîya bilind a swîsreyî dogrîbî zarma dogrîyî @@ -118,8 +122,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ekajukî yûnanî îngilîzî - îngilîzî (Qiralîyeta Yekbûyî) + îngilîzî (brîtanî) îngilîzî (QY) + îngilîzî (amerîkî) esperantoyî spanî spanî (Ewropa) @@ -127,20 +132,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic baskî ewondoyî farisî - derî + darî fulahî fînî - fîlîpînoyî + fîlîpînî fîjî ferî fonî fransizî - fransizî (Kanada) - fransizî (Swîsre) fransizîya kajûnê frîsîya bakur frîyolî - frîsî + frîsîya rojavayî îrlendî gayî gaelîka skotî @@ -167,7 +170,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic xirwatî sorbîya jorîn haîtî - mecarî + macarî hupayî halkomelemî ermenî @@ -194,13 +197,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic gurcî kara-kalpakî kabîlî - cingphoyî + kaçînî jju kambayî kabardî tyap makondeyî kapverdî + qeqçîyî kenyangî koro kayingangî @@ -212,7 +216,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kako kalalîsûtî kalencînî - ximêrî + khmerî kîmbunduyî kannadayî koreyî @@ -227,12 +231,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic bafyayî rîpwarî kurdî (kurmancî) + kurdî (kurmancî) + kurmancî kumikî komî kornî kwak’walayî kuvî - kirgizî + qirgizî latînî ladînoyî langî @@ -243,9 +249,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic lîgûrî lillooet lakotayî + ladînî lombardî lingalayî - lawsî + lao kreyolîya louisianayê lozî lurîya bakur @@ -259,6 +266,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic mizoyî luhyayî latvîyayî + lazî madurayî magahî maithili @@ -272,6 +280,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic makhuwa-meetto meta’ marşalî + moçenoyî maorî mîkmakî mînangkabawî @@ -289,10 +298,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic pirzimanî krîkî mîrandî + hmongîya dawî burmayî erzayî mazenderanî nawrûyî + çînîya mîn nanî napolîtanî namayî norwecî (bokmål) @@ -333,8 +344,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic papyamentoyî palawî pîdgînîya nîjeryayî + palî pijînî polonî + piedmontîsî malecite-passamaquoddy prûsyayî peştûyî @@ -366,11 +379,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic sicîlî skotî sindhî - kurdîya başûrî + kurdî (xwarîn) samîya bakur sena - sonxayî + sennîya koyraboro sangoyî + samogîtî taşelhîtî şanî kîngalî @@ -381,7 +395,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic lushootseeda başûrî samoayî samîya başûr - samiya lule + samîya lule samîya înarî samîya skoltî şonayî @@ -396,6 +410,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic saanîçî sundanî sukuma + sunwarî swêdî swahîlî swahîlîya kongoyî @@ -434,12 +449,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic tuvanî temazîxtî udmurtî - oygurî + uyxurî ukraynî umbunduyî zimanê nenas urdûyî ozbekî + vaî + venda venîsî vîetnamî makhuwayî @@ -469,58 +486,204 @@ CLDR data files are interpreted according to the LDML specification (http://unic çînî, mandarînî çînîya sadekirî çînîya mandarînî ya sadekirî - çînîya kevneşopî - çînîya mandarînî ya kevneşopî + çînîya edetî + çînîya mandarînî ya edetî zuluyî zunîyî bê naveroka zimanî - zazakî (kirdkî, kirmanckî) + zazakî + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -602,14 +765,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Giravên Kokosê (Keeling) Kongo - Kînşasa Kongo (KDK) - Komara Afrîkaya Navîn + Cimhûrîyeta Afrîkaya Navîn Kongo - Brazzaville - Kongo (Komar) + Kongo (Cimhûrîyet) Swîsre Côte d’Ivoire Perava Ivoryê Giravên Cookê - Şîle + Şîlî Kamerûn Çîn Kolombîya @@ -622,12 +785,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Girava Christmasê Qibris Çekya + Cimhûrîyeta Çekî Almanya Diego Garcia Cîbûtî Danîmarka Domînîka - Komara Domînîkê + Cimhûrîyeta Domînîkê Cezayîr Ceuta û Melîla Ekwador @@ -714,11 +878,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Fas Monako Moldova - Montenegro + Qeredax Saint Martin Madagaskar Giravên Marşalê - Makendonyaya Bakur + Makedonyaya Bakur Malî Myanmar (Bûrma) Moxolistan @@ -730,7 +894,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Montserat Malta Mauritius - Maldîva + Maldîv Malawî Meksîka Malezya @@ -742,13 +906,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nîjerya Nîkaragua Holanda - Norwêc + Norwec Nepal Naûrû Niûe Zelandaya Nû Aoteroaya Zelandaya Nû - Oman + Uman Panama Perû Polînezyaya Fransizî @@ -759,9 +923,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saint-Pierre û Miquelon Giravên Pitcairnê Porto Rîko - Herêmên Filîstînî + Herêmên Filistînî Filistîn - Portûgal + Portugal Palau Paragûay Qeter @@ -799,25 +963,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic Herêmên Başûr ên Fransayê Togo Tayland - Tacîkistan + Tacikistan Tokelau Tîmor-Leste Tîmora Rojhilat Tirkmenistan Tûnis Tonga - Tirkîye - Türkiye + Türkiye Trînîdad û Tobago Tûvalû Taywan Tanzanya Ûkrayna Ûganda - Giravên Biçûk ên Derveyî DYAyê + Giravên Biçûk ên Derveyî DAYê Miletên Yekbûyî - Dewletên Yekbûyî yên Amerîkayê - DYA + Dewletên Amerîkayê yên Yekbûyî + DAY Ûrûguay Ozbekistan Vatîkan @@ -840,32 +1003,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic Herêma Nenas - Akademîk + Akademîk - Salname + Teqwîm Rêzkirin diwîz - Salnameya Budîst - Salnameya Çînî - Salnameya Qiptî - Salnameya Dangî - Salnameya Etîyopîk - Salnameya Amete Alem ya Etîyopîk - Salnameya Mîladî - salnameya îbranî - Salnameya Milî ya Hindî - Salnameya Hicrî - Salnameya Hicrî (16ê tîrmeha 622yan) - Salnameya Hicrî (Siudî) - Salnameya Hicrî (15ê tîrmeha 622yan) - Salnameya Hicrî (Um el-Qura) - Salnameya ISO-8601ê - Salnameya Japonî - Salnameya Îranî - Salnameya Komara Çînê + Teqwîma Budîst + Teqwîma Çînî + Teqwîma Qiptî + Teqwîma Dangî + Teqwîma Etîyopîk + Teqwîma Amete Alem ya Etîyopîk + Teqwîma Mîladî + Mîladî + Teqwîma Îbranî + Teqwîma Milî ya Hindî + Teqwîma Hicrî + Hicrî + Teqwîma Hicrî (16ê tîrmeha 622yan) + Hicrî (16ê tîrmeha 622yan) + Teqwîma Hicrî (Siudî) + Teqwîma Hicrî (15ê tîrmeha 622yan) + Teqwîma Hicrî (Um el-Qura) + Teqwîma ISO-8601ê + Teqwîma Japonî + Teqwîma Îranî + Teqwîma Cimhûrîyeta Çînê Awayê Rêzkirina Standard Reqemên hindo-erebî Reqemên Rojavayî @@ -893,7 +1059,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -912,7 +1078,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG d.MM.y + G dd.MM.y @@ -938,25 +1104,412 @@ CLDR data files are interpreted according to the LDML specification (http://unic - E, h:mm'ê' a - E, HH:mm - E, h:mm:ss'ê' a - E, HH:mm:ss - d/M/y GGGGG + G MM.y + G dd.MM.y + G dd.MM.y, E + G d/M/y + G d/M/y, E + + + + + + + + G d'ê' MMMM'a' y'an' EEEE + + + + + G d'ê' MMMM'a' y'an' + + + + + G dd.MM.y + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + G MM.y + G dd.MM.y + G dd.MM.y, E + G d'ê' MMM'a' y'an', E + G MM.y + G dd.MM.y + G d.M.y, E + + + + h:mm – h:mm B + h:mm – h:mm B + + + d – d + + + G y – y + + + G MM.y – G MM.y + G MM.y – MM.y + G MM.y – MM.y + + + G dd.MM.y – dd.MM.y + G dd.MM.y – G dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + + + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – G dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + + + G MMM y – G MMM y + G MMM y – MMM y + + + G d – d MMM, y + + + G d'ê' MMM'a' y'an' E – G d'ê' MMM'a' y'an', E + + + h – h a + + + HH – HH's' + + + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a + + + HH:mm – HH:mm + HH:mm – HH:mm + + + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v + + + HH:mm – HH:mm v + + + h – h a v + + + HH – HH's' v + + + M – M + + + dd.MM, E – dd.MM, E + dd.MM, E – dd.MM, E + + + MMM – MMM + + + G y – y + + + G MM.y – MM.y + G MM.y – MM.y + + + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + + + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + + + G MMM – MMM y + G MMM y – MMM y + + + G d – d MMM, y + G d MMM – d MMM, y + G d MMM, y – d MMM, y + + + G d MMM, E – d MMM y, E + G d MMM, E – d MMM y, E + G d MMM y, E – d MMM y, E + + + MMMM – MMMM y G + G MMMM y – MMMM y + + + + + + + + + G d'ê' MMMM'a' y'an' EEEE + + + + + G d'ê' MMMM'a' y'an' + + + + + G d'ê' MMM'a' y'an' + + + + + G dd.MM.y + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + G MM.y + G dd.MM.y + G dd.MM.y, E + G d'ê' MMM'a' y'an', E + G MM.y + G dd.MM.y + G d.M.y, E + + + + h:mm – h:mm B + h:mm – h:mm B + + + d – d + + + G y – y + + + G MM.y – G MM.y + G MM.y – MM.y + G MM.y – MM.y + + + G dd.MM.y – dd.MM.y + G dd.MM.y – G dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + + + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – G dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + + + G MMM y – G MMM y + G MMM y – MMM y + + + G d – d MMM, y + + + G d'ê' MMM'a' y'an' E – G d'ê' MMM'a' y'an', E + + + h – h a + + + HH – HH's' + + + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a + + + HH:mm – HH:mm + HH:mm – HH:mm + + + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v + + + HH:mm – HH:mm v + + + h – h a v + + + HH – HH's' v + + + M – M + + + dd.MM, E – dd.MM, E + dd.MM, E – dd.MM, E + + + MMM – MMM + + + G y – y + + + G MM.y – MM.y + G MM.y – MM.y + + + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + + + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + + + G MMM – MMM y + G MMM y – MMM y + + + G d – d MMM, y + G d MMM – d MMM, y + G d MMM, y – d MMM, y + + + G d MMM, E – d MMM y, E + G d MMM, E – d MMM y, E + G d MMM y, E – d MMM y, E + + + MMMM – MMMM y G + G MMMM y – MMMM y + + + + + + + + + G d'ê' MMMM'a' y'an' EEEE + + + + + G d'ê' MMMM'a' y'an' + + + + + G d'ê' MMM'a' y'an' + + + + + G dd.MM.y + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + h a, E + h:mm a, E + HH:mm, E + h:mm:ss a, E + HH:mm:ss, E + G MM.y + G dd.MM.y + G dd.MM.y, E G MMM'a' y'an' G d'ê' MMM'a' y'an' - G d'ê' MMM'a' y'an' E - h'ê' a - h:mm'ê' a - h:mm:ss'ê' a + G d'ê' MMM'a' y'an', E + HH's' + h:mm a + h:mm:ss a dd/MM dd/MM, E d'ê' MMM'ê' d'ê' MMM'ê', E d'ê' MMMM'ê' - GGGGG M/y - GGGGG dd.MM.y - GGGGG dd.MM.y, E + G MM.y + G dd.MM.y + G d.M.y, E G MMM'a' y'an' G d'ê' MMM'a' y'an' G d'ê' MMM'a' y'an' E @@ -965,53 +1518,92 @@ CLDR data files are interpreted according to the LDML specification (http://unic G y/QQQQ + + h:mm – h:mm B + h:mm – h:mm B + + + d – d + + + G y – y + - GGGGG MM.y – GGGGG MM.y - GGGGG MM.y – MM.y - GGGGG MM.y – MM.y + G MM.y – G MM.y + G MM.y – MM.y + G MM.y – MM.y - GGGGG dd.MM.y – dd.MM.y - GGGGG dd.MM.y – GGGGG dd.MM.y - GGGGG dd.MM.y – dd.MM.y - GGGGG dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – G dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y - GGGGG dd.MM.y E – dd.MM.y E - GGGGG dd.MM.y E – GGGGG dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – G dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E - G MMM'a' y'an' – G MMM'a' y'an' + G MMM y – G MMM y G MMM–MMM y - G MMM'a' y'an' – MMM'a' y'an' + G MMM y – MMM y - G d–d'ê' MMM'a' y'an' + G d – d MMM, y G d'ê' MMM'a' y'an' – G d'ê' MMM'a' y'an' G d'ê' MMM'ê' – d'ê' MMM'ê' y G d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an' G d'ê' MMM'ê' E – d'ê' MMM'ê' E y - G d'ê' MMM'a' y'an' E – G d'ê' MMM'a' y'an' E + G d'ê' MMM'a' y'an' E – G d'ê' MMM'a' y'an', E G d'ê' MMM'ê' E – d'ê' MMM'ê' E y G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + + h – h a + + + HH – HH's' + + + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a + + + HH:mm – HH:mm + HH:mm – HH:mm + + + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v + + + HH:mm – HH:mm v + + + h – h a v + + + HH – HH's' v + - M–M + M – M d.M – d.M d.M – d.M - d.M E – d.M E - d.M E – d.M E + dd.MM, E – dd.MM, E + dd.MM, E – dd.MM, E - MMM–MMM + MMM – MMM d – d'ê' MMM'ê' @@ -1021,37 +1613,40 @@ CLDR data files are interpreted according to the LDML specification (http://unic d'ê' MMM'ê', E – d'ê' MMM'ê', E d'ê' MMM'ê', E – d'ê' MMM'ê', E + + G y – y + - GGGGG MM.y – MM.y - GGGGG MM.y – MM.y + G MM.y – MM.y + G MM.y – MM.y - GGGGG dd.MM.y – dd.MM.y - GGGGG dd.MM.y – dd.MM.y - GGGGG dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y - GGGGG dd.MM.y E – dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E - G MMM–MMM y - G MMM'a' y'an' – MMMa y'an' + G MMM – MMM y + G MMM y – MMM y - G d–d'ê' MMM'a' y'an' - G d'ê' MMM'ê' – d'ê' MMM'ê' y - G d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an' + G d – d MMM, y + G d MMM – d MMM, y + G d MMM, y – d MMM, y - G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E - G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E - G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + G d MMM, E – d MMM y, E + G d MMM, E – d MMM y, E + G d MMM y, E – d MMM y, E - G MMMM – MMMM y - G MMMM'a' y'an' – MMMM'a' y'an' + MMMM – MMMM y G + G MMMM y – MMMM y @@ -1156,10 +1751,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ç4 - çaryeka 1em - çaryeka 2yem - çaryeka 3yem - çaryeka 4em + çaryeka 1ê + çaryeka 2an + çaryeka 3an + çaryeka 4an + + + + + çaryeka 1ê + çaryeka 2an + çaryeka 3an + çaryeka 4an @@ -1177,17 +1780,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic - berî zayînê - berî mîladê - piştî zayînê - piştî mîladê + Berî Mîladê + Berî Mîladê + Piştî Mîladê + Piştî Mîladê - BZ - BM - PZ - PM + BM + PM + + BM + PM + @@ -1202,7 +1807,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - d'ê' MMM'a' y'an' + d MMM, y @@ -1255,158 +1860,214 @@ CLDR data files are interpreted according to the LDML specification (http://unic - h'ê' B - h:mm'ê' B - h:mm:ss'ê' B - E, h:mm'ê' B - E, h:mm:ss'ê' B - d E - E, h:mm'ê' a - E, h:mm:ss'ê' a - GGGGG dd.MM.y - G MMM'a' y'an' - G d'ê' MMM'a' y'an' - G d'ê' MMM'a' y'an', E - h'ê' a - h:mm'ê' a - h:mm:ss'ê' a - h:mm:ss'ê' a 'bi' 'dema' v('y')'ê' - HH:mm:ss 'bi' 'dema' v('y')'ê' - h:mm'ê' a 'bi' 'dema' v('y')'ê' - HH:mm 'bi' 'dema' v('y')'ê' + E h:mm a + E h:mm:ss a + G M/y + G d/M/y + G d/M/y, E + G MMM y + G d MMM, y + G d MMM y, E + h:mm a + h:mm:ss a + h:mm:ss a v + h:mm a v dd.MM - E, dd.MM - d'ê' MMM'ê' - E, d'ê' MMM'ê' + d/M, E + d MMM + d MMM, E d'ê' MMMM'ê' - 'hefteya' W'em' 'ya' MMMM'ê' - 'hefteya' W'em' 'ya' MMMM'ê' + 'hefteya' W'an' 'ya' MMMM'ê' + 'hefteya' W'an' 'ya' MMMM'ê' MM.y dd.MM.y - E, dd.MM.y - MMM'a' y'an' - d'ê' MMM'a' y'an' - E, d'ê' MMM'a' y'an' + dd.MM.y, E + MMM, y + d MMM, y + d MMM y, E MMMM'a' y'an' - QQQ'em' 'ya' y'an' + QQQ, y QQQQ 'ya' y'an' - 'hefteya' w'em' 'ya' Y'an' - 'hefteya' w'em' 'ya' Y'an' + 'hefteya' w'an' 'ya' Y'an' + 'hefteya' w'an' 'ya' Y'an' - - h'ê' B – h'ê' B - h–h'ê' B - - GGGGG MM.y – GGGGG MM.y - GGGGG MM.y – MM.y - GGGGG MM.y – MM.y + M/y G – M/y G + G M/y – M/y + G M/y – M/y - GGGGG dd.MM.y – dd.MM.y - GGGGG dd.MM.y – GGGGG dd.MM.y - GGGGG dd.MM.y – dd.MM.y - GGGGG dd.MM.y – dd.MM.y + G d/M/y – d/M/y + G d/M/y – G d/M/y + G d/M/y – d/M/y + G d/M/y – d/M/y - GGGGG dd.MM.y E – dd.MM.y E - GGGGG dd.MM.y E – GGGGG dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E + G d/M/y, E – G d/M/y, E + G d/M/y, E – G d/M/y, E + G d/M/y, E – G d/M/y, E + G d/M/y – d/M/y, E - G MMM'a' y'an' – G MMM'a' y'an' + G MMM y – G MMM y G MMM–MMM y - G MMM'a' y'an' – MMM'a' y'an' + G MMM y – MMM y - G d–d'ê' MMM'a' y'an' - G d'ê' MMM'a' y'an' – G d'ê' MMM'a' y'an' - G d'ê' MMM'ê' – d'ê' MMM'ê' y - G d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an' + G d – d MMM, y + G d MMM, y – G d MMM, y + G d MMM – d MMM, y + G d MMM, y – G d MMM, y - G d'ê' MMM'ê' E – d'ê' MMM'ê' E y - G d'ê' MMM'a' y'an' E – G d'ê' MMM'a' y'an' E - G d'ê' MMM'ê' E – d'ê' MMM'ê' E y - G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + G d MMM, E – G d MMM y, E + G d MMM y, E – G d MMM y, E + G d MMM – d MMM y, E + G d MMM y, E – d MMM y, E - h'ê' a – h'ê' a - h–h'ê' a + h – h a + + + HH – HH's' - h:mm'ê' a – h:mm'ê' a - h:mm–h:mm'ê' a - h:mm–h:mm'ê' a + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a + + + HH:mm – HH:mm + HH:mm – HH:mm - h:mm'ê' a – h:mm'ê' a v - h:mm'ê'–h:mm'ê' a v - h:mm'ê'–h:mm'ê' a v + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v + + + HH:mm – HH:mm v + HH:mm – HH:mm v - h'ê' a – h'ê' a v - h–h'ê' a v + h – h a v + + + HH – HH'h' v M – M - d.M – d.M - d.M – d.M + d/M – d/M + d/M – d/M - d.M E – d.M E - d.M E – d.M E + d/M, E – d/M, E + d/M, E – d/M, E - MMM–MMM + MMM – MMM - d – d'ê' MMM'ê' - d'ê' MMM'ê' – d'ê' MMM'ê' + d – d MMM + d MMM – d MMM - d'ê' MMM'ê', E – d'ê' MMM'ê', E - d'ê' MMM'ê', E – d'ê' MMM'ê', E + d MMM, E – d MMM, E + d MMM, E – d MMM, E + + + y – y - MM.y – MM.y - MM.y – MM.y + M/y – M/y + M/y – M/y - dd.MM.y – dd.MM.y - dd.MM.y – dd.MM.y - dd.MM.y – dd.MM.y + d/M/y – d/M/y + d/M/y – d/M/y + d/M/y – d/M/y - dd.MM.y E – dd.MM.y E - dd.MM.y E – dd.MM.y E - dd.MM.y E – dd.MM.y E + d/M/y, E – d/M/y, E + d/M/y, E – d/M/y, E + d/M/y, E – d/M/y, E - MMM–MMM y - MMM'a' y'an' – MMM'a' y'an' + MMM – MMM y + MMM y – MMM y - d–d'ê' MMM'a' y'an' - d'ê' MMM'ê' – d'ê' MMM'ê' y - d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an' + d – d MMM, y + d MMM – d MMM, y + d MMM, y – d MMM, y - d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E - d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E - d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E + d MMM, E – d MMM y, E + d MMM, E – d MMM y, E + d MMM y, E – d MMM y, E MMMM – MMMM y - MMMM'a' y'an' – MMMM'a' y'an' + MMMM y – MMMM y + + + + + G d'ê' MMMM'a' y'an' EEEE + + + + + G d'ê' MMMM'a' y'an' + + + + + G d'ê' MMM'a' y'an' + + + + + G dd.MM.y + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + G MM.y + G dd.MM.y + G dd.MM.y, E + G d'ê' MMM'a' y'an', E + + + @@ -1445,19 +2106,149 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hicrî + + + G MM.y + G dd.MM.y + G dd.MM.y, E + G d'ê' MMM'a' y'an', E + G MM.y + G dd.MM.y + G d.M.y, E + + + + h:mm – h:mm B + h:mm – h:mm B + + + d – d + + + G y – y + + + G MM.y – G MM.y + G MM.y – MM.y + G MM.y – MM.y + + + G dd.MM.y – dd.MM.y + G dd.MM.y – G dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + + + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – G dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + + + G MMM y – G MMM y + G MMM y – MMM y + + + G d – d MMM, y + + + G d'ê' MMM'a' y'an' E – G d'ê' MMM'a' y'an', E + + + h – h a + + + HH – HH's' + + + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a + + + HH:mm – HH:mm + HH:mm – HH:mm + + + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v + + + HH:mm – HH:mm v + + + h – h a v + + + HH – HH's' v + + + M – M + + + dd.MM, E – dd.MM, E + dd.MM, E – dd.MM, E + + + MMM – MMM + + + G y – y + + + G MM.y – MM.y + G MM.y – MM.y + + + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y + + + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + G dd.MM.y, E – dd.MM.y, E + + + G MMM – MMM y + G MMM y – MMM y + + + G d – d MMM, y + G d MMM – d MMM, y + G d MMM, y – d MMM, y + + + G d MMM, E – d MMM y, E + G d MMM, E – d MMM y, E + G d MMM y, E – d MMM y, E + + + MMMM – MMMM y G + G MMMM y – MMMM y + + + - serdem + çax + + + çax + + + çax sal sala borî îsal - sala bê + sala were - di salekê de + di {0} salê de di {0} salan de @@ -1466,12 +2257,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic + sala borî + îsal + sala were - piştî {0} salan + piştî {0} salê + piştî {0} salan + + + + sala borî + îsal + sala were + + piştî {0} salê piştî {0} salan - berî salekê + berî {0} salê berî {0} salan @@ -1480,46 +2283,118 @@ CLDR data files are interpreted according to the LDML specification (http://unic çaryeka dawî ev çaryek çaryeka were + + piştî {0} çaryekê + piştî {0} çaryekan + + + berî {0} çaryekê + berî {0} çaryekan + çrk. + + piştî {0} çaryekê + piştî {0} çaryekan + + + berî {0} çaryekê + berî {0} çaryekan + + + + + piştî {0} çaryekê + piştî {0} çaryekan + + + berî {0} çaryekê + berî {0} çaryekan + meh meha borî ev meh - meha bê + meha were + + piştî {0} mehê + piştî {0} mehan + + + berî {0} mehê + berî {0} mehan + meha borî ev meh - meha bê + meha were + + piştî {0} mehê + piştî {0} mehan + + + berî {0} mehê + berî {0} mehan + meha borî ev meh - meha bê + meha were + + piştî {0} mehê + piştî {0} mehan + + + berî {0} mehê + berî {0} mehan + hefte hefteya borî ev hefte - hefteya bê + hefteya were + + piştî {0} hefteyê + piştî {0} hefteyan + + + berî {0} hefteyê + berî {0} hefteyan + hefteya {0} hf. hft. borî ev hft. - hft. bê - hefteya {0} + hft. were + + piştî {0} hefteyê + piştî {0} hefteyan + + + berî {0} hefteyê + berî {0} hefteyan + hf hft. borî ev hft. - hft. bê - hefteya {0} + hft. were + + piştî {0} hefteyê + piştî {0} hefteyan + + + berî {0} hefteyê + berî {0} hefteyan + hefteya mehê @@ -1529,6 +2404,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic duh îro sibê + + piştî {0} rojê + piştî {0} rojan + + + berî {0} rojê + berî {0} rojan + + + + + piştî {0} rojê + piştî {0} rojan + + + berî {0} rojê + berî {0} rojan + + + + + piştî {0} rojê + piştî {0} rojan + + + berî {0} rojê + berî {0} rojan + roja salê @@ -1539,32 +2442,335 @@ CLDR data files are interpreted according to the LDML specification (http://unic roja mehê + + yekşema borî + ev yekşem + yekşema were + + piştî {0} yekşemê + piştî {0} yekşeman + + + berî {0} yekşemê + berî {0} yekşeman + + + + yşm. borî + ev yşm. + yşm. were + + piştî {0} yşm. + piştî {0} yşm. + + + berî {0} yşm. + berî {0} yşm. + + + + yşm. borî + ev yşm. + yşm. were + + piştî {0} yşm. + piştî {0} yşm. + + + berî {0} yşm. + berî {0} yşm. + + + + duşema borî + ev duşem + duşema were + + piştî {0} duşemê + piştî {0} duşeman + + + berî {0} duşemê + berî {0} duşeman + + + + dşm. borî + ev dşm. + dşm. were + + piştî {0} dşm. + piştî {0} dşm. + + + berî {0} dşm. + berî {0} dşm. + + + + dşm. borî + ev dşm. + dşm. were + + piştî {0} dşm. + piştî {0} dşm. + + + berî {0} dşm. + berî {0} dşm. + + + + sêşema borî + ev sêşem + sêşema were + + piştî {0} sêşemê + piştî {0} sêşeman + + + berî {0} sêşemê + berî {0} sêşeman + + + + sşm. borî + ev sşm. + sşm. were + + piştî {0} sşm. + piştî {0} sşm. + + + berî {0} sşm. + berî {0} sşm. + + + + sşm. borî + ev sşm. + sşm. were + + piştî {0} sşm. + piştî {0} sşm. + + + berî {0} sşm. + berî {0} sşm. + + + + çarşema borî + ev çarşem + çarşema were + + piştî {0} çarşemê + piştî {0} çarşeman + + + berî {0} çarşemê + berî {0} çarşeman + + + + çşm. borî + ev çşm. + çşm. were + + piştî {0} çşm. + piştî {0} çşm. + + + berî {0} çşm. + berî {0} çşm. + + + + çşm. borî + ev çşm. + çşm. were + + piştî {0} çşm. + piştî {0} çşm. + + + berî {0} çşm. + berî {0} çşm. + + + + pêncşema borî + ev pêncşem + pêncşema were + + piştî {0} pêncşemê + piştî {0} pêncşeman + + + berî {0} pêncşemê + berî {0} pêncşeman + + + + pşm. borî + ev pşm. + pşm. were + + piştî {0} pşm. + piştî {0} pşm. + + + berî {0} pşm. + berî {0} pşm. + + + + pşm. borî + ev pşm. + pşm. were + + piştî {0} pşm. + piştî {0} pşm. + + + berî {0} pşm. + berî {0} pşm. + + + + înîya borî + ev înî + înîya were + + piştî {0} înîyê + piştî {0} înîyan + + + berî {0} înîyê + berî {0} înîyan + + + + înîya borî + ev înî + înîya were + + piştî {0} înîyê + piştî {0} înîyan + + + berî {0} înîyê + berî {0} înîyan + + + + înîya borî + ev înî + înîya were + + piştî {0} înîyê + piştî {0} înîyan + + + berî {0} înîyê + berî {0} înîyan + + + + şemîya borî + ev şemî + şemîya were + + piştî {0} şemîyê + piştî {0} şemîyan + + + berî {0} şemîyê + berî {0} şemîyan + + + + şemîya borî + ev şemî + şemîya were + + piştî {0} şemîyê + piştî {0} şemîyan + + + berî {0} şemîyê + berî {0} şemîyan + + + + şemîya borî + ev şemî + şemîya were + + piştî {0} şemîyê + piştî {0} şemîyan + + + berî {0} şemîyê + berî {0} şemîyan + + BN/PN saet + ev saet + + piştî {0} saetê + piştî {0} saetan + + + berî {0} saetê + berî {0} saetan + sa. + ev saet + + piştî {0} saetê + piştî {0} saetan + + + berî {0} saetê + berî {0} saetan + + + + ev saet + + piştî {0} saetê + piştî {0} saetan + + + berî {0} saetê + berî {0} saetan + deqîqe - vê deqeyê + ev deqîqe - di {0} deqeyê de - di {0} deqeyan de + piştî {0} deqîqeyê + piştî {0} deqîqeyan - berî {0} deqeyê - berî {0} deqeyan + berî {0} deqîqeyê + berî {0} deqîqeyan dq. + ev deqîqe - di {0} dq. de - di {0} dq de + piştî {0} dq. + piştî {0} dq. berî {0} dq. @@ -1572,21 +2778,46 @@ CLDR data files are interpreted according to the LDML specification (http://unic + ev deqîqe - di {0} dq de - di {0}dq de - - - berî {0} dq. - berî {0} d. + piştî {0} dq. + piştî {0} dq. sanîye - vêga + niha + + piştî {0} saniyeyê + piştî {0} saniyeyan + + + berî {0} saniyeyê + berî {0} saniyeyan + sn. + niha + + piştî {0} sn. + piştî {0} sn. + + + berî {0} sn. + berî {0} sn. + + + + niha + + piştî {0} sn. + piştî {0} sn. + + + berî {0} sn. + berî {0} sn. + qada saetê @@ -1598,7 +2829,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta {0}(y)ê Saeta Havînê ya {0}(y)ê - Saeta Standard a {0}(y)ê + Saeta {0}(y)ê ya Standard Saeta Gerdûnî ya Hevdemî @@ -1748,9 +2979,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tiflîs - - Akra - Cebelîtariq @@ -1777,7 +3005,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Saeta Standard a Îrlandayê + Saeta Îrlandayê ya Standard Dûblîn @@ -2027,6 +3255,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bajarê Ho Chi Minhê + + + Saeta Acreyê + Saeta Acreyê ya Standard + Saeta Havînê ya Acreyê + + Saeta Efxanistanê @@ -2049,9 +3284,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Saeta Afrîkaya Rojava - Saeta Standard a Afrîkaya Rojava - Saeta Havînê ya Afrîkaya Rojava + Saeta Afrîkaya Rojava @@ -2060,30 +3293,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Alaskayê Saeta Havînê ya Alaskayê - - SAK - SSAK - SHAK - + + + + Saeta Almatîyê + Saeta Almatîyê ya Standard + Saeta Havînê ya Almatîyê + Saeta Amazonê - Saeta Standard a Amazonê + Saeta Amazonê ya Standard Saeta Havînê ya Amazonê - Saeta Navendî ya Amerîkaya Bakur - Saeta Standard a Navendî ya Amerîkaya Bakur - Saeta Havînê ya Navendî ya Amerîkaya Bakur + Saeta Merkezî ya Amerîkaya Bakur + Saeta Merkezî ya Standard a Amerîkaya Bakur + Saeta Havînê ya Merkezî ya Amerîkaya Bakur - - SN - SSN - SHN - @@ -2091,11 +3321,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Rojhilat ya Amerîkaya Bakur Saeta Havînê ya Rojhilat ya Amerîkaya Bakur - - SR - SSR - SHR - @@ -2103,11 +3328,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Çîyayî ya Amerîkaya Bakur Saeta Havînê ya Çîyayî ya Amerîkaya Bakur - - - SSÇ - SHÇ - @@ -2115,30 +3335,46 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Pasîfîkê ya Amerîkaya Bakur Saeta Havînê ya Pasîfîkê ya Amerîkaya Bakur - - SP - SSP - SHP - + + + + Saeta Anadyrê + Saeta Anadyrê ya Standard + Saeta Havînê ya Anadyrê + Saeta Apiayê - Saeta Standard a Apiayê + Saeta Apiayê ya Standard Saeta Havînê ya Apiayê + + + Saeta Aqtauyê + Saeta Aqtauyê ya Standard + Saeta Havînê ya Aqtauyê + + + + + Saeta Aqtobeyê + Saeta Aqtobeyê ya Standard + Saeta Havînê ya Aqtobeyê + + Saeta Erebistanê - Saeta Standard a Erebistanê + Saeta Erebistanê ya Standard Saeta Havînê ya Erebistanê Saeta Arjantînê - Saeta Standard a Arjantînê + Saeta Arjantînê ya Standard Saeta Havînê ya Arjantînê @@ -2152,7 +3388,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Ermenistanê - Saeta Standard a Ermenistanê + Saeta Ermenistanê ya Standard Saeta Havînê ya Ermenistanê @@ -2162,11 +3398,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Atlantîkê Saeta Havînê ya Atlantîkê - - SA - SSA - SHA - @@ -2199,21 +3430,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Azerbeycanê - Saeta Standard a Azerbeycanê + Saeta Azerbeycanê ya Standard Saeta Havînê ya Azerbeycanê Saeta Azoran - Saeta Standard a Azoran + Saeta Azoran a Standard Saeta Havînê ya Azoran Saeta Bengladeşê - Saeta Standard a Bengladeşê + Saeta Bengladeşê ya Standard Saeta Havînê ya Bengladeşê @@ -2230,13 +3461,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Brasîlyayê - Saeta Standard a Brasîlyayê + Saeta Brasîlyayê ya Standard Saeta Havînê ya Brasîlyayê - Saeta Brûney Darusselamê + Saeta Brûneyê @@ -2246,9 +3477,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Havînê ya Cape Verdeyê + + + Saeta Caseyê + + - Saeta Standard a Chamorroyê + Saeta Chamorroyê ya Standard @@ -2261,14 +3497,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Şîlîyê - Saeta Standard a Şîlîyê + Saeta Şîlîyê ya Standard Saeta Havînê ya Şîlîyê Saeta Çînê - Saeta Standard a Çînê + Saeta Çînê ya Standard Saeta Havînê ya Çînê @@ -2285,15 +3521,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Kolombîyayê - Saeta Standard a Kolombîyayê + Saeta Kolombîyayê ya Standard Saeta Havînê ya Kolombîyayê Saeta Giravên Cookê - Saeta Standard a Giravên Cookê - Saeta Nîvhavînê ya Giravên Cookê + Saeta Giravên Cookê ya Standard + Saeta Havînê ya Giravên Cookê @@ -2302,11 +3538,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Kubayê Saeta Havînê ya Kubayê - - SK - SSK - SHK - @@ -2364,14 +3595,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Giravên Falklandê - Saeta Standard a Giravên Falklandê + Saeta Giravên Falklandê ya Standard Saeta Havînê ya Giravên Falklandê Saeta Fîjîyê - Saeta Standard a Fîjîyê + Saeta Fîjîyê ya Standard Saeta Havînê ya Fîjîyê @@ -2398,7 +3629,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Gurcistanê - Saeta Standard a Gurcistanê + Saeta Gurcistanê ya Standard Saeta Havînê ya Gurcistanê @@ -2412,17 +3643,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Navînî ya Greenwichê + + + Saeta Grînlendayê + Saeta Grînlendayê ya Standard + Saeta Havînê ya Grînlendayê + + Saeta Grînlanda Rojhilat Saeta Standard a Grînlanda Rojhilat Saeta Havînê ya Grînlanda Rojhilat - - SGR - SSGR - SHGR - @@ -2430,15 +3663,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Grînlanda Rojava Saeta Havînê ya Grînlanda Rojava - - SGRO - SSGRO - SHGRO - + + + + Saeta Guamê ya Standard + - Saeta Standard a Kendavê + Saeta Kendavê ya Standard @@ -2446,35 +3679,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Guyanayê + + + Saeta Standard a Hawaii-Aleutianê + + Saeta Hawaii-Aleutianê Saeta Standard a Hawaii-Aleutianê Saeta Havînê ya Hawaii-Aleutianê - - SHAL - SSHA - SHHA - Saeta Hong Kongê - Saeta Standard a Hong Kongê + Saeta Hong Kongê ya Standard Saeta Havînê ya Hong Kongê Saeta Hovdê - Saeta Standard a Hovdê + Saeta Hovdê ya Standard Saeta Havînê ya Hovdê - Saeta Standard a Hindistanê + Saeta Hindistanê ya Standard @@ -2505,29 +3738,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Îranê - Saeta Standard a Îranê + Saeta Îranê ya Standard Saeta Havînê ya Îranê Saeta Irkutskê - Saeta Standard a Irkutskê + Saeta Irkutskê ya Standard Saeta Havînê ya Irkutskê Saeta Îsraîlê - Saeta Standard a Îsraîlê + Saeta Îsraîlê ya Standard Saeta Havînê ya Îsraîlê Saeta Japonyayê - Saeta Standard a Japonyayê - Saeta Havşnê ya Japonyayê + Saeta Japonyayê ya Standard + Saeta Havînê ya Japonyayê + + + + + Saeta Kamchatkayê + Saeta Kamchatkayê ya Standard + Saeta Havînê ya Kamchatkayê @@ -2548,7 +3788,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Koreyê - Saeta Standard a Koreyê + Saeta Koreyê ya Standard Saeta Havînê ya Koreyê @@ -2560,7 +3800,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Krasnoyarskê - Saeta Standard a Krasnoyarskê + Saeta Krasnoyarskê ya Standard Saeta Havînê ya Krasnoyarskê @@ -2569,6 +3809,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Qirxizistanê + + + Saeta Lankayê + + Saeta Giravên Lîneyê @@ -2581,10 +3826,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Havînê ya Lord Howeyê + + + Saeta Macaoyê + Saeta Macaoyê ya Standard + Saeta Havînê ya Macaoyê + + Saeta Magadanê - Saeta Standard a Magadanê + Saeta Magadanê ya Standard Saeta Havînê ya Magadanê @@ -2611,7 +3863,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Mauritiusê - Saeta Standard a Mauritiusê + Saeta Mauritiusê ya Standard Saeta Havînê ya Mauritiusê @@ -2630,14 +3882,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Ûlanbatarê - Saeta Standard a Ûlanbatarê + Saeta Ûlanbatarê ya Standard Saeta Havînê ya Ûlanbatarê Saeta Moskovayê - Saeta Standard a Moskovayê + Saeta Moskovayê ya Standard Saeta Havînê ya Moskovayê @@ -2676,11 +3928,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Standard a Newfoundlandê Saeta Havînê ya Newfoundlandê - - SNF - SSNF - SHNF - @@ -2697,28 +3944,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Fernando de Noronhayê - Saeta Standard a Fernando de Noronhayê + Saeta Fernando de Noronhayê ya Standard Saeta Havînê ya Fernando de Noronhayê + + + Saeta Giravên Marianaya Bakur + + Saeta Novosibirskê - Saeta Standard a Novosibirskê + Saeta Novosibirskê ya Standard Saeta Havînê ya Novosibirskê Saeta Omskê - Saeta Standard a Omskê + Saeta Omskê ya Standard Saeta Havînê ya Omskê Saeta Pakistanê - Saeta Standard a Pakistanê + Saeta Pakistanê ya Standard Saeta Havînê ya Pakistanê @@ -2735,21 +3987,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Paragûayê - Saeta Standard a Paragûayê + Saeta Paragûayê ya Standard Saeta Havînê ya Paragûayê Saeta Perûyê - Saeta Standard a Perûyê + Saeta Perûyê ya Standard Saeta Havînê ya Perûyê Saeta Fîlîpînê - Saeta Standard a Fîlîpînê + Saeta Fîlîpînê ya Standard Saeta Havînê ya Fîlîpînê @@ -2780,6 +4032,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Pyongyangê + + + Saeta Qizilordayê + Saeta Qizilordayê ya Standard + Saeta Havînê ya Qizilordayê + + Saeta Réunionê @@ -2793,14 +4052,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Saxalînê - Saeta Standard a Saxalînê + Saeta Saxalînê ya Standard Saeta Havînê ya Saxalînê + + + Saeta Samarayê + Saeta Samarayê ya Standard + Saeta Havînê ya Samarayê + + Saeta Samoayê - Saeta Standard a Samoayê + Saeta Samoayê ya Standard Saeta Havînê ya Samoayê @@ -2811,7 +4077,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Saeta Standard a Sîngapûrê + Saeta Sîngapûrê ya Standard @@ -2842,7 +4108,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Taîpeîyê - Saeta Standard a Taîpeîyê + Saeta Taîpeîyê ya Standard Saeta Havînê ya Taîpeîyê @@ -2859,7 +4125,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Tongayê - Saeta Standard a Tongayê + Saeta Tongayê ya Standard Saeta Havînê ya Tongayê @@ -2871,7 +4137,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Tirkmenistanê - Saeta Standard a Tirkmenistanê + Saeta Tirkmenistanê ya Standard Saeta Havînê ya Tirkmenistanê @@ -2883,21 +4149,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Ûrûgûayê - Saeta Standard a Ûrûgûayê + Saeta Ûrûgûayê ya Standard Saeta Havînê ya Ûrûgûayê Saeta Ozbekistanê - Saeta Standard a Ozbekistanê + Saeta Ozbekistanê ya Standard Saeta Havînê ya Ozbekistanê Saeta Vanûatûyê - Saeta Standard a Vanûatûyê + Saeta Vanûatûyê ya Standard Saeta Havînê ya Vanûatûyê @@ -2909,14 +4175,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Vladivostokê - Saeta Standard a Vladivostokê + Saeta Vladivostokê ya Standard Saeta Havînê ya Vladivostokê Saeta Volgogradê - Saeta Standard a Volgogradê + Saeta Volgogradê ya Standard Saeta Havînê ya Volgogradê @@ -2938,14 +4204,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Yakutskê - Saeta Standard a Yakutskê + Saeta Yakutskê ya Standard Saeta Havînê ya Yakutskê Saeta Yekaterinburgê - Saeta Standard a Yekaterinburgê + Saeta Yekaterinburgê ya Standard Saeta Havînê ya Yekaterinburgê @@ -2953,9 +4219,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saeta Yukonê - - SY - @@ -3029,13 +4292,315 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -3068,17 +4633,492 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + + + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + + + + + pezetayê andorrayî + pezetayê andorrayî + pezetayên andorrayî + dîrhemê mîrgehên erebî yên yekbûyî dîrhemê MEYî dîrhemên MEYî + + efxanîyê efxanistanî (1927–2002) + efxanîyê efxanistanî (1927–2002) + efxanîyên efxanistanî (1927–2002) + efxanîyê efxanistanî efxanîyê efxanistanî efxanîyên efxanistanî + + lekê arnawidî (1946–1965) + lekê arnawidî (1946–1965) + lekên arnawidî (1946–1965) + lekê arnawidî lekê arnawidî @@ -3099,11 +5139,51 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwanzayê angolayî kwanzayên angolayî + + kwanzayê angolayî (1977–1991) + kwanzayê angolayî (1977–1991) + kwanzayên angolayî (1977–1991) + + + kwanzayê nû ya angolayî (1990–2000) + kwanzayê nû ya angolayî (1990–2000) + kwanzayên nû yên angolayî (1990–2000) + + + kwanza reajustadoyê angolayî (1995–1999) + kwanza reajustadoyê angolayî (1995–1999) + kwanza reajustadoyên angolayî (1995–1999) + + + australê arjantînî + australê arjantînî + australên arjantînî + + + peso leyê arjantînî (1970–1983) + peso leyê arjantînî (1970–1983) + peso leyên arjantînî (1970–1983) + + + pesoyê arjantînî (1881–1970) + pesoyê arjantînî (1881–1970) + pesoyên arjantînî (1881–1970) + + + pesoyê arjantînî (1983–1985) + pesoyê arjantînî (1983–1985) + pesoyên arjantînî (1983–1985) + pesoyê arjantînî pesoyê arjantînî pesoyên arjantînî + + şîllîngê awistiryayî + şîllîngê awistiryayî + şîllîngên awistiryayî + dolarê awistralyayî dolarê awistralyayî @@ -3114,14 +5194,29 @@ CLDR data files are interpreted according to the LDML specification (http://unic florînê arubayî florînên arubayî + + manatê azerbeycanî (1993–2006) + manatê azerbeycanî (1993–2006) + manatên azerbeycanî (1993–2006) + manatê azerbeycanî + + dînarê bosna hersekî (1992–1994) + dînarê bosna hersekî (1992–1994) + dînarên bosna hersekî (1992–1994) + markê konvertibl ê bosna hersekî markê konvertibl ê bosna hersekî markên konvertibl ê bosna hersekî + + dînarê nû yê bosna hersekî (1994–1997) + dînarê nû yê bosna hersekî (1994–1997) + dînarên nû yên bosna hersekî (1994–1997) + dolarê barbadosî dolarê barbadosî @@ -3132,11 +5227,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic takayê bengladeşî takayên bengladeşî + + frankê belçîkayî (konvertibl) + frankê belçîkayî (konvertibl) + frankên belçîkayî (konvertibl) + + + frankê belçîkayî + frankê belçîkayî + frankên belçîkayî + + + frankê belçîkayî (fînansî) + frankê belçîkayî (fînansî) + frankên belçîkayî (fînansî) + + + levê bulgarî (hard) + levê bulgarî (hard) + levên bulgarî (hard) + + + levê bulgarî (1952–1962) + levê bulgarî (1952–1962) + levên bulgarî (1952–1962) + levê bulgarî levê bulgarî levên bulgarî + + levê bulgarî (1879–1952) + levê bulgarî (1879–1952) + levên bulgarî (1879–1952) + dînarê behreynê dînarê behreynê @@ -3162,11 +5287,56 @@ CLDR data files are interpreted according to the LDML specification (http://unic bolîvyanoyê bolîvyayî bolîvyanoyên bolîvyayî + + bolîvyanoyê bolîvyayî (1863–1963) + bolîvyanoyê bolîvyayî (1863–1963) + bolîvyanoyên bolîvyayî (1863–1963) + + + pesoyê bolîvyayî + pesoyê bolîvyayî + pesoyên bolîvyayî + + + mvodolê bolîvyayî + mvodolê bolîvyayî + mvodolên bolîvyayî + + + kruzeîroyê nû ya brezîlyayî (1967–1986) + kruzeîroyê nû ya brezîlyayî (1967–1986) + kruzeîroyên nû yên brezîlyayî (1967–1986) + + + kruzadoyê brezîlyayî (1986–1989) + kruzadoyê brezîlyayî (1986–1989) + kruzadoyên brezîlyayî (1986–1989) + + + kruzeîroyê brezîlyayî (1990–1993) + kruzeîroyê brezîlyayî (1990–1993) + kruzeîroyên brezîlyayî (1990–1993) + realê brezîlyayî realê brezîlyayî realên brezîlyayî + + kruzadoyê nû yê brezîlyayî (1989–1990) + kruzadoyê nû yê brezîlyayî (1989–1990) + kruzadoyên nû yên brezîlyayî (1989–1990) + + + kruzeîroyê brezîlyayî (1993–1994) + kruzeîroyê brezîlyayî (1993–1994) + kruzeîroyên brezîlyayî (1993–1994) + + + kruzeîroyê brezîlyayî (1942–1967) + kruzeîroyê brezîlyayî (1942–1967) + kruzeîroyên brezîlyayî (1942–1967) + dolarê bahamayî dolarê bahamayî @@ -3177,15 +5347,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic ngultrumê bûtanî ngultrumên bûtanî + + kyatê burmayî + kyatê burmayî + kyatên burmayî + pulayê botswanayî pulayê botswanayî pulayên botswanayî + + rubleyê belarûsî (1994–1999) + rubleyê belarûsî (1994–1999) + rubleyên belarûsî (1994–1999) + - rûbleyê belarûsî - rûbleyê belarûsî - rûbleyên belarûsî + rubleyê belarûsî + rubleyê belarûsî + rubleyên belarûsî + + + rubleyê belarûsî (2000–2016) + rubleyê belarûsî (2000–2016) + rubleyên belarûsî (2000–2016) dolarê belîzeyî @@ -3202,21 +5387,46 @@ CLDR data files are interpreted according to the LDML specification (http://unic frankê kongoyî frankên kongoyî + + ewroyê WIRê + ewroyê WIRê + ewroyên WIRê + frankê swîsrî frankê swîsrî frankên swîsrî + + frankê WIRê + frankê WIRê + frankên WIRê + + + eskodoyê şîlîyî + eskodoyê şîlîyî + eskodoyên şîlîyî + + + unidades de fomentoyê şîlîyî + unidades de fomentoyê şîlîyî + unidades de fomentoyên şîlîyî + - pesoyê şîlîyê - pesoyê şîlîyê - pesoyên şîlîyê + pesoyê şîlîyî + pesoyê şîlîyî + pesoyên şîlîyî yûanê çînî (offshore) yûanê çînî (offshore) yûanên çînî (offshore) + + dolarê Banka Xelkî ya çînî + dolarê Banka Xelkî ya çînî + dolarên Banka Xelkî ya çînî + yûanê çînî yûanê çînî @@ -3227,11 +5437,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic pesoyê kolombîyayî pesoyên kolombîyayî + + unidad de valor realê kolombîyayî + unidad de valor realê kolombîyayî + unidad de valor realên kolombîyayî + kolonê kosta rîkayî kolonê kosta rîkayî kolonên kosta rîkayî + + poundê maltayî (2002–2006) + poundê maltayî (2002–2006) + poundên maltayî (2002–2006) + + + kronê çekoslovakî (hard) + kronê çekoslovakî (hard) + kronên çekoslovakî (hard) + pesoyên konvertibl ê kubayî pesoyê konvertibl ê kubayî @@ -3247,11 +5472,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic eskudoyê kape verdeyî eskudoyên kape verdeyî + + lîreyê qibrisî + lîreyê qibrisî + lîreyên qibrisî + kronê çekî kronê çekî kronên çekî + + markê almanyaya rojhilatî + markê almanyaya rojhilatî + markên almanyaya rojhilatî + + + markê almanî + markê almanî + markên almanî + frankê cîbûtîyî frankê cîbûtîyî @@ -3272,6 +5512,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic dînarê cezayîrî dînarên cezayîrî + + sukreyê ekwadorî + sukreyê ekwadorî + sukreyên ekwadorî + + + unidad de valor constanteyê ekwadorî (UVC) + unidad de valor constanteyê ekwadorî (UVC) + unidad de valor constanteyên ekwadorî (UVC) + + + krûnê estonî + krûnê estonî + krûnên estonî + lîreyê misirî lîreyê misirî @@ -3282,6 +5537,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic nakfayê erîtreyî nakfayên erîtreyî + + pezetayê spanî (hesabê Ayê) + pezetayê spanî (hesabê Ayê) + pezetayên spanî (hesabê Ayê) + + + pezetayê spanî (hesabê konvertibl) + pezetayê spanî (hesabê konvertibl) + pezetayên spanî (hesabê konvertibl) + + + pezetayê spanî + pezetayê spanî + pezetayên spanî + bîrê etyopyayî bîrê etyopyayî @@ -3290,35 +5560,55 @@ CLDR data files are interpreted according to the LDML specification (http://unic ewro + + markkayê fînî + markkayê fînî + markkayên fînî + dolarê fîjîyî dolarê fîjîyî dolarên fîjîyî - paundê giravên falklandê - paundê giravên falklandê - paundên giravên falklandê + paundê giravên falklandî + paundê giravên falklandî + paundên giravên falklandî + + + markê fransî + markê fransî + markên fransî sterlînê brîtanî sterlînê brîtanî sterlînên brîtanî + + kupon larîtê gurcistanî + kupon larîtê gurcistanî + kupon larîtên gurcistanî + larîyê gurcistanî larîyê gurcistanî larîyên gurcistanî + + cedîyê ganayî (1979–2007) + cedîyê ganayî (1979–2007) + cedîyên ganayî (1979–2007) + cedîyê ganayî cedîyê ganayî cedîyên ganayî - poundê gîbraltarê - poundê gîbraltarê - poundên gîbraltarê + lîreyê cebelîtariqî + lîreyê cebelîtariqî + lîreyên cebelîtariqî dalasîyê gambîyayî @@ -3330,11 +5620,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic frankê gîneyî frankên gîneyî + + sylîyê gîneyî + sylîyê gîneyî + sylîyên gîneyî + + + ekweleyê gîneya ekvatorî + ekweleyê gîneya ekvatorî + ekweleyên gîneya ekvatorî + + + draxmayê yûnanî + draxmayê yûnanî + draxmayên yûnanî + quertzalê guatemalayî quertzalê guatemalayî quertzalên guatemalayî + + eskudoyê gîneya portugalî + eskudoyê gîneya portugalî + eskudoyên gîneya portugalî + + + pezoyê gîne-bissauyî + pezoyê gîne-bissauyî + pezoyên gîne-bissauyî + dolarê guayanayî dolarê guayanayî @@ -3350,10 +5665,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic lempîrayê hondurasî lempîrayên hondurasî + + dînarê xirwatî + dînarê xirwatî + dînarên xirwatî + - kûnayê xirwatî - kûnayê xirwatî - kûnayên xirwatî + kunayê xirwatî + kunayê xirwatî + kunayên xirwatî gûrdeyê haîtîyî @@ -3370,6 +5690,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic rûpîyê endonezî rûpîyên endonezî + + lîreyê îrlandî + lîreyê îrlandî + lîreyên îrlandî + + + lîreyê îsraîlî + lîreyê îsraîlî + lîreyên îsraîlî + + + şekelê îsraîlî (1980–1985) + şekelê îsraîlî (1980–1985) + şekelên îsraîlî (1980–1985) + şekelê nû yê îsraîlî şekelê nû yê îsraîlî @@ -3390,11 +5725,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic rîyalê îranî rîyalên îranî + + kronê îslandayî (1918–1981) + kronê îslandayî (1918–1981) + kronên îslandayî (1918–1981) + kronê îslandayî kronê îslandayî kronên îslandayî + + lîrayê îtalî + lîrayê îtalî + lîrayên îtalî + dolarê jamaîkayî dolarê jamaîkayî @@ -3435,6 +5780,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic wonê koreya bakurî wonên koreya bakurî + + hwanê koreya başûrî (1953–1962) + hwanê koreya başûrî (1953–1962) + hwanên koreya başûrî (1953–1962) + + + wonê koreya başûrî (1945–1953) + wonê koreya başûrî (1945–1953) + wonên koreya başûrî (1945–1953) + wonê koreya başûrî wonê koreya başûrî @@ -3480,6 +5835,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic lotîyê lesothoyî lotîyên lesothoyî + + lîtayê lîtvanyayî + lîtayê lîtvanyayî + lîtayên lîtvanyayî + + + talonasê lîtvanyayî + talonasê lîtvanyayî + talonasên lîtvanyayî + + + frankê konvertibl ya luksembûrgî + frankê konvertibl yê luksembûrgî + frankê konvertibl yê luksembûrgî + + + frankê luksembûrgî + frankê luksembûrgî + frankên luksembûrgî + + + frankê fînansî yê luksembûrgî + frankê fînansî yê luksembûrgî + frankên fînansî yên luksembûrgî + + + latê letonyayî + latê letonyayî + latên letonyayî + + + rubleyê letonyayî + rubleyê letonyayî + rubleyên letonyayî + dînarê lîbyayî dînarê lîbyayî @@ -3490,12 +5880,32 @@ CLDR data files are interpreted according to the LDML specification (http://unic dîrhemê fasî dîrhemên fasî + + franka fasî + franka fasî + frankên fasî + + + frankê monakoyî + frankê monakoyî + frankên monakoyî + + + kuponê moldovayî + kuponê moldovayî + kuponên moldovayî + leyê moldovayî leyê moldovayî leyên moldovayî + arîarîyê madagaskarî + arîarîyê madagaskarî + arîarîyên madagaskarî + + frankê madagaskarî frankê madagaskarî frankên madagaskarî @@ -3505,6 +5915,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic dînarê makedonî dînarên makedonî + + dînarê makedonî (1992–1993) + dînarê makedonî (1992–1993) + dînarên makedonî (1992–1993) + + + franka malîyî + franka malîyî + frankên malîyî + kyatê myanmarî kyatê myanmarî @@ -3520,16 +5940,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic patakayê makaoyî patakaynê makaoyî + + ouguîayê morîtanyayî (1973–2017) + ouguîayê morîtanyayî (1973–2017) + ouguîayên morîtanyayî (1973–2017) + ouguîayê morîtanyayî ouguîayê morîtanyayî ouguîayên morîtanyayî + + lîreyê maltayî + lîreyê maltayî + lîreyên maltayî + + + poundê maltayî + poundê maltayî + poundên maltayî + rûpîyê maûrîtîûsê rûpîyê maûrîtîûsê rûpîyên maûrîtîûsê + + rûpîyê maldîvayî (1947–1981) + rûpîyê maldîvayî (1947–1981) + rûpîyên maldîvayî (1947–1981) + rûfîyaayê maldîvayî rûfîyaayê maldîvayî @@ -3545,15 +5985,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic pesoyê meksîkayî pesoyên meksîkayî + + pesoyê zîvî yê meksîkayî (1861–1992) + pesoyê zîvî yê meksîkayî (1861–1992) + pesoyên zîvî yên meksîkayî (1861–1992) + + + unidad de inversionê meksîkayî (UDI) + unidad de inversionê meksîkayî (UDI) + unidad de inversionên meksîkayî (UDI) + ringgitê malezyayî ringgitê malezyayî ringgitên malezyayî + + eskudoyê mozambîkî + eskudoyê mozambîkî + eskudoyên mozambîkî + + + metîkalê mozambîkî (1980–2006) + metîkalê mozambîkî (1980–2006) + metîkalên mozambîkî (1980–2006) + - meticalê mozambîkî - meticalê mozambîkî - meticalên mozambîkî + metîkalê mozambîkî + metîkalê mozambîkî + metîkalên mozambîkî dolarê namîbyayî @@ -3565,11 +6025,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic naîrayê nîjeryayî naîrayên nîjeryayî + + kordobayê nîkaraguayî (1988–1991) + kordobayê nîkaraguayî (1988–1991) + kordobayên nîkaraguayî (1988–1991) + kordobayê nîkaraguayî kordobayê nîkaraguayî kordobayên nîkaraguayî + + florînê holendî + florînê holendî + florînên holendî + kronê norweçî kronê norweçî @@ -3595,11 +6065,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic balboayê panamayî balboayên panamayî + + întîyê perûyî + întîyê perûyî + întîyên perûyî + solê perûyî solê perûyî solên perûyî + + solê perûyî (1863–1965) + solê perûyî (1863–1965) + solên perûyî (1863–1965) + kînayê gîneya nû ya papûayî kînayê gîneya nû ya papûayî @@ -3620,6 +6100,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic zlotîyê polonyayî zlotîyên polonyayî + + zlotîyê polonyayî (1950–1995) + zlotîyê polonyayî (1950–1995) + zlotîyên polonyayî (1950–1995) + + + eskudoyê portugalî + eskudoyê portugalî + eskudoyên portugalî + gûaranîyê paragûayî gûaranîyê paragûayî @@ -3630,6 +6120,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic rîyalê qeterî rîyalên qeterî + + dolarê rodezyayî + dolarê rodezyayî + dolarên rodezyayî + + + leyê romanyayî (1952–2006) + leyê romanyayî (1952–2006) + leyên romanyayî (1952–2006) + leyê romanyayî leyê romanyayî @@ -3645,6 +6145,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic rubleyê rûsî rubleyên rûsî + + rubleyê belarûsî (1991–1998) + rubleyê belarûsî (1991–1998) + rubleyên belarûsî (1991–1998) + frankê rwandayî frankê rwandayî @@ -3665,11 +6170,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic rûpîyê seyşelerî rûpîyên seyşelerî + + dînarê sûdanî (1992–2007) + dînarê sûdanî (1992–2007) + dînarên sûdanî (1992–2007) + lîreyê sûdanî lîreyê sûdanî lîreyên sûdanî + + lîreyê sûdanî (1957–1998) + lîreyê sûdanî (1957–1998) + lîreyên sûdanî (1957–1998) + kronê swêdî kronê swêdî @@ -3685,6 +6200,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic lîreyê saînt helenayî lîreyên saînt helenayî + + tolarê slovenî + tolarê slovenî + tolarên slovenî + + + korunayê slovakî + korunayê slovakî + korunayên slovakî + leoneyê sîera leoneyî leoneyê sîera leoneyî @@ -3705,16 +6230,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic dolarê surînamî dolarên surînamî + + guldenê surînamî + guldenê surînamî + guldenên surînamî + lîreyê sûdana başûrî lîreyê sûdana başûrî lîreyên sûdana başûrî + + dobrayê sao tome û principeyî (1977–2017) + dobrayê sao tome û principeyî (1977–2017) + dobrayên sao tome û principeyî (1977–2017) + dobrayê sao tome û principeyî dobrayê sao tome û principeyî dobrayên sao tome û principeyî + + rubleyê sovyetî + rubleyê sovyetî + rubleyên sovyetî + + + kolonê el salvadorî + kolonê el salvadorî + kolonên el salvadorî + lîreyê sûrî lîreyê sûrî @@ -3730,11 +6275,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic bahtê taylandî bahtên taylandî + + rubleyê tacikistanî + rubleyê tacikistanî + rubleyên tacikistanî + somonê tacikistanî somonê tacikistanî somonên tacikistanî + + manatê tirkmenî (1993–2009) + manatê tirkmenî (1993–2009) + manatên tirkmenî (1993–2009) + manatê tirkmenî manatê tirkmenî @@ -3750,6 +6305,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic paʻangayê tonganî paʻangayên tonganî + + ekudoyê tîmorî + ekudoyê tîmorî + ekudoyên tîmorî + + + lîreyê tirkî (1922–2005) + lîreyê tirkî (1922–2005) + lîreyên tirkî (1922–2005) + lîreyê tirkî lîreyê tirkî @@ -3776,6 +6341,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic grîvnayê ûkraynî grîvnayên ûkraynî + + karbovanetzê ûkraynî + karbovanetzê ûkraynî + karbovanetzên ûkraynî + + + şîlîngê ûgandayî (1966–1987) + şîlîngê ûgandayî (1966–1987) + şîlîngên ûgandayî (1966–1987) + şîlîngê ûgandayî şîlîngê ûgandayî @@ -3787,16 +6362,56 @@ CLDR data files are interpreted according to the LDML specification (http://unic dolarên amerîkî $ + + dolarê amerîkî (roja din) + dolarê amerîkî (roja din) + dolarên amerîkî (roja din) + + + dolarê amerîkî (eynî roj) + dolarê amerîkî (eynî roj) + dolarên amerîkî (eynî roj) + + + peso en unidades indexadasê ûrûguayî + peso en unidades indexadasê ûrûguayî + peso en unidades indexadasên ûrûguayî + + + pesoyê ûrûgûayî (1975–1993) + pesoyê ûrûgûayî (1975–1993) + pesoyên ûrûgûayî (1975–1993) + pesoyê ûrûgûayî pesoyê ûrûgûayî pesoyên ûrûgûayî + + yekeya îndeksa heqdestê nomînal yê ûrûguayî + yekeya îndeksa heqdestê nomînal yê ûrûguayî + yekeyên îndeksa heqdestê nomînal yên ûrûguayî + somê ozbekî somê ozbekî somên ozbekî + + bolîvarê venezuelayî (1871–2008) + bolîvarê venezuelayî (1871–2008) + bolîvarên venezuelayî (1871–2008) + + + bolivar soberano (VED) + bolivar soberano (VED) + bolivar soberano (VED) + + + bolîvarê venezuelayî (2008–2018) + bolîvarê venezuelayî (2008–2018) + bolîvarên venezuelayî (2008–2018) + bolîvarê venezuelayî bolîvarê venezuelayî @@ -3807,6 +6422,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic dongê vîetnamî dongên vîetnamî + + dongê vîetnamî (1978–1985) + dongê vîetnamî (1978–1985) + dongên vîetnamî (1978–1985) + vatûyê vanûatûyî vatûyê vanûatûyî @@ -3822,41 +6442,191 @@ CLDR data files are interpreted according to the LDML specification (http://unic frenkê CFA yê afrîkaya navîn frenkên CFA yê afrîkaya navîn + + Zîv + Zîv + Zîv + + + Zêr + Zêr + Zêr + + + Yekeya Yekgirtî ya Ewropî + Yekeya Yekgirtî ya Ewropî + Yekeya Yekgirtî ya Ewropî + + + Yekeya Pereyê ya Ewropî + Yekeya Pereyê ya Ewropî + Yekeya Pereyê ya Ewropî + + + Yekeya Hesabê ya Ewropî (XBC) + Yekeya Hesabê ya Ewropî (XBC) + Yekeya Hesabê ya Ewropî (XBC) + + + Yekeya Hesabê ya Ewropî (XBD) + Yekeya Hesabê ya Ewropî (XBD) + Yekeya Hesabê ya Ewropî (XBD) + dolarê karayîba rojhilatî dolarê karayîba rojhilatî dolarên karayîba rojhilatî + + guldenê karayîbî + guldenê karayîbî + guldenên karayîbî + + + Heqê Kişandinê yê Xisûsî + Heqê Kişandinê yê Xisûsî + Heqê Kişandinê yê Xisûsî + + + Yekeya Pereyê ya Ewropayê + Yekeya Pereyê ya Ewropayê + Yekeya Pereyê ya Ewropayê + + + Franka Fransî ya Zêrê + Franka fransî ya zêrê + Franka fransî ya zêrê + + + Franka Fransî ya UICê + Franka Fransî ya UICê + Franka Fransî ya UICê + frankê CFA yê afrîkaya başûrî frankê CFA yê afrîkaya başûrî frankên CFA yê afrîkaya başûrî + + Paladyûm + Paladyûm + Paladyûm + frankê CFPî frankê CFPî frankên CFPî + + Platîn + Platîn + Platîn + + + Fonên RINETê + yekeya Fonên RINETê + yekeyên Fonên RINETê + + + Sucre + Sucre + Sucre + + + Yekeya Pereyê ya Testê + yekeya Pereyê ya Testê + Yekeyên pereyê yên testê + + + Yekeya Hesabê ya ADByê + yekeya hesabê ya ADByê + yekeyên hesabê yên ADByê + (yekeya pereyî ya nenas) yekeya pereyî ya nenas (yekeyên pereyî yên nenas) + + dînarê yemenî + dînarê yemenî + dînarên yemenî + rîyalê yemenî rîyalê yemenî rîyalên yemenî + + hard dînarê yûgoslavî (1966–1990) + hard dînarê yûgoslavî (1966–1990) + hard dînarên yûgoslavî (1966–1990) + + + dînarê nû ya yûgoslavî (1994–2002) + dînarê nû ya yûgoslavî (1994–2002) + dînarên nû ya yûgoslavî (1994–2002) + + + dînarê konvertibl ya yûgoslavî (1990–1992) + dînarê konvertibl ya yûgoslavî (1990–1992) + dînarên konvertibl ya yûgoslavî (1990–1992) + + + dînarê reformkirî ya yûgoslavî (1992–1993) + dînarê reformkirî ya yûgoslavî (1992–1993) + dînarên reformkirî yên yûgoslavî (1992–1993) + + + randê afrîkaya başûrî (fînansî) + randê afrîkaya başûrî (fînansî) + randên afrîkaya başûrî (fînansî) + randê afrîkaya başûrî randê afrîkaya başûrî randên afrîkaya başûrî + + kwaçayê zambîyayî (1968–2012) + kwaçayê zambîyayî (1968–2012) + kwaçayên zambîyayî (1968–2012) + kwaçayê zambîyayî kwaçayê zambîyayî kwaçayên zambîyayî + + zaîreyê nû ya zaîreyî (1993–1998) + zaîreyê nû ya zaîreyî (1993–1998) + zaîreyên nû yên zaîreyî (1993–1998) + + + zaîreyê zaîreyî (1971–1993) + zaîreyê zaîreyî (1971–1993) + zaîreyên zaîreyî (1971–1993) + + + dolarê zîmbabweyî (1980–2008) + dolarê zîmbabweyî (1980–2008) + dolarên zîmbabweyî (1980–2008) + + + zêrê zîmbabweyî + zêrê zîmbabweyî + zêrên zîmbabweyî + + + dolarê zîmbabweyî (2009–2024) + dolarê zîmbabweyî (2009–2024) + dolarên zîmbabweyî (2009–2024) + + + dolarê zîmbabweyî (2008) + dolarê zîmbabweyî (2008) + dolarên zîmbabweyî (2008) + ⩾{0} @@ -3898,11 +6668,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kîlometre kare {0} serê kîlometre kareyê - - hektar - - metre kare {0} metre kare {0} metre kare {0} serê metre kareyê @@ -3914,37 +6680,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} serê santîmetre kareyê - mîl kare {0} mîl kare {0} mîl kare {0} serê mîl kareyê - akre {0} akre {0} akre - yarda kare {0} yarda kare {0} yarda kare - fît kare {0} fît kare {0} fît kare - înç kare {0} înç kare {0} înç kare {0} serê înç kareyê - - donim - {0} donim - {0} donim - {0} qerat {0} qerat @@ -3954,22 +6710,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ji sedî {0} ji sedî {0} - - ss - {0} ss - {0} ss - - - dehsal - {0} dehsal - {0} dehsal - - - çaryek - {0} çaryek - {0} çaryek - {0}/çaryek - {0} meh {0} meh @@ -3997,10 +6737,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic sanîye {0} sanîye {0} saniye - {0}/sn - nîvçapa dinyayê {0} nîvçapa dinyayê {0} nîvçapa dinyayê @@ -4046,27 +6784,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} pîkometre - mîl {0} mîl {0} mîl - - yarda - - fît {0} fît {0} fît {0} serê fîtê - înç {0} înç {0} înç {0} serê înçê - parsek {0} parsek {0} parsek @@ -4081,12 +6812,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} yekeya astronomîk - furlong {0} furlong {0} furlong - fathom {0} fathom {0} fathom @@ -4096,12 +6825,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mîla behrê - punto {0} punto {0} punto - nîvçapa rojê {0} nîvçapa rojê {0} nîvçapa rojê @@ -4110,17 +6837,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic kîlometreya serê saetê - {0} km/st - {0} km/st - - - lître - - - şev - {0} şev - {0} şev - {0}/şev hêlên sereke @@ -4310,64 +7026,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic rad - - dq. kevanî - - - sn. kevanî - - - hektar - - - metre kare - - - mîl kare - - - akre - - - yarda kare - - - fît kare - - - înç kare - - - donim - {0} donim - {0} donim - l/100km {0}l/100km {0}l/100km - - ss - {0} ss - {0} ss - - - dehsal - {0} dehsal - {0} dehsal - sl {0}sl {0}sl - - çaryek - {0} çaryek - {0} çaryek - {0}/çaryek - {0}m {0}m @@ -4389,16 +7057,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}d - sn {0}sn {0}sn - {0}/sn - - - nîvçapa dinyayê - m {0}m {0}m @@ -4427,54 +7089,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}pm - mîl {0}mi {0}mi - - yarda - - fît {0}′ {0}′ - înç {0}″ {0}″ - - parsek - - - sala rnh - {0} sala rnh - {0} sala rnh - - - furlong - - - fathom - - - nîvçapa rojê - - - km/st - {0} km/st - {0} km/st - - - lître - - - şev - {0} şev - {0} şev - {0}/şev - {0}Rh {0}Bk diff --git a/make/data/cldr/common/main/ku_Arab.xml b/make/data/cldr/common/main/ku_Arab.xml new file mode 100644 index 00000000000..980252cf799 --- /dev/null +++ b/make/data/cldr/common/main/ku_Arab.xml @@ -0,0 +1,27 @@ + + + + + + + + - + @@ -772,6 +775,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Colombia Pulau Clipperton + Sark Costa Rica Cuba Cape Verde @@ -1117,35 +1121,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pengisihan Berangka Kekuatan Pengisihan Mata wang + Paparan Emoji Kitaran Jam (12 berbanding 24) Gaya Pemisah Baris + Penggalan Baris dalam Perkataan Sistem Ukuran Nombor + Penggalan Ayat Selepas Singkatan Zon Waktu Varian Tempat Penggunaan Peribadi Kalendar Buddha + Buddha Kalendar Cina + Cina Kalendar Qibti + Qibti Kalendar Dangi + Dangi Kalendar Ethiopia + Ethiopia Kalendar Amete Alem Ethiopia + Ethiopia Amete Alem Kalendar Gregory + Gregory Kalendar Ibrani + Ibrani Kalendar Kebangsaan India - Kalendar Islam - Kalendar Sivil Islam + Kalendar Hijrah + Hijrah + Kalendar Hijrah (jadual, zaman sivil) + Hijrah (jadual, zaman sivil) Kalendar Islam (Arab Saudi, cerapan) - Kalendar Islam (jadual, zaman astronomi) + Kalendar Hijrah (jadual, zaman astronomi) + Hijrah (jadual, zaman astronomi) Kalendar Islam (Umm Al-Quran) - Kalendar ISO-8601 + Hijrah (Umm al-Quran) + Kalendar Gregorian (Tahun Pertama) Kalendar Jepun + Jepun Kalendar Parsi + Parsi Kalendar Minguo + Minguo Format Mata Wang Perakaunan + Perakaunan Format Mata Wang Standard + Standard Isih Simbol Isih Mengabaikan Simbol Isih Aksen Secara Biasa @@ -1155,23 +1179,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Isih Huruf Besar Dahulu Isih Tidak Sensitif Atur Isih Sensitif Atur - Aturan Isih Cina Tradisional - Big5 Tertib Isihan Sebelumnya + Keserasian Aturan Isih Kamus + Kamus Tertib Isih Unikod Lalai + Unikod Lalai Aturan Isih Emoji Peraturan Isihan Eropah - Aturan Isih Bahasa Cina Ringkas - GB2312 Aturan Isih Buku Telefon + Buku Telefon Urutan Isih Fonetik + Fonetik Aturan Isih Pinyin + Pinyin Carian Tujuan Umum + Carian Cari Mengikut Konsonan Awal Hangul Tertib Isih Standard + Standard Aturan Isih Coretan + Coretan Aturan Isih Tradisional + Tradisional Aturan Isih Coretan Radikal + Coretan Radikal Aturan Isih Zhuyin + Zhuyin Isih Tanpa Penormalan Isih Unikod Ternormal Isih Digit Secara Berasingan @@ -1184,18 +1218,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ke Kelebaran Penuh Ke Kelebaran Separa Bernombor + Lalai + Emoji + Teks Sistem 12 Jam (0–11) + 12 (0–11) Sistem 12 Jam (1–12) + 12 (1–12) Sistem 24 Jam (0–23) + 24 (0–23) Sistem 24 Jam (1–24) + 24 (1–24) Gaya Pemisah Baris Bebas + Bebas Gaya Pemisah Baris Biasa + Biasa Gaya Pemisah Baris Ketat + Ketat + Pecahkan semua + Simpan semua + Normal + Simpan dalam frasa Transliterasi BGN AS Transliterasi UN GEGN Sistem Metrik + Metrik Sistem Ukuran Imperial + UK Sistem Ukuran AS + AS Digit Ahom Digit Indi-Arab Digit Indi Arab Lanjutan @@ -1277,6 +1328,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Digit Vai Digit Warang Citi Digit Wancho + Matikan + Hidupkan Metrik @@ -1295,9 +1348,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1308,18 +1358,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - - - h B – h B - - - h:mm B – h:mm B - - - - @@ -1440,6 +1478,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pada' {0} + + {1} 'pada' {0} + @@ -1448,6 +1489,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pada' {0} + + {1} 'pada' {0} + @@ -1470,11 +1514,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G - M/d/y GGGGG + M/y G + d/M/y GGGGG + E, d/M/y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a d/M @@ -1533,10 +1578,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM – E, d MMM, y G E, d MMM, y – E, d MMM, y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1547,10 +1588,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -1817,6 +1854,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pada' {0} + + {1} 'pada' {0} + @@ -1825,6 +1865,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'pada' {0} + + {1} 'pada' {0} + @@ -1841,10 +1884,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G + E, d/M/y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1906,10 +1950,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E,d MMM – E, d MMM y G E, d MMM y – E, d MMM y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1920,10 +1960,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -2073,25 +2109,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + M/y G d/M/y GGGGG + E, d/M/y G M/y GGGGG d/M/y GGGGG E, d/M/y GGGGG - - - - - h B – h B - - - h:mm B – h:mm B - - - - @@ -2210,13 +2236,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Minggu dalam Bulan + minggu dalam bulan - Minggu dlm bulan + minggu dlm bln - Minggu dalam Bulan + mgu dlm bln hari @@ -2243,13 +2269,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ esok - Hari dalam Tahun + hari dalam tahun - Hari dlm Thn - - - Hari dlm Thn + hari dlm thn Hari dalam Minggu @@ -2260,9 +2283,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hari dlm bln - - Hari dlm bln - Ahad lalu Ahad ini @@ -2540,7 +2560,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Baitulmuqaddis - Enderbury + Pulau Canton Kostanay @@ -2595,9 +2615,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Waktu Afrika Barat - Waktu Piawai Afrika Barat - Waktu Musim Panas Afrika Barat + Waktu Afrika Barat @@ -2978,6 +2996,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Waktu Guyana + + + Waktu Piawai Hawaii-Aleutian + + Waktu Hawaii-Aleutian @@ -3553,8 +3576,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -3874,7 +3895,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Denar Macedonia - Kyat Myanma + Kyat Myanmar + Kyat Myanmar Tugrik Mongolia @@ -4091,6 +4113,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dolar Caribbean Timur + + Guilder Caribbean + Guilder Caribbean + Franc CFA BCEAO @@ -4116,6 +4142,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dolar Zimbabwe (1980–2008) + + Emas Zimbabwe + Emas Zimbabwe + Dolar Zimbabwe (2009) @@ -4304,7 +4334,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milimol setiap liter {0} milimol setiap liter - + + bahagian + {0} bahagian + + bahagian setiap juta {0} bahagian setiap juta @@ -4318,6 +4352,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ permyriad {0} permyriad + + glukosa + {0} glukosa + liter sekilometer {0} liter sekilometer @@ -4692,6 +4730,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milimeter raksa {0} milimeter raksa + + merkuri + {0} merkuri + paun seinci persegi {0} paun seinci persegi @@ -4741,6 +4783,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} knot + Beaufort Beaufort {0} @@ -4824,6 +4867,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} cawan metrik + + auns cecair metrik + {0} auns cecair metrik + ekar-kaki {0} ekar-kaki @@ -4871,17 +4918,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kuart Imp. {0} kuart Imp. - - cahaya - {0} cahaya + + steradian + {0} steradian - - bahagian per bilion - {0} bahagian per bilion + + katal + {0} katal + + + coulomb + {0} coulomb + + + farad + {0} farad + + + henry + {0} henry + + + siemens + {0} siemens + + + kalori [IT] + {0} kalori [IT] + + + becquerel + {0} becquerel + + + sievert + {0} sievert + + + gray + {0} gray + + + kilogram-daya + {0} kilograms-force + + + tesla + {0} tesla + + + weber + {0} weber + + + bahagian setiap bilion + {0} bahagian setiap bilion - malam - {0} malam {0} setiap malam @@ -4940,12 +5033,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ karat + + bahagian + {0} bahagian + peratus per seribu + + Glc + liter/km @@ -5211,11 +5311,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ cubit {0} cubit + + kal-IT + {0} kal-IT + cahaya {0} cahaya - + bahagian/bilion @@ -5256,12 +5360,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ in² + + bahagian + {0} bahagian + % {0}mol + + Glc + mpg UK {0}m/gUK @@ -5489,14 +5600,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}dr.fl. - - cahaya - {0} cahaya + + kal-IT + {0} kal-IT - - malam - {0} malam - {0}/malam + + ppb diff --git a/make/data/cldr/common/main/ms_Arab.xml b/make/data/cldr/common/main/ms_Arab.xml index ce88331ca6f..58c26c002e5 100644 --- a/make/data/cldr/common/main/ms_Arab.xml +++ b/make/data/cldr/common/main/ms_Arab.xml @@ -760,6 +760,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) {0} {1} diff --git a/make/data/cldr/common/main/mt.xml b/make/data/cldr/common/main/mt.xml index df9ca3a1f79..a1b0ebcb2de 100644 --- a/make/data/cldr/common/main/mt.xml +++ b/make/data/cldr/common/main/mt.xml @@ -861,9 +861,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kalendarju Islamiku-Ċivili Kalendarju ISO-8601 Kalendarju Ġappuniż - Ordni Ċiniż Tradizzjonali (Big5) Ordni tad-Dizzjunarju - Ordni Ċiniż Sempliċi (GB2312) Ordni Telefonika Ordni tal-Pinjin Ordni Standard @@ -1766,9 +1764,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic il-Ġamajka - - Enderbury - il-Belt tal-Kuwajt diff --git a/make/data/cldr/common/main/mww.xml b/make/data/cldr/common/main/mww.xml new file mode 100644 index 00000000000..5da9f871a93 --- /dev/null +++ b/make/data/cldr/common/main/mww.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + 𞄤𞄣 + 𞄜𞄤 + 𞄥𞄴𞄅𞄇𞄉𞄦𞄱𞄊 + 𞄕𞄤𞄰𞄎𞄦𞄴 + 𞄋𞄄 + + + + + + 𞄒𞄫𞄱𞄔𞄩𞄴 + + + + [𞄱 𞄶 𞄲 𞄳 𞄰 𞄴 𞄵 𞅏 𞄼 𞄽 𞄀 𞄁 𞄂 𞄃 𞄄 𞄅 𞄆 𞄇 𞄈 𞄉 𞄊 𞄋 𞄌 𞄍 𞄎 𞄏 𞄐 𞄑 𞄒 𞄓 𞄔 𞄕 𞄖 𞄗 𞄘 𞄙 𞄚 𞄛 𞄜 𞄝 𞄞 𞄟 𞄠 𞄡 𞄢 𞄣 𞄤 𞄥 𞄦 𞄧 𞄨 𞄩 𞄪 𞄫 𞄬 𞅎] + + [𞄀 𞄁 𞄂 𞄃 𞄄 𞄅 𞄆 𞄇 𞄈 𞄉 𞄊 𞄋 𞄌 𞄍 𞄎 𞄏 𞄐 𞄑 𞄒 𞄓 𞄔 𞄕 𞄖 𞄗 𞄘 𞄙 𞄚 𞄛 𞄜 𞄝 𞄞 𞄟 𞄠 𞄡 𞄢 𞄣 𞄤 𞄥 𞄦 𞄧 𞄨 𞄩 𞄪 𞄫 𞄬] + [\- ‑ , . % + 𞅀 𞅁 𞅂 𞅃 𞅄 𞅅 𞅆 𞅇 𞅈 𞅉] + [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + + + + + + + + 𞄆𞄬 + 𞄛𞄨𞄱𞄄𞄤𞄲𞄨 + 𞄒𞄫𞄰𞄒𞄪𞄱 + 𞄤𞄨𞄱 + 𞄀𞄪𞄴 + 𞄛𞄤𞄱𞄞𞄤𞄦 + 𞄔𞄩𞄴𞄆𞄨𞄰 + 𞄕𞄩𞄲𞄔𞄄𞄰𞄤 + 𞄛𞄤𞄱𞄒𞄤𞄰 + 𞄪𞄱𞄀𞄤𞄴 + 𞄚𞄦𞄲𞄤𞄚𞄄𞄰𞄫 + 𞄒𞄩𞄱𞄔𞄬𞄴 + + + + + + + 𞄎𞄤𞄲 + 𞄈𞄦 + 𞄆𞄨𞄰 + 𞄗𞄄𞄤𞄰𞄦 + 𞄙𞄤𞄱𞄨 + 𞄑𞄤𞄱𞄨 + 𞄊𞄧𞄳 + + + + + + + 𞅁 + 𞅂 + 𞅃 + 𞅄 + + + + + + 𞄜𞄆𞄪 + + + + + + + 𞄛𞄩 + + + + + hmnp + latn + + + 𞅎 + + + + diff --git a/make/data/cldr/common/main/mww_Hmnp.xml b/make/data/cldr/common/main/mww_Hmnp.xml new file mode 100644 index 00000000000..639b8ee8760 --- /dev/null +++ b/make/data/cldr/common/main/mww_Hmnp.xml @@ -0,0 +1,14 @@ + + + + + + + + - + @@ -653,6 +655,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ တရုတ် ကိုလံဘီယာ ကလစ်ပါတန်ကျွန်း + ဆာ့က် ကို့စ်တာရီကာ ကျူးဘား ကိတ်ဗာဒီ @@ -898,44 +901,83 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ငွေရေတွက်ပုံစနစ် အစဉ်လိုက်စီရန် ငွေကြေး + အီမိုဂျီဖော်ပြချက် နာရီစက်ဝန်း (၁၂ နှင့် ၂၄) စာပိုဒ်ခွဲပုံစံ + စာပုဒ်ခြား တိုင်းတာရေးစနစ် ကိန်းဂဏန်း + စာလုံးခြား ဗုဒ္ဓ ပြက္ခဒိန် + ဗုဒ္ဓ တရုတ် ပြက္ခဒိန် + တရုတ် ကို့ပ်တစ် ပြက္ခဒိန် + ကို့ပ်တစ် ဒန်းဂိ ပြက္ခဒိန် + ဒန်းဂိ အီသီယိုးပီးယား ပြက္ခဒိန် + အီသီယိုးပီးယား အီသီယိုပစ်ခ် အာမဲတဲ အာလင်မ် ပြက္ခဒိန် + အီသီယိုပစ်ခ် အာမဲတဲ အာလင်မ် နိုင်ငံတကာသုံး ပြက္ခဒိန် + နိုင်ငံတကာသုံး ဟီဘရူး ပြက္ခဒိန် + ဟီဘရူး အိန္ဒြိယ အမျိုးသား ပြက္ခဒိန် အစ္စလာမ် ပြက္ခဒိန် + အစ္စလာမ် အစ္စလာမ်မစ် ပြက္ခဒိန် + အစ္စလာမ် အယ်လ်ကူရာ အစ္စလာမ်မစ် ပြက္ခဒိန် + အစ္စလာမ် ISO-8601 ပြက္ခဒိန် ဂျပန် ပြက္ခဒိန် + ဂျပန် ပါရှား ပြက္ခဒိန် + ပါရှား မင်ဂုအို ပြက္ခဒိန် + မင်ဂုအို စာရင်းကိုင်သုံး ငွေရေတွက်ပုံစနစ် + စာရင်းကိုင် ပုံမှန် ငွေရေတွက်ပုံစနစ် + ပုံမှန် အစဉ်လိုက်စီထားသော ယူနီကုတ် + ပုံသေယူနီကုတ် ဖုန်းစာအုပ် အစီအစဉ် ယေဘုယျရှာခြင်း + ရှာဖွေမှု ပုံမှန်စီထားသော + ပုံမှန် + ပုံသေ | မူသေ | မူရင်း | ပင်တိုင် + အီမိုဂျီ + စာသား ၁၂ နာရီ စနစ် (၀–၁၁) + ၁၂ (၀−၁၁) ၁၂ နာရီစနစ် (၁–၁၂) + ၁၂ (၁−၁၂) ၂၄ နာရီ စနစ် (၀–၂၃) + ၂၄ (၀−၂၃) ၂၄ နာရီ စနစ်(၁–၂၄) + ၂၄ (၁−၂၄) ကန့်သတ်မထားသော စာပိုဒ်ခွဲပုံစံ + ကန့်သတ်မထား ပုံမှန်စာပိုဒ်ခွဲပုံစံ + ပုံမှန် ကန့်သတ်ထားသော စာပိုဒ်ခွဲပုံစံ + ကန့်သတ်ထား + အားလုံးခွဲရန် + အားလုံးတွဲထားရန် + ပုံမှန် + စကားစုအလိုက် တွဲထားရန် မက်ထရစ်စနစ် + မက်ထရစ် ဗြိတိသျှတိုင်းတာစနစ် + ဗြိတိန် အမေရိကန်တိုင်းတာစနစ် + အမေရိကန် အာရပ် ဂဏန်းခြေ တိုးချဲ့အာရပ် ဂဏန်းခြေ အာမေးနီးယား ဂဏန်းခြေ @@ -977,6 +1019,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ထိုင်း ဂဏန်းခြေ တိဘက် ဂဏန်းခြေ ဗိုင်း ဂဏန်းခြေ + ပိတ် + ဖွင့် မက်ထရစ်စနစ် @@ -998,9 +1042,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1062,22 +1103,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h E B h:mm E B h:mm:ss d E + E a h E a h:mm E a h:mm:ss GGGGG y/M/d + G y-MM-dd၊ E G d MMM y + G y MMM d၊ E a h a h:mm a h:mm:ss + v a h + v HH'h' d/M + MM-dd၊ E MMM d E MMMM d Eနေ့ G M/y GGGGG dd/MM/Y G d MMM y + G y MMM d၊ E {0} – {1} @@ -1097,6 +1146,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ GGGGG y/M – GGGGG y/M + + G y MMM d၊ E – MMM d၊ E + G y MMM d၊ E – G y MMM d၊ E + G y MMM d၊ E – MMM d၊ E + G y MMM d၊ E – y MMM d၊ E + M – M @@ -1234,15 +1289,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - နွေ - လာ - ဂါ - ဟူး - တေး - ကြာ - နေ - @@ -1261,12 +1307,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - Q1 - Q2 - Q3 - Q4 - ဒု @@ -1374,13 +1414,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h E B h:mm E B h:mm:ss d ရက် E + E a h E a h:mm E a h:mm:ss G y/M/d - G y/ MMM d/ E + G y-MM-dd၊ E + G y MMM d၊ E a h a h:mm a h:mm:ss @@ -1388,6 +1431,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ v HH:mm:ss v a h:mm v HH:mm + v a h + v HH d/M d/M E MMM d E @@ -2088,6 +2133,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ အီစတာ + + ကွိုင်းဟိုင်ခ် + ပွန်တာ အရီနာစ် @@ -2353,9 +2401,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ဖနွမ်ပင် - အန်ဒါဘူရီ - - ကန်တွန် @@ -3025,9 +3070,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - အနောက်အာဖရိက အချိန် - အနောက်အာဖရိက စံတော်ချိန် - အနောက်အာဖရိက နွေရာသီ အချိန် + အနောက်အာဖရိက အချိန် @@ -3377,6 +3420,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ဂိုင်ယာနာ အချိန် + + + ဟာဝိုင်ယီ အယ်လူးရှန်း စံတော်ချိန် + + ဟာဝိုင်ယီ အယ်လူးရှန်း အချိန် @@ -3801,6 +3849,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ချုခ် အချိန် + + + တူရကီ အချိန် + တူရကီ စံတော်ချိန် + တူရကီ နွေရာသီ အချိန် + + တာ့ခ်မင်နစ္စတန် အချိန် @@ -3938,29 +3993,41 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ ¤ #,##0.00 + ¤ #,##0.00 - ¤ 0 ထောင် - ¤ 0 သောင်း - ¤ 0 သိန်း - ¤ 0 သန်း - ¤ 0 ကုဋေ - ¤ 00 ကုဋေ - ¤ 000 ကုဋေ - ¤ 0000 ကုဋေ - ¤ ကုဋေ 0 သောင်း - ¤ ကုဋေ 0 သိန်း - ¤ ကုဋေ 0 သန်း - ¤ 0 ကောဋိ + 0 ထောင် ¤ + 0 သောင်း ¤ + 0 သိန်း ¤ + 0 သန်း ¤ + 0 ကုဋေ ¤ + 00 ကုဋေ ¤ + 000 ဋေ ¤ + ဋေ 0 ထ ¤ + ဋေ 0 သ ¤ + ဋေ 0 သိန်း ¤ + ဋေ 0 သန်း ¤ + 0 ကောဋိ ¤ {1} {0} + + + + #,##0.00 ¤ + + + ¤ #,##0.00 + + + အာရပ်စော်ဘွားများ ပြည်ထောင်စု ဒါဟမ်း @@ -4397,7 +4464,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ဆီယာရာလီယွန်း လီအိုနီ (၁၉၆၄—၂၀၂၂) - ဆီယာရာလီယွန်း လီအိုနီ (၁၉၆၄—၂၀၂၂) ဆိုမာလီ သျှီလင် @@ -4507,6 +4573,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ အရှေ့ကာရစ်ဘီယံ ဒေါ်လာ + + ကာရစ်ဘီယံ ဂင်းဒါး + ကာရစ်ဘီယံ ဂင်းဒါး + အထူးထုတ်ယူခွင့် @@ -4539,6 +4609,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ဇင်ဘာဘွေ ဒေါ်လာ + + ဇင်ဘာဘွေ ရွှေ + ဇင်ဘာဘွေ ရွှေ + {0} နှင့်အထက် @@ -4723,7 +4797,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ တစ်လီတာရှိ မီလီမိုးလ် တစ်လီတာရှိ {0} မီလီမိုးလ် - + + ပတ် + {0} ပတ် + + တစ်သန်းပုံ {0} ပုံ @@ -4737,6 +4815,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ပါမီရိတ် + + မိုး + + + ဂလူးကို့စ် + {0} ဂလူးကို့စ် + တစ်ကီလိုမီတာရှိ လီတာ တစ်ကီလိုမီတာရှိ {0} လီတာ @@ -5066,6 +5151,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ပြဒါးမီလီမီတာ {0} ပြဒါးမီလီမီတာ + + ပြဒါး + {0} ပြဒါး + တစ်စတုရန်းလက်မလျှင် {0} ပေါင် @@ -5177,6 +5266,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ မထ္ထရစ် ခွက် {0} မထ္ထရစ် ခွက် + + မက်ထရစ် အရည် အောင်စ + {0} မက်ထရစ် အရည် အောင်စ + {0} ဧက-ပေ @@ -5214,19 +5307,45 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ဗြိတိသျှသုံး အချိုပွဲဇွန်း {0} ဇွန်း - - အလင်း - {0} အလင်း + + စတယ်ရေဒီယန် + {0} စတယ်ရေဒီယန် - - သန်းတစ်ထောင်ပုံ တစ်ပုံ + + ကတ်တဲလ် + {0} ကတ်တဲလ် + + + ဖာရက်ဒ် + {0} ဖာရက်ဒ် + + + ဟင်နရီ + {0} ဟင်နရီ + + + စီးမန် + {0} စီးမန် + + + ကယ်လိုရီ [IT] + {0} ကယ်လိုရီ [IT] + + + ဂရေးစ် + {0} ဂရေးစ် + + + ကီလိုဂရမ်စွမ်းအင် + {0} ကီလိုဂရမ်စွမ်းအင် + + + တက်စလာ + {0} တက်စလာ + + သန်းတစ်ထောင်ပုံ {0} ပုံ - - - {0} ည - {0}/ည - အရပ် လေးမျက်နှာ {0} အရှေ့ @@ -5285,12 +5404,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ကာရက် - + + ပတ် + {0} ပတ် + + တစ်သန်းပုံ တစ်ပုံ ပါမီရိတ် + + ဂလူးကို့စ် + {0} ဂလူးကို့စ် + လီတာ/ကီလိုမီတာ @@ -5692,11 +5819,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ဗြိတိသျှသုံး ကွတ် ဗြိတိသျှသုံး {0} ကွတ် + + ကယ်လိုရီ-IT + {0} ကယ်လိုရီ-IT + အလင်း {0} အလင်း - + သန်းတစ်ထောင်ပုံ တစ်ပုံ @@ -5716,8 +5847,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}° - - cm² + + ပတ် + {0} ပတ် + + + Glc L/km @@ -5841,18 +5976,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ စက် + + ကယ်လိုရီ-IT + {0} ကယ်လိုရီ-IT + - အလင်း {0}အလင်း - + {0}ppb - - - {0} ည - {0}/ည - {0}E {0}N diff --git a/make/data/cldr/common/main/nds.xml b/make/data/cldr/common/main/nds.xml index b4f1e03f66c..e2db2de5bd2 100644 --- a/make/data/cldr/common/main/nds.xml +++ b/make/data/cldr/common/main/nds.xml @@ -918,8 +918,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ISO-8601-Klenner Japaansch Klenner Klenner vun de Republik China - Traditschonell Chineesch Sorteerregeln - Big5 - Vereenfacht Chineesch Sorteerregeln - GB2312 Telefonbook-Sorteerregeln Pinyin-Sorteerregeln Standard-Sorteerreeg @@ -1577,9 +1575,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Westafrikaansch Tiet - Westafrikaansch Standardtiet - Westafrikaansch Summertiet + Westafrikaansch Tiet @@ -1756,6 +1752,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ {0} {1} diff --git a/make/data/cldr/common/main/ne.xml b/make/data/cldr/common/main/ne.xml index 0ef08650f30..a8951965542 100644 --- a/make/data/cldr/common/main/ne.xml +++ b/make/data/cldr/common/main/ne.xml @@ -325,6 +325,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ बाफिया कोलोग्नियाली कुर्दी + कुर्दिस + कुर्मान्जी कुमिक कुतेनाइ कोमी @@ -847,6 +849,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ चीन कोलोम्बिया क्लिप्पेर्टन टापु + सार्क कोष्टारिका क्युबा केप भर्डे @@ -1085,49 +1088,87 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ मुद्राको ढाँचा क्रमबद्ध सुची मुद्रा + इमोजी प्रेजन्टेसन समय चक्र (12 तथा 24) पङ्क्ति विच्छेदको शैली + शब्दबीचका लाइन ब्रेकहरू मापन प्रणाली अङ्कहरू + संक्षिप्त शब्दपछि आउने वाक्यान्त बुद्धिष्ट पात्रो + बौद्ध चिनियाँ पात्रो + चिनियाँ कोप्टिक पात्र + कोप्टिक डाङ्गी पात्रो + डाँगी इथिओपिक पात्रो + इथियोपियाली इथियिपियाली आमेट आलेम पात्र + इथियोपिक अमेटे अलेम ग्रेगोरियन पात्रो + ग्रिगोरियन हिब्रु पात्रो + ह्रिब्रू भारतीय राष्ट्रिय पात्रो + भारतीय राष्ट्रिय हिजरी पात्रो + हिज्री हिजरी पात्रो (टेबुलर, नागरिक युग) + हिज्री (टेबुलर, सिभिल एपोच) इस्लामी पात्रो + हिज्री (अन अल क्वारा) ISO-8601 पात्रो जापानी पात्रो + जापानी फारसी पात्रो + पर्सियाली चिनियाँ गणतन्त्रको पात्रो + मिन्ग्वो लेखासम्बन्धी मुद्राको ढाँचा + लेखापालन मानक मुद्राको ढाँचा - परम्परागत चिनिँया क्रमबद्धता पद्दति - बिग फाइभ + मानक पूर्वनिर्धारित युनिकोडको क्रमबद्धता सूची - सरलिकृत चिनियाँ क्रमबद्धता पद्दति-गीबीटुथ्रीवानटु + डिफल्ट युनिकोड टेलिफोन पुस्तिका क्रमबद्धतापद्दति पिनयिन क्रमबद्धता पद्दति सामान्य उद्देशीय खोजी + खोज मानक क्रमबद्धता + मानक स्ट्रोक क्रमबद्धता पद्दति परम्परागत क्रमबद्धता पद्दति + डिफल्ट + इमोजी + टेक्स्ट १२ घण्टे प्रणाली (०–११) + १२ (0–11) १२ (0–११) १२ घन्टाको प्रणाली (१–१२) + १२(१–१२) १२ (1–१२) २४ घन्टाको प्रणाली (०–२३) + २४ (०–२३) २४ (०–२३) २४ घन्टाको प्रणाली (१–२४) + २४ (१–२४) २४ (१–२४) पङ्क्ति विच्छेदको खुला शैली + खुला पङ्क्ति विच्छेदको सामान्य शैली + सामान्य पङ्क्ति विच्छेदको कडा शैली + कडा + सबै ब्रेक गर्नुहोस् + सबै राख्नुहोस् + सामान्य + वाक्यांशमा राख्नुहोस् मेट्रिक प्रणाली + मेट्रिक इम्पेरियल मापन प्रणाली + बेलायती संयुक्त राज्य मापन प्रणाली + अमेरिकी अरबी भारतीय अङ्कहरू विस्तृत अरबी भारतीय अङ्कहरू आर्मेनियाली अङ्कहरू @@ -1168,6 +1209,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ थाई अङ्कहरू तिब्बती अङ्कहरू भाई अङ्क + अफ + अन मेट्रिक @@ -1186,6 +1229,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [अ आ इ ई उ ऊ ऋ ए ऐ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह] [\- ‑ , . % ‰ + 0० 1१ 2२ 3३ 4४ 5५ 6६ 7७ 8८ 9९] [\- ‑ — , ; ! ? । '‘’ "“” ( ) \[ \] \{ \}] + [.] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1214,7 +1258,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - GGGGG y-MM-dd + G y-MM-dd @@ -1223,11 +1267,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1} बजे {0} + {1}, {0} + + {1} बजे {0} + + + {1} बजे {0} + @@ -1382,7 +1435,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ईसा पूर्व - इस्वीपूर्व सन् ईसा काल @@ -1440,6 +1492,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}: {0} + + {1} मा {0} + @@ -1448,6 +1503,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}: {0} + + {1} मा {0} + @@ -1461,7 +1519,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d E + M/y G M/d/y G + E, M/d/y G MMMM को W हप्ता MMMM को W हप्ता Y को w हप्ता @@ -2162,6 +2222,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ इस्टर + + कोहाक्व + पुन्टा अरिनाज @@ -2427,9 +2490,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ फेनोम फेन - एन्डरबरी - - कान्टोन @@ -3099,9 +3159,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - पश्चिम अफ्रिकी समय - पश्चिम अफ्रिकी मानक समय - पश्चिम अफ्रिकी ग्रीष्मकालीन समय + पश्चिम अफ्रिकी समय @@ -3451,6 +3509,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ गुयाना समय + + + हवाई-एलुटियन मानक समय + + हवाई-एलुटियन समय @@ -4026,11 +4089,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + ¤ #,##,##0.00 + + + ¤ #,##,##0.00 + + + ¤ #,##,##0.00 - #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + + + ¤ #,##,##0.00 @@ -4601,6 +4678,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ पूर्वी क्यारिबियन डलर + + क्यारिबियन गिल्डर + क्यारिबियन गिल्डर + क्यारिबियन गिल्ड + सीएफ्‌ए फ्रान्क बीसीइएओ सीएफ्‌ए फ्रान्क बीसीइएओ @@ -4628,6 +4710,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ जाम्बियाली क्वाचा + + जिम्बाबेली सुन + जिम्बाबेली सुन + जिम्बाबेली सुन + {0}+ @@ -4720,7 +4807,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ पेबि{0} - एक्‍सबि{0} + एक्सबी{0} जेबि{0} @@ -4785,17 +4872,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ वर्ग फिट - {0}कराट - {0}कराट + क्यारेट + {0} क्यारेट + {0} क्यारेट मिलिग्राम पति डेेसिलिटर {0} mg/dL {0} मिलिग्राम पति डेेसिलिटर + + मिलिमोल प्रति लिटर + {0} mmol/L + {0} मिलिमोल प्रति लिटर + वस्तुहरू + + भाग + {0} भाग + {0} भाग + + + भाग प्रति दस लाख + {0} भाग प्रति दस लाख + {0} भाग प्रति दस लाख + {0} प्रतिशत {0} प्रतिशत @@ -4808,6 +4911,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} पर्माइराइड {0} पर्माइराइड + + ग्लुकोजको + ग्लुकोजको {0} + ग्लुकोजको {0} + लिटर प्रति किलोमिटर {0}लिटर प्रति किलोमिटर @@ -4822,10 +4930,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}माइल प्रति ग्यालोन {0}माइल प्रति ग्यालोन + + {0} माइल प्रति इम्पिरियल ग्यालोन + {0} माइल प्रति इम्पिरियल ग्यालोन + - पिटाबाइटहरू {0} पिटाबाइट - {0} पिटाबाइटहरू + {0} पिटाबाइट टेराबाइट @@ -4880,7 +4991,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} प्रति वर्ष - qtr + क्वाटर {0} क्वाटर {0} क्वाटर @@ -4984,6 +5095,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ टाइपोग्रापिक एम + {0} em + {0} ems {0} पिक्सेल @@ -5013,10 +5126,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} डट प्रति इन्च {0} डट प्रति इन्च - - {0}बिन्‍दु - {0}बिन्‍दु - पृथ्वीको त्रिज्या {0} पृथ्वीको त्रिज्या @@ -5031,7 +5140,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} मिटर {0} मिटर - {0}प्रति मिटर डेसिमिटर @@ -5068,9 +5176,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} माइल - फुट {0} फुट - {0} फुट + {0}फिट {0} प्रति फुट @@ -5105,8 +5212,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}नउटिकल माइल - {0} miles-scandinavian - {0} miles-scandinavian + माइल-स्क्यान्डिनेभियन + {0} माइल-स्क्यान्डिनेभियन + {0} माइल-स्क्यान्डिनेभियन + + + पोइन्ट + {0} पोइन्ट + {0} पोइन्ट {0} सौर्य रेडियस @@ -5188,6 +5301,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} मिलिमिटर पारो {0} मिलिमिटर पारो + + मर्करीको + मर्करीको {0} + मर्करीको {0} + पाउन्ड प्रति वर्ग इन्च {0} पाउन्ड प्रति वर्ग इन्च @@ -5232,6 +5350,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ब्यूफोर्ट {0} ब्यूफोर्ट {0} + + डिग्री तापक्रम + {0} डिग्री तापक्रम + {0} डिग्री तापक्रम + {0} डिग्री सेल्सियस् {0} डिग्री सेल्सियस् @@ -5303,6 +5426,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}मेट्रिक कप {0}मेट्रिक कप्स + + मेट्रिक फ्ल्युड आउन्स + {0} मेट्रिक फ्ल्युड आउन्स + {0} मेट्रिक फ्ल्युड आउन्स + वर्ग गज-फिट {0}वर्ग गज-फिट @@ -5331,8 +5459,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Imp. fluid ounces - {0} Imp. fluid ounce - {0} Imp. fluid ounces + {0} इम्पिरियल फल्युइड आउन्स + {0} इम्पिरियल फल्युइड आउन्स टेबल चम्चा @@ -5350,9 +5478,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} डेजर्ट चम्चा - Imp. डेजर्ट चम्चा - {0} Imp. डेजर्ट चम्चा - {0} Imp. डेजर्ट चम्चा + इम्पिरियल डेजर्ट चम्चा + {0} इम्पिरियल डेजर्ट चम्चा + {0} इम्पिरियल डेजर्ट चम्चा ड्राम @@ -5364,20 +5492,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} इम्पिरियल चौथाइ {0} इम्पिरियल चौथाइ - - प्रकाश - प्रकाश - {0} प्रकाश + + स्टाराडियन + {0} स्टाराडियन + {0} स्टाराडियन - + + काटल्स + {0} काटल + {0} काटल + + + कुलम्ब + {0} कुलम्ब + {0} कुलम्ब + + + फराड + {0} फराड + {0} फराड + + + हेनरी + {0} हेनरी + {0} हेनरी + + + साइमेन्स + {0} साइमेन्स + {0} साइमेन्स + + + क्यारोली [IT] + {0} क्यालोरी [IT] + {0} क्यालोरी [IT] + + + बेक्वेरल + {0} बेक्वेरल + {0} बेक्वेरल + + + सिभर्ट्स + {0} सिभर्ट्स + {0} सिभर्ट्स + + + खैरो + {0} खैरो + {0} खैरा + + + किलोग्राम फोर्स + {0} किलोग्राम फोर्स + {0} किलोग्राम फोर्स + + + टेस्ला + {0} टेस्ला + {0} टेस्ला + + + वेबर्स + {0} Wb + {0} Wb + + अंश प्रति बरब {0} अंश प्रति अरब {0} अंश प्रति अरब - रात - {0} रात - {0} रात {0} प्रति रात @@ -5526,20 +5711,31 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} डुनाम - कराट + क्यारेट + + + मिलिमोल/लिटर वस्तु {0} वस्तु {0} वस्तु + + भाग + {0} भाग + {0} भाग + + + भाग/दस लाख + प्रतिशत प्रति मिल {0}प्रति मिल - {0}प्रतिशत १ + {0}‰ पर्माइराइड @@ -5549,6 +5745,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} मोल {0} मोल + + Glc + {0} Glc + {0} Glc + लिटर/किलोमिटर @@ -5562,9 +5763,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mpg {0} mpg + + माइल/इम्पिरियल ग्यालोन + पिटाबाइट - {0} पिटा + {0} PB {0} पिटा @@ -5728,7 +5932,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ मि.मि. - मि.मि. + {0}मि.मि. {0}मि.मि. @@ -5772,6 +5976,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ फ्यादम + + पोइन्ट + सौर्य रेडिआई @@ -5861,6 +6068,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} हर्सपावर {0} हर्सपावर + + मर्करीको + मर्करीको {0} + मर्करीको {0} + इन्च पारो {0} इन्च पारो @@ -5912,6 +6124,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ब्यूफोर्ट + + डिग्री तापक्रम + डिग्री सेल्सियस् {0}°से @@ -5974,6 +6189,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mc {0} mc + + {0} fl oz m. + {0} fl oz m. + वर्ग गज फिट {0}वर्ग गज फिट @@ -6007,6 +6226,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ब्यारल {0} ब्यारल + + इम्पिरियल डेजर्ट चम्चा + {0} इम्पिरियल डेजर्ट चम्चा + {0} इम्पिरियल डेजर्ट चम्चा + थोपा {0} थोपा @@ -6014,8 +6238,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ड्राम तरल पदार्थ - {0} ड्राम तरल - {0} ड्राम fl + {0} ड्राम + {0} ड्राम जिगर @@ -6027,12 +6251,66 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} चुटकी {0} चुटकी + + {0} sr + {0} sr + + + काट + {0} काट + {0} काट + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + क्याल-IT + {0} क्याल-IT + {0} क्याल-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + प्रकाश {0} प्रकाश {0} प्रकाश - + अंश/अरब @@ -6125,22 +6403,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ वाइआइ{0} - - {0} g - {0} g - {0}rad {0}rad - - {0}′ - {0}′ - - - {0}″ - {0}″ - {0} ब.कि.मि. {0} ब.कि.मि. @@ -6149,10 +6415,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ब.मि. {0} ब.मि. - - {0} बर्ग माईल - {0} बर्ग माईल - {0} एकर {0} एकर @@ -6161,11 +6423,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ब.फु. {0} ब.फु. + + क्यारेट + {0}mmol/L {0}mmol/L - + + भाग + {0} भाग + {0} भाग + + + भाग/दस लाख {0}ppm {0}ppm @@ -6173,14 +6444,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}‰ {0}‰ + + Glc + {0}L/km {0}L/km - - {0}L/100km - {0}L/100km - {0}mpg {0}mpg @@ -6340,16 +6610,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}nm {0}nm - - {0} pm - {0} pm - - - {0} माईल - {0} माईल - - {0}′ + {0}फिट {0}′ @@ -6403,7 +6665,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}L☉ - {0} L☉ + {0}L☉ किलो @@ -6412,10 +6674,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} पाउण्ड {0} पाउण्ड - - {0} आऊन्स - {0} आऊन्स - {0}M⊕ {0}M⊕ @@ -6440,6 +6698,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmHg {0}mmHg + + मर्करीको + मर्करीको {0} + मर्करीको {0} + {0}psi {0}psi @@ -6464,18 +6727,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} km/h {0} km/h - - {0} mi/h - {0} mi/h - B{0} B{0} °से - {0}° - {0}° {0}K @@ -6487,11 +6744,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} km³ - {0} km³ - - - {0} घन माईल - {0} घन माईल + {0}घन कि.मि. {0}ML @@ -6517,6 +6770,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mc {0}mc + + {0} fl oz m. + {0} fl oz m. + {0}bu {0}bu @@ -6525,6 +6782,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}dsp {0}dsp + + इम्पिरियल डेजर्ट चम्चा + {0}इम्पिरियल डेजर्ट चम्चा + {0} इम्पिरियल डेजर्ट चम्चा + {0}fl.dr. {0}fl.dr. @@ -6533,26 +6795,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt-Imp. {0}qt-Imp. - - प्रकाश - {0}प्रकाश - {0}प्रकाशा + + काट + {0} काट + {0} काट - + + क्याल-IT + + {0}ppb {0}ppb - रात {0}रात {0}रात - {0}/रात - {0},{1} + {0}, {1} {0} र {1} {0} र {1} @@ -6565,15 +6828,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}, {1} - {0},{1} + {0}, {1} {0} {1} - {0}{1} + {0} {1} {0} {1} - {0},{1} + {0}, {1} {0} {1} diff --git a/make/data/cldr/common/main/nl.xml b/make/data/cldr/common/main/nl.xml index 1de3fa015a9..457195e687b 100644 --- a/make/data/cldr/common/main/nl.xml +++ b/make/data/cldr/common/main/nl.xml @@ -37,7 +37,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Oudengels Obolo Angika - Levantijns-Arabisch + Levantijns-Arabisch Arabisch modern standaard Arabisch Aramees @@ -87,6 +87,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kom Siksika Anii + Tai Dam Bambara Bengaals Tibetaans @@ -122,6 +123,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chipewyan Cherokee Cheyenne + Chickasaw Soranî Koerdisch, Soranî Koerdisch, Soranî @@ -240,6 +242,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hiligaynon Hettitisch Hmong + Hmong Njua Hiri Motu Kroatisch Oppersorbisch @@ -287,6 +290,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tyap Makonde Kaapverdisch Creools + Qʼeqchiʼ Kenyang Koro Kongo @@ -321,6 +325,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bafia Kölsch Koerdisch + Koerdisch + Kurmanci Koemuks Kutenai Komi @@ -412,7 +418,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Noors - Bokmål Noord-Ndebele Nedersaksisch - Nederduits + Nederduits Nepalees Newari Ndonga @@ -592,6 +598,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Turks Turoyo Taroko + Torwali Tsonga Tsakonisch Tsimshian @@ -663,8 +670,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - + + @@ -672,11 +679,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - + + - + + @@ -687,33 +695,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + - + - - + + - + - - + + + - - + + - + + @@ -723,29 +733,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + - + - + - + - - + + - + + @@ -756,44 +767,45 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - + + - - + + - + - - - + + + - + - + - - - - + + + + - + + - + - - - + + + @@ -809,19 +821,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + - - - + + + + - - - - + + + + + @@ -834,6 +848,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + @@ -842,19 +857,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + - - + + - + @@ -949,7 +967,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Colombia Clipperton - Sark + Sark Costa Rica Cuba Kaapverdië @@ -1305,35 +1323,56 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Numeriek sorteren Sorteervoorrang valuta + Emoji-presentatie uursysteem (12 of 24) stijl regelafbreking + Regelafbreking binnen woorden maatsysteem cijfers + Zinsafbreking na afk. Tijdzone Landvariant Privégebruik Boeddhistische kalender + Boeddhistisch Chinese kalender + Chinees Koptische kalender + Koptisch Dangi-kalender + Dangi Ethiopische kalender + Ethiopisch Ethiopische Amete Alem-kalender + Ethiopische Amete Alem Gregoriaanse kalender + Gregoriaans Hebreeuwse kalender + Hebreeuws Indiase nationale kalender + Indiaas nationaal Islamitische kalender + Islamitisch Islamitische kalender (cyclisch) + Islamitisch (cyclisch) Islamitische kalender (Saudi–Arabië) Islamitische kalender (epoche) + Hijri (tabulair, astronomische epoche) Islamitische kalender (Umm al-Qura) + Islamitisch (Umm al-Qura) ISO-8601-kalender Japanse kalender + Japans Perzische kalender + Perzisch Kalender van de Chinese Republiek + van de Chinese Republiek financiële valutanotatie + financieel standaard valutanotatie + standaard Symbolen sorteren Sorteren zonder symbolen Normaal sorteren op accenten @@ -1343,23 +1382,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Eerst sorteren op hoofdletters Niet hoofdlettergevoelig sorteren Hoofdlettergevoelig sorteren - Traditioneel-Chinese sorteervolgorde - Big5 vorige sorteervolgorde, voor compatibiliteit + Compatibiliteit Woordenboeksorteervolgorde + Woordenboek standaard Unicode-sorteervolgorde + standaard Unicode emojisorteervolgorde Europese sorteerregels - Vereenvoudigd-Chinese sorteervolgorde - GB2312 Telefoonboeksorteervolgorde + Telefoonboek Fonetische sorteervolgorde + Fonetisch Pinyinsorteervolgorde + Pinyin algemeen zoeken + zoeken Zoeken op eerste Hangul-medeklinker standaard sorteervolgorde + standaard Streeksorteervolgorde + streek Traditionele sorteervolgorde + traditioneel Sorteervolgorde radicalen/strepen + radicalen/strepen Zhuyinvolgorde + Zhuyin Zonder normalisatie sorteren Unicode genormaliseerd sorteren Cijfers afzonderlijk sorteren @@ -1372,18 +1421,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Volledige breedte Halve breedte Numeriek + standaard + emoji + tekst 12-uursysteem (0-11) + 12 (0–11) 12-uursysteem (1-12) + 12 (1–12) 24-uursysteem (0-23) + 24 (0–23) 24-uursysteem (1-24) + 24 (1–24) losse stijl regelafbreking + los normale stijl regelafbreking + normaal strikte stijl regelafbreking + strikt + breek alles af + behoud alles + normaal + behoud in zinnen BGN UNGEGN metriek stelsel + metriek Brits imperiaal stelsel + VK Amerikaans imperiaal stelsel + VS Ahom cijfers Arabisch-Indische cijfers uitgebreide Arabisch-Indische cijfers @@ -1469,6 +1535,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Vai cijfers Warang Citi cijfers Wancho cijfers + uit + aan metriek @@ -1569,14 +1637,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - @@ -1742,10 +1802,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ QQQQ U - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1756,54 +1812,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - - - MM-dd – MM-dd - MM-dd – MM-dd - - - MM-dd, E – MM-dd, E - MM-dd, E – MM-dd, E - - - MMM d – MMM d - - - MMM d, E – MMM d, E - MMM d, E – MMM d, E - - - y-MM – y-MM - y-MM – y-MM - - - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - - - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - - - U MMM – U MMM - - - U MMM d – MMM d - U MMM d – U MMM d - - - U MMM d, E – MMM d, E - U MMM d, E – MMM d, E - U MMM d, E – U MMM d, E - - - U MMMM – U MMMM - @@ -1870,14 +1878,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - @@ -1956,14 +1956,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ QQQ r (U) QQQQ r (U) - - - h B – h B - - - h:mm B – h:mm B - - @@ -1986,16 +1978,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - tijdperk 0 - tijdperk 1 - - - era 0 - era 1 - - @@ -2039,26 +2021,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - - - - - tijdperk 0 - - - era 0 - - - @@ -2091,6 +2055,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -2099,6 +2066,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -2116,7 +2086,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d y G + M/y G d/M/y GGGGG + E d/M/y G MMM y G d MMM y G E d MMM y G @@ -2448,6 +2420,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -2456,6 +2431,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'om' {0} + + {1} 'om' {0} + @@ -2470,7 +2448,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d y G + M/y G d/M/y GGGGG + E d/M/y G MMM y G d MMM y G E d MMM y G @@ -2661,14 +2641,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d MMM y - - - h B – h B - - - h:mm B – h:mm B - - @@ -2733,14 +2705,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - @@ -2824,14 +2788,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - @@ -2929,14 +2885,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - @@ -2983,14 +2931,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - @@ -3043,14 +2983,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} - - - h B – h B - - - h:mm B – h:mm B - - @@ -3558,11 +3490,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ zomertijd in {0} standaardtijd in {0} - - HST - HST - HDT - Honolulu @@ -3573,21 +3500,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ onbekende stad - - Tirana - Jerevan - - Río Gallegos - - - Tucumán - - - Córdoba - Wenen @@ -3603,18 +3518,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - Cuiabá - - - Belém - - - São Paulo - - - Maceió - Saint John’s @@ -3705,7 +3608,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bisjkek - Enderbury + Kanton Saint Kitts @@ -3740,18 +3643,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maldiven - - Mazatlán - Mexico-Stad Cancun - - Nouméa - Marquesaseilanden @@ -3803,9 +3700,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riyad - - Mahé - Khartoem @@ -3818,9 +3712,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Beneden Prinsen Kwartier - - Lomé - Doesjanbe @@ -3886,9 +3777,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - West-Afrikaanse tijd - West-Afrikaanse standaardtijd - West-Afrikaanse zomertijd + West-Afrikaanse tijd @@ -4295,6 +4184,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ GMT + + + Groenlandse tijd + Groenlandse standaardtijd + Groenlandse zomertijd + + Oost-Groenlandse tijd @@ -4324,6 +4220,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guyaanse tijd + + + Hawaii-Aleoetische standaardtijd + + + HAST + + Hawaii-Aleoetische tijd @@ -4331,9 +4235,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hawaii-Aleoetische zomertijd - HAT - HAST - HADT + HAT + HAST + HADT @@ -4779,6 +4683,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chuukse tijd + + + Turkse tijd + Turkse standaardtijd + Turkse zomertijd + + Turkmeense tijd @@ -4931,14 +4842,247 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + ¤ #,##0.00;¤ -#,##0.00 - #,##0.00 + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 ¤ #,##0.00;(¤ #,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) @@ -4965,6 +5109,259 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;¤ -#,##0.00 + #,##0.00 + + + ¤ #,##0.00;(¤ #,##0.00) + + + Andorrese peseta @@ -5927,6 +6324,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabwaanse dollar + + Zimbabwe Gold + Zimbabwe Gold + Zimbabwe Gold + ZiG + Zimbabwaanse dollar (2009) @@ -6178,11 +6581,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ neuter onderdelen - {0} ond. + {0} onderdeel {0} onderdelen - + + deel + {0} deel + {0} delen + + common + parts per million + {0} part per million + {0} parts per million neuter @@ -6203,6 +6614,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ common + + {0} glucose + {0} glucose + common liter per kilometer @@ -6793,6 +7208,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimeter-kwikdruk {0} millimeter-kwikdruk + + kwik + {0} kwik + {0} kwik + inch-kwikdruk {0} inch-kwikdruk @@ -6985,6 +7405,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metrische cup {0} metrische cup + + metrische fluid ounces + {0} metrische fluid ounce + {0} metrische fluid ounces + acre-feet {0} acre-foot @@ -7089,20 +7514,82 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. quart {0} imp. quarts + + ste­ra­diaal + {0} ste­ra­diaal + {0} ste­ra­dialen + + + katal + {0} katal + {0} katals + + + coulomb + {0} coulomb + {0} coulomb + + + farad + {0} farad + {0} farad + + + henry + {0} henry + {0} henry's + + + siemens + {0} siemens + {0} siemens + + + calorieën [IT] + {0} calorie [IT] + {0} calorieën [IT] + + + becquerel + {0} becquerel + {0} becquerels + + + sievert + {0} sievert + {0} sieverts + + + gray + {0} gray + {0} gray + + + kilogramkracht + {0} kilogramkracht + {0} kilogramkracht + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber + neuter - licht - {0} licht - {0} licht - + common + parts per billion + {0} part per billion + {0} parts per billion common - nachten - {0} nacht - {0} nachten {0} per nacht @@ -7173,12 +7660,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ond. {0} ond. + + deel + {0} deel + {0} delen + + + parts/million + procent promille + + Glc + l/km {0} l/km @@ -7448,11 +7946,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. qt {0} imp. qt + + cal-IT + licht {0} licht {0} licht + + parts/billion + nachten {0} nacht @@ -7487,9 +7991,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/in² + + deel + {0} deel + {0} delen + % + + Glc + {0} m/gUK {0} m/gUK @@ -7606,17 +8118,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} sn {0} sn + + cal-IT + - licht {0}licht {0}licht - - nachten - {0} nacht - {0} nachten - {0}/nacht - diff --git a/make/data/cldr/common/main/nmg.xml b/make/data/cldr/common/main/nmg.xml index b3caea650a8..48985090177 100644 --- a/make/data/cldr/common/main/nmg.xml +++ b/make/data/cldr/common/main/nmg.xml @@ -555,6 +555,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/nn.xml b/make/data/cldr/common/main/nn.xml index 781763020eb..2fc5a6814df 100644 --- a/make/data/cldr/common/main/nn.xml +++ b/make/data/cldr/common/main/nn.xml @@ -79,7 +79,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sørleg tutchone tivi tokelau - tswana tonga (Nyasa) nordleg tutchone tuvalu @@ -205,14 +204,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic normalisert sortering numerisk sortering sorteringsstyrke + emojivising lineskiftstil + lineskift innanfor ord tal valutaformat for rekneskapsføring - tradisjonell kinesisk sortering + rekneskapsføring standard Unicode-sorteringsrekkjefølgje - forenkla kinesisk sortering pinyin-sortering standard sorteringsrekkjefølgje full breidd @@ -222,8 +222,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 24-timarssystem (0–23) 24-timarssystem (1–24) laus lineskiftstil + laus normal lineskiftstil streng lineskiftstil + behald alle + behald i fraser arabisk-indiske siffer utvida arabisk-indiske siffer armenske tal @@ -270,15 +273,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - - - E d.–E d. MMM y G - - - - @@ -392,7 +386,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 'kl'. HH:mm:ss zzzz + HH:mm:ss zzzz 'kl'. HH.mm.ss zzzz @@ -550,15 +544,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic v. - - om {0} v. - om {0} v. - - - for {0} v. sidan - for {0} v. sidan - - veka med {0} veke i månaden @@ -935,9 +920,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ukjend by - - Cuiaba - Kokosøyane @@ -972,9 +954,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yangôn - - Khovd - Maldivane @@ -992,13 +971,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic austafrikansk tid - - - vestafrikansk tid - vestafrikansk standardtid - vestafrikansk sommartid - - alaskisk tid @@ -1922,8 +1894,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic gammalt sudansk pund gamle sudanske pund + + sierraleonsk leone + sierraleonske leonar + sierraleonsk leone (1964—2022) + sierraleonsk leone (1964–2022) + sierraleonske leonar (1964–2022) sovjetiske rublar @@ -2142,7 +2120,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} element {0} elements - + + delar + {0} del + {0} delar + + delar per million {0} del per million {0} del per millions @@ -2363,7 +2346,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic feminine - jordmassar {0} jordmasse {0} jordmassar @@ -2421,6 +2403,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} metriske koppar {0} metriske koppars + + metriske væskeunsar + {0} metrisk væskeunse + {0} metriske væskeunsar + {0} bushel {0} bushels @@ -2469,6 +2456,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic feminine + + steradianar + {0} steradian + {0} steradianar + + + kaloriar [IT] + {0} kalori [IT] + {0} kaloriar [IT] + + + delar per milliard + {0} del per milliard + {0} del per milliards + {0} delar per milliard + {0} delar per milliards + feminine @@ -2694,7 +2698,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} b. quart {0} b. quart - + delar/milliard diff --git a/make/data/cldr/common/main/no.xml b/make/data/cldr/common/main/no.xml index 6f4c4cd9c0e..b1112090dd3 100644 --- a/make/data/cldr/common/main/no.xml +++ b/make/data/cldr/common/main/no.xml @@ -121,6 +121,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ chipewiansk cherokesisk cheyenne + chickasaw sentralkurdisk kurdisk (sentral) kurdisk (sorani) @@ -320,6 +321,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kølnsk kurdisk + kurdisk + kurmanji kumykisk kutenai komi @@ -927,7 +930,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kina Colombia Clippertonøya - Sark + Sark Costa Rica Cuba Kapp Verde @@ -1237,35 +1240,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Numerisk sortering Sorteringsstyrke valuta + emojivisning timesyklus (12 eller 24) linjeskiftstil + linjeskift innenfor ord målesystem tall + Ny setning etter fork. tidssone språkvariant privat bruk buddhistisk kalender + buddhistisk kinesisk kalender + kinesisk koptisk kalender + koptisk dangisk kalender + dangisk etiopisk kalender + etiopisk etiopisk amete-alem-kalender + etiopisk amete-alem gregoriansk kalender + gregoriansk hebraisk kalender + hebraisk indisk nasjonalkalender hijrikalender + hijri hijrikalender (tabell, sivil) + hijri (tabell, sivil) islamsk kalender (Saudi-Arabia, observasjon) islamsk kalender (tabell, astronomisk) hijrikalender (Umm al-Qura) + hijri (Umm al-Qura) ISO 8601-kalender japansk kalender + japansk persisk kalender + persisk minguo-kalender + minguo valutaformat for regnskapsføring + regnskapsføring standard valutaformat + standard sortér symboler Ignorer symboler under sortering sortér aksenttegn normalt @@ -1275,23 +1297,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sortér store bokstaver først Sortér uavhengig av store og små bokstaver. Sortér med skille mellom små og store bokstaver - tradisjonell kinesisk sortering - Big 5 forrige sorteringsrekkefølge (for kompatibilitet) + kompatibilitet ordlistesortering + ordliste standard Unicode-sorteringsrekkefølge + standard Unicode emoji-sorteringsrekkefølge sorteringsrekkefølge for flerspråklige europeiske dokumenter - forenklet kinesisk sortering - GB2312 telefonkatalogsortering + telefonkatalog fonetisk sortering + fonetisk pinyinsortering + pinyin generelt søk + søk Søk etter første konsonant i hangul standard sorteringsrekkefølge + standard streksortering + strek tradisjonell sortering + tradisjonell radikal-strek-sortering + radikal-strek zhuyin-sortering + zhuyin Sortér uten normalisering Sortér Unicode normalisert Sortér sifre individuelt @@ -1304,18 +1336,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ full bredde halv bredde Numerisk + standard + emoji + tekst 12-timers system (0–11) + 12 (0–11) 12-timers system (1–12) + 12 (1–12) 24-timers system (0–23) + 24 (0–23) 24-timers system (1–24) + 24 (1–24) løs linjeskiftstil + løs normal linjeskiftstil + normal streng linjeskiftstil + streng + bryt alle + behold alle + normal + behold i fraser USBGN-translitterasjon UNGEGN-translitterasjon metrisk system + metrisk britisk målesystem + britisk amerikansk målesystem + amerikansk arabisk-indiske sifre utvidede arabisk-indiske sifre armenske tall @@ -1381,6 +1430,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tangsa-sifre Tradisjonelle tall vai-sifre + av + metrisk @@ -1540,7 +1591,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a–h a - h–h a h:mm a–h:mm a @@ -1554,7 +1604,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a–h a v - h–h a v MM.–MM. @@ -1630,20 +1679,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - 0. tidsalder - 1. tidsalder - - - 0. t.a. - 1. t.a. - - - TA0 - TA1 - - @@ -1675,20 +1710,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - 0. tidsalder - 1. tidsalder - - - 0. t.a. - 1. t.a. - - - TA0 - TA1 - - @@ -1700,19 +1721,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - - 0. tidsalder - - - 0. t.a. - - - TA0 - - - @@ -1745,6 +1753,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1753,6 +1764,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -1770,13 +1784,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G - dd.MM.y GGGGG + M.y G + dd.MM.y G + E d.M.y G MMM y G d. MMM y G E d. MMM y G - h a + H h:mm a h:mm:ss a + HH't' v L. d.M. E d.M @@ -1848,7 +1865,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a h:mm a – h:mm a @@ -1862,7 +1878,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M.–M. @@ -2176,6 +2191,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -2184,6 +2202,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'kl'. {0} + + {1} 'kl'. {0} + @@ -2203,15 +2224,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm:ss a E 'kl'. HH:mm:ss y G - dd.MM.y GGGGG + M.y G + d.M.y G + E d.M.y G MMM y G d. MMM y G E d. MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH v L. d.M. E d.M. @@ -2285,7 +2308,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a–h a - h–h a + + + HH–HH 't' h:mm a–h:mm a @@ -2299,7 +2324,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a–h a v - h–h a v M.–M. @@ -3195,11 +3219,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sommertid – {0} normaltid – {0} - - HST - HST - HDT - Honolulu @@ -3210,18 +3229,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ukjent by - - Tirana - Jerevan - - Tucumán - - - Córdoba - Wien @@ -3231,24 +3241,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saint-Barthélemy - - Cuiabá - - - Santarém - - - Belém - - - Araguaína - - - São Paulo - - - Maceió - Thimpu @@ -3261,12 +3253,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Påskeøya - - Ürümqi - - - Bogotá - Kapp Verde @@ -3279,9 +3265,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Praha - - Büsingen - København @@ -3294,9 +3277,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kairo - - El Aaiún - Kanariøyene @@ -3350,9 +3330,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bisjkek - Enderbury - - Kantonøya @@ -3376,9 +3353,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Luxemburg - - Chișinău - Ulan Bator @@ -3391,9 +3365,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Mexico by - - Nouméa - Norfolkøya @@ -3439,15 +3410,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kamtsjatka - - Mahé - Damaskus - - Lomé - Dusjanbe @@ -3504,9 +3469,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - vestafrikansk tid - vestafrikansk normaltid - vestafrikansk sommertid + vestafrikansk tid @@ -3942,6 +3905,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ guyansk tid + + + normaltid for Hawaii og Aleutene + + + HAST + + tidssone for Hawaii og Aleutene @@ -4587,9 +4558,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4597,9 +4572,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4607,9 +4586,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4617,9 +4600,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4627,9 +4614,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4637,9 +4628,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4647,9 +4642,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4657,9 +4656,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4667,9 +4670,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4677,9 +4684,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4687,9 +4698,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4697,9 +4712,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4707,9 +4726,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4717,9 +4740,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4727,9 +4754,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4737,9 +4768,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4747,9 +4782,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4757,9 +4796,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4767,39 +4810,41 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤;-#,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + #,##0.00 ¤ #,##0.00;(¤ #,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) - ¤ 0k - ¤ 0k - ¤ 00k - ¤ 00k - ¤ 000k - ¤ 000k - ¤ 0 mill'.' - ¤ 0 mill'.' - ¤ 00 mill'.' - ¤ 00 mill'.' - ¤ 000 mill'.' - ¤ 000 mill'.' - ¤ 0 mrd'.' - ¤ 0 mrd'.' - ¤ 00 mrd'.' - ¤ 00 mrd'.' - ¤ 000 mrd'.' - ¤ 000 mrd'.' - ¤ 0 bill'.' - ¤ 0 bill'.' - ¤ 00 bill'.' - ¤ 00 bill'.' - ¤ 000 bill'.' - ¤ 000 bill'.' + 0k ¤ + 0k ¤ + 00k ¤ + 00k ¤ + 000k ¤ + 000k ¤ + 0 mill'.' ¤ + 0 mill'.' ¤ + 00 mill'.' ¤ + 00 mill'.' ¤ + 000 mill'.' ¤ + 000 mill'.' ¤ + 0 mrd'.' ¤ + 0 mrd'.' ¤ + 00 mrd'.' ¤ + 00 mrd'.' ¤ + 000 mrd'.' ¤ + 000 mrd'.' ¤ + 0 bill'.' ¤ + 0 bill'.' ¤ + 00 bill'.' ¤ + 00 bill'.' ¤ + 000 bill'.' ¤ + 000 bill'.' ¤ @@ -4807,9 +4852,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4817,9 +4866,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4827,9 +4880,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4837,9 +4894,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4847,9 +4908,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4857,9 +4922,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4867,9 +4936,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4877,9 +4950,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4887,9 +4964,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4897,9 +4978,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4907,9 +4992,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4917,9 +5006,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4927,9 +5020,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4937,9 +5034,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4947,9 +5048,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4957,9 +5062,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4967,9 +5076,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4977,9 +5090,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4987,9 +5104,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -4997,9 +5118,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -5007,9 +5132,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -5017,9 +5146,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -6406,6 +6539,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ østkaribiske dollar XCD + + karibiske gylden + karibisk gylden + karibiske gylden + spesielle trekkrettigheter spesiell trekkrettighet @@ -6532,6 +6670,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ zimbabwisk dollar (1980–2008) zimbabwiske dollar (1980–2008) + + zimbabwiske gull + zimbabwisk gull + zimbabwiske gull + zimbabwisk dollar (2009) zimbabwisk dollar (2009) @@ -6957,7 +7100,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} item {0} items - + + deler + {0} del + {0} deler + + masculine deler per million {0} del per million @@ -6993,6 +7141,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} mols + + glukose + {0} glukose + {0} glukose + masculine liter per kilometer @@ -7691,6 +7844,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} millimeter kvikksølv {0} millimeter kvikksølvs + + kvikksølv + {0} kvikksølv + {0} kvikksølv + pund per kvadrattomme {0} pund per kvadrattomme @@ -7944,6 +8102,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metriske kopper {0} metriske koppers + + metriske væskeunser + {0} metrisk væskeunse + {0} metriske væskeunser + {0} acre-fot {0} acre-fot @@ -8037,7 +8200,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - {0} klyper + {0} klype {0} klyper @@ -8046,15 +8209,79 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} britisk quart {0} britiske quart + + steradianer + {0} steradian + {0} steradianer + + + katal + {0} katal + {0} katal + + + coulomb + {0} coulomb + {0} coulomb + + + farad + {0} farad + {0} farad + + + henry + {0} henry + {0} henry + + + siemens + {0} siemens + {0} siemens + + + kalorier [IT] + {0} kalori [IT] + {0} kalorier [IT] + + + becquerel + {0} becquerel + {0} becquerel + + + sievert + {0} sievert + {0} sievert + + + gray + {0} gray + {0} gray + + + kilopond + {0} kilopond + {0} kilopond + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber + neuter - lys {0} lys {0} lys' {0} lys {0} lys' - + masculine deler per milliard {0} del per milliard @@ -8064,7 +8291,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - netter {0} natt {0} natts {0} netter @@ -8136,6 +8362,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmol/l {0} mmol/l + + del + {0} del + {0} del + prosent {0} % @@ -8151,6 +8382,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glk + {0} Glk + {0} Glk + liter/km {0} l/km @@ -8547,7 +8783,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ klype - {0} klyper + {0} klype {0} klyper @@ -8555,14 +8791,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. quart {0} imp. quart + + cal-IT + + + kp + {0} kp + {0} kp + lys {0} lys {0} lys - - deler/milliard - netter {0} natt @@ -8643,7 +8884,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmol/l {0}mmol/l - + + del + {0} del + {0} del + + {0}ppm {0}ppm @@ -8666,6 +8912,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mol {0}mol + + Glk + {0} Glk + {0} Glk + l/km {0}l/km @@ -9096,21 +9347,23 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt. Imp. {0} qt. Imp. + + cal-IT + + + kp + {0} kp + {0} kp + - lys {0}lys {0}lys - + + ppb {0}ppb {0}ppb - - netter - {0} natt - {0} netter - {0}/natt - {0}Ø {0}N diff --git a/make/data/cldr/common/main/nqo.xml b/make/data/cldr/common/main/nqo.xml index 035bcb49c1b..6fb67d952cb 100644 --- a/make/data/cldr/common/main/nqo.xml +++ b/make/data/cldr/common/main/nqo.xml @@ -1710,7 +1710,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ߔߑߣߐ߲߫ ߔߍ߲߫ - + ߞߊ߲ߕߐ߲߫ @@ -2380,9 +2380,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ߝߘߊ߬ߝߌ߲߬ߠߊ߫ ߕߟߋ߬ߓߋ ߕߎ߬ߡߊ߬ߙߋ߲ - ߝߘߊ߬ߝߌ߲߬ߠߊ߫ ߕߟߋ߬ߓߋ ߕߎ߬ߡߊ߬ߙߋ߲ ߢߊߓߘߍ - ߝߘߊ߬ߝߌ߲߬ߠߊ߫ ߕߟߋ߬ߓߋ ߕߟߋ߬ߡߊ߬ ߕߎߡߊߙߋ߲ + ߝߘߊ߬ߝߌ߲߬ߠߊ߫ ߕߟߋ߬ߓߋ ߕߎ߬ߡߊ߬ߙߋ߲ @@ -2732,6 +2730,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ߜ߭ߎߦߣߊ߫ ߕߎ߬ߡߊ߬ߘߊ + + + ߤߥߊߦ - ߊߟߋߦߎߕߌߦߊ߲߫ ߕߎ߬ߡߘߊ߬ ߛߎߡߊ߲ߘߊ߲ߕߊ + + ߤߥߊߦ - ߊߟߋߦߎߕߌߦߊ߲߫ ߕߎ߬ߡߊ߬ߘߊ diff --git a/make/data/cldr/common/main/nso.xml b/make/data/cldr/common/main/nso.xml index 83e2ad877e0..39fb2b0f8a7 100644 --- a/make/data/cldr/common/main/nso.xml +++ b/make/data/cldr/common/main/nso.xml @@ -35,30 +35,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic [c q v z] [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] - - - - - - - Phere - Dibo - Hlak - Mora + Jan + Feb + Mat + Apo Mei - June - Mose - Agosetose - Lewe - Dipha - Diba - Manth + Jun + Jul + Ago + Sep + Okt + Nof + Dis Janeware @@ -127,6 +121,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + Kotara 1 + Kotara 2 + Kotara 3 + Kotara 4 + 1st Kotara 2nd Kotara @@ -227,6 +227,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm a v 'beke' W 'ya' MMM 'beke' 'ya' 'bo' W 'ya' MMM + dd-MM-y + d MMM y 'beke' 'ya' 'bo' w 'ya' Y 'beke' 'ya' 'bo' w 'ya' Y @@ -297,6 +299,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + ngwaga wa go feta + ngwaga wo + ngwaga wo o tlago + + + kgwedi ye e fetilego + kgwedi ye + kgwedi ye e tlago + + + beke ye e fetilego + beke ye + beke ye e tlago + + + maabane + lehono + gosasa + + + LaMorena le fetilego + LaMorena le + LaMorena le latelago + + @@ -306,9 +335,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - -   - diff --git a/make/data/cldr/common/main/oc.xml b/make/data/cldr/common/main/oc.xml index 869bf9b9931..70f3943ab2a 100644 --- a/make/data/cldr/common/main/oc.xml +++ b/make/data/cldr/common/main/oc.xml @@ -576,7 +576,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd @@ -1231,9 +1231,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ora d’Africa occidentala - ora estandarda d’Africa occidentala - ora d’estiu d’Africa occidentala + ora d’Africa occidentala @@ -1583,6 +1581,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ora de la Guayana + + + ora estandarda de Hawai-Aleutianes + + ora de Hawai-Aleutianes @@ -2226,168 +2229,252 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} @@ -2396,210 +2483,316 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ #,##0.00¤;(#,##0.00¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) 0K¤ + 0K ¤ 00K¤ + 00K ¤ 000K¤ + 000K ¤ 0M¤ + 0M ¤ 00M¤ + 00M ¤ 000M¤ + 000M ¤ 0G¤ + 0G ¤ 00G¤ + 00G ¤ 000G¤ + 000G ¤ 0T¤ + 0T ¤ 00T¤ + 00T ¤ 000T¤ + 000T ¤ {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} + + #,##0.00 ¤ + - #,##0.00 + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) {0} {1} @@ -3500,7 +3693,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimòls per litres {0} milimòls per litres - + partidas per milions {0} partidas per milions diff --git a/make/data/cldr/common/main/oc_ES.xml b/make/data/cldr/common/main/oc_ES.xml index df686405e32..e0377e605c0 100644 --- a/make/data/cldr/common/main/oc_ES.xml +++ b/make/data/cldr/common/main/oc_ES.xml @@ -27,7 +27,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic espanhòu latinoamerican espanhòu d’Espanha espanhòu de Mexic - finés francés canadienc francés suís hindi (latin) @@ -41,7 +40,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic tailandés lengua desconeishuda chinés mandarin - shinés simplificat chinés tradicionau chinés mandarin tradicionau @@ -50,7 +48,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - @@ -68,7 +65,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nòrt America Asia orientau Asia meridionau - Sudèst aisatic + Sudèst asiatic Euròpa meridionau Australasia Region de Micronesia @@ -241,7 +238,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic … {0} [''’ ՚ ᾽᾿ ʼ ߴ] - [££ ₤] [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -475,6 +471,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + G + H + M + A + M + J + J + A + S + O + N + D + gèr hereuèr @@ -645,9 +655,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic h B h:mm B - h:mm:ss B E h:mm B - E h:mm:ss B E d E h:mm a E, H:mm @@ -877,9 +885,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ciutat desconeishuda - - Tirana - Ereván @@ -965,7 +970,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Santiago de Chile - Ürümqi + Urumqui Bogotá @@ -979,9 +984,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Cabo Verde - - Curaçao - Nadau @@ -1062,9 +1064,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tokio - - Comores - Sant Cristòbal @@ -1086,6 +1085,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kyzylorda + + Vientian + Santa Lucía @@ -1095,6 +1097,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Trípoli + + Chisinau + Skopie @@ -1140,6 +1145,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Catar + + Reunion + Bucarest @@ -1173,9 +1181,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Riad - - Mahé - Jartum @@ -1206,9 +1211,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Yamena - - Lomé - Dusambé @@ -1230,6 +1232,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Simferòpol + + Isla Wake + Beulah, Dakota deth Nòrd @@ -1260,6 +1265,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ciutat Ho Chi Minh + + Wallis e Furtuna + ora d’Africa central @@ -1272,9 +1280,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ora d’Africa occidentau - ora esdandard d’Africa occidentau - ora d’estiu d’Africa occidentau + ora d’Africa occidentau @@ -1558,6 +1564,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ora de Guyana + + + ora estandard de Hawai-Aleutianes + + ora de Hawai-Aleutianes @@ -1632,6 +1643,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ora d’estiu de Japon + + + ora de Kazajistan + + ora de Kazajistan orientau @@ -2103,6 +2119,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2110,6 +2128,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2117,6 +2137,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2124,6 +2146,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2131,6 +2155,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2138,6 +2164,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2145,6 +2173,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2152,6 +2182,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2159,6 +2191,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2166,6 +2200,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2173,6 +2209,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2180,6 +2218,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2187,6 +2227,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2194,6 +2236,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2201,6 +2245,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2208,6 +2254,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2215,6 +2263,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2222,6 +2272,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2229,6 +2281,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2236,6 +2290,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2243,6 +2299,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2250,6 +2308,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2257,6 +2317,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2264,6 +2326,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2271,6 +2335,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2278,6 +2344,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2285,6 +2353,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2292,6 +2362,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2299,6 +2371,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2306,6 +2380,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2313,6 +2389,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2320,6 +2398,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2327,6 +2407,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2334,6 +2416,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2341,6 +2425,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2348,6 +2434,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2355,6 +2443,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2362,6 +2452,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2369,6 +2461,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2376,6 +2470,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2383,6 +2479,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2390,6 +2488,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2397,6 +2497,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2404,6 +2506,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 @@ -2411,6 +2515,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00¤ + #,##0.00 ¤ + #,##0.00 diff --git a/make/data/cldr/common/main/oka.xml b/make/data/cldr/common/main/oka.xml new file mode 100644 index 00000000000..a0cc05ef8e2 --- /dev/null +++ b/make/data/cldr/common/main/oka.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + n̓səl̓xcin̓ + + + + [aá {aˤ}{áˤ} c{c̓}č ə ɣ h ií ɪ{ɪ́} k{k̓} {kʷ}{k̓ʷ} l{l̓} ɬ {ƛ̓} m{m̓} n{n̓} p{p̓} q{q̓} {qʷ}{q̓ʷ} r s t{t̓} uú w{w̓} x{x̌} {xʷ}{x̌ʷ} y{y̓} ʔ ʕ{ʕ̓} {ʕʷ}{ʕ̓ʷ}] + [b d e f g j o v z] + [\- ‑ , ; \: ! ? . '‘’ "“” ( ) \[ \] @ * / \& #] + + diff --git a/make/data/cldr/common/main/oka_CA.xml b/make/data/cldr/common/main/oka_CA.xml new file mode 100644 index 00000000000..3035f46d11e --- /dev/null +++ b/make/data/cldr/common/main/oka_CA.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/make/data/cldr/common/main/oka_US.xml b/make/data/cldr/common/main/oka_US.xml new file mode 100644 index 00000000000..5c3c4b73808 --- /dev/null +++ b/make/data/cldr/common/main/oka_US.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/make/data/cldr/common/main/om.xml b/make/data/cldr/common/main/om.xml index 6416d60b7c5..fe0c3d5b9ad 100644 --- a/make/data/cldr/common/main/om.xml +++ b/make/data/cldr/common/main/om.xml @@ -537,21 +537,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic H Q - - Fulbaana - Guraandhala - Sadaasa - Mudde - Amajji - Waxabajjii - Bitootessa - Eebila - Caamsaa - Onkoloolessa - Adoolessa - Hagayya - Qaam’ee - @@ -602,17 +587,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} - - {1}, {0} - {1}, {0} - - {1}, {0} - y G @@ -752,20 +731,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sadaasa Mud - - A - G - B - E - C - W - A - H - F - O - S - M - Amajjii Guraandhala @@ -782,20 +747,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Ama - Gur - Bitootessa - Elb - Cam - Wax - Ado - Hag - Ful - Onk - Sadaasa - Mud - A G @@ -810,20 +761,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic S M - - Amajjii - Guraandhala - Bitootessa - Eebila - Caamsaa - Waxabajjii - Adoolessa - Hagayya - Fulbaana - Onkoloolessa - Sadaasa - Mudde - @@ -837,24 +774,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Jim San - - D - W - K - R - K - J - S - - - Dil - Wix - Kib - Rob - Kam - Jim - San - Dilbata Wiixata @@ -866,15 +785,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Dil - Wix - Kib - Rob - Kam - Jim - San - D W @@ -884,24 +794,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic J S - - Dil - Wix - Kib - Rob - Kam - Jim - San - - - Dilbata - Wiixata - Kibxata - Roobii - Kamisa - Jimaata - Sanbata - @@ -919,20 +811,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kurmaana 4ffaa - - - K1 - K2 - K3 - K4 - - - Kurmaana 1ffaa - Kurmaana 2ffaa - Kurmaana 3ffaa - Kurmaana 4ffaa - - @@ -957,9 +835,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dh - BWD B - BW @@ -1034,17 +910,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} - - {1}, {0} - {1}, {0} - - {1}, {0} - E h:mm a @@ -1052,7 +922,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM y G MMM d, y G E, MMM d, y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1116,7 +985,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic h a – h a  - h–h a h:mm a – h:mm a @@ -1128,10 +996,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M – M @@ -1143,11 +1007,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, M/d – E, M/d E, M/d – E, M/d - - MMM d – MMM d - - MMM d, E – MMM d, E E, MMM d – E, MMM d @@ -1190,12 +1050,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic bara - - bara - - - bara - waggaa waggaa darbe @@ -1226,9 +1080,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic wg - wg. darbe - wg. kana - wg. dhufu w {0} keessatti w {0} keessatti @@ -1310,9 +1161,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ji - ji. darbe - ji. kana - ji. dhufu ji {0} keessatti ji {0} keessatti @@ -1350,13 +1198,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic tr. {0} darbe tr. {0} darbe - torban {0} tr - tr. darbe - tr. kana - tr. dhufu w {0} keessatti w {0} keessatti @@ -1365,7 +1209,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic w {0} darbe w {0} darbe - torban {0} torbrr ji’aa @@ -1390,25 +1233,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic guyyoota {0} darban - - guyyaa - kaleessa - har’a - boru - - guyyaa {0} keessatti - guyyoota {0} keessatti - - - guyyaa {0} darbe - guyyoota {0} darban - - - guyyaa - kaleessa - har’a - boru g {0} keessatti g {0} keessatti @@ -1424,27 +1249,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic guyyaa kan wg. - - guyyaa kan wg. - guyyaa kan torbee guyyaa kan tr. - - guyyaa kan tr. - guyyaatorbee kan ji’aa gytr. kan ji. - - gytr. kan ji. - Dilbata darbe Dilbata kana @@ -1718,15 +1534,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic sa {0} dura - - WD/WB - WD/WB - - WD/WB - sa’aatii sa’aatii kana @@ -1741,7 +1551,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sa. - sa’aatii kana sa. {0} keessatti sa. {0} keessatti @@ -1753,7 +1562,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sa - sa’aatii kana h {0} keessatti h {0} keessatti @@ -1788,7 +1596,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic dq - daqiiqaa kana d {0} keessatti d {0} keessatti @@ -1812,7 +1619,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sek. - amma sek. {0} keessatti sek. {0} keessatti @@ -1824,7 +1630,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic sek - amma s {0} keessatti s {0} keessatti @@ -1840,9 +1645,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic zoonii - - zoonii - Sa’aatii {0} @@ -1885,9 +1687,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Sa’aatii Afrikaa Dhihaa - Sa’aatii Istaandaardii Afrikaa Dhihaa - Sa’aatii Bonaa Afrikaa Dhihaa + Sa’aatii Afrikaa Dhihaa @@ -2272,6 +2072,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sa’aatii Guyaanaa + + + Sa’aatii Istaandaardii Haawayi-Alewutiyan + + + HAS + + Sa’aatii Haawayi-Alewutiyan diff --git a/make/data/cldr/common/main/or.xml b/make/data/cldr/common/main/or.xml index 77f1ebb89a2..cabc4fdf545 100644 --- a/make/data/cldr/common/main/or.xml +++ b/make/data/cldr/common/main/or.xml @@ -279,6 +279,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ବାଫଲା କୋଲୋବନିୟ କୁର୍ଦ୍ଦିଶ୍ + କୁର୍ଦ୍ଦିଶ୍‌ + କୁର୍‌ମାଞ୍ଜି କୁମୀକ୍ କୁତେନାଉ କୋମି @@ -801,6 +803,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଚୀନ୍‌ କଲମ୍ବିଆ କ୍ଲିପରଟନ୍‌ ଦ୍ୱୀପ + ସର୍କ୍‌ କୋଷ୍ଟା ରିକା କ‍୍ୟୁବା କେପ୍ ଭର୍ଦେ @@ -1045,43 +1048,83 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ମୁଦ୍ରା ଫର୍ମାଟ୍‌ ସର୍ଟ୍‌ କ୍ରମ ମୁଦ୍ରା + ଦର୍ଶାଯାଇଥିବା ଇମୋଜି ଘଣ୍ଟା ଚକ୍ର (12 ବନାମ 24) ଲାଇନ୍‌ ବ୍ରେକ୍‌ ଷ୍ଟାଇଲ୍‌ + ଶବ୍ଦଗୁଡ଼ିକ ଥିବା ଲାଇନ ବ୍ରେକ ମାପ ପଦ୍ଧତି ସଂଖ୍ୟା + Abbr ପରେ ଥିବା ବାକ୍ୟ ବୌଦ୍ଧ କ୍ୟାଲେଣ୍ଡର୍‌ + ବୌଦ୍ଧ ଚାଇନିଜ୍‌ କ୍ୟାଲେଣ୍ଡର୍‌ + ଚାଇନିଜ୍‌ କପ୍ଟିକ୍ କ୍ୟାଲେଣ୍ଡର୍‌ + କପ୍ଟିକ୍‌ ଦାଙ୍ଗି କ୍ୟାଲେଣ୍ଡର୍‌ + ଦାଙ୍ଗି ଇଥିଓପିକ୍‌ କ୍ୟାଲେଣ୍ଡର୍‌ + ଇଥିଓପିକ୍‌ ଏଥିଓପିକ୍-ଆମେଟ୍-ଆଲେମ୍ + ଇଥିଓପିକ୍ ଆମେଟେ ଆଲେମ୍ ଗ୍ରେଗୋରିୟ କ୍ୟାଲେଣ୍ଡର୍ + ଗ୍ରେଗୋରିଆନ୍‌ ହିବୃ କ୍ୟାଲେଣ୍ଡର୍‌ + ହିବୃ ଭାରତୀୟ ରାଷ୍ଟ୍ରୀୟ କ୍ୟାଲେଣ୍ଡର୍‌ + ଭାରତୀୟ ଜାତୀୟ ହିଜ୍ରି କ୍ୟାଲେଣ୍ଡର + ହିଜ୍ରି ହିଜ୍ରି କ୍ୟାଲେଣ୍ଡର (ଟାବୁଲାର୍, ନାଗରିକ ଯୁଗ) + ହିଜ୍ରି (ଟାବୁଲାର୍, ସିଭିଲ୍‌ ଆରମ୍ଭ କାଳ) ହିଜ୍ରି କ୍ୟାଲେଣ୍ଡର (ଉମ୍ ଅଲ୍-କୁରା) + ହିଜ୍ରି (ଉମ୍ ଅଲ୍-କୁରା) ISO-8601 କ୍ୟାଲେଣ୍ଡର୍‌ ଜାପାନିଜ୍‌ କ୍ୟାଲେଣ୍ଡର୍‌ + ଜାପାନିଜ୍‌ ପର୍ସିଆନ୍‌ କ୍ୟାଲେଣ୍ଡର୍‌ + ପର୍ସିଆନ୍‌ ମିଙ୍ଗୋଓ କ୍ୟାଲେଣ୍ଡର୍‌ - ଏକାଉଣ୍ଟିଂ ମୁଦ୍ରା ଫର୍ମାଟ୍‌ - ମାନାଙ୍କ ମୁଦ୍ରା ଫର୍ମାଟ୍‌ + ମିଙ୍ଗ୍‌ୱୋ + ଆକାଉଣ୍ଟିଂ ମୁଦ୍ରା ଫର୍ମାଟ୍‌ + ଆକାଉଣ୍ଟିଂ + ମାନକ ମୁଦ୍ରା ଫର୍ମାଟ୍‌ + ମାନକ ଡିଫଲ୍ଟ ୟୁନିକୋଡ୍‌ ସର୍ଟ୍‌ କ୍ରମ + ଡିଫଲ୍ଟ୍‌ ୟୁନିକୋଡ୍‌ ସାଧାରଣ ଉଦ୍ଦେଶ୍ୟ-ବିଶିଷ୍ଟ ସନ୍ଧାନ + ସର୍ଚ୍ଚ୍‌ ଷ୍ଟାଣ୍ଡାର୍ଡ୍‌ ସର୍ଟ୍‌ କ୍ରମ + ଷ୍ଟାଣ୍ଡାର୍ଡ୍‌ + ଡିଫଲ୍ଟ୍‌ + ଇମୋଜି + ଟେକ୍ସ୍‌ଟ୍‌ 12 ଘଣ୍ଟିଆ ପଦ୍ଧତି (0–11) + 12 (0–11) 12 ଘଣ୍ଟିଆ ପଦ୍ଧତି (1–12) + 12 (1–12) 24 ଘଣ୍ଟିଆ ପଦ୍ଧତି (0–23) + 24 (0–23) 24 ଘଣ୍ଟିଆ ପଦ୍ଧତି (1–24) + 24 (1–24) କୋହଳ ଲାଇନ୍‌ ବ୍ରେକ୍‌ ଷ୍ଟାଇଲ୍‌ + କୋହଳ ସାଧାରଣ ଲାଇନ୍‌ ବ୍ରେକ୍‌ ଷ୍ଟାଇଲ୍‌ + ସାଧାରଣ କଠୋର ଧାଡ଼ି ବିରତି ଶୈଳୀ + କଠୋର + ସବୁ ବ୍ରେକ୍ କରନ୍ତୁ + ସବୁ ରଖନ୍ତୁ + ସାଧାରଣ + ବାକ‍୍ୟାଂଶରେ ରଖନ୍ତୁ ମେଟ୍ରିକ୍‌ ପଦ୍ଧତି + ମେଟ୍ରିକ୍‌ ଇମ୍ପେରିଆଲ୍‌ ମାପ ପଦ୍ଧତି + UK ୟୁଏସ୍‌ ମାପ ପଦ୍ଧତି + US ଆରବିକ୍‌-ଇଣ୍ଡିକ୍‌ ଅଙ୍କଗୁଡ଼ିକ ପରିବର୍ଦ୍ଧିତ ଆରବିକ୍‌-ଇଣ୍ଡିକ୍‌ ଅଙ୍କଗୁଡ଼ିକ ଆର୍ମେନିୟ ସଂଖ୍ୟାଗୁଡ଼ିକ @@ -1123,6 +1166,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଥାଇ ଅଙ୍କଗୁଡ଼ିକ ତିବତୀ ଅଙ୍କଗୁଡ଼ିକ ଭାଇ ଅଙ୍କଗୁଡ଼ିକ + ଅଫ୍‌ + ଅନ୍‌ ମେଟ୍ରିକ୍‌ @@ -1138,11 +1183,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [଼ ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଏ ଐ ଓ ଔ ଁ ଂ ଃ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ{ଡ଼} ଢ{ଢ଼} ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯୟ ର ଲ ଳ ଵ ୱ ଶ ଷ ସ ହ {କ୍ଷ} ା ି ୀ ୁ ୂ ୃ େ ୈ ୋ ୌ ୍] [\u200C\u200D] - [ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଏ ଐ ଓ ଔ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯ ର ଲ ଳ ଶ ଷ ସ ହ {କ୍ଷ}] + [ଅ ଆ ଇ ଈ ଉ ଊ ଋ ଏ ଐ ଓ ଔ କ ଖ ଗ ଘ ଙ ଚ ଛ ଜ ଝ ଞ ଟ ଠ ଡ ଢ ଣ ତ ଥ ଦ ଧ ନ ପ ଫ ବ ଭ ମ ଯୟ ର ଲ ଳ ୱ ଶ ଷ ସ ହ {କ୍ଷ}] [\- ‑ , . % ‰ + 0୦ 1୧ 2୨ 3୩ 4୪ 5୫ 6୬ 7୭ 8୮ 9୯] - [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [୦ ୧ ୨ ୩ ୪ ୫ ୬ ୭ ୮ ୯] + [\- ‐‑ – — , ; \: ! ? . … । '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [॥] - [££ ₤] [₹ {ଟ.} {ଟଙ୍କା} {Rp} {Rs}₨] @@ -1206,6 +1252,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d E y G + G dd-MM-y, E MMM y G MMM d, y G E, MMM d, y G @@ -1395,8 +1442,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Q1 Q2 - 3ୟ ତ୍ରୟମାସ - 4ର୍ଥ ତ୍ରୟମାସ + Q3 + Q4 1ମ ତ୍ରୟମାସ @@ -1415,21 +1462,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - ପୂ - - - - - ପୂର୍ବାହ୍ନ - ଅପରାହ୍ନ - AM PM + + AM + PM + @@ -1526,6 +1567,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d E y G M/d/y G + G dd-MM-y, E MMM y G MMM d, y G E, MMM d, y G @@ -1641,50 +1683,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - ଚୈତ୍ର - ବୈଶାଖ - ଜ୍ୟେଷ୍ଠ - ଆଷାଢ଼ - ଶ୍ରାବଣ - ଭାଦ୍ରବ - ଆଶ୍ଵିନ - କାର୍ତ୍ତିକ - ମାର୍ଗଶିର - ପୌଷ - ମାଘ - ଫାଲଗୁନ - - - ଚୈତ୍ର - ବୈଶାଖ - ଜ୍ୟେଷ୍ଠ - ଆଷାଢ଼ - ଶ୍ରାବଣ - ଭାଦ୍ରବ - ଆଶ୍ଵିନ - କାର୍ତ୍ତିକ - ମାର୍ଗଶିର - ପୌଷ - ମାଘ - ଫାଲଗୁନ - - - - - ଚୈତ୍ର - ବୈଶାଖ - ଜ୍ୟେଷ୍ଠ - ଆଷାଢ଼ - ଶ୍ରାବଣ - ଭାଦ୍ରବ - ଆଶ୍ଵିନ - କାର୍ତ୍ତିକ - ମାର୍ଗଶିର - ପୌଷ - ମାଘ - ଫାଲଗୁନ - ଚୈତ୍ର ବୈଶାଖ @@ -1856,9 +1854,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ମାସର ସାପ୍ତାହିକ ଦି. - - ମାସର ସାପ୍ତାହିକ ଦି. - ଗତ ରବିବାର ଏହି ରବିବାର @@ -2065,15 +2060,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ଶନି. ପୂର୍ବେ - - AM/PM - AM/PM - - AM/PM - ଘଣ୍ଟା ଏହି ଘଣ୍ଟା @@ -2509,6 +2498,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଇଷ୍ଟର୍‌ + + କୋୟାଇକେ + ପୁଣ୍ଟା ଏରିନାସ୍‌ @@ -2774,9 +2766,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଫନୋମ୍‌ ପେନହ - ଏଣ୍ଡେରବୁରି - - କ୍ୟାଣ୍ଟନ @@ -3453,9 +3442,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ପଶ୍ଚିମ ଆଫ୍ରିକା ସମୟ - ପଶ୍ଚିମ ଆଫ୍ରିକା ମାନାଙ୍କ ସମୟ - ପଶ୍ଚିମ ଆଫ୍ରିକା ଖରାଦିନ ସମୟ + ପଶ୍ଚିମ ଆଫ୍ରିକା ସମୟ @@ -3836,6 +3823,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଗୁଏନା ସମୟ + + + ହୱାଇ-ଆଲେଉଟିୟ ମାନାଙ୍କ ସମୟ + + ହୱାଇ-ଆଲେଉଟିୟ ସମୟ @@ -4448,7 +4440,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4495,17 +4486,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤000ବି ¤ 000ବି ¤0ଟ୍ରି - ¤ 0T + ¤ 0ଟ୍ରି ¤0ଟ୍ରି - ¤ 0T + ¤ 0ଟ୍ରି ¤00ଟ୍ରି - ¤ 00T + ¤ 00ଟ୍ରି ¤00ଟ୍ରି - ¤ 00T + ¤ 00ଟ୍ରି ¤000ଟ୍ରି - ¤ 000T + ¤ 000ଟ୍ରି ¤000ଟ୍ରି - ¤ 000T + ¤ 000ଟ୍ରି @@ -4991,6 +4982,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ପୂର୍ବ କାରିବୀୟ ଡଲାର୍ + + କ‍୍ୟାରବିଅନ୍‌ ଗିଲ୍ଡର୍‌ + କ‍୍ୟାରବିଅନ୍‌ ଗିଲ୍ଡର୍‌ + କ‍୍ୟାରବିଅନ୍‌ ଗିଲ୍ଡର୍‌ + ପଶ୍ଚିମ ଆଫ୍ରିକିୟ CFA ଫ୍ରାଙ୍କ୍ ପଶ୍ଚିମ ଆଫ୍ରିକୀୟ CFA ଫ୍ରାଙ୍କ୍ @@ -5013,6 +5009,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଜାମ୍ବୀୟ କ୍ୱାଚା + + ଜିମ୍ବାୱିଅନ୍‌ ଗୋଲ୍ଡ୍‌ + ଜିମ୍ବାୱିଅନ୍‌ ଗୋଲ୍ଡ୍‌ + ଜିମ୍ବାୱିଅନ୍‌ ଗୋଲ୍ଡ୍‌ + {0}+ @@ -5208,7 +5209,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ଆଇଟମ୍ {0} ଆଇଟମ୍‌ଗୁଡିକ - + + ଅଂଶ + {0} ଅଂଶ + {0} ଅଂଶ + + ଅଂଶ ପ୍ରତି ନିୟୁତ {0} ଅଂଶ ପ୍ରତି ନିୟୁତ {0} ଅଂଶ ପ୍ରତି ନିୟୁତ @@ -5230,6 +5236,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ମୋଲ {0} ମୋଲସ + + ଗ୍ଲୁକୋଜ୍‌ + {0} ଗ୍ଲୁକୋଜ୍‌ + {0} ଗ୍ଲୁକୋଜ୍‌ + ଲିଟର୍ ପ୍ରତି କିଲୋମିଟର୍ {0} ଲିଟର୍ ପ୍ରତି କିଲୋମିଟର୍ @@ -5298,10 +5309,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ଶତାବ୍ଦୀ {0} ଶତାବ୍ଦୀ - - {0} ଦଶନ୍ଧି - {0} ଦଶନ୍ଧି - {0} ପ୍ରତି ବର୍ଷ @@ -5567,7 +5574,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ପଏଣ୍ଟ୍ - ସୋଲାର ବ୍ୟାସାର୍ଦ୍ଧ {0} ସୋଲାର ବ୍ୟାସାର୍ଦ୍ଧ {0} ସୋଲାର ବ୍ୟାସାର୍ଦ୍ଧ @@ -5677,6 +5683,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ପାରାର {0} ମିଲିମିଟର୍ ପାରାର {0} ମିଲିମିଟର୍ + + ପାରଦ + {0} ପାରଦ + {0} ପାରଦ + ପାଉଣ୍ଡ୍ ପ୍ରତି ବର୍ଗ ଇଞ୍ଚ ପ୍ରତି ବର୍ଗ ଇଞ୍ଚ {0} ପାଉଣ୍ଡ୍ @@ -5829,6 +5840,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ମେଟ୍ରିକ୍ କପ୍ {0} ମେଟ୍ରିକ୍ କପ୍ + + ମେଟ୍ରିକ୍‌ ଫ୍ଲୁଇଡ୍‌ ଆଉନ୍ସ୍‌ + {0} ମେଟ୍ରିକ୍‌ ଫ୍ଲୁଇଡ୍‌ ଆଉନ୍ସ୍‌ + {0} ମେଟ୍ରିକ୍‌ ଫ୍ଲୁଇଡ୍‌ ଆଉନ୍ସ୍‌ + ଏକର-ଫିଟ୍ {0} ଏକର-ଫୁଟ @@ -5869,20 +5885,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ଡିଜଟ୍ ସ୍ପୁନ୍ {0} ଡିଜଟ୍ ସ୍ପୁନ୍ - - ଆଲୋକ - {0} ଆଲୋକ - {0} ଆଲୋକ + + ଷ୍ଟେରାଡିଆନ୍ + {0} ଷ୍ଟେରାଡିଆନ୍‌ + {0} ଷ୍ଟେରାଡିଆନ୍‌ - + + କେଟଲ୍‌ + {0} କେଟଲ୍‌ + {0} କେଟଲ୍‌ + + + କୂଲମ୍‌ + {0} କୂଲମ୍‌ + {0} କୂଲମ୍‌ + + + ଫାରାଡ୍‌ + {0} ଫାରାଡ୍‌ + {0} ଫାରାଡ୍‌ + + + ହେନେରି + {0} ହେନେରି + {0} ହେନେରି + + + ସିମେନ୍ସ୍‌ + {0} ସିମେନ୍ସ୍‌ + {0} ସିମେନ୍ସ୍‌ + + + କ‍୍ୟାଲୋରି [IT] + {0} କ‍୍ୟାଲୋରି [IT] + {0} କ‍୍ୟାଲୋରି [IT] + + + ବେକରେଲ୍‌ + {0} ବେକରେଲ୍‌ + {0} ବେକରେଲ୍‌ + + + ସିଭର୍ଟ୍‌ + {0} ସିଭର୍ଟ୍‌ + {0} ସିଭର୍ଟ୍‌ + + + ଗ୍ରେ + {0} ଗ୍ରେ + {0} ଗ୍ରେ + + + କିଲୋଗ୍ରାମ୍‌-ବଳ + {0} କିଲୋଗ୍ରାମ୍‌-ବଳ + {0} କିଲୋଗ୍ରାମ୍‌-ବଳ + + + ଟେସ୍‌ଲା + {0} ଟେସ୍‌ଲା + {0} ଟେସ୍‌ଲା + + + ୱେବର୍‌ + {0} ୱେବର୍‌ + {0} ୱେବର୍‌ + + ବିଲିୟନ ପ୍ରତି ଅଂଶଗୁଡିକ {0} ପାର୍ଟ୍ସ ପ୍ରତି ବିଲିୟନ୍ {0} ପାର୍ଟ୍ସ ପ୍ରତି ବିଲିୟନ୍ - ରାତି - {0} ରାତି - {0} ରାତି {0} ପ୍ରତି ରାତି @@ -6058,7 +6131,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ଆଇଟମ୍ {0} ଆଇଟମ୍ - + + ଅଂଶ + {0} ଅଂଶ + {0} ଅଂଶ + + ଅଂଶ/ନିୟୁତ {0} ପିପିଏମ୍ {0} ପିପିଏମ୍ @@ -6077,6 +6155,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ମୋଲ {0} ମୋଲ + + Glc + {0} Glc + {0} Glc + ଲିଟର୍/କିମି {0} ଲି/କିମି @@ -6346,8 +6429,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଆୟୁ - {0} au - {0} au ଫର୍ଲଙ୍ଗସ୍ @@ -6360,8 +6441,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ନୌମି - {0} nmi - {0} nmi ସମି @@ -6555,8 +6634,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ୟାର୍ଡ୍³ - {0} yd³ - {0} yd³ ଫିଟ୍³ @@ -6601,8 +6678,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ମେପା - {0} mpt - {0} mpt {0} ମେକ @@ -6655,8 +6730,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଛୋଟ ଚାମଚ - {0} tsp - {0} tsp ବାରେଲ @@ -6665,12 +6738,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} dsp-Imp. {0} dsp-Imp. + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + cal-IT + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + ଆଲୋକ {0} ଆଲୋକ {0} ଆଲୋକ - + ପାର୍ଟ୍ସ/ବିଲିୟନ୍ @@ -6818,7 +6914,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ଆଇଟମ୍ {0}ଆଇଟମ୍ - + + ଅଂଶ + {0} ଅଂଶ + {0} ଅଂଶ + + ପିପିଏମ୍ {0}ପିପିଏମ୍ {0}ପିପିଏମ୍ @@ -6836,6 +6937,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ମୋଲ {0}ମୋଲ + + Glc + ଲି/100କିମି {0}ଲି/100 କିମି @@ -6855,8 +6959,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ଦଶନ୍ଧି - {0} ଦଶନ୍ଧି - {0} ଦଶନ୍ଧି yr @@ -7160,7 +7262,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mpt - mcup {0}mc {0}mc @@ -7223,21 +7324,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ଚିମୁଟ {0} ଚିମୁଟ - - ଆଲୋକ - {0} ଆଲୋକ - {0} ଆଲୋକ + + {0} sr + {0} sr - + + {0} kat + {0} kat + + + cal-IT + + {0}ppb {0}ppb - - ରାତି - {0} ରାତି - {0} ରାତି - {0}/ରାତି - {0}ଉ diff --git a/make/data/cldr/common/main/pa.xml b/make/data/cldr/common/main/pa.xml index 2da4fdb061a..3ae5f04c949 100644 --- a/make/data/cldr/common/main/pa.xml +++ b/make/data/cldr/common/main/pa.xml @@ -47,6 +47,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਅਜ਼ਰਬਾਈਜਾਨੀ ਅਜ਼ੇਰੀ ਬਸ਼ਕੀਰ + ਬਲੋਚੀ ਬਾਲੀਨੀਜ਼ ਬਾਸਾ ਬੇਲਾਰੂਸੀ @@ -59,7 +60,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਬਿਸਲਾਮਾ ਬਿਨੀ ਸਿਕਸਿਕਾ - ਅਨੀ + ਅਨੀ ਬੰਬਾਰਾ ਬੰਗਾਲੀ ਤਿੱਬਤੀ @@ -236,6 +237,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਬਫ਼ੀਆ ਕਲੋਨੀਅਨ ਕੁਰਦਿਸ਼ + ਕੁਰਦਿਸ਼ + ਕੁਰਮਾਂਜੀ ਕੁਮੀਕ ਕੋਮੀ ਕੋਰਨਿਸ਼ @@ -637,6 +640,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਚੀਨ ਕੋਲੰਬੀਆ ਕਲਿੱਪਰਟਨ ਟਾਪੂ + ਸਾਰਕ ਕੋਸਟਾ ਰੀਕਾ ਕਿਊਬਾ ਕੇਪ ਵਰਡੇ @@ -703,14 +707,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਆਇਲ ਆਫ ਮੈਨ ਭਾਰਤ ਬਰਤਾਨਵੀ ਹਿੰਦ ਮਹਾਂਸਾਗਰ ਖਿੱਤਾ - ਚਗੋਸ ਟਾਪੂ + ਚਗੋਸ ਟਾਪੂ ਇਰਾਕ ਈਰਾਨ ਆਈਸਲੈਂਡ ਇਟਲੀ ਜਰਸੀ ਜਮਾਇਕਾ - ਜਾਰਡਨ + ਜੌਰਡਨ ਜਪਾਨ ਕੀਨੀਆ ਕਿਰਗਿਜ਼ਸਤਾਨ @@ -718,13 +722,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਕਿਰਬਾਤੀ ਕੋਮੋਰੋਸ ਸੇਂਟ ਕਿਟਸ ਐਂਡ ਨੇਵਿਸ - ਉੱਤਰ ਕੋਰੀਆ - ਦੱਖਣ ਕੋਰੀਆ + ਉੱਤਰੀ ਕੋਰੀਆ + ਦੱਖਣੀ ਕੋਰੀਆ ਕੁਵੈਤ ਕੇਮੈਨ ਟਾਪੂ ਕਜ਼ਾਖਸਤਾਨ ਲਾਓਸ - ਲੈਬਨਾਨ + ਲਿਬਨਾਨ ਸੇਂਟ ਲੂਸੀਆ ਲਿਚੇਂਸਟਾਇਨ ਸ੍ਰੀ ਲੰਕਾ @@ -782,7 +786,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਸੇਂਟ ਪੀਅਰੇ ਐਂਡ ਮਿਕੇਲਨ ਪਿਟਕੇਰਨ ਟਾਪੂ ਪਿਊਰਟੋ ਰਿਕੋ - ਫਿਲੀਸਤੀਨੀ ਇਲਾਕਾ + ਫਿਲਸਤੀਨੀ ਖਿੱਤੇ ਫਿਲੀਸਤੀਨ ਪੁਰਤਗਾਲ ਪਲਾਉ @@ -839,7 +843,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਯੂ.ਐੱਸ. ਦੂਰ-ਦੁਰਾਡੇ ਟਾਪੂ ਸੰਯੁਕਤ ਰਾਸ਼ਟਰ ਯੂ.ਐੱਨ. - ਸੰਯੁਕਤ ਰਾਜ + ਸੰਯੁਕਤ ਰਾਜ (ਅਮਰੀਕਾ) ਯੂ.ਐੱਸ. ਉਰੂਗਵੇ ਉਜ਼ਬੇਕਿਸਤਾਨ @@ -872,48 +876,89 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਮੁਦਰਾ ਬਣਤਰ ਲੜੀਬੱਧ ਕ੍ਰਮ ਮੁਦਰਾ + ਇਮੋਜੀ ਪੇਸ਼ਕਾਰੀ ਘੰਟੇ ਦਾ ਚੱਕਰ (12 ਬਨਾਮ 24) ਰੇਖਾ ਵਿੱਥ ਸ਼ੈਲੀ + ਸ਼ਬਦਾਂ ਵਿਚਕਾਰ ਲਾਈਨ ਵਿੱਥ ਮਾਪ ਪ੍ਰਣਾਲੀ ਸੰਖਿਆਵਾਂ + ਸੰਖੇਪ ਸ਼ਬਦ ਤੋਂ ਬਾਅਦ ਵਾਕ ਵਿੱਥ ਬੋਧੀ ਕੈਲੰਡਰ + ਬੋਧੀ ਚੀਨੀ ਕੈਲੰਡਰ + ਚੀਨੀ ਕੋਪਟਿਕ ਕੈਲੰਡਰ + ਕੋਪਟਿਕ ਡਾਂਗੀ ਕੈਲੰਡਰ + ਡਾਂਗੀ ਇਥੀਓਪਿਕ ਕੈਲੰਡਰ + ਇਥੀਓਪਿਕ ਇਥੀਓਪਿਕ-ਅਮੀਟ-ਆਲਮ + ਇਥੀਓਪਿਕ ਅਮੀਟ ਆਲਮ ਗਰੇਗੋਰੀਅਨ ਕੈਲੰਡਰ + ਗਰੇਗੋਰੀਅਨ ਹਿਬਰੂ ਕੈਲੰਡਰ + ਹਿਬਰੂ ਭਾਰਤੀ ਕੌਮੀ ਕੈਲੰਡਰ + ਭਾਰਤੀ ਕੌਮੀ ਇਸਲਾਮੀ ਕੈਲੰਡਰ + ਇਸਲਾਮੀ ਇਸਲਾਮੀ ਕੈਲੰਡਰ (ਸਾਰਨੀਬੱਧ, ਸਮਾਜਿਕ ਯੁੱਗ) + ਇਸਲਾਮੀ (ਸਾਰਨੀਬੱਧ, ਸਮਾਜਿਕ ਯੁੱਗ) ਇਸਲਾਮੀ ਕੈਲੰਡਰ (ਸਾਊਦੀ ਅਰਬ, ਚੰਨ ਦਿਖਣਾ) - ਇਸਲਾਮੀ ਕੈਲੰਡਰ (ਟੇਬਲਰ, ਖਗੋਲੀ ਯੁੱਗ) + ਇਸਲਾਮੀ ਕੈਲੰਡਰ (ਸਾਰਨੀਬੱਧ, ਖਗੋਲੀ ਯੁੱਗ) + ਇਸਲਾਮੀ (ਸਾਰਨੀਬੱਧ, ਖਗੋਲੀ ਯੁੱਗ) ਇਸਲਾਮੀ ਕੈਲੰਡਰ (ਅਮ ਅਲ-ਕੁਰਾ) + ਇਸਲਾਮੀ (ਉਮ ਅਲ-ਕੁਰਾ) (ISO-8601) ਕੈਲੰਡਰ ਜਪਾਨੀ ਕੈਲੰਡਰ + ਜਪਾਨੀ ਫ਼ਾਰਸੀ ਕੈਲੰਡਰ + ਫ਼ਾਰਸੀ ਮਿੰਗੂਓ ਕੈਲੰਡਰ + ਮਿੰਗੂਓ ਲੇਖਾ ਮੁਦਰਾ ਬਣਤਰ + ਲੇਖਾ ਮਿਆਰੀ ਮੁਦਰਾ ਬਣਤਰ + ਮਿਆਰੀ ਪਿਛਲਾ ਤਰਤੀਬ ਵਾਰ ਕ੍ਰਮ, ਅਨੁਰੂਪਤਾ ਲਈ ਸ਼ਬਦ-ਕੋਸ਼ ਲੜੀਬੱਧ ਕ੍ਰਮ ਮੂਲ ਯੂਨੀਕੋਡ ਲੜੀਬੱਧ ਕ੍ਰਮ + ਡਿਫ਼ੌਲਟ ਯੂਨੀਕੋਡ ਆਮ-ਮੰਤਵ ਖੋਜ + ਖੋਜੋ ਸਧਾਰਨ ਲੜੀਬੱਧ ਕ੍ਰਮ + ਮਿਆਰੀ ਰਵਾਇਤੀ ਲੜੀਬੱਧ ਕ੍ਰਮ + ਡਿਫ਼ੌਲਟ + ਇਮੋਜੀ + ਟੈਕਸਟ 12 ਘੰਟੇ ਦੀ ਪ੍ਰਣਾਲੀ (0–11) + 12 (0–11) 12 ਘੰਟੇ ਦੀ ਪ੍ਰਣਾਲੀ (1–12) + 12 (1–12) 24 ਘੰਟੇ ਦੀ ਪ੍ਰਣਾਲੀ (0–23) + 24 (0–23) 24 ਘੰਟੇ ਦੀ ਪ੍ਰਣਾਲੀ (1–24) + 24 (1–24) ਖੁੱਲ੍ਹੀ ਰੇਖਾ ਵਿੱਥ ਸ਼ੈਲੀ + ਖੁੱਲ੍ਹੀ ਸਧਾਰਨ ਰੇਖਾ ਵਿੱਥ ਸ਼ੈਲੀ + ਸਧਾਰਨ ਪੱਕੀ ਰੇਖਾ ਵਿੱਥ ਸ਼ੈਲੀ + ਪੱਕੀ + ਸਭ ‘ਚ ਵਿੱਥ ਰੱਖੋ + ਸਭ ਰੱਖੋ + ਸਧਾਰਨ + ਵਾਕੰਸ਼ਾਂ ‘ਚ ਰੱਖੋ ਮੀਟਰਿਕ ਪ੍ਰਣਾਲੀ + ਮੀਟਰਿਕ ਇੰਪੀਰੀਅਲ ਮਾਪ ਪ੍ਰਣਾਲੀ + UK ਅਮਰੀਕੀ ਮਾਪ ਪ੍ਰਣਾਲੀ + US ਅਰਬੀ-ਭਾਰਤੀ ਅੰਕ ਵਿਸਤਾਰਿਤ ਅਰਬੀ-ਭਾਰਤੀ ਅੰਕ ਆਰਮੀਨੀਅਨ ਸੰਖਿਆਵਾਂ @@ -956,6 +1001,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਥਾਈ ਅੰਕ ਤਿੱਬਤੀ ਅੰਕ ਵਾਈ ਅੰਕ + ਬੰਦ + ਚਾਲੂ ਮੀਟਰਿਕ @@ -969,17 +1016,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - [ੱ ੰ ਼ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੴ ੳ ਉ ਊ ਓ ਅ ਆ ਐ ਔ ੲ ਇ ਈ ਏ ਸ{ਸ਼} ਹ ਕ ਖ{ਖ਼} ਗ{ਗ਼} ਘ ਙ ਚ ਛ ਜ{ਜ਼} ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ{ਫ਼} ਬ ਭ ਮ ਯ ਰ ਲ ਵ ੜ ੍ ਾ ਿ ੀ ੁ ੂ ੇ ੈ ੋ ੌ] - [\u200C\u200Dਃ ਂ {ਲ਼}] - [ੳ ਅ ੲ ਸ ਹ ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਬ ਭ ਮ ਯ ਰ ਲ ਵ ੜ] + [ੱ {ੰਂ} ਼ ੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੴ ੳ ਉ ਊ ਓ ਅ ਆ ਐ ਔ ੲ ਇ ਈ ਏ ਸ{ਸ਼} ਹ ਕ ਖ{ਖ਼} ਗ{ਗ਼} ਘ ਙ ਚ ਛ ਜ{ਜ਼} ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ{ਫ਼} ਬ ਭ ਮ ਯ ਰ ਲ{ਲ਼} ਵ ੜ ੍ ਾ ਿ ੀ ੁ ੂ ੇ ੈ ੋ ੌ] + [\u200C\u200Dਃ] + [ੳ ਅ ੲ ਸ{ਸ਼} ਹ ਕ ਖ ਗ ਘ ਙ ਚ ਛ ਜ ਝ ਞ ਟ ਠ ਡ ਢ ਣ ਤ ਥ ਦ ਧ ਨ ਪ ਫ ਬ ਭ ਮ ਯ ਰ ਲ ਵ ੜ] [\- ‑ , . % ‰ + 0੦ 1੧ 2੨ 3੩ 4੪ 5੫ 6੬ 7੭ 8੮ 9੯] [\- ‐‑ – — , ; \: ! ? . '‘’ "“” ( ) \[ \] / \& ′ ″] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1048,12 +1092,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - ਕਾਲ0 - ਕਾਲ1 - - @@ -1075,12 +1113,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - ਕਾਲ0 - ਕਾਲ1 - - @@ -1111,11 +1143,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}, {0} + {1} {0} + + {1}, {0} + @@ -1128,6 +1166,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + B h + B h:mm + B h:mm:ss + E B h + E B h:mm + E B h:mm:ss E, d d/M/GGGGG y MMM y G @@ -1272,7 +1316,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਬੁੱਧ ਵੀਰ ਸ਼ੁੱਕਰ - ਸ਼ਨਿੱਚਰ + ਸ਼ਨੀ ਐਤ @@ -1281,7 +1325,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਬੁੱਧ ਵੀਰ ਸ਼ੁੱਕ - ਸ਼ਨਿੱ + ਸ਼ਨੀ ਐਤਵਾਰ @@ -1290,10 +1334,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਬੁੱਧਵਾਰ ਵੀਰਵਾਰ ਸ਼ੁੱਕਰਵਾਰ - ਸ਼ਨਿੱਚਰਵਾਰ + ਸ਼ਨੀਵਾਰ + + ਐਤ + ਸੋਮ + ਮੰਗਲ + ਬੁੱਧ + ਵੀਰ + ਸ਼ੁੱਕਰ + ਸ਼ਨੀ + ਸੋ @@ -1303,6 +1356,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਸ਼ੁੱ ਸ਼ + + ਐਤ + ਸੋਮ + ਮੰਗ + ਬੁੱਧ + ਵੀਰ + ਸ਼ੁੱਕ + ਸ਼ਨੀ + + + ਐਤਵਾਰ + ਸੋਮਵਾਰ + ਮੰਗਲਵਾਰ + ਬੁੱਧਵਾਰ + ਵੀਰਵਾਰ + ਸ਼ੁੱਕਰਵਾਰ + ਸ਼ਨੀਵਾਰ + @@ -1325,20 +1396,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਅੱਧੀ ਰਾਤ - ਪੂ.ਦੁ. - ਬਾ.ਦੁ. ਸਵੇਰੇ ਦੁਪਹਿਰੇ ਸ਼ਾਮੀਂ ਰਾਤੀਂ - ਸ. - ਸ਼. + AM + PM + + + AM + PM + + AM + PM + + + AM + PM + + AM + PM ਸਵੇਰੇ ਦੁਪਹਿਰੇ ਸ਼ਾਮ @@ -1417,11 +1500,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}, {0} + {1} {0} + + {1}, {0} + @@ -1434,7 +1523,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + B h + B h:mm + B h:mm:ss + E B h + E B h:mm + E B h:mm:ss + G M/y d/M/GGGGG y + E, d/M/y G MMM, G y d MMM, G y E d MMM, G y @@ -1630,6 +1727,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + M/y G + E, d/M/y G d MMM, y G @@ -1890,34 +1989,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਅਗਲਾ ਸ਼ੁੱ - ਪਿਛਲਾ ਸ਼ਨਿੱਚਰਵਾਰ - ਇਹ ਸ਼ਨਿੱਚਰਵਾਰ - ਅਗਲਾ ਸ਼ਨਿੱਚਰਵਾਰ + ਪਿਛਲੇ ਸ਼ਨੀਵਾਰ + ਇਹ ਸ਼ਨੀਵਾਰ + ਅਗਲੇ ਸ਼ਨੀਵਾਰ - {0} ਸ਼ਨਿੱਚਰਵਾਰ ਵਿੱਚ - {0} ਸ਼ਨਿੱਚਰਵਾਰਾਂ ਵਿੱਚ + {0} ਸ਼ਨੀਵਾਰ ਬਾਅਦ + {0} ਸ਼ਨੀਵਾਰਾਂ ਬਾਅਦ - {0} ਸ਼ਨਿੱਚਰਵਾਰ ਪਹਿਲਾਂ - {0} ਸ਼ਨਿੱਚਰਵਾਰ ਪਹਿਲਾਂ + {0} ਸ਼ਨੀਵਾਰ ਪਹਿਲਾਂ + {0} ਸ਼ਨੀਵਾਰ ਪਹਿਲਾਂ - ਪਿਛਲਾ ਸ਼ਨਿੱਚਰ - ਇਹ ਸ਼ਨਿੱਚਰ - ਅਗਲਾ ਸ਼ਨਿੱਚਰ + ਪਿਛਲੇ ਸ਼ਨੀ + ਇਹ ਸ਼ਨੀ + ਅਗਲੇ ਸ਼ਨੀ - {0} ਸ਼ਨਿੱਚਰਵਾਰਾਂ ਵਿੱਚ - {0} ਸ਼ਨਿੱਚਰਵਾਰਾਂ ਵਿੱਚ + {0} ਸ਼ਨੀਵਾਰ ਬਾਅਦ + {0} ਸ਼ਨੀਵਾਰਾਂ ਬਾਅਦ + + + {0} ਸ਼ਨੀਵਾਰ ਪਹਿਲਾਂ + {0} ਸ਼ਨੀਵਾਰ ਪਹਿਲਾਂ - ਪਿਛਲਾ ਸ਼ਨਿੱ - ਇਹ ਸ਼ਨਿੱ - ਅਗਲਾ ਸ਼ਨਿੱ + ਪਿਛਲੇ ਸ਼ਨੀ + ਇਹ ਸ਼ਨੀ + ਅਗਲੇ ਸ਼ਨੀ + + {0} ਸ਼ਨੀ ਬਾਅਦ + {0} ਸ਼ਨੀ ਬਾਅਦ + + + {0} ਸ਼ਨੀ ਪਹਿਲਾਂ + {0} ਸ਼ਨੀ ਪਹਿਲਾਂ + + + + AM/PM - ਪੂ.ਦੁ./ਬਾ.ਦੁ. + AM/PM + + + AM/PM ਘੰਟਾ @@ -2319,6 +2436,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਈਸਟਰ + + ਕੋਹੇਕੇ + ਪੰਟਾ ਅਰੇਨਸ @@ -2584,9 +2704,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਫਨੋਮ ਪੇਨਹ - ਏਂਡਰਬਰੀ - - ਕੈਂਟੋਨ @@ -3241,12 +3358,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ਕੇਂਦਰੀ ਅਫਰੀਕਾ ਵੇਲਾ + ਕੇਂਦਰੀ ਅਫ਼ਰੀਕਾ ਵੇਲਾ - ਪੂਰਬੀ ਅਫਰੀਕਾ ਵੇਲਾ + ਪੂਰਬੀ ਅਫ਼ਰੀਕਾ ਵੇਲਾ @@ -3256,9 +3373,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ਪੱਛਮੀ ਅਫਰੀਕਾ ਵੇਲਾ - ਪੱਛਮੀ ਅਫਰੀਕਾ ਮਿਆਰੀ ਵੇਲਾ - ਪੱਛਮੀ ਅਫਰੀਕਾ ਗਰਮੀਆਂ ਦਾ ਵੇਲਾ + ਪੱਛਮੀ ਅਫਰੀਕਾ ਵੇਲਾ @@ -3639,6 +3754,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਗੁਯਾਨਾ ਵੇਲਾ + + + ਹਵਾਈ-ਅਲੇਯੂਸ਼ਿਅਨ ਮਿਆਰੀ ਵੇਲਾ + + ਹਵਾਈ-ਅਲੇਯੂਸ਼ਿਅਨ ਵੇਲਾ @@ -4247,6 +4367,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + never + + + never + @@ -4264,9 +4390,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ¤#,##,##0.00 + ¤#,##,##0.00 + ¤ #,##,##0.00 #,##,##0.00 + + ¤ #,##,##0.00 + @@ -4274,45 +4404,84 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ #,##,##0.00 + + ¤ #,##0.00 + + + + + + + ¤ #,##,##0.00 + + + ¤ #,##0.00 + ¤#,##,##0.00 - #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 ¤ #,##0.00 + ¤ #,##0.00 #,##0.00 - ¤ 0 ਹਜ਼ਾਰ - ¤ 0 ਹਜ਼ਾਰ - ¤ 00 ਹਜ਼ਾਰ - ¤ 00 ਹਜ਼ਾਰ - ¤ 0 ਲੱਖ - ¤ 0 ਲੱਖ - ¤ 00 ਲੱਖ - ¤ 00 ਲੱਖ - ¤ 0 ਕਰੋੜ - ¤ 0 ਕਰੋੜ - ¤ 00 ਕਰੋੜ - ¤ 00 ਕਰੋੜ - ¤ 0 ਅਰਬ - ¤ 0 ਅਰਬ - ¤ 00 ਅਰਬ - ¤ 00 ਅਰਬ - ¤ 0 ਖਰਬ - ¤ 0 ਖਰਬ - ¤ 00 ਖਰਬ - ¤ 00 ਖਰਬ - ¤ 0 ਨੀਲ - ¤ 0 ਨੀਲ - ¤ 00 ਨੀਲ - ¤ 00 ਨੀਲ + ¤0 ਹਜ਼ਾਰ + ¤ 0 ਹਜ਼ਾਰ + ¤0 ਹਜ਼ਾਰ + ¤ 0 ਹਜ਼ਾਰ + ¤00 ਹਜ਼ਾਰ + ¤ 00 ਹਜ਼ਾਰ + ¤00 ਹਜ਼ਾਰ + ¤ 00 ਹਜ਼ਾਰ + ¤0 ਲੱਖ + ¤ 0 ਲੱਖ + ¤0 ਲੱਖ + ¤ 0 ਲੱਖ + ¤00 ਲੱਖ + ¤ 00 ਲੱਖ + ¤00 ਲੱਖ + ¤ 00 ਲੱਖ + ¤0 ਕਰੋੜ + ¤ 0 ਕਰੋੜ + ¤0 ਕਰੋੜ + ¤ 0 ਕਰੋੜ + ¤00 ਕਰੋੜ + ¤ 00 ਕਰੋੜ + ¤00 ਕਰੋੜ + ¤ 00 ਕਰੋੜ + ¤0 ਅਰਬ + ¤ 0 ਅਰਬ + ¤0 ਅਰਬ + ¤ 0 ਅਰਬ + ¤00 ਅਰਬ + ¤ 00 ਅਰਬ + ¤00 ਅਰਬ + ¤ 00 ਅਰਬ + ¤0 ਖਰਬ + ¤ 0 ਖਰਬ + ¤0 ਖਰਬ + ¤ 0 ਖਰਬ + ¤00 ਖਰਬ + ¤ 00 ਖਰਬ + ¤00 ਖਰਬ + ¤ 00 ਖਰਬ + ¤0 ਨੀਲ + ¤ 0 ਨੀਲ + ¤0 ਨੀਲ + ¤ 0 ਨੀਲ + ¤00 ਨੀਲ + ¤ 00 ਨੀਲ + ¤00 ਨੀਲ + ¤ 00 ਨੀਲ {0} ¤¤ @@ -4881,6 +5050,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਪੂਰਬੀ ਕੈਰੇਬੀਅਨ ਡਾਲਰ + + ਕੈਰੇਬੀਅਨ ਗਿਲਡਰ + ਕੈਰੇਬੀਅਨ ਗਿਲਡਰ + ਕੈਰੇਬੀਅਨ ਗਿਲਡਰ + ਯੂਰਪੀ ਮੁਦਰਾ ਇਕਾਈ ਯੂਰਪੀਅਨ ਮੁਦਰਾ ਇਕਾਈ @@ -4907,6 +5081,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਜ਼ਾਮਬੀਆਈ ਕਵਾਚਾ + + ਜ਼ਿੰਬਾਬਵੀ ਗੋਲਡ + ਜ਼ਿੰਬਾਬਵੀ ਗੋਲਡ + ਜ਼ਿੰਬਾਬਵੀ ਗੋਲਡ + {0}+ @@ -4914,7 +5093,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਘੰਟਾ {0} ਘੰਟੇ - ਸਜੇ ਪਾਸੇ {0} ਮੋੜ ਲਵੋ + ਸੱਜੇ ਪਾਸੇ {0}ਵਾਂ ਮੋੜ ਲਓ ਅਧਿਆਪਕ ਨੇ {0} ਪੜ੍ਹਾਇਆ ਅਧਿਆਪਕ ਨੇ {0} ਤੱਕ ਪੜ੍ਹਾਇਆ ਇਹ ਕਿੰਨੀ {0} ਦਾ ਹੈ @@ -5038,14 +5217,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - ਮੀਟਰ ਪ੍ਰਤੀ ਵਰਗ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਵਰਗ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਵਰਗ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਵਰਗ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਵਰਗ ਸਕਿੰਟ + ਮੀਟਰ ਪ੍ਰਤਿ ਵਰਗ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਵਰਗ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਵਰਗ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਵਰਗ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਵਰਗ ਸਕਿੰਟ feminine + ਚੱਕਰ + {0} ਚੱਕਰ + {0} ਚੱਕਰ + {0} ਚੱਕਰ + {0} ਚੱਕਰ masculine @@ -5074,7 +5258,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਵਰਗ ਕਿਲੋਮੀਟਰ {0} ਵਰਗ ਕਿਲੋਮੀਟਰ {0} ਵਰਗ ਕਿਲੋਮੀਟਰ - {0} ਪ੍ਰਤੀ ਵਰਗ ਕਿਲੋਮੀਟਰ + {0} ਪ੍ਰਤਿ ਵਰਗ ਕਿਲੋਮੀਟਰ masculine @@ -5090,7 +5274,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਵਰਗ ਮੀਟਰ {0} ਵਰਗ ਮੀਟਰ {0} ਵਰਗ ਮੀਟਰ - {0} ਪ੍ਰਤੀ ਵਰਗ ਮੀਟਰ + {0} ਪ੍ਰਤਿ ਵਰਗ ਮੀਟਰ masculine @@ -5099,12 +5283,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਵਰਗ ਸੈਂਟੀਮੀਟਰ {0} ਵਰਗ ਸੈਂਟੀਮੀਟਰ {0} ਵਰਗ ਸੈਂਟੀਮੀਟਰ - {0} ਪ੍ਰਤੀ ਵਰਗ ਸੈਂਟੀਮੀਟਰ + {0} ਪ੍ਰਤਿ ਵਰਗ ਸੈਂਟੀਮੀਟਰ {0} ਵਰਗ ਮੀਲ {0} ਵਰਗ ਮੀਲ - {0} ਪ੍ਰਤੀ ਵਰਗ ਮੀਲ + {0} ਪ੍ਰਤਿ ਵਰਗ ਮੀਲ ਵਰਗ ਗਜ਼ @@ -5120,45 +5304,51 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਵਰਗ ਇੰਚ {0} ਵਰਗ ਇੰਚ {0} ਵਰਗ ਇੰਚ - {0} ਪ੍ਰਤੀ ਵਰਗ ਇੰਚ + {0} ਪ੍ਰਤਿ ਵਰਗ ਇੰਚ masculine masculine - ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤੀ ਡੈਸੀਲਿਟਰ - {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤੀ ਡੈਸੀਲਿਟਰ - {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤੀ ਡੈਸੀਲਿਟਰ - {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤੀ ਡੈਸੀਲਿਟਰ - {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤੀ ਡੈਸੀਲਿਟਰ + ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤਿ ਡੈਸੀਲਿਟਰ + {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤਿ ਡੈਸੀਲਿਟਰ + {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤਿ ਡੈਸੀਲਿਟਰ + {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤਿ ਡੈਸੀਲਿਟਰ + {0} ਮਿਲੀਗ੍ਰਾਮ ਪ੍ਰਤਿ ਡੈਸੀਲਿਟਰ masculine - ਮਿਲੀਮੋਲ ਪ੍ਰਤੀ ਲਿਟਰ - {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤੀ ਲਿਟਰ - {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤੀ ਲਿਟਰ - {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤੀ ਲਿਟਰ - {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤੀ ਲਿਟਰ + ਮਿਲੀਮੋਲ ਪ੍ਰਤਿ ਲਿਟਰ + {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤਿ ਲਿਟਰ + {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤਿ ਲਿਟਰ + {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤਿ ਲਿਟਰ + {0} ਮਿਲੀਮੋਲ ਪ੍ਰਤਿ ਲਿਟਰ feminine ਆਈਟਮਾਂ - + + ਹਿੱਸਾ + {0} ਹਿੱਸਾ + {0} ਹਿੱਸੇ + + masculine - ਹਿੱਸੇ ਪ੍ਰਤੀ ਮਿਲੀਅਨ - {0} ਹਿੱਸਾ ਪ੍ਰਤੀ ਮਿਲੀਅਨ - {0} ਹਿੱਸਾ ਪ੍ਰਤੀ ਮਿਲੀਅਨ - {0} ਹਿੱਸੇ ਪ੍ਰਤੀ ਮਿਲੀਅਨ - {0} ਹਿੱਸੇ ਪ੍ਰਤੀ ਮਿਲੀਅਨ + ਹਿੱਸੇ ਪ੍ਰਤਿ ਮਿਲੀਅਨ + {0} ਹਿੱਸਾ ਪ੍ਰਤਿ ਮਿਲੀਅਨ + {0} ਹਿੱਸਾ ਪ੍ਰਤਿ ਮਿਲੀਅਨ + {0} ਹਿੱਸੇ ਪ੍ਰਤਿ ਮਿਲੀਅਨ + {0} ਹਿੱਸੇ ਪ੍ਰਤਿ ਮਿਲੀਅਨ masculine - {0} ਪ੍ਰਤੀਸ਼ਤ - {0} ਪ੍ਰਤੀਸ਼ਤ - {0} ਪ੍ਰਤੀਸ਼ਤ - {0} ਪ੍ਰਤੀਸ਼ਤ + ਪ੍ਰਤਿਸ਼ਤ + {0} ਪ੍ਰਤਿਸ਼ਤ + {0} ਪ੍ਰਤਿਸ਼ਤ + {0} ਪ੍ਰਤਿਸ਼ਤ + {0} ਪ੍ਰਤਿਸ਼ਤ masculine @@ -5170,28 +5360,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine {0} ਪ੍ਰਤੀ ਦਸ ਹਜ਼ਾਰ - {0} ਪ੍ਰਤੀ ਦਸ ਹਜ਼ਾਰ - {0} ਪ੍ਰਤੀ ਦਸ ਹਜ਼ਾਰ - {0} ਪ੍ਰਤੀ ਦਸ ਹਜ਼ਾਰ + {0} ਪ੍ਰਤਿ ਦਸ ਹਜ਼ਾਰ + {0} ਪ੍ਰਤਿ ਦਸ ਹਜ਼ਾਰ + {0} ਪ੍ਰਤਿ ਦਸ ਹਜ਼ਾਰ masculine + + ਗੁਲੂਕੋਜ਼ + {0} ਗੁਲੂਕੋਜ਼ + {0} ਗੁਲੂਕੋਜ਼ + masculine - ਲਿਟਰ ਪ੍ਰਤੀ ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ ਕਿਲੋਮੀਟਰ + ਲਿਟਰ ਪ੍ਰਤਿ ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ ਕਿਲੋਮੀਟਰ masculine - ਲਿਟਰ ਪ੍ਰਤੀ 100 ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ 100 ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ 100 ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ 100 ਕਿਲੋਮੀਟਰ - {0} ਲਿਟਰ ਪ੍ਰਤੀ 100 ਕਿਲੋਮੀਟਰ + ਲਿਟਰ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਲਿਟਰ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ ਮੀਲ ਪ੍ਰਤੀ ਗੈਲਨ @@ -5295,7 +5490,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਸਾਲ {0} ਸਾਲ {0} ਸਾਲਾਂ - {0} ਪ੍ਰਤੀ ਸਾਲ + {0} ਪ੍ਰਤਿ ਸਾਲ feminine @@ -5307,7 +5502,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮਹੀਨੇ {0} ਮਹੀਨੇ {0} ਮਹੀਨਿਆਂ - {0} ਪ੍ਰਤੀ ਮਹੀਨਾ + {0} ਪ੍ਰਤਿ ਮਹੀਨਾ masculine @@ -5315,11 +5510,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਹਫ਼ਤੇ {0} ਹਫ਼ਤੇ {0} ਹਫ਼ਤਿਆਂ - {0} ਪ੍ਰਤੀ ਹਫ਼ਤਾ + {0} ਪ੍ਰਤਿ ਹਫ਼ਤਾ masculine - {0} ਪ੍ਰਤੀ ਦਿਨ + {0} ਪ੍ਰਤਿ ਦਿਨ masculine @@ -5327,7 +5522,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਘੰਟੇ {0} ਘੰਟੇ {0} ਘੰਟਿਆਂ - {0} ਪ੍ਰਤੀ ਘੰਟਾ + {0} ਪ੍ਰਤਿ ਘੰਟਾ masculine @@ -5335,7 +5530,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮਿੰਟ {0} ਮਿੰਟ {0} ਮਿੰਟਾਂ - {0} ਪ੍ਰਤੀ ਮਿੰਟ + {0} ਪ੍ਰਤਿ ਮਿੰਟ masculine @@ -5343,7 +5538,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਸਕਿੰਟ {0} ਸਕਿੰਟ {0} ਸਕਿੰਟਾਂ - {0} ਪ੍ਰਤੀ ਸਕਿੰਟ + {0} ਪ੍ਰਤਿ ਸਕਿੰਟ masculine @@ -5423,7 +5618,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine ਕਿਲੋਵਾਟ-ਘੰਟੇ {0} ਕਿਲੋਵਾਟ ਘੰਟਾ - {0} ਕਿਲੋਵਾਟ ਘੰਟਾ + {0} ਕਿਲੋਵਾਟ ਘੰਟੇ {0} ਕਿਲੋਵਾਟ ਘੰਟੇ {0} ਕਿਲੋਵਾਟ ਘੰਟੇ @@ -5453,11 +5648,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - ਕਿੱਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤੀ 100 ਕਿੱਲੋਮੀਟਰ - {0} ਕਿੱਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤੀ 100 ਕਿੱਲੋਮੀਟਰ - {0} ਕਿੱਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤੀ 100 ਕਿੱਲੋਮੀਟਰ - {0} ਕਿੱਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤੀ 100 ਕਿੱਲੋਮੀਟਰ - {0} ਕਿੱਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤੀ 100 ਕਿੱਲੋਮੀਟਰ + ਕਿਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਕਿਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਕਿਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਕਿਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ + {0} ਕਿਲੋਵਾਟ-ਘੰਟਾ ਪ੍ਰਤਿ 100 ਕਿਲੋਮੀਟਰ masculine @@ -5517,16 +5712,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - ਪਿਕਸਲ ਪ੍ਰਤੀ ਸੈਂਟੀਮੀਟਰ - {0} ਪਿਕਸਲ ਪ੍ਰਤੀ ਸੈਂਟੀਮੀਟਰ - {0} ਪਿਕਸਲ ਪ੍ਰਤੀ ਸੈਂਟੀਮੀਟਰ - {0} ਪਿਕਸਲ ਪ੍ਰਤੀ ਸੈਂਟੀਮੀਟਰ - {0} ਪਿਕਸਲ ਪ੍ਰਤੀ ਸੈਂਟੀਮੀਟਰ + ਪਿਕਸਲ ਪ੍ਰਤਿ ਸੈਂਟੀਮੀਟਰ + {0} ਪਿਕਸਲ ਪ੍ਰਤਿ ਸੈਂਟੀਮੀਟਰ + {0} ਪਿਕਸਲ ਪ੍ਰਤਿ ਸੈਂਟੀਮੀਟਰ + {0} ਪਿਕਸਲ ਪ੍ਰਤਿ ਸੈਂਟੀਮੀਟਰ + {0} ਪਿਕਸਲ ਪ੍ਰਤਿ ਸੈਂਟੀਮੀਟਰ - ਪਿਕਸਲ ਪ੍ਰਤੀ ਇੰਚ - {0} ਪਿਕਸਲ ਪ੍ਰਤੀ ਇੰਚ - {0} ਪਿਕਸਲ ਪ੍ਰਤੀ ਇੰਚ + ਪਿਕਸਲ ਪ੍ਰਤਿ ਇੰਚ + {0} ਪਿਕਸਲ ਪ੍ਰਤਿ ਇੰਚ + {0} ਪਿਕਸਲ ਪ੍ਰਤਿ ਇੰਚ ਡਾਟਸ ਪ੍ਰਤੀ ਸੈਂਟੀਮੀਟਰ @@ -5550,7 +5745,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਕਿਲੋਮੀਟਰ {0} ਕਿਲੋਮੀਟਰ {0} ਕਿਲੋਮੀਟਰ - {0} ਪ੍ਰਤੀ ਕਿਲੋਮੀਟਰ + {0} ਪ੍ਰਤਿ ਕਿਲੋਮੀਟਰ masculine @@ -5558,7 +5753,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮੀਟਰ {0} ਮੀਟਰ {0} ਮੀਟਰਾਂ - {0} ਪ੍ਰਤੀ ਮੀਟਰ + {0} ਪ੍ਰਤਿ ਮੀਟਰ masculine @@ -5575,7 +5770,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਸੈਂਟੀਮੀਟਰ {0} ਸੈਂਟੀਮੀਟਰ {0} ਸੈਂਟੀਮੀਟਰ - {0} ਪ੍ਰਤੀ ਸੈਂਟੀਮੀਟਰ + {0} ਪ੍ਰਤਿ ਸੈਂਟੀਮੀਟਰ masculine @@ -5605,10 +5800,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਪਿਕੋਮੀਟਰ - {0} ਪ੍ਰਤੀ ਫੁੱਟ + {0} ਪ੍ਰਤਿ ਫੁੱਟ - {0} ਪ੍ਰਤੀ ਇੰਚ + {0} ਪ੍ਰਤਿ ਇੰਚ + + + ਪਾਰਸੈਕ + {0} ਪਾਰਸੈਕ + {0} ਪਾਰਸੈਕ {0} ਪ੍ਰਕਾਸ਼ ਸਾਲ @@ -5774,6 +5974,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮਿਲੀਮੀਟਰ ਪਾਰਾ {0} ਮਿਲੀਮੀਟਰ ਪਾਰਾ + + ਪਾਰਾ + {0} ਪਾਰਾ + {0} ਪਾਰਾ + ਪੌਂਡ ਪ੍ਰਤੀ ਵਰਗ ਇੰਚ {0} ਪੌਂਡ ਪ੍ਰਤੀ ਵਰਗ ਇੰਚ @@ -5795,11 +6000,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - ਪੈਸਕਲ - {0} ਪੈਸਕਲ - {0} ਪੈਸਕਲ - {0} ਪੈਸਕਲ - {0} ਪੈਸਕਲ + ਪਾਸਕਲ + {0} ਪਾਸਕਲ + {0} ਪਾਸਕਲ + {0} ਪਾਸਕਲ + {0} ਪਾਸਕਲ masculine @@ -5811,11 +6016,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - ਕਿੱਲੋਪਾਸਕਲ - {0} ਕਿੱਲੋਪਾਸਕਲ - {0} ਕਿੱਲੋਪਾਸਕਲ - {0} ਕਿੱਲੋਪਾਸਕਲ - {0} ਕਿੱਲੋਪਾਸਕਲ + ਕਿਲੋਪਾਸਕਲ + {0} ਕਿਲੋਪਾਸਕਲ + {0} ਕਿਲੋਪਾਸਕਲ + {0} ਕਿਲੋਪਾਸਕਲ + {0} ਕਿਲੋਪਾਸਕਲ masculine @@ -5827,19 +6032,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ - {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ - {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ - {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ - {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤੀ ਘੰਟਾ + ਕਿਲੋਮੀਟਰ ਪ੍ਰਤਿ ਘੰਟਾ + {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤਿ ਘੰਟਾ + {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤਿ ਘੰਟੇ + {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤਿ ਘੰਟਾ + {0} ਕਿਲੋਮੀਟਰ ਪ੍ਰਤਿ ਘੰਟੇ masculine - ਮੀਟਰ ਪ੍ਰਤੀ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਸਕਿੰਟ - {0} ਮੀਟਰ ਪ੍ਰਤੀ ਸਕਿੰਟ + ਮੀਟਰ ਪ੍ਰਤਿ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਸਕਿੰਟ + {0} ਮੀਟਰ ਪ੍ਰਤਿ ਸਕਿੰਟ ਮੀਲ ਪ੍ਰਤੀ ਘੰਟਾ @@ -5912,7 +6117,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਘਣ ਮੀਟਰ {0} ਘਣ ਮੀਟਰ {0} ਘਣ ਮੀਟਰ - {0} ਪ੍ਰਤੀ ਘਣ ਮੀਟਰ + {0} ਪ੍ਰਤਿ ਘਣ ਮੀਟਰ masculine @@ -5921,7 +6126,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਘਣ ਸੈਂਟੀਮੀਟਰ {0} ਘਣ ਸੈਂਟੀਮੀਟਰ {0} ਘਣ ਸੈਂਟੀਮੀਟਰ - {0} ਪ੍ਰਤੀ ਘਣ ਸੈਂਟੀਮੀਟਰ + {0} ਪ੍ਰਤਿ ਘਣ ਸੈਂਟੀਮੀਟਰ ਘਣ ਮੀਲ @@ -5965,7 +6170,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਲਿਟਰ {0} ਲਿਟਰ {0} ਲਿਟਰ - {0} ਪ੍ਰਤੀ ਲਿਟਰ + {0} ਪ੍ਰਤਿ ਲਿਟਰ masculine @@ -6007,6 +6212,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮੀਟਰਿਕ ਕੱਪ {0} ਮੀਟਰਿਕ ਕੱਪ + + ਮੀਟਰਿਕ ਤਰਲ ਔਂਸ + {0} ਮੀਟਰਿਕ ਤਰਲ ਔਂਸ + {0} ਮੀਟਰਿਕ ਤਰਲ ਔਂਸ + {0} ਪ੍ਰਤੀ ਗੈਲਨ @@ -6038,30 +6248,85 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਇੰਪੀਰੀਅਲ ਚੁਥਾਈ ਗੈਲਨ {0} ਇੰਪੀਰੀਅਲ ਚੁਥਾਈ ਗੈਲਨ + + ਸਟਰੇਡੀਅਨ + {0} ਸਟਰੇਡੀਅਨ + {0} ਸਟਰੇਡੀਅਨ + + + ਕੇਟਲ + {0} ਕੇਟਲ + {0} ਕੇਟਲ + + + ਕੂਲਮ + {0} ਕੂਲਮ + {0} ਕੂਲਮ + + + ਫ਼ੈਰਡ + {0} ਫ਼ੈਰਡ + {0} ਫ਼ੈਰਡ + + + ਹੈਨਰੀ + {0} ਹੈਨਰੀ + {0} ਹੈਨਰੀ + + + ਸੀਮਨਜ਼ + {0} ਸੀਮਨਜ਼ + {0} ਸੀਮਨਜ਼ + + + ਕੈਲੋਰੀਆਂ [IT] + {0} ਕੈਲੋਰੀ [IT] + {0} ਕੈਲੋਰੀਆਂ [IT] + + + ਬੈਕਰਲ + {0} ਬੈਕਰਲ + {0} ਬੈਕਰਲ + + + ਸੀਵਰਟ + {0} ਸੀਵਰਟ + {0} ਸੀਵਰਟ + + + ਗ੍ਰੇਅ + {0} ਗ੍ਰੇਅ + {0} ਗ੍ਰੇਅ + + + ਕਿਲੋਗ੍ਰਾਮ-ਫ਼ੋਰਸ + {0} ਕਿਲੋਗ੍ਰਾਮ-ਫ਼ੋਰਸ + {0} ਕਿਲੋਗ੍ਰਾਮ-ਫ਼ੋਰਸ + + + ਟੈਸਲਾ + {0} ਟੈਸਲਾ + {0} ਟੈਸਲਾ + + + ਵੈਬਰਸ + {0} ਵੈਬਰ + {0} ਵੈਬਰਸ + masculine - ਪ੍ਰਕਾਸ਼ - {0} ਪ੍ਰਕਾਸ਼ - {0} ਪ੍ਰਕਾਸ਼ - {0} ਪ੍ਰਕਾਸ਼ - {0} ਪ੍ਰਕਾਸ਼ - + masculine - ਹਿੱਸਾ ਪ੍ਰਤੀ ਅਰਬ - {0} ਹਿੱਸਾ ਪ੍ਰਤੀ ਅਰਬ - {0} ਹਿੱਸਾ ਪ੍ਰਤੀ ਅਰਬ - {0} ਹਿੱਸਾ ਪ੍ਰਤੀ ਅਰਬ - {0} ਹਿੱਸਾ ਪ੍ਰਤੀ ਅਰਬ + ਹਿੱਸਾ ਪ੍ਰਤਿ ਅਰਬ + {0} ਹਿੱਸਾ ਪ੍ਰਤਿ ਅਰਬ + {0} ਹਿੱਸਾ ਪ੍ਰਤਿ ਅਰਬ + {0} ਹਿੱਸਾ ਪ੍ਰਤਿ ਅਰਬ + {0} ਹਿੱਸਾ ਪ੍ਰਤਿ ਅਰਬ feminine - ਰਾਤਾਂ - {0} ਰਾਤ - {0} ਰਾਤ - {0} ਰਾਤਾਂ - {0} ਰਾਤਾਂ - {0} ਪ੍ਰਤੀ ਰਾਤ + {0} ਪ੍ਰਤਿ ਰਾਤ ਮੁੱਖ ਦਿਸ਼ਾ @@ -6177,9 +6442,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮੀ/ਸ² - ਪਰਿਕਰਮਾ - {0} ਪਰਿਕਰਮਾ - {0} ਪਰਿਕਰਮਾ + ਚੱਕਰ + {0} ਚੱਕਰ + {0} ਚੱਕਰ ਰੇਡੀਅਨ @@ -6216,7 +6481,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ਮੀਟਰ² {0} ਮੀ² {0} ਮੀ² - {0} ਪ੍ਰਤੀ ਮੀ² + {0} ਪ੍ਰਤਿ ਮੀ² ਸੈਮੀ² @@ -6276,11 +6541,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਆਈਟਮ {0} ਆਈਟਮਾਂ - + + ਹਿੱਸਾ + {0} ਹਿੱਸਾ + {0} ਹਿੱਸੇ + + ਹਿੱਸੇ/ਮਿਲੀਅਨ - ਪ੍ਰਤੀਸ਼ਤ + ਪ੍ਰਤਿਸ਼ਤ ਪਰਮਾਈਲ @@ -6293,6 +6563,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮੋਲ {0} ਮੋਲ + + Glc + {0} Glc + {0} Glc + ਲਿਟਰ/ਕਿ.ਮੀ. {0} ਲਿ./ਕਿ.ਮੀ. @@ -6561,9 +6836,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/ਇੰਚ - ਪਾਸੈੱਕ - {0} ਪਾਸੈੱਕ - {0} ਪਾਸੈੱਕ + ਪਾਰਸੈਕ + {0} ਪਾਰਸੈਕ + {0} ਪਾਰਸੈਕ ਪ੍ਰਕਾਸ਼ ਸਾਲ @@ -6708,6 +6983,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮਿ.ਮੀ. ਪਾਰਾ {0} ਮਿ.ਮੀ. ਪਾਰਾ + + ਪਾਰਾ + {0} ਪਾਰਾ + {0} ਪਾਰਾ + ਪੌਂ.ਵ.ਇੰਚ {0} ਪੌਂ.ਵ.ਇੰਚ @@ -6852,6 +7132,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮੀ ਕੱਪ {0} ਮੀ ਕੱਪ + + {0} fl oz m. + {0} fl oz m. + ਏਕੜ ਫੁੱਟ {0} ਏਕੜ ਫੁੱਟ @@ -6949,12 +7233,53 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਇੰਪ. ਚੁ. ਗੈ. {0} ਇੰਪ. ਚੁ. ਗੈ. + + {0} sr + {0} sr + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + ਪ੍ਰਕਾਸ਼ {0} ਪ੍ਰਕਾਸ਼ {0} ਪ੍ਰਕਾਸ਼ - + ਹਿੱਸਾ/ਅਰਬ @@ -6980,6 +7305,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ਮੀ/ਸ² {0}ਮੀ/ਸ² + + ਚੱਕਰ + {0} ਚੱਕਰ + {0} ਚੱਕਰ + ਡਿ. {0}° @@ -6993,6 +7323,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}″ {0}″ + + {0} ਪ੍ਰਤਿ ਮੀ² + {0}ਸੈਮੀ² {0}ਸੈਮੀ² @@ -7021,9 +7354,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ਆਈਟਮ {0}ਆਈਟਮ + + ਹਿੱਸਾ + {0} ਹਿੱਸਾ + {0} ਹਿੱਸੇ + + + ppm + + + Glc + {0}ਲਿ./ਕਿ.ਮੀ. {0}ਲਿ./ਕਿ.ਮੀ. @@ -7157,6 +7501,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}" {0}" + + ਪਾਰਸੈਕ + {0} ਪਾਰਸੈਕ + {0} ਪਾਰਸੈਕ + R☉ @@ -7179,6 +7528,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}hp {0} hp + + ਪਾਰਾ + {0} ਪਾਰਾ + {0} ਪਾਰਾ + {0}" ਪਾਰਾ {0}" ਪਾਰਾ @@ -7188,18 +7542,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਮਿ.ਬਾ. {0} ਮਿ.ਬਾ. - - {0} ਕਿ.ਮੀ./ਘੰ. - {0} ਕਿ.ਮੀ./ਘੰ. - {0}ਮੀ/ਸ {0}ਮੀ/ਸ - - {0} ਮੀਲ/ਘੰ. - {0} ਮੀਲ/ਘੰ. - °C @@ -7281,16 +7627,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ਇ.ਚੁ.ਗੈ. {0} ਇ.ਚੁ.ਗੈ. - - ਪ੍ਰਕਾਸ਼ - {0} ਪ੍ਰਕਾਸ਼ - {0} ਪ੍ਰਕਾਸ਼ + + cal-IT - - ਰਾਤਾਂ - {0} ਰਾਤ - {0} ਰਾਤਾਂ - {0}/ਰਾਤ + + ppb diff --git a/make/data/cldr/common/main/pap.xml b/make/data/cldr/common/main/pap.xml index d537758ef24..5f0986b0cb9 100644 --- a/make/data/cldr/common/main/pap.xml +++ b/make/data/cldr/common/main/pap.xml @@ -293,29 +293,47 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {1} {0} + {1}, {0} + + + {1}, {0} + + + {1}, {0} - {1} {0} + {1}, {0} + + + {1}, {0} + + + {1}, {0} - {1} {0} + {1}, {0} {1}, {0} + + {1}, {0} + - {1} {0} + {1}, {0} {1}, {0} + + {1}, {0} + E, d @@ -519,21 +537,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic di promé kuartal di dos kuartal di tres kuartal - di kuanter kuartal + di kuater kuartal - - 1 kuartal - 2 kuartal - 3 kuartal - 4 kuartal - di promé kuartal di dos kuartal di tres kuartal - di kuanter kuartal + di kuater kuartal @@ -739,40 +751,371 @@ CLDR data files are interpreted according to the LDML specification (http://unic aña pasá e aña akí otro aña + + aki {0} aña + aki {0} aña + + + {0} aña pasá + {0} aña pasá + + + + kuartal + lastu kuartal + e kuartal akí + siguiente kuartal + + aki {0} kuartal + aki {0} kuartal + + + {0} kuartal pasá + {0} kuartal pasá + + + + kuartal + lastu kuartal + e kuartal akí + siguiente kuartal + + aki {0} kuartal + aki {0} kuartal + + + {0} kuartal pasá + {0} kuartal pasá + + + + kuartal luna luna pasá e luna akí otro luna + + aki {0} luna + aki {0} luna + + + {0} luna pasá + {0} luna pasá + + + + + aki {0} luna + aki {0} luna + + + {0} luna pasá + {0} luna pasá + + + + + aki {0} luna + aki {0} luna + + + {0} luna pasá + {0} luna pasá + siman siman pasá e siman akí otro siman + + aki {0} siman + aki {0} siman + + + {0} siman pasá + {0} siman pasá + e siman di {0} + + + aki {0} siman + aki {0} siman + + + {0} siman pasá + {0} siman pasá + + + + + aki {0} siman + aki {0} siman + + + {0} siman pasá + {0} siman pasá + + + + siman di luna + + + siman di luna + + + siman di luna + dia ayera awe mañan + + aki {0} dia + aki {0} dia + + + {0} dia pasá + {0} dia pasá + + + + + aki {0} dia + aki {0} dia + + + {0} dia pasá + {0} dia pasá + + + + + aki {0} dia + aki {0} dia + + + {0} dia pasá + {0} dia pasá + + + + dia di aña + + + dia di aña + + + dia di aña dia di siman + + dia den siman di luna + + + dia den siman di luna + + + dia den siman di luna + + + djadumingu pasá + djadumingu akí + siguiente djadumingu + + aki {0} djadumingu + aki {0} djadumingu + + + {0} djadumingu pasá + {0} djadumingu pasá + + + + djaluna pasá + djaluna akí + siguiente djaluna + + aki {0} djaluna + aki {0} djaluna + + + {0} djaluna pasá + {0} djaluna pasá + + + + djamars pasá + djamars akí + siguiente djamars + + aki {0} djamars + aki {0} djamars + + + {0} djamars pasá + {0} djamars pasá + + + + djarason pasá + djarason akí + siguiente djarason + + aki {0} djarason + aki {0} djarason + + + {0} djarason pasá + {0} djarason pasá + + + + djaweps pasá + djaweps akí + siguiente djaweps + + aki {0} djaweps + aki {0} djaweps + + + {0} djaweps pasá + {0} djaweps pasá + + + + djabièrnè pasá + djabièrnè akí + siguiente djabièrnè + + aki {0} djabièrnè + aki {0} djabièrnè + + + {0} djabièrnè pasá + {0} djabièrnè pasá + + + + djasabra pasá + djasabra akí + siguiente djasabra + + aki {0} djasabra + aki {0} djasabra + + + {0} djasabra pasá + {0} djasabra pasá + + periodo di dia ora + orario + + aki {0} ora + aki {0} ora + + + {0} ora pasá + {0} ora pasá + + + + ora + + aki {0} ora + aki {0} ora + + + {0} ora pasá + {0} ora pasá + + + + ora + + aki {0} ora + aki {0} ora + + + {0} ora pasá + {0} ora pasá + minüt + minüt + + aki {0} minüt + aki {0} minüt + + + {0} minüt pasá + {0} minüt pasá + + + + + aki {0}min. + aki {0}min. + + + {0}min pasá + {0}min pasá + + + + + aki {0}min. + aki {0}min. + + + {0}min. pasá + {0}min. pasá + sekònde + awoki + + aki {0} sekònde + aki {0} sekònde + + + {0} sekònde pasá + {0} sekònde pasá + + + + awoki + + aki {0}sek. + aki {0}sek. + + + {0}sek. pasá + {0}sek. pasá + + + + + aki {0}s + aki {0}s + + + {0}s pasá + {0}s pasá + zona di ora @@ -932,36 +1275,39 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤0mil - ¤0mil - ¤00mil - ¤00mil - ¤000mil - ¤000mil - ¤0mion - ¤0mion - ¤00mion - ¤00mion - ¤000mion - ¤000mion - ¤0bion - ¤0bion - ¤00bion - ¤00bion - ¤000bion - ¤000bion - ¤0trion - ¤0trion - ¤00trion - ¤00trion - ¤000trion - ¤000trion + ¤ 0mil + ¤ 0mil + ¤ 00mil + ¤ 00mil + ¤ 000mil + ¤ 000mil + ¤ 0mion + ¤ 0mion + ¤ 00mion + ¤ 00mion + ¤ 000mion + ¤ 000mion + ¤ 0bion + ¤ 0bion + ¤ 00bion + ¤ 00bion + ¤ 000bion + ¤ 000bion + ¤ 0trion + ¤ 0trion + ¤ 00trion + ¤ 00trion + ¤ 000trion + ¤ 000trion - Florin + Florin Karibense + Florin Karibense + Florin Karibense + XCG Florin di Aruba @@ -978,10 +1324,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dòler merikano + + Florin Karibense + {0} dia - {0} dianan + {0} dia di {0} @@ -993,12 +1342,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}-{1} - - {0} ost - {0} nort - {0} suit - {0} wèst - @@ -1009,14 +1352,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} wèst - - - {0} ost - {0} nort - {0} suit - {0} wèst - - @@ -1028,17 +1363,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} òf {1} - {0}, i {1} {0} & {1} - - {0}, i {1} - {0} i {1} - - - {0} i {1} - + + + si + no + + {0} — tur {0} — históriko diff --git a/make/data/cldr/common/main/pcm.xml b/make/data/cldr/common/main/pcm.xml index 165db2e975e..525131759e8 100644 --- a/make/data/cldr/common/main/pcm.xml +++ b/make/data/cldr/common/main/pcm.xml @@ -40,6 +40,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Azẹrbaijáni Lángwej Azẹ́rí Bashkír + Báluchí Balinẹẹ́s Básaa Lángwej Bẹlarúsiá Lángwej @@ -224,6 +225,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafiá Lángwej Kọlónián Lángwej Kọ́dísh Lángwej + Kọ́dísh Lángwej + Kọ́manjí Lángwej Kumyík Lángwej Komi Lángwej Kọ́nish Lángwej @@ -608,6 +611,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Chaína Kolómbia Klipatọ́n Aíland + Sák Kósta Ríka Kiúbá Kép Vẹ́d @@ -835,42 +839,81 @@ CLDR data files are interpreted according to the LDML specification (http://unic Haú To Arénj Mọní Arénj Tins Wẹl Mọní + Imọ́ji presentáshọn Awá Saíkul (12 vs 24) Laín Brẹk Staíl + Laín Brẹks wídin wọds Sístẹm fọ Mẹ́zhọ́mẹnt Nọ́mba-dẹm + Sẹntẹns Brẹk Aftá Abbr Búdíst Kalẹ́nda + Búdíst Chaíníz Kalẹ́nda + Chaíníz Kọ́ptík Kalẹ́nda + Kọ́ptík Dangi Kalẹ́nda + Dangi Ẹtiópiá Kalẹ́nda + Ẹtiópiá Ẹtiópiá Amẹtẹ́ Álẹ́m Kalénda + Ẹtiópiá Amẹtẹ́ Álẹ́m Grẹ́górí Kalẹ́nda + Grẹ́górían Híbrú Kalẹ́nda + Híbrú Íslám Kalẹ́nda + Íslám Íslám Kalẹ́nda (Tébúlá Taip an Sívúl Taip) + Íslám (Tébúlá Taip an Sívúl Taip) Íslám Kalẹ́nda (Úmm al-Kúrá) + Íslám (Úmm al-Kúrá) ISO-8601 Kalẹ́nda Japán Kalẹ́nda + Japánis Pẹ́shia Kalẹ́nda + Pẹ́shia Ripọ́blík ọf Chaíná Kalẹ́nda + Ripọ́blík ọf Chaíná Akáunt To Ték Arénj Mọní + Akáunting Nọ́mál Wè To Arénj Mọní + Nọ́mál Yúníkód Mén Wè To Arénj Tins Wẹl + Yúníkód Mén Jẹ́nárál Sachin + Sach Nọ́mál Wè To Arénj Tins Wẹl + Nọ́mál Wè + Mén + Imọ́ji + Tẹxt 12 Áwa Sístẹm (0–11) + 12 (0–11) 12 Áwa Sístẹm (1–12) + 12 (1–12) 24 Áwa Sístẹm (0–23) + 24 (0–23) 24 Áwa Sístẹm (1–24) + 24 (1–24) Lúz Laín Brẹk Staíl + Lúz Nọ́mál Laín Brẹk Staíl + Nọ́mál Fíksd Laín Brẹk Staíl + Fíksd + Brẹk all + Kíp all + Nọ́mál + Kíp in frẹzis Mẹ́trík Sístẹm + Mẹ́trík Impẹ́riál Sístẹm fọ Mẹ́zhọ́mẹnt + UK US Sístẹm fọ Mẹ́zhọ́mẹnt + US Arábík Nọ́mba-dẹm Ẹstrá Arábík Nọ́mba-dẹm Armẹ́niá Nọ́mba-dẹm @@ -911,6 +954,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Taí Nọ́mba-dẹm Tíbẹt Nọ́mba-dẹm Vaí Nọ́mba-dẹm + Off + On Mẹ́trik @@ -989,7 +1034,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a - h a h:mm a h:mm:ss a M/d @@ -998,93 +1042,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic y G y G - - - h B – h B - - - h:mm B – h:mm B - - - G y – G y - - - GGGGG y-MM – GGGGG y-MM - GGGGG y-MM – y-MM - GGGGG y-MM – y-MM - - - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – GGGGG y-MM-dd - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd - - - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – GGGGG y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - - - G y MMM – G y MMM - G y MMM – y MMM - - - G y MMM d – G y MMM d - G y MMM d – MMM d - G y MMM d – y MMM d - - - G y MMM d, E – MMM d, E - G y MMM d, E – G y MMM d, E - G y MMM d, E – MMM d, E - G y MMM d, E – y MMM d, E - - - MM-dd – MM-dd - MM-dd – MM-dd - - - MM-dd, E – MM-dd, E - MM-dd, E – MM-dd, E - - - MMM d – MMM d - - - MMM d, E – MMM d, E - MMM d, E – MMM d, E - - - GGGGG y-MM – y-MM - GGGGG y-MM – y-MM - - - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd - - - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - - - G y MMM – y MMM - - - G y MMM d – MMM d - G y MMM d – y MMM d - - - G y MMM d, E – MMM d, E - G y MMM d, E – MMM d, E - G y MMM d, E – y MMM d, E - - - G y MMMM – y MMMM - - @@ -1277,6 +1234,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'fọ' {0} + + {1} 'fọ' {0} + @@ -1285,22 +1245,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'fọ' {0} + + {1} 'fọ' {0} + - {1} {0} + {1}, {0} + + + {1}, {0} - {1} {0} + {1}, {0} + + + {1}, {0} d E E h:mm a E h:mm:ss a - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1325,50 +1293,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic 'Wiik' w 'fọ' Y - - h B – h B - - - h:mm B – h:mm B - Gy – Gy - - GGGGG y-MM – GGGGG y-MM - GGGGG y-MM – y-MM - GGGGG y-MM – y-MM - - - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – GGGGG y-MM-dd - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd - - GGGGG y-MM-dd, E – y-MM-dd, E GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - - - G y MMM – G y MMM - G y MMM – y MMM - - - G y MMM d – G y MMM d - G y MMM d – MMM d - G y MMM d – y MMM d - G y MMM d, E – MMM d, E G y MMM d, E – G y MMM - G y MMM d, E – MMM d, E - G y MMM d, E – y MMM d, E - - - h a – h a - h–h a h:mm a – h:mm a @@ -1380,10 +1312,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - dd/MM – dd/MM dd/MM – dd/MM @@ -2266,9 +2194,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Fnọ́m Pẹn - - Ẹ́ndábẹ́ri - Kritímáti @@ -2915,9 +2840,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Wẹ́st Áfríká Taim - Wẹ́st Áfríká Fíksd Taim - Wẹ́st Áfríká Họ́t Sízin Taim + Wẹ́st Áfríká Taim @@ -3267,6 +3190,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gayána Taim + + + Hawaií-Elúshián Fíksd Taim + + Hawaií-Elúshián Taim @@ -3812,7 +3740,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 @@ -4519,6 +4446,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Íst Karíbián Dọla + + Karíbíen Gílda + Karíbíen Gílda + Karíbíen Gílda + Wẹ́st Afríká Sẹ́fa Frank Wẹ́st Afríká Sẹ́fa frank @@ -4549,6 +4481,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Zámbiá kwácha Zámbiá kwáchas + + Zimbábwẹn Gọ́ld + Zimbábwẹn Gọ́ld + Zimbábwẹn Gọ́ld + {0}+ @@ -4749,7 +4686,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Mílimol Fọ Ẹ́vrí Líta {0} Mílimol Fọ Ẹ́vrí Líta - + + párts + + Pat-dẹm Fọ Ích Míliọn {0} Pat Fọ Ích Míliọn {0} Pat Fọ Ích Míliọn @@ -4771,6 +4711,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Mol {0} Mol + + ọf glúcọs + {0} of glúcọs + {0} of glúcọs + Líta-dẹm Fọ Ẹ́vrí Kilómíta {0} Líta Fọ Ẹ́vrí Kilómíta @@ -5520,22 +5465,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Impẹ́riál Kwọt {0} Impẹ́riál Kwọt - - laít - {0} laít - {0} laít + + katáls - + + tẹslás + + + Webers + {0} Wb + {0} webers + + pat fọ ích bíliọn {0} pat fọ ích bíliọn {0} pat fọ ích bíliọn - - nait - {0} nait - {0} nait - {0}/nait - Kádínál Pọint {0} Ist @@ -5679,7 +5624,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mílimol/Líta - + + párt + + Pat/Míliọn {0} pfim {0} pfim @@ -5693,6 +5641,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Fọ Ích Tẹ́n Taúzan + + glúcọs + Lítas/km @@ -5982,7 +5933,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sólá Luminósítis - T + M. Tọn-dẹm + {0} M. Tọn + {0} M. Tọn Grams @@ -6220,7 +6173,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} laít {0} laít - + pat/bíliọn {0} pfib {0} pfib @@ -6263,7 +6216,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kárá {0} kárá - + + párt + + Pfim @@ -6275,6 +6231,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + glúcọs + L/km @@ -6430,20 +6389,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}dzp-Imp - laít {0}laít {0}laít - + pfib {0}pfib {0}pfib - nait {0}nait {0}nait - {0}/nait {0}E @@ -6497,6 +6453,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} — Fít ích ọ́da {0} — Sọráund {0} — Strẹch + {0} Fẹsin left + {0} Fẹsin ráít {0} — Impọ́tant {0} — Dífrẹ́n Dífrẹ́n Tins {0} — Ọ́da diff --git a/make/data/cldr/common/main/pi.xml b/make/data/cldr/common/main/pi.xml new file mode 100644 index 00000000000..0a43e2dae6b --- /dev/null +++ b/make/data/cldr/common/main/pi.xml @@ -0,0 +1,16 @@ + + + + + + + + + + [aā b c dḍ e f g h iī j k lḷ mṁṃ nñṅṇ ŋ o p q r sśṣ tṭ uū v w x y z] + + diff --git a/make/data/cldr/common/main/pi_Latn.xml b/make/data/cldr/common/main/pi_Latn.xml new file mode 100644 index 00000000000..8858f03f456 --- /dev/null +++ b/make/data/cldr/common/main/pi_Latn.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + Italia + + + metrico + britànico + + + Lingua: {0} + Scritura: {0} + Region: {0} + + + + [aà b c {cc} {ch} d eéèë {eu} f g {gg} {gh} iì j l m n {n\-} oò p q r s {s\-c} {ss} t uù v z] + [h] + [\- ‑ — , ; \: ! ? . … '’ "“” « » ( ) \[ \] \{ \} @ /] + + + « + » + + + + + + + + + + gené + fërvé + mars + avril + magg + giugn + lugn + agost + stèmber + utuber + novèmber + dzèmber + + + + + + + dumìnica + lun-es + màrtes + merco + giòbia + vënner + saba + + + + + + h:mm a + h:mm:ss a + h:mm:ss a v + dd/MM/y + d MMM y + + + + + + Ora {0} + Ora legal: {0} + Ora stàndar: {0} + + + Ora dë Greenwich + + + + + + + , + . + + + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + diff --git a/make/data/cldr/common/main/pms_IT.xml b/make/data/cldr/common/main/pms_IT.xml new file mode 100644 index 00000000000..21a082b9cd4 --- /dev/null +++ b/make/data/cldr/common/main/pms_IT.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/make/data/cldr/common/main/prg.xml b/make/data/cldr/common/main/prg.xml index 13e1c01ac0d..cebddbf9f73 100644 --- a/make/data/cldr/common/main/prg.xml +++ b/make/data/cldr/common/main/prg.xml @@ -686,6 +686,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ {0} {1} diff --git a/make/data/cldr/common/main/ps.xml b/make/data/cldr/common/main/ps.xml index 55a7f06f86d..660449526f5 100644 --- a/make/data/cldr/common/main/ps.xml +++ b/make/data/cldr/common/main/ps.xml @@ -225,6 +225,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic بفیا کولوګنيايي کردي + کردش + کرمانجي کومک کومی کورنيشي @@ -619,6 +621,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic چین کولمبیا د کلپرټون ټاپو + سارک کوستاریکا کیوبا کیپ ورد @@ -850,43 +853,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic اسعارو بڼه ترتيب اسعارو + ایموجي پریزنټیشن د ساعت چکر (۱۲ پرتله ۲۴) د ماتې کرښې ډول + د کلمو دننه د کرښې وقفې د ناپ نظام شمېرې + جملې وقفه د ابر څخه وروسته بودايي جنتري + بودايي د چين جنتري + چینایی کاپټیک کیلنډر + قبطي ډانګي جنتري + دانګي ایتوپيک جنتري + ایتوپیایي د ایتوپیک امیټ ایلم تقویم + د ایتوپیا امیټ عالم ګريګورين جنتري + ګریګورین جورجویان جنتري + ګریګوریان اسلامي جنتري + هجري اسلامي جنتري (جدولي، مدني عصر) + هجري (جدول، مدني دوره) اسلامي جنتري (جدولي، ستورپوهنيز عصر) + هجري (جدول، ستورپوهنه) اسلامي کلیزه (ام القری) + هجري (ام القراء) ISO-8601 جنتري جاپاني جنتري + جاپاني فارسي جنتري + فارسي منگوو جنتري + منګوو محاسبه اسعارو بڼه + محاسبه معياري اسعارو بڼه + معیاري ډيفالټ يونيکوډ ترتيب + ډیفالټ یونیکوډ د عمومي موخي لټون + لټون د معیاري لټي ترتیب + معیاري + ډیفالټ + ایموجي + متن د ۱۲ ساعتو نظام (۰ـ۱۱) + ۱۲ (۰–۱۱) د ۱۲ ساعتو نظام (۱ ـ ۱۲) + ۱۲ (۱–۱۲) د ۲۴ ساعتو نظام (۰ـ۲۳) + ۲۴ (۰–۲۳) د ساعتو نظام (۱ـ۲۴) + ۲۴ (۱–۲۴) د غړندې ماتې کرښې ډول - د عادي ماتې کرښې ډول - د سختې ماتې کرښې ډول + خلاص + د عادي کرښې ماتولو طرز + عادي + د سختې کرښې ماتولو طرز + سخت + ټول مات کړئ + ټول وساتئ + عادي + په جملو کې وساتئ ميټرک نظام + میټریک امپيريل د ناپ نظام + انګلستان د متحده آيالاتو د ناپ نظام + امریکا عربي - انډیک عددونه غځېدلې عربي ۔ اينډيک عدد آرمينيايي اعداد @@ -927,6 +970,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic تايي اعداد تبتي اعداد وای اعداد + بند + چالان مېټرک @@ -953,9 +998,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -966,12 +1008,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - EEEE د G y د MMMM d + G y MMMM d, EEEE - د G y د MMMM d + G y MMMM d @@ -1109,6 +1151,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic نومبر دسمبر + + ج + ف + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + جنوري فېبروري @@ -1233,11 +1289,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} + + {1} په {0} + + + {1} په {0} + {1} {0} + + {1} په {0} + + + {1} په {0} + @@ -1301,7 +1369,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic صفر ربيع ربيع II - جماد + جماد I جماد ۲ رجب شعبان @@ -1311,11 +1379,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic ذي الحج + محرم + صفر + ربیع اول + ربيع II + جمادي اول + جماعه II + رجب + شعبان + رمضان + شوال + ذي القعده + ذي الحج + + + + محرم صفر ربيع ربيع II - جماعه + جماد I + جماد ۲ + رجب + شعبان + رمضان + شوال + دالقاعده + ذي الحج + + + محرم + صفر + ربیع اول + ربيع II + جمادي اول جماعه II رجب شعبان @@ -1326,9 +1424,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + G y MMMM d, EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + GGGGG y/M/d + + + + M/y G M/d/y GGGGG + E, M/d/y G + GGGGG y-MM + GGGGG y-MM-dd + GGGGG y-MM-dd, E @@ -1373,12 +1498,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic دور - - دور - - - دور - کال پروسږکال @@ -1740,7 +1859,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - د {0} په وخت + {0} وخت {0} رڼا ورځ وخت {0} معیاری وخت @@ -2096,6 +2215,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ایسټر + + کوهيک + پنټا آریناس @@ -2361,7 +2483,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic پنوم پن - انډربري + کانټون کيريټماټي @@ -3030,9 +3152,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - لوېديځ افريقا وخت - لویدیځ افریقایي معیاري وخت - د افریقا افریقا لویدیځ وخت + لوېديځ افريقا وخت @@ -3382,6 +3502,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic د ګوانانا وخت + + + هوایی الیوتین معیاری وخت + + هوایی الیوتین وخت @@ -3921,42 +4046,48 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) + + + ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) - 0K ¤ - 0K ¤ - 00K ¤ - 00K ¤ - 000K ¤ - 000K ¤ - 0M ¤ - 0M ¤ - 00M ¤ - 00M ¤ - 000M ¤ - 000M ¤ - 0G ¤ - 0G ¤ - 00G ¤ - ¤ 00B - ¤00B - ¤00B - ¤000B - ¤ 000B - ¤000B - ¤ 000B - 0T ¤ - 0T ¤ - 00T ¤ - 00T ¤ - 000T ¤ - 000T ¤ + ¤ 0K + ¤ 0K + ¤ 00K + ¤ 00K + ¤ 000K + ¤ 000K + ¤ 0M + ¤ 0M + ¤ 00M + ¤ 00M + ¤ 000M + ¤ 000M + ¤ 0B + ¤ 0B + ¤ 00B + ¤ 00B + ¤ 000G + ¤ 000B + ¤ 0T + ¤ 0T + ¤ 00T + ¤ 00T + ¤ 000T + ¤ 000T {0} ¤¤ @@ -4039,8 +4170,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic برونډي فرانک - برونډي فرانک - برونډي فرانکس برمودا ډالر @@ -4642,7 +4771,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic امريکايي ډالر امريکايي ډالر امريکايي ډالرې - $ + $ يوراګوي پسو @@ -4678,6 +4807,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ختيځ کربين ډالر ختيځ کربين ډالرې + + د کارابین ګیلډر + د کارابین ګیلډر + د کارابین ګیلډران + ختيځ افريقايي CFA فرانک ختيځ افريقايي CFA فرانک @@ -4706,6 +4840,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic زيمبي کواچا زيمبي کواچاز + + د زمبابوې سره زر + د زمبابوې سره زر + د زمبابوې سره زر + {0}+ @@ -4929,7 +5068,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic توکي - + + برخې + {0} برخه + {0} برخې + + پارټتس في مليون {0} پارټ في مليون {0} پارټس في مليون @@ -4951,6 +5095,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} مول {0} مولز + + د ګلوکوز + د ګلوکوز {0} + د ګلوکوز {0} + ليټرز في کيلو متر {0} ليټر في کيلو متر @@ -5142,6 +5291,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic متحده ایالاتو ترمامونه + {0} US تهرم + {0} US تهرم د قوې پاونډز @@ -5304,6 +5455,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic لکس + + کینډیلا + {0} کینډیلا + {0} کینډیلا + + + لومن + {0} لومن + {0} لومن + {0} لمريز ځلښت {0} لمريز ځلښتونه @@ -5371,6 +5532,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} لمريز حجم {0} لمريز حجم + + دانې + {0} دانې + {0} دانې + ګيګا واټس {0} ګيګا واټ @@ -5405,7 +5571,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} د پارې ملي متر {0} د پارې ملي مترز + + د پارې + د پارې {0} + د پارې {0} + + پونډ - په هر مربع انچ کې ځواک {0} پاونډ في مربع انچ {0} پاونډز في مربع انچ @@ -5414,6 +5586,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} د پارې انچ {0} د پارې انچې + + بارونه + {0} بار + {0} بارونه + ملي بارز {0} ملي بار @@ -5568,6 +5745,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} میټریک کپ {0} میټریک کپ + + میټریک مایع اونس + {0} میټریک مایع اونس + {0} میټریک مایع اونس + {0} اکړ فټ {0} اکړ فټ @@ -5636,11 +5818,77 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Imp. quart {0} Imp. quart - - شپي - {0}/شپه - {0}/شپه - {0}/شپه + + سټراډیان + {0} سټراډیان + {0} سټراډیانز + + + کاتالز + {0} کاتال + {0} کاتالز + + + کولمبونه + + + فارادونه + {0} فاراد + {0} فاراد + + + هینري + {0} هینري + {0} هینري + + + سیمنز + {0} سیمنز + {0} سیمنز + + + کالوري [IT] + {0} کالوري [IT] + {0} cal-IT + + + بیکریلز + {0} بیکریل + {0} بیکریلونه + + + {0} سیورټ + {0} سیورټونه + + + خړ + {0} خړ + {0} خړ رنګونه + + + کیلوګرامه ځواک + {0} کیلوګرامه ځواک + {0} kgf + + + ټیسلا + {0} ټیسلا + {0} ټیسلاز + + + ویبرز + {0} ویبر + {0} ویبرز + + + رڼا + {0} رڼا + {0} رڼا + + + برخې په ملیارد + {0} برخې په ملیارد + {0} برخې په ملیارد کارډنل اړخ @@ -5677,7 +5925,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic meters² - sq miles + مربع ميل {0} sq mi {0} sq mi @@ -5688,12 +5936,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic yards² - sq feet - {0} sq ft - {0} sq ft + مربع فټ + {0} مربع فټ + {0} مربع فټ - inches² + مربع انچ دونمز @@ -5711,7 +5959,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} توکی {0} توکی - + + برخه + {0} برخه + {0} برخه + + پارټس/مليون @@ -5728,6 +5981,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} مول {0} مول + + Glc + + + میلونه/ګیلن + ميلز/ګيلن ايمپيريل @@ -5805,7 +6064,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic amps - milliamps + ملي ايمپيرز اوهمز @@ -5830,6 +6089,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic US تهرم + {0} US تهرم + {0} US therm پاونډ قوه @@ -5869,7 +6130,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic پارسيکس - light yrs + نوري کاله فرلانګونه @@ -5880,6 +6141,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic لمريزې وړانګې + + کینډیلا + + + لومن + لمريز ځلښتونه @@ -5907,6 +6174,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic لمريز حجم + + دانې + {0} gr + {0} gr + واټس @@ -5915,6 +6187,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mmHg {0} mmHg + + د Hg + {0} د Hg + {0} د Hg + + + بار + {0} بار + {0} بار + km/hour {0} kph @@ -5988,6 +6270,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ډرام مایع + {0} ډرام + {0} ډرام جګر @@ -5999,8 +6283,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} چنه {0} چنه - - p/b + + کات + {0} کات + {0} کات + + + cal-IT + + + رڼا + {0} رڼا + {0} رڼا + + + برخې/ملیارد شپي @@ -6017,8 +6314,61 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + مربع ميل + + + ft² + {0}ft² + {0}ft² + + + مربع انچ + + + برخه + {0} برخه + {0} برخه + + + Glc + + + mpg + {0}mpg + {0}mpg + mpg UK + {0}m/gUK + {0}m/gUK + + + PB + + + TB + + + Tb + + + GB + + + Gb + + + MB + + + Mb + + + kB + + + kb کال @@ -6054,6 +6404,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic μsec + + ملي ايمپيرز + + + {0}US تهرم + {0}US تهرم + + + lbf + {0}lbf + {0} lbf + {0} kWh/100km {0}kWh/100km @@ -6080,7 +6442,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}″ {0}″ + + نوري کاله + + + لومن + + L☉ {0} L☉ {0}L☉ @@ -6093,6 +6462,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}g {0}g + + دانې + {0}gr + {0}gr + + + د Hg + {0} د Hg + {0} د Hg + + + بار + {0}بار + {0} بار + km/hr {0}kph @@ -6139,14 +6523,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}dsp-Imp {0}dsp-Imp - - p/b + + {0}fl.dr. + {0}fl.dr. - - شپي - {0}/شپه - {0}/شپه - {0}/شپه + + کات + {0} کات + {0} کات + + + cal-IT + + + رڼا + {0}رڼا + {0}رڼا + + + ppb {0}خ diff --git a/make/data/cldr/common/main/ps_PK.xml b/make/data/cldr/common/main/ps_PK.xml index 4eac726eaa2..c8e19898c73 100644 --- a/make/data/cldr/common/main/ps_PK.xml +++ b/make/data/cldr/common/main/ps_PK.xml @@ -167,6 +167,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic د فرانسے سویل او انټارټيک وخت + + + هوایی الیوتین رڼا ورځے وخت + + هوایی الیوتین رڼا ورځے وخت diff --git a/make/data/cldr/common/main/pt.xml b/make/data/cldr/common/main/pt.xml index 43027cd50d0..abafafc69a6 100644 --- a/make/data/cldr/common/main/pt.xml +++ b/make/data/cldr/common/main/pt.xml @@ -205,7 +205,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ havaiano haida do sul hebraico - híndi + hindi + hindi (latim) hinglish hiligaynon hitita @@ -283,6 +284,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch curdo + curdo + curmânji kumyk kutenai komi @@ -817,6 +820,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Colômbia Ilha de Clipperton + Sark Costa Rica Cuba Cabo Verde @@ -1101,33 +1105,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Classificação numérica Prioridade da classificação Moeda + Tipo de emoji Ciclo de horário (12 vs. 24) Estilo de quebra de linha + Quebras de linha em palavras Sistema de medição Números + Espaço após abreviação Fuso horário Variante de localidade Uso privado Calendário Budista + Budista Calendário Chinês + Chinês Calendário Copta + Copta Calendário Dangi + Dangi Calendário Etíope - Calendário Amete Alem da Etiópia + Etíope + Calendário Amete Alem Etíope + Amete Alem Etíope Calendário Gregoriano + Gregoriano Calendário Hebraico + Hebraico Calendário Nacional Indiano Calendário Hegírico + Hegírico Calendário Hegírico (tabular, época civil) + Hegírico (tabular, época civil) Calendário Hegírico (Umm al‑Qura) + Hegírico (Umm al‑Qura) Calendário ISO-8601 Calendário Japonês + Japonês Calendário Persa + Persa Calendário da República da China + Minguo Formato de moeda para contabilidade + Contabilidade Formato de moeda padrão + Padrão Classificar símbolos Classificar ignorando símbolos Classificar acentos normalmente @@ -1137,22 +1160,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Classificar por maiúsculas Classificação sem diferenciação de maiúsculas e minúsculas Classificação com diferenciação de maiúsculas e minúsculas - Ordem do Chinês Tradicional - Big5 Ordem anterior, para compatibilidade + Compatibilidade Ordem do dicionário + Dicionário Ordem padrão do Unicode + Padrão do Unicode Regras europeias de ordenação - Ordem do Chinês Simplificado - GB2312 Ordem de lista telefônica + Lista telefônica Ordem de classificação fonética + Fonética Ordem Pin-yin + Pinyin Pesquisa de uso geral + Pesquisa Pesquisar por consonante inicial hangul Ordem padrão + Padrão Ordem dos traços + Traços Ordem tradicional + Tradicional Ordem por Radical-Traços + Radical-Traços Ordem Zhuyin + Zhuyin Classificar sem normalização Classificar Unicode normalizado Classificar dígitos individualmente @@ -1165,18 +1198,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Largura inteira Meia largura Numérico + Padrão + Emoji + Texto Sistema de 12 horas (0–11) + 12 (0–11) Sistema de 12 horas (1–12) + 12 (1–12) Sistema de 24 horas (0–23) + 24 (0–23) Sistema de 24 horas (1–24) + 24 (1–24) Quebra de linha com estilo solto + Solto Quebra de linha com estilo normal + Normal Quebra de linha com estilo estrito + Estrito + Quebrar tudo + Manter tudo + Normal + Manter em frases Transliteração BGN EUA Transliteração UN GEGN Sistema métrico + Métrico Sistema de medição imperial + Reino Unido Sistema de medição americano + EUA Algarismos indo-arábicos Algarismos indo-arábicos estendidos Algarismos armênios @@ -1221,6 +1271,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Algarismos tibetanos Numerais tradicionais Algarismos vai + Desativado + Ativado métrico @@ -1265,9 +1317,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -1394,6 +1443,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'às' {0} + + {1} 'às' {0} + @@ -1402,6 +1454,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'às' {0} + + {1} 'às' {0} + @@ -1410,6 +1465,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1418,19 +1476,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + + E, h B E, d + E, h a E h:mm a E h:mm:ss a y G + M/y G dd/MM/y GGGGG + E, M/d/y G MMM 'de' y G d 'de' MMM 'de' y G E, d 'de' MMM 'de' y G - h a h:mm a h:mm:ss a + h a, v + HH'h', v d/M E, dd/MM d 'de' MMM @@ -1721,6 +1787,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'às' {0} + + {1} 'às' {0} + @@ -1729,6 +1798,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'às' {0} + + {1} 'às' {0} + @@ -1737,6 +1809,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1745,23 +1820,31 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + + E, h B E, d + E, h a E, h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + MM/y G dd/MM/y GGGGG + E, MM/dd/y G MMM 'de' y G d 'de' MMM 'de' y G E, d 'de' MMM 'de' y G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + h a, v + HH'h', v dd/MM E, dd/MM dd/MM @@ -1788,11 +1871,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -1838,7 +1919,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d 'de' MMM 'de' y – E, d 'de' MMM 'de' y G - h a – h a h – h a @@ -1863,7 +1943,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h a v @@ -2372,15 +2451,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Anguila - - Tirana - Tucumã - - Córdoba - Viena @@ -2405,30 +2478,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bermudas - - Eirunepé - - - Cuiabá - - - Santarém - - - Belém - - - Araguaína - - - São Paulo - - - Maceió - - - Fernando de Noronha - Saint John’s @@ -2438,12 +2487,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ilha de Páscoa + + Coihaique + Xangai - - Bogotá - Cabo Verde @@ -2453,9 +2502,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Praga - - Büsingen - Berlim @@ -2468,15 +2514,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Argel - - Galápagos - Guaiaquil - - El Aaiún - Canárias @@ -2567,14 +2607,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Nairóbi - Enderbury + Ilha de Canton Taraua - - Comores - São Cristóvão @@ -2629,9 +2666,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Cidade do México - - Nouméa - Manágua @@ -2704,9 +2738,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Riade - - Mahé - Cartum @@ -2728,12 +2759,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damasco - - N’Djamena - - - Lomé - Duchambe @@ -2825,9 +2850,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Horário da África Ocidental - Horário Padrão da África Ocidental - Horário de Verão da África Ocidental + Horário da África Ocidental @@ -3220,6 +3243,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Horário da Guiana + + + Horário Padrão do Havaí e Ilhas Aleutas + + Horário do Havaí e Ilhas Aleutas @@ -3670,6 +3698,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Horário de Chuuk + + + Horário da Turquia + Horário Padrão da Turquia + Horário de Verão da Turquia + + Horário do Turcomenistão @@ -5226,6 +5261,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dólar do Caribe Oriental Dólares do Caribe Oriental + + Florim do Caribe + Florim do Caribe + Florins do Caribe + Direitos Especiais de Giro Direitos de desenho especiais @@ -5344,6 +5384,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dólar do Zimbábue Dólares do Zimbábue + + Ouro zimbabueano + Ouro zimbabueano + Ouros zimbabueanos + Dólar do Zimbábue (2009) Dólar do Zimbábue (2009) @@ -5598,7 +5643,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine itens - + + partes + {0} parte + {0} partes + + feminine partes por milhão {0} parte por milhão @@ -5625,6 +5675,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} mols + + de glicose + {0} de glicose + {0} de glicose + masculine litros por quilômetro @@ -6206,6 +6261,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milímetro de mercúrio {0} milímetros de mercúrio + + de mercúrio + {0} de mercúrio + {0} de mercúrio + libras por polegada quadrada {0} libra por polegada quadrada @@ -6405,6 +6465,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} xícara métrica {0} xícaras métricas + + {0} onça fluida métrica + {0} onças fluidas métricas + {0} bushel {0} bushels @@ -6501,13 +6565,75 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} quarto imperial {0} quartos imperiais + + esterradianos + {0} esterradiano + {0} esterradianos + + + katals + {0} katal + {0} katals + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + calorias [IT] + {0} caloria [IT] + {0} calorias [IT] + + + becqueréis + {0} becquerel + {0} becqueréis + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + quilogramas-força + {0} quilograma-força + {0} quilogramas-força + + + teslas + {0} tesla + {0} teslas + + + webers + {0} weber + {0} webers + feminine - luz - {0} luz - {0} luzes - + feminine partes por bilhão {0} parte por bilhão @@ -6515,9 +6641,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - noites - {0} noite - {0} noites {0} por noite @@ -6601,7 +6724,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} item {0} itens - + + parte + {0} parte + {0} parte + + partes/milhão @@ -6613,6 +6741,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ponto base + + Glc + litros/km {0} l/km @@ -6881,6 +7012,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + de Hg + {0} de Hg + {0} de Hg + {0} bar {0} bars @@ -7043,12 +7179,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} impqt {0} impqt + + cal-IT + luz {0} luz {0} luzes - + partes/bilhão @@ -7112,7 +7251,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmol/l - + + parte + {0} parte + {0} parte + + ppm @@ -7124,6 +7268,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Glc + l/km @@ -7296,6 +7443,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ watt + + de Hg + {0} de Hg + {0} de Hg + {0} mb {0} mb @@ -7347,16 +7499,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} fl. oz. {0} fl. oz. - - luz - {0} luz - {0} luzes + + cal-IT - - noites - {0} noite - {0} noites - {0}/noite + + ppb {0}L diff --git a/make/data/cldr/common/main/pt_PT.xml b/make/data/cldr/common/main/pt_PT.xml index 81f0ef80a2c..b23a9da416b 100644 --- a/make/data/cldr/common/main/pt_PT.xml +++ b/make/data/cldr/common/main/pt_PT.xml @@ -64,7 +64,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ grego clássico alemão suíço haúça - hindi arménio inuktitut canadiano ocidental cabardiano @@ -262,14 +261,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Calendário dangi Calendário etíope Calendário etíope Amete Alem + Etíope Amete Alem Calendário gregoriano Calendário hebraico Calendário nacional indiano Calendário hegírico Calendário hegírico (civil) + Hegírico (civil) Calendário hegírico (Umm al-Qura) Calendário japonês Calendário persa + República da China Formato monetário contabilístico Formato monetário padrão Ordenar símbolos @@ -281,14 +283,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordenar por maiúsculas Ordenar insensível a maiúsculas/minúsculas Ordenar sensível a maiúsculas/minúsculas - Ordem do chinês tradicional - Big5 + Unicode padrão Regras de ordenação europeias - Ordem do chinês simplificado - GB2312 Ordem da lista telefónica + Lista telefónica Ordem de pinyin Ordenação padrão Ordem por traços Ordem por radical e traços + Radical e traços Ordem de zhuyin Ordenar sem normalização Ordenar Unicode normalizado @@ -301,11 +304,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordenar acentos/tipo de letra/largura Largura completa Estilo flexível de quebra de linha + Flexível Estilo padrão de quebra de linha + Padrão Estilo estrito de quebra de linha + Desfazer tudo + Padrão + Manter nas frases Transliteração BGN Transliteração UNGEGN Sistema de medida imperial + RU Sistema de medida americano Algarismos indo-arábicos expandidos Numeração arménia @@ -470,6 +479,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E, d/M/y G MM/y G d/MM/y G E, d/MM/y G @@ -687,6 +697,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + dd/MM/y G + E, dd/MM/y G d/MM E, d/MM ccc, d 'de' MMMM @@ -1208,12 +1220,45 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hora Coordenada Universal + + Localização desconhecida + Erevan + + Estação Rothera + + + Terra de Palmer + + + Estação Troll + + + Estação Showa + + + Estação Mawson + + + Estação Vostok + + + Estação Casey + + + Estação Dumont-d’Urville + + + Estação McMurdo + Tucumán + + Ilha Macquarie + Ilha de Lord Howe @@ -1226,9 +1271,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Porto-Novo - - Araguaina - Baía @@ -1250,9 +1292,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ilha do Natal - - Busingen - Jibuti @@ -1262,6 +1301,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Domínica + + Ilhas Galápagos + Talim @@ -1293,6 +1335,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hora de verão da Irlanda + + Arquipélago de Chagos + Bagdade @@ -1305,6 +1350,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Nairobi + + Ilha Canton + Tarawa @@ -1329,6 +1377,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Mónaco + + Atol de Kwajalein + Bamaco @@ -1350,6 +1401,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Niamei + + Ilha Norfolk + Amesterdão @@ -1357,7 +1411,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Catmandu - Chatham + Ilhas Chatham + + + Ilhas Marquesas Carachi @@ -1371,9 +1428,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Moscovo - - Mahe - São Marinho @@ -1386,6 +1440,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ndjamena + + Ilhas Kerguelen + Banguecoque @@ -1401,6 +1458,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Campala + + Atol de Midway + + + Ilha Wake + Nova Iorque @@ -1453,9 +1516,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora da África Ocidental - Hora padrão da África Ocidental - Hora de verão da África Ocidental + Hora da África Ocidental @@ -1521,9 +1582,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora de Apia - Hora padrão de Apia - Hora de verão de Apia + Hora de Samoa + Hora padrão de Samoa + Hora de verão de Samoa @@ -1653,7 +1714,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora do Brunei Darussalam + Hora do Brunei @@ -1868,6 +1929,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hora da Guiana + + + Hora padrão do Havai e Aleutas + + Hora do Havai e Aleutas @@ -1884,7 +1950,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora de Hovd + Hora de Khovd Hora padrão de Hovd Hora de verão de Hovd @@ -2208,12 +2274,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora de Ponape + Hora de Pohnpei - Hora de Pyongyang + Hora da Coreia do Norte @@ -2249,9 +2315,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora de Samoa - Hora padrão de Samoa - Hora de verão de Samoa + Hora de Samoa Americana + Hora padrão de Samoa Americana + Hora de verão de Samoa Americana @@ -2291,9 +2357,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Hora de Taipé - Hora padrão de Taipé - Hora de verão de Taipé + Hora de Taiwan + Hora padrão de Taiwan + Hora de verão de Taiwan @@ -2318,6 +2384,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hora de Chuuk + + + Hora da Turquia + Hora Padrão da Turquia + Hora de Verão da Turquia + + Hora do Turquemenistão @@ -2461,10 +2534,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -2488,12 +2562,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 00 mM ¤ 000 mM ¤ 000 mM ¤ - 0 B ¤ - 0 B ¤ - 00 B ¤ - 00 B ¤ - 000 B ¤ - 000 B ¤ + 0 Bi ¤ + 0 Bi ¤ + 00 Bi ¤ + 00 Bi ¤ + 000 Bi ¤ + 000 Bi ¤ @@ -3329,6 +3403,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dólar das Caraíbas Orientais dólares das Caraíbas Orientais + + florim caribenho + florim caribenho + florins caribenhos + direito especial de saque direitos especiais de saque @@ -3383,6 +3462,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dólar do Zimbabwe + + ouro zimbabuense + ouro zimbabuense + ouros zimbabuenses + {0} - {1} @@ -3616,6 +3700,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} chávena métrica {0} chávenas métricas + + onças fluidas métricas + acre-pés {0} acre-pé @@ -3632,7 +3719,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} dracma {0} dracmas - + partes por mil milhões {0} parte por mil milhões {0} partes por mil milhões @@ -3744,8 +3831,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ metros - {0} milha - {0} milhas + {0} mi + {0} mi polegadas @@ -3867,7 +3954,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} quarto imp. {0} quartos imp. - + partes/mil milhões {0} ppmm {0} ppmm @@ -3975,10 +4062,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dram fl - + ppmm - {0} ppmm - {0} ppmm diff --git a/make/data/cldr/common/main/qu.xml b/make/data/cldr/common/main/qu.xml index e6fda4e4aca..e0c664f1a7e 100644 --- a/make/data/cldr/common/main/qu.xml +++ b/make/data/cldr/common/main/qu.xml @@ -41,6 +41,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Azerbaiyano Simi Azerí Simi Baskir Simi + Baluchi Simi Balines Simi Basaa Simi Bielorruso Simi @@ -48,10 +49,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bena Simi Bulgaro Simi Haryanvi - Bhojpuri + Bhojpuri Simi Bislama Bini Siksiká Simi + Anii Simi Bambara Simi Bangla Simi Tibetano Simi @@ -164,6 +166,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Iban Simi Ibibio Simi Indonesio Simi + Interlingue Simi Igbo Simi Yi Simi Inuktitut Simi (Canadá occidental) @@ -212,10 +215,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafia Simi Kölsch Simi Kurdo Simi + Kurdo Simi + Kurmanji Simi Kumyk Simi Komi Simi Córnico Simi Kwakʼwala Simi + Kuvi Simi Kirghiz Simi Latín Simi Ladino Simi @@ -224,8 +230,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Lezghian Simi Luganda Simi Limburgues Simi + Liguria Simi Lillooet Simi Lakota Simi + Lombardo Simi Lingala Simi Lao Simi Luisiana Criollo @@ -267,7 +275,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Malayo Simi Maltes Simi Mundang Simi - Idiomas M´últiples Simi + Achka simikuna Muscogee Simi Mirandés Simi Birmano Simi @@ -375,6 +383,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Suajili Simi (Congo (RDC)) Comorian Simi Siriaco Simi + Silesiano Tamil Simi Tutchone Meridional Telugu Simi @@ -414,7 +423,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Uzbeko Simi Vai Simi Venda Simi + Veneciamanta Vietnamita Simi + Makhuwa Simi Volapük Simi Vunjo Simi Valona Simi @@ -425,6 +436,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Wu Chino Kalmyk Simi Isixhosa Simi + Kangri Simi Soga Simi Yangben Simi Yemba Simi @@ -433,6 +445,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nheengatu Simi Cantonés Simi Chino Cantonés Simi + Zhuang Bereber Marroquí Estándar Simi Chino Simi Chino Mandarín Simi @@ -589,6 +602,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic China Colombia Isla Clipperton + Sark Costa Rica Cuba Cabo Verde @@ -814,42 +828,81 @@ CLDR data files are interpreted according to the LDML specification (http://unic Imayna Qullqi kaynin Ñiqinchana qullqi + Emoji nisqamanta rikuchiy Ciclo de Horas (12 vs 24) Siqi paway kaynin + Simikuna ukhupi Chiru Pakikuna Tupuy Kamay Yupaykuna + Oración Pakikuy Abbr. Budista Intiwatana + Buddhist Chino Intiwatana + Chinese Copto Intiwatana + Copto Dangi Intiwatana + Dangi Etiope Intiwatana + Ethiopic Etíope Amete Alem Intiwatana + Ethiopic Amete Alem Gregoriano Intiwatana + Gregorian Hebreo Intiwatana + Hebreo Hijri Intiwatana + Hijri Hijri Intiwatana (tabular, epoca civil) + Hijri (tabular, epoca civil) Hijri Intiwatana (Umm al-Qura) + Hijri (Umm al-Qura) ISO-8601 Intiwatana Japones Intiwatana + Japones Persa Intiwatana + Persa Minguo Intiwatana + Minguo Yupana Qullqi imayna kaynin + Accounting Estandar nisqa qullqi imayna kaynin + Standard Ñawpaqchasqa Unicode Nisqa Ñiqinchana + Ñawpaqchasqa Unicode Llapanpaq maskana + maskana Estandar nisqa Ñiqinchana + Estandar + Default + Emoji + Text 12 hora kaynin (0–11) + 12 (0–11) 12 hora kaynin (1–12) + 12 (1–12) 24 hora kaynin (0–23) + 24 (0–23) 24 hora kaynin (1–24) + 24 (1–24) Siqi paway chinkachiy kaynin + Loose Siqi paway Normal kaynin + Normal Siqi paway Chiqa kaynin + Strict + Tukuyta pakiy + Tukuy imata waqaychay + Normal + Frases nisqapi waqaychay Metrico Kamay + Metrico Metrico Ingles Kamay + UK Metrico Americano Kamay + US Arabe Sananpakuna Arabe Mirachisqa Sananpakuna Armenio Sananpakuna @@ -890,6 +943,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Thai Sananpakuna Tibetano Sananpakuna Vai Yupaykuna + Off + On Simi: {0} @@ -899,8 +954,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic [a {ch} {chʼ} h i k {kʼ} l {ll} m nñ p {pʼ} q {qʼ} s t {tʼ} u w y] - [áàăâåäãā æ b cç d eéèĕêëē f g íìĭîïī j oóòŏôöøō œ r úùŭûüū v x ÿ z] - [A {Ch} H I K L {Ll} M NÑ P Q S T U W Y] + [áàăâåäãā æ b cç {chh} d eéèĕêëē f g íìĭîïī j oóòŏôöøō œ {ph} {qh} r úùŭûüū v x ÿ z] + [A {CH} H I K L {Ll} M NÑ P Q R S T U W Y] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] @@ -1970,9 +2025,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tokio - - Enderbury - San Cristobal @@ -2136,9 +2188,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Hora de Africa Occidental - Hora Estandar de Africa Occidental - Hora Estandar de Verano de Africa Occidental + Hora de Africa Occidental @@ -2488,6 +2538,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hora de Guyana + + + Hora Estandar de Hawai-Aleutiano + + Hora de Hawai-Aleutiano @@ -3004,7 +3059,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - #,##0.00;(#,##0.00) + #,##0.00 @@ -3604,6 +3659,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dólar del Caribe Oriental Dólar del caribe oriental + + Caribe guilderkuna + Caribe guilderkuna + Franco CFA de África Occidental Franco CFA de áfrica occidental @@ -3627,6 +3686,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kwacha Zambiano Kwacha zambiano + + Zimbabuemanta quri + Zimbabuemanta quri + {0}qi yupayta hapiy. @@ -3775,7 +3838,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic imakuna {0} imakuna - + partes por millon {0} partes por millon @@ -4139,7 +4202,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ima {0} ima - + partes/millon diff --git a/make/data/cldr/common/main/rif.xml b/make/data/cldr/common/main/rif.xml index 4c254f9e790..5b7abd373cc 100644 --- a/make/data/cldr/common/main/rif.xml +++ b/make/data/cldr/common/main/rif.xml @@ -14,10 +14,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic taɛrabt taɛrabt tamaynut + asamis tabanɣaliyt + ttcik talimant taglinzit - taglinzit (UK) taseppanyut tafransist tahindawiyt @@ -29,7 +30,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic taflamant tapulandiyt tapurtuɣaliyt - tapurtuɣaliyt (brazil) tapurtuɣaliyt (uruppa) Tarifit tarusiyt @@ -46,8 +46,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - + + @@ -133,13 +133,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic rripublik n terfriqt n lwesṭ kungu sswis - kudivwar + kudibwar tigzirin n kuk tcili kamirun tcina kulumbya tigzirin n klipirṭun + sark kustarika kuba qabu yazegza @@ -206,7 +207,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic timmura n uglanzi di lebḥer ahindawi lɛiraq iran - ayeslanda + yeslanda atayal jirsi jamayka @@ -252,7 +253,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic munsirat malṭa muricyus - lmaldiv + lmaldib malawi miksiku malizya @@ -299,8 +300,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic sswid sanɣafura santḥilina - sluvinya - svalbard d janmayen + slubinya + sbalbard d janmayen sluvakya siraliyyun sanmarinu @@ -314,7 +315,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic surya iswatini tristan dakuna - ṭṭurks d tegzirin n kaykus + tigzirin n ṭurks d kaykus tcad timmura tifransisin nwadday ṭṭugu @@ -329,10 +330,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ṭurekya ṭṭurk trinidad d ṭubagu - ṭuvalu + ṭubalu ṭṭaywan ṭanzanya - ukrayina + ukranya uɣanda tigzirin timirikanin i yegʷjen tamunt n tmura @@ -340,18 +341,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic US urugway uzbakistan - lvatikan + lbatikan sanvinsit d grinadin - vanzwilla + banzwilla tigzirin tiɛezriyyin tiglanziyyin tigzirin tiɛezriyyin timarikanin - vitnam - vanwatu + bitnam + banwatu walis d futuna samwa awal amsaqar bidi tamsaqart - kusuvu + kusubu lyaman mayuṭ tafriqt n wadday @@ -361,11 +362,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic taklindart tagrikant + agrikan taklindart tameslemt + ameslem taklindart tameslemt (leḥsab) + ameslem (leḥsab) taklindart tameslemt (ayur) + ameslem (ayur) kalandar n ISO-8601 asettef sṭandar + sṭandar nnumrawat irumiyyen @@ -418,6 +424,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ɣer' {0} + + {1} 'ɣer' {0} + @@ -426,6 +435,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ɣer' {0} + + {1} 'ɣer' {0} + @@ -441,10 +453,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic dd E dd y G + MM/y G dd/MM/y GGGGG + E dd/MM/y G MMM y G dd MMM y G E dd MMM y G + LL dd/MM E dd/MM dd MMM @@ -587,12 +602,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic yebril mayyu yunyu - yulyuz - ɣucct - cutenber + yulyu + ɣuccet + cutembir kṭuber - nuwember - dujember + nuwembir + dujembir @@ -610,6 +625,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic n d + + yennayer + febrayer + mars + yebril + mayyu + yunyu + yulyu + ɣuccet + cutembir + kṭuber + nuwembir + dujembir + @@ -744,6 +773,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ɣer' {0} + + {1} 'ɣer' {0} + @@ -752,6 +784,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ɣer' {0} + + {1} 'ɣer' {0} + @@ -767,7 +802,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic dd E dd y G + MM/y G dd/MM/y G + E dd/MM/y G MMM y G dd MMM y G E dd MMM y G @@ -830,7 +867,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic E dd MMM y – E dd MMM y G - h a – h a h – h a @@ -855,7 +891,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH:mm – HH:mm v - h a – h a v h – h a v @@ -1091,12 +1126,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud agraɣlan amezday + + wer yettemwassen + andura dubay + + kabul + antigwa @@ -1112,6 +1153,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic lwanda + + stasyun n rutira + + + palmer + + + stasyun n ṭrul + + + stasyun n suwa + + + stasyun n mawsun + + + deybis + + + stasyun n bustuk + + + stasyun n kasi + + + dimun durbil + + + stasyun n makmurdu + riyugayyigus @@ -1148,9 +1219,48 @@ CLDR data files are interpreted according to the LDML specification (http://unic bwinusayris + + pagupagu + byinna + + pert + + + yukla + + + darwin + + + adelayd + + + brukenhil + + + milben + + + hubart + + + lindman + + + sidni + + + brizban + + + tayzirt n makkari + + + lurdhaw + aruba @@ -1166,6 +1276,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic barbadus + + dhaka + bruksil @@ -1190,6 +1303,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic birmuda + + brunay + lappaz @@ -1247,6 +1363,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic nassaw + + timpfu + gaburun @@ -1263,7 +1382,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic waythurs - inuvik + inubik fankufer @@ -1325,6 +1444,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic sanjuns + + tiyzirin n kukus + kincasa @@ -1343,9 +1465,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic abidjan + + raruṭunga + ister + + kuyhayki + puntarinas @@ -1355,6 +1483,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic diwala + + urumutci + + + canhay + buguṭa @@ -1362,7 +1496,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kustarika - havana + habana qabubirdi @@ -1370,6 +1504,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic kuracaw + + tayzirt n kristmas + nikuzya @@ -1433,9 +1570,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic hilsinki + + fiji + sṭanli + + tcuk + + + punpi + + + kursay + faraw @@ -1502,12 +1651,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic gwatimala + + gwam + bisaw guyana + + hungkung + tigicigalpa @@ -1520,6 +1675,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic budabist + + jakarṭa + + + puntyanak + + + makasar + + + jayapura + akud anaway ayirlandi @@ -1532,14 +1699,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic tagzirt n man + + kulkaṭa + ttcagus baɣdad + + ṭahran + - reykjavik + reykjabik ruma @@ -1553,21 +1726,69 @@ CLDR data files are interpreted according to the LDML specification (http://unic ɛamman + + ṭukyu + nayrubi + + bickik + + + knumpayn + + + tagzirt n kanṭun + + + kiritimati + + + ṭarawa + kumuru sankits + + pyungyang + + + syul + kuwit sayman + + aqṭaw + + + ural + + + aṭraw + + + aqtubi + + + qusṭanay + + + qazalurda + + + almaṭi + + + bintyan + bayrut @@ -1575,7 +1796,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic sanlucya - vaduts + faduts + + + kulumbu munrubya @@ -1613,12 +1837,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic antananaribu + + kwajilen + + + majuru + skupya bamaku + + yangun + + + xubd + + + ulanbaṭar + + + makkaw + + + saypan + martinik @@ -1629,11 +1874,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic muntsirat - malta + malṭa muriṭanya + + lmaldib + blanṭayr @@ -1673,15 +1921,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic kankun + + kwalalampur + + + kutcin + maputu binhuwk + + numya + nyamiy + + tayzirt n nurfuk + lagus @@ -1694,6 +1954,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic uslu + + katmandu + + + nawru + + + nyu + + + tcatem + + + ukland + masqaṭ @@ -1703,12 +1978,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic lima + + tahiti + + + markwisas + + + gambyi + + + mursbay + + + bugenbil + + + manila + + + kratci + warsaw mikilon + + pitkirn + ppurturiku @@ -1727,6 +2026,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic licbuna + + palaw + asuntyun @@ -1770,7 +2072,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic yekaterinburg - omsek + umsek nubusibiresk @@ -1826,6 +2128,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic riyad + + gwadelkanal + mahi @@ -1835,6 +2140,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic sṭukhulm + + singappur + santhilina @@ -1892,15 +2200,39 @@ CLDR data files are interpreted according to the LDML specification (http://unic lumi + + bangkuk + + + ducanba + + + fakawfu + + + dili + + + ɛicqabad + tunes + + ṭungaṭapu + sṭanbul ppurtufspin + + funafuti + + + ṭaypay + daressalam @@ -1913,6 +2245,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic kampala + + midway + + + tagzirt n wayk + adak @@ -1944,7 +2282,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic finiks - dinver + dinbir bulah, nurtdakuṭa @@ -1962,7 +2300,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic minumini - vinsanz, indyana + binsanz, indyana pitersburg, indyana @@ -1983,10 +2321,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic indyanapulis - lwisvil + lwisbil - vivi, indyana + bibi, indyana muntitcilu, kinṭaki @@ -2000,11 +2338,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic muntibidyu + + samarqand + + + tacqand + lbatikan - sanvinsint + sanbinsint karakas @@ -2015,6 +2359,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic sanṭumas + + hutcimin + + + ifaṭi + + + wilis d futuna + + + apya + ɛadan @@ -2030,6 +2386,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic harari + + + akud n afɣanistan + + akud n tefriqt n lwesṭ @@ -2047,9 +2408,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - akud n tefriqt n lɣerb - akud anaway n tefriqt n lɣerb - akud n uzil n tefriqt n lɣerb + akud n tefriqt n lɣerb @@ -2094,6 +2453,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n pasifik + + + akud n samwa + akud anaway n samwa + akud n uzil n samwa + + akud n waɛrab @@ -2129,6 +2495,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n atlantik + + + akud suntral n wustralya + akud suntral anaway n wustralya + akud suntral n uzil n wustralya + + + + + akud suntral n lɣerb n wustralya + akud suntral anaway n lɣerb n wustralya + akud suntral n uzil n lɣerb n wustralya + + + + + akud n ccerq n wustralya + akud anaway n ccerq n wustralya + akud n uzil n ccerq n wustralya + + + + + akud n lɣerb n wustralya + akud anaway n lɣerb n wustralya + akud n uzil n lɣerb n wustralya + + akud n azrabidjan @@ -2143,9 +2537,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n azures + + + akud n bangladic + akud anaway n bangladic + akud n uzil n bangladic + + + + + akud n butan + + - akud n bulivya + akud n bulibya @@ -2155,6 +2561,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n brazilya + + + akud n brunay + + akud n qabubirdi @@ -2162,6 +2573,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n qabubirdi + + + akud anaway n tcamuru + + + + + akud n tcatem + akud anaway n tcatem + akud n uzil n tcatem + + akud n cili @@ -2176,6 +2599,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n tcina + + + akud n tayzirt n kristmas + + + + + akud n tiyzirin n kukus + + akud n kulumbya @@ -2183,6 +2616,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n kulumbya + + + akud n tigzirin n kuk + akud anaway n tigzirin n kuk + akud n uzil n tigzirin n kuk + + akud n kuba @@ -2190,6 +2630,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n kuba + + + akud n deybis + + + + + akud n dimun durbil + + + + + akud n ṭimur licti + + akud n isterayland @@ -2235,6 +2690,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n falkland + + + akud n fiji + akud anaway n fiji + akud n uzil n fiji + + akud n ɣana tafransist @@ -2250,6 +2712,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n galappagus + + + akud n gambyi + + akud n jyurjya @@ -2257,6 +2724,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n jyurjya + + + akud n tigzirin n gilbert + + GMT @@ -2286,6 +2758,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n guyana + + + akud anaway n haway-alucyan + + akud n haway-alucyan @@ -2302,9 +2779,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic - akud n hubd - akud anaway n hubd - akud n uzil n hubd + akud n xubd + akud anaway n xubd + akud n uzil n xubd + + + + + akud anawy n lhend @@ -2312,6 +2794,40 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n lebḥer ahindi + + + akud n indutcina + + + + + akud n yindunisya n lwesṭ + + + + + akud n ccerq n yindunisya + + + + + akud n lɣerb n yindunisya + + + + + akud n iran + akud anaway n iran + akud n uzil n iran + + + + + akud n irkutsek + akud anaway n irkutsek + akud n uzil n irkutsek + + akud n yisrayil @@ -2319,6 +2835,91 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n yisrayil + + + akud n jjapun + akud anaway n jjapun + akud n uzil n jjapun + + + + + akud n kazaxistan + + + + + akud n ccerq n kazaxistan + + + + + akud n lɣerb n kazaxistan + + + + + akud n kurya + akud anaway n kurya + akud n uzil n kurya + + + + + akud n kursay + + + + + akud n krasnuyarsek + akud anaway n krasnuyarsek + akud n uzil n krasnuyarsek + + + + + akud n krigistan + + + + + akud n tigzirin n layn + + + + + akud n lurdhaw + akud anaway n lurdhaw + akud n uzil n lurdhaw + + + + + akud n magadan + akud anaway n magadan + akud n uzil n magadan + + + + + akud n malizya + + + + + akud n lmaldib + + + + + akud n markwisas + + + + + akud n tigzirin n marcal + + akud n mawritus @@ -2326,6 +2927,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n mawritus + + + akud n mawson + + akud n pasifik amiksikan @@ -2333,6 +2939,49 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n pasifik amiksikan + + + akud n ulanbaṭar + akud anaway n ulanbaṭar + akud n uzil n ulanbaṭar + + + + + akud n musku + akud anaway n musku + akud n uzil n musku + + + + + akud n myanmar + + + + + akud n nawru + + + + + akud n nnipal + + + + + akud n nyewkalidunya + akud anaway n nyewkalidunya + akud n uzil n nyewkalidunya + + + + + akud n nyuziland + akud anaway n nyuziland + akud n uzil n nyuziland + + akud n nyuw fawemd land @@ -2340,6 +2989,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n nyuw fawemd land + + + akud n nyu + + + + + akud n tayzirt n nurfuk + akud anaway n tayzirt n nurfuk + akud n uzil n tayzirt n nurfuk + + akud n firnardu dinurunha @@ -2347,6 +3008,37 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n firnardu dinurunha + + + akud n nubusibirsek + akud anaway n nubusibirsek + akud n uzil n nubusibirsek + + + + + akud n umsek + akud anaway n umsek + akud n uzil n umsek + + + + + akud n pakistan + akud anaway n pakistan + akud n uzil n pakistan + + + + + akud n palaw + + + + + akud n papwa ɣinya tamaynut + + akud n pparagway @@ -2361,6 +3053,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n ppiru + + + akud n filippin + akud anaway n filippin + akud n uzil n filippin + + + + + akud n tigzirin n finiks + + akud n sant-pyiɣ d mikilun @@ -2368,16 +3072,60 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n sant-pyiɣ d mikilun + + + akud n pitkirn + + + + + akud n punpi + + + + + akud n kurya n sennej + + akud n riyunyun + + + akud n rutira + + + + + akud n saxalin + akud anaway n saxalin + akud n uzil n saxalin + + + + + akud n samwa tamarikant + akud anaway n samwa tamarikant + akud n uzil n samwa tamarikant + + akud n saycal + + + akud anaway n singappur + + + + + akud n tigzirin n sulumun + + akud n jyurjya n wadday @@ -2388,6 +3136,57 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n surinam + + + akud n syuwa + + + + + akud n tahiti + + + + + akud n ṭṭaywan + akud anaway n ṭṭaywan + akud n uzil n ṭṭaywan + + + + + akud n tajikistan + + + + + akud n tuwkulaw + + + + + akud n ṭunga + akud anaway n ṭunga + akud n uzil n ṭunga + + + + + akud n tcuk + + + + + akud n ṭurkmanistan + akud anaway n ṭurkmanistan + akud n uzil n ṭurkmanistan + + + + + akud n ṭubalu + + akud n urugway @@ -2395,11 +3194,68 @@ CLDR data files are interpreted according to the LDML specification (http://unic akud n uzil n urugway + + + akud n uẓbakistan + akud n anaway n uẓbakistan + akud n uzil n uẓbakistan + + + + + akud n banwatu + akud anaway n banwatu + akud n uzil n banwatu + + akud n vinzwila + + + akud n bladibustuk + akud anaway n bladibustuk + akud n uzil n bladibustuk + + + + + akud n bulgugrad + akud anaway n bulgugrad + akud n uzil n bulgugrad + + + + + akud n bustuk + + + + + akud n tagzirt n wayk + + + + + akud n walis d futuna + + + + + akud n yakutsek + akud anaway n yakutsek + akud n uzil n yakutsek + + + + + akud n yakatirinburg + akud anaway n yakatirinburg + akud n uzil n yakatirinburg + + akud n yukun @@ -2441,14 +3297,126 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ + + + + + 0K ¤ + 00K ¤ + 000K ¤ + 0M ¤ + 00M ¤ + 000M ¤ + 0G ¤ + 00G ¤ + 000G ¤ + 0T ¤ + 00T ¤ + 000T ¤ + + dderhem n limarat + dderhem n limarat + + + afɣani + afɣani + + + lik n walbanya + lik n walbanya + + + ddram n arminya + ddram n arminya + + + xulden n wantil + xulden n wantil + + + kwanza n angula + kwanza n angula + + + pisus n arxantina + pisus n arxantina + + + ddular n wustralya + ddular n wustralya + + + flurin n aruba + flurin n aruba + + + manat n azrabijan + manat n azrabijan + + + mark n busniya + mark n busniya + + + ddular n barbadyan + ddular n barbadyan + + + ṭaka n bangladic + ṭaka n bangladic + + + liva n belgarya + liva n belgarya + + + ddinar n lbeḥrin + ddinar n lbeḥrin + + + frank n burundi + frank n burundi + Bermudan Dollar ddular n birmudan + + ddular n brunay + ddular n brunay + + + bulibyanu + bulibyanu + + + riyal n brazil + riyal n brazil + + + ddular n bahamas + ddular n bahamas + + + ngultrum n buṭan + ngultrum n buṭan + + + pula n buteswana + pula n buteswana + + + rrubel n bilarus + rrubel n bilarus + Belize Dollar ddular n biliz @@ -2457,66 +3425,542 @@ CLDR data files are interpreted according to the LDML specification (http://unic Canadian Dollar ddular n kanada + + frank n kungu + frank n kungu + + + frank + frank + + + pisus n tcili + pisus n tcili + + + ywan n cina + ywan n cina + + + ywan n tcina + ywan n tcina + + + pisus n kulumbya + pisus n kulumbya + Costa Rican Colón kulun n kustarika + + pisus n kuba + pisus n kuba + + + pisus n kuba + pisus n kuba + + + iskudu n qabu yazegza + iskudu n qabu yazegza + + + kruna n ttcik + kruna n ttcik + + + frank n djibuti + frank n djibuti + Danish Krone kruna n ddanmark + + pisus n dduminik + pisus n dduminik + Algerian Dinar ddinar n ddzayer + + ljunih n masr + ljunih n masr + + + nafka n iritirya + nafka n iritirya + + + bir n yityupya + bir n yityupya + Euro uru + + ddular n fiji + ddular n fiji + + + ljunih n falkland + ljunih n falkland + British Pound - ppaʷndd + jinuh + + + lari n gyurgya + lari n gyurgya + + + sidiy n ɣana + sidiy n ɣana + + + ljunih n jabalṭariq + ljunih n jabalṭariq + + + dalasi n ɣambya + dalasi n ɣambya + + + frank n ɣinya + frank n ɣinya Guatemalan Quetzal kwitzal n gwatimala + + ddular n guyana + ddular n guyana + + + ddular n hungkung + ddular n hungkung + Honduran Lempira lempiras n hondura + + kuna n kerwatya + kuna n kerwatya + + + ɣurda n hayṭi + ɣurda n hayṭi + + + furint n hungatya + furint n hungatya + + + rrupya n yindunisya + rrupya n yindunisya + + + cikel + cikel + + + rrupya n lhend + Indian rupees + + + ddinar n lɛiraq + ddinar n lɛiraq + + + rryal n iran + Iranian rials + + + kruna n yeslanda + kruna n yeslanda + + + ddular n jamayka + ddular n jamayka + + + ddinar n lurdun + ddinar n lurdun + + + lyan n jjapun + lyan n jjapun + + + cilin n kinya + cilin n kinya + + + sum n kirgistan + sum n kirgistan + + + rryal n kambudya + rryal n kambudya + + + frank n qumrus + frank n qumrus + + + wun n kurya n sennej + wun n kurya n sennej + + + wun n kurya n wadday + wun n kurya n wadday + + + ddinar n lkuwit + ddinar n lkuwit + + + ddular n sayman + ddular n sayman + + + tinga n kazaxistan + tinga n kazaxistan + + + kip n lawes + kip n lawes + + + ljunih n lubnan + ljunih n lubnan + + + rrupya n Sri Lanka + Sri Lankan rupees + + + ddular n libirya + ddular n libirya + + + lluti n lisutu + lluti n lisutu + Libyan Dinar ddinar n libya - Moroccan Dirham - derhem + dderhem ameɣrabi + dderhem + + + liyu n muldub + liyu n muldub + + + aryari n madaɣacqar + aryari n madaɣacqar + + + ddinar n maqdunya + ddinar n maqdunya + + + kyat n myanmar + kyat n myanmar + + + tugrug n mangulya + tugrug n mangulya + + + patakaw n makkaw + patakaw n makkaw + + + uqiya n muritanya + uqiya n muritanya + + + rrupya n muriṭanya + rrupya n muriṭanya + + + rrufiya n maldib + Maldivian rufiyaas + + + kwaca n malawi + kwaca n malawi Mexican Peso pisus n miksiku + + ringit n malizya + ringit n malizya + + + metqal n muzembiq + metqal n muzembiq + + + ddular n nambya + ddular n nambya + + + nira n nijirya + nira n nijirya + + + kurduba n nikaragwa + kurduba n nikaragwa + Norwegian Krone kruna n nnarwij + + rrupya n nnipal + rrupya n nnipal + + + ddular nyuziland + ddular n yuziland + + + rriyal n ɛumman + rriyal n ɛumman + + + balbaw n panama + balbaw n panama + + + ssul n piru + ssul n piru + + + kina n papwa + kina n papwa + + + pisus n filippin + pisus n filippin + + + rrupya n pakistan + rrupya n pakistan + + + zluṭi n pulanda + zluṭi n pulanda + + + gwarani n paragway + gwarani n paragway + + + rriyal n qatar + rriyal n qatar + + + liyu n rumanya + liyu n rumanya + + + ddinar n sirbya + ddinar n sirbya + + + rrubel + rrubel + + + frank n ruwanda + frank n ruwanda + + + rriyal n ssaɛud + rriyal n ssaɛud + + + ddular n sulumun + ddular n sulumun + + + rrupya n sicel + rrupya n sicel + + + ljunih n ssudan + ljunih n ssudan + Swedish Krona kruna n sswid + + ddular n sanɣafura + ddular n sanɣafura + + + ljunih n hilina + ljunih n hilina + + + lyun n siraliyyun + lyun n siraliyyun + + + lyun n siraliyyun + lyun n siraliyyun + + + cilin n ssumal + cilin n ssumal + + + ddular n surinam + ddular n surinam + + + ljunih n ssudan n wadday + ljunih n ssudan n wadday + + + dubra n sawtumi + dubra n sawtumi + + + ljunih n surya + ljunih n surya + + + lilangini + lilangini + + + baṭ n ṭṭayland + baṭ n ṭṭayland + + + sumuni n tajikistan + sumuni n tajikistan + + + manat n ṭurkmanistan + manat n ṭurkmanistan + Tunisian Dinar ddinar n tunes + + panga n ṭunga + panga + + + llira + llira + + + ddular n trinindad + ddular n trinindad + + + ddular n ttaywan + ddular n ttaywan + + + cilin n tanzanya + cilin n tanzanya + + + hribnya n wekranya + hribnya n wekranya + + + cilin n uɣanda + cilin n uɣanda + US Dollar ddular + + pisus n urugway + pisus n urugway + + + sum n uzbakistan + sum n uzbakistan + + + bulibyar + bulibyar + + + ddung n bitnam + ddung n bitnam + + + batu n banwatu + batu n banwatu + + + tala n samwa + tala n samwa + + + frank n wafriqa + frank n wafriqa + + + ddular n karibyan + ddular n karibyan + + + xulden n karibyan + xulden n karibyan + + + frank n wafriqa + frank n wafriqa + + + frank n kalidunya + frank n kalidunya + ttmenyat ttmneyat + + rriyal n lyaman + rriyal n lyaman + + + rrand n tafriqt n wadday + rrand n tafriqt n wadday + + + kwaca n zambya + kwaca n zambya + + + uru n zimbabwi + uru n zimbabwi + {0} n wussan diff --git a/make/data/cldr/common/main/rm.xml b/make/data/cldr/common/main/rm.xml index e5e3aeaa8c5..13ac0b64f23 100644 --- a/make/data/cldr/common/main/rm.xml +++ b/make/data/cldr/common/main/rm.xml @@ -19,62 +19,65 @@ CLDR data files are interpreted according to the LDML specification (http://unic andangme adygai avestic - afrikaans + afrikaans afrihili aghem ainu - akan + akan accadic aleutic altaic dal sid - amaric + amaric aragonais englais vegl angika - arab - arab modern standardisà + arab + arab standardisà modern arameic araucanic arapaho arawak - assami + assami asu - asturian + asturian avaric awadhi aymara - aserbeidschanic + lingua aserbaidschana + azeri baschkir - belutschi + belutschi balinais basaa - bieloruss + lingua bielorussa bedscha bemba bena - bulgar - bhojpuri + bulgar + haryanvi + bhojpuri bislama bikol bini siksika + anii bambara - bengal + lingua bengala tibetan - breton + breton braj bodo - bosniac + bosniac buriat bugi blin - catalan + catalan caddo caribic atsam chakma tschetschen - cebuano + cebuano chiga chamorro chibcha @@ -84,7 +87,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic patuà chinook choctaw chipewyan - cherokee + cherokee cheyenne curd central curd, central @@ -93,12 +96,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic coptic cree tirc crimean - tschec + tschec kaschubic + swampy cree slav da baselgia - tschuvasch - kimric - danais + tschuvasch + valisic + danais dakota dargwa taita @@ -110,8 +114,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic dogrib dinka zarma - dogri - bass sorb + dogri + bass sorb duala ollandais mesaun maledivic @@ -119,55 +123,55 @@ CLDR data files are interpreted according to the LDML specification (http://unic diula dzongkha embu - ewe + ewe efik egipzian vegl ekajuk - grec + grec elamitic - englais - englais australian - englais canadais - englais britannic + englais + englais australian + englais canadais + englais britannic englais GB englais american englais USA englais mesaun - esperanto - spagnol - spagnol latinamerican + esperanto + spagnol + spagnol latinamerican spagnol europeic spagnol mexican - eston - basc + eston + basc ewondo - persian + persian dari fang fanti - fulah - finlandais - filippino + fulah + finlandais + filippino fidschian feroais fon - franzos - franzos canadais - franzos svizzer + franzos + franzos canadais + franzos svizzer franzos mesaun franzos vegl fris dal nord fris da l’ost friulan - fris - irlandais - ga + fris occidental + irlandais + ga gayo gbaya - gaelic scot + gaelic scot geez gilbertais - galician + galizian tudestg mesaun guarani vegl tudestg da scrittira @@ -177,47 +181,48 @@ CLDR data files are interpreted according to the LDML specification (http://unic grebo grec vegl tudestg svizzer - gujarati + gujarati gusii manx gwichʼin - haussa + hausa haida hawaian - ebraic - hindi + ebraic + hindi + hinglish hiligaynon ettitic hmong hiri motu - croat - aut sorb + croat + aut sorb creol haitian - ungarais + ungarais hupa - armen + armen herero - interlingua + interlingua iban - indonais - interlingue - igbo - sichuan yi + indonais + interlingue + igbo + sichuan yi inupiak ilocano ingush ido - islandais - talian + islandais + talian inuktitut - giapunais + giapunais lojban ngomba machame giudaic-persian giudaic-arab - javanais - georgian + javanais + georgian karakalpak kabyle kachin @@ -227,55 +232,61 @@ CLDR data files are interpreted according to the LDML specification (http://unic kabardic tyap makonde - cabverdian + creol dal Cap Verd koro kongo + kaingang khasi khotanais koyra chiini kikuyu kuanyama - casac + kasac kako grönlandais kalenjin - cambodschan + khmer kimbundu - kannada - corean - konkani + kannada + corean + konkani kosraean kpelle kanuri karachay-balkar carelian kurukh - kashmiri + kashmiri shambala bafia colognais - curd + curd + curd + curd settentriunal kumuk kutenai komi cornic - kirghis + kuvi + kirghis latin ladino langi lahnda lamba - luxemburgais + luxemburgais lezghian ganda limburgais + ligur lakota + lumbard lingala - laot + laot lomongo lozi luri dal nord - lituan + lituan luba-katanga luba-lulua luiseno @@ -283,10 +294,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic luo lushai luyia - letton + letton madurais magahi - maithili + maithili makassar mandingo masai @@ -300,25 +311,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic makhuwa-meetto meta’ marschallais - maori + māori micmac minangkabau - macedon - malayalam - mongolic + macedon + malayalam + mongol manchu - manipuri + meitei mohawk mossi - marathi - malaic - maltais + marathi + malaic + maltais mundang - pluriling + pluriling creek mirandais marwari - birman + birman erzya mazanderani nauru @@ -326,23 +337,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic nama norvegais bokmål ndebele dal nord - bass tudestg - nepalais + bass tudestg + nepalais newari ndonga nias niue - ollandais - flam + neerlandais + flam kwasio - norvegiais nynorsk + norvegiais nynorsk ngienboon - norvegiais + norvegiais nogai nordic vegl - n’ko + n’ko ndebele dal sid - sotho dal nord + sotho dal nord nuer navajo newari classic @@ -351,14 +362,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic nyankole nyoro nzima - occitan + occitan ojibwa - oromo - oriya + oromo + oriya ossetic osage tirc ottoman - punjabi + punjabi pangasinan pahlavi pampanga @@ -368,40 +379,40 @@ CLDR data files are interpreted according to the LDML specification (http://unic persian vegl fenizian pali - polac + polac ponapean prussian provenzal vegl - paschto - portugais - portugais brasilian + paschto + portugais + portugais brasilian portugais europeic - quechua - rajasthani + quechua + rajasthani rapanui rarotonga - rumantsch + rumantsch rundi - rumen + rumen moldav rombo romani - russ + russ aromunic - kinyarwanda + kinyarwanda rwa - sanscrit + sanscrit sandawe - jakut + jakut arameic samaritan samburu sasak - santali + santali sangu - sard + sard sicilian scot - sindhi + sindhi sami dal nord sena selkup @@ -411,10 +422,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic serbo-croat tachelit shan - singalais + singalais sidamo - slovac - sloven + slovac + sloven samoan sami dal sid sami lule @@ -422,48 +433,49 @@ CLDR data files are interpreted according to the LDML specification (http://unic sami skolt shona soninke - somali + somali sogdian - albanais - serb + albanais + serb sranan tongo serer swazi - sotho dal sid - sundanais + sotho dal sid + sundanais sukuma susu sumeric - svedais - suahili + svedais + suaheli suahili dal Congo siric classic - siric - tamil - telugu + sirian + silesian + tamil + telugu temne teso tereno tetum - tadjik + tadschic tailandais - tigrinya + tigrinya tigre tiv - turkmen + turkmen tokelau tagalog klingonic tlingit tamasheq - tswana - tonga + tswana + tonga lingua tsonga tok pisin tirc tsonga tsimshian - tatar + tatar tumbuka tuvalu twi @@ -472,16 +484,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic tuvinian tamazight udmurt - uiguric + uiguric ugaritic - ucranais + ucranais mbundu lingua nunenconuschenta - urdu - usbec + urdu + usbec vai venda - vietnamais + venetic + vietnamais + makhuwa volapuk votic vunjo @@ -490,18 +504,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic walamo waray washo - wolof + wolof kalmuk - xhosa + xhosa + kangri soga yao yapais yangben jiddic - yoruba + yoruba + nheengatu cantonais chinais, cantonais - zhuang + zhuang zapotec simbols da Bliss zenaga @@ -512,41 +528,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic chinais mandarin simplifitgà chinais tradiziunal chinais mandarin tradiziunal - zulu + zulu zuni - nagins cuntegns linguistics + nagin cuntegn linguistic zaza - + - - + + - + - + - + - + - - + + - + - + - + @@ -554,41 +570,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + - + - - - + + + - - + + - - + + - + - + - + - - - + + + - + @@ -603,20 +619,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - + + - - + + - + - + - + @@ -630,6 +646,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -641,14 +658,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + - + - + @@ -656,338 +673,343 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + - + - + - - - + + + - + - + - - - + + + - + mund - Africa - America dal Nord - America dal Sid - Oceania - Africa dal Vest - America Centrala - Africa da l’Ost - Africa dal Nord - Africa Centrala - Africa Meridiunala - americas - Amercia dal Nord - Caribica - Asia da l’Ost - Asia dal Sid - Asia dal Sidost - Europa dal Sid - Australia e Nova Zelanda - Melanesia - Regiun Micronesica - Polinesia - Asia - Asia Centrala - Asia dal Vest - Europa - Europa Orientala - Europa dal Nord - Europa dal Vest + Africa + America dal Nord + America dal Sid + Oceania + Africa dal Vest + America Centrala + Africa da l’Ost + Africa dal Nord + Africa Centrala + Africa Meridiunala + America + America dal nord + Caribica + Asia da l’Ost + Asia dal Sid + Asia dal Sidost + Europa dal Sid + Australasia + Melanesia + Regiun Micronesica + Polinesia + Asia + Asia Centrala + Asia dal Vest + Europa + Europa Orientala + Europa dal Nord + Europa dal Vest Africa Subsaharica - America Latina - Insla d’Ascensiun - Andorra - Emirats Arabs Unids - Afghanistan - Antigua e Barbuda - Anguilla - Albania - Armenia - Angola - Antarctica - Argentinia - Samoa Americana - Austria - Australia - Aruba - Inslas Aland - Aserbaidschan - Bosnia ed Erzegovina - Barbados - Bangladesch - Belgia - Burkina Faso - Bulgaria - Bahrain - Burundi - Benin - Son Barthélemy - Bermudas - Brunei - Bolivia - Antillas Ollandaisas + America latina + Insla da l’Ascensiun + Andorra + Emirats Arabs Unids + Afganistan + Antigua e Barbuda + Anguilla + Albania + Armenia + Angola + Antarctica + Argentina + Samoa Americana + Austria + Australia + Aruba + Inslas Aland + Aserbaidschan + Bosnia ed Erzegovina + Barbados + Bangladesch + Belgia + Burkina Faso + Bulgaria + Bahrain + Burundi + Benin + Son Barthélemy + Bermudas + Brunei + Bolivia + Pajais Bass caribics Brasilia - Bahamas - Bhutan - Insla Bouvet - Botswana - Bielorussia - Belize - Canada - Inslas Cocos - Congo - Kinshasa - Congo (DRC) - Republica Centralafricana - Congo - Congo (republica) - Svizra - Costa d’Ivur - Inslas Cook - Chile - Camerun + Bahamas + Butan + Insla da Bouvet + Botsuana + Belarus + Belize + Canada + Inslas Cocos + Congo-Kinshasa + Republica Democratica dal Congo + Republica Centralafricana + Congo-Brazzaville + Republica dal Congo + Svizra + Costa d’Ivur + Côte d’Ivoire + Inslas Cook + Chile + Camerun China - Columbia - Insla da Clipperton - Costa Rica - Cuba - Cap Verd + Columbia + Insla Clipperton + Sark + Costa Rica + Cuba + Cap Verd Curaçao Insla da Nadal - Cipra + Cipra Tschechia Republica Tscheca - Germania + Germania Diego Garcia - Dschibuti - Danemarc - Dominica - Republica Dominicana - Algeria + Dschibuti + Danemarc + Dominica + Republica Dominicana + Algeria Ceuta e Melilla - Ecuador - Estonia - Egipta - Sahara Occidentala - Eritrea - Spagna - Etiopia - Uniun Europeica + Ecuador + Estonia + Egipta + Sahara Occidentala + Eritrea + Spagna + Etiopia + Uniun europeica zona da l’euro - Finlanda - Fidschi - Inslas dal Falkland - Inslas Falkland - Micronesia - Inslas Feroe - Frantscha - Gabun - Reginavel Unì + Finlanda + Fidschi + Inslas Falkland + Inslas Falkland (Inslas Malvinas) + Micronesia + Inslas Feroe + Frantscha + Gabun + Reginavel Unì GB - Grenada - Georgia - Guyana Franzosa - Guernsey - Ghana - Gibraltar - Grönlanda - Gambia - Guinea - Guadeloupe - Guinea Equatoriala - Grezia - Georgia dal Sid e las Inslas Sandwich dal Sid - Guatemala - Guam - Guinea-Bissau - Guyana - Regiun d’administraziun speziala da Hongkong, China - Hong Kong - Inslas da Heard e da McDonald - Honduras - Croazia - Haiti - Ungaria + Grenada + Georgia + Guyana Franzosa + Guernsey + Ghana + Gibraltar + Grönlanda + Gambia + Guinea + Guadalupa + Guinea Equatoriala + Grezia + Georgia dal Sid e las Inslas Sandwich dal Sid + Guatemala + Guam + Guinea-Bissau + Guyana + Regiun d’administraziun speziala Hongkong, China + Hongkong + Inslas da Heard e McDonald + Honduras + Croazia + Haiti + Ungaria Inslas Canarias - Indonesia - Irlanda - Israel - Insla da Man + Indonesia + Irlanda + Israel + Insla da Man India - Territori Britannic en l’Ocean Indic - Irac - Iran - Islanda - Italia - Jersey - Giamaica - Jordania - Giapun - Kenia - Kirgisistan - Cambodscha - Kiribati - Comoras - Saint Kitts e Nevis - Corea dal Nord - Corea dal Sid - Kuwait - Inslas Cayman - Kasachstan - Laos - Libanon - Saint Lucia - Liechtenstein - Sri Lanka - Liberia - Lesotho - Lituania - Luxemburg - Lettonia - Libia - Maroc - Monaco - Moldavia - Montenegro - Saint Martin - Madagascar - Inslas da Marshall + Territori Britannic da l’Ocean Indic + Archipel da Chagos + Irac + Iran + Islanda + Italia + Jersey + Giamaica + Jordania + Giapun + Kenia + Kirghistan + Cambodscha + Kiribati + Comoras + Son Cristof e Nevis + Corea dal Nord + Corea dal Sid + Kuwait + Inslas Cayman + Kasachstan + Laos + Libanon + Sontga Lucia + Liechtenstein + Sri Lanka + Liberia + Lesotho + Lituania + Luxemburg + Lettonia + Libia + Maroc + Monaco + Moldavia + Montenegro + Saint Martin + Madagascar + Inslas da Marshall Macedonia dal Nord - Mali + Mali Myanmar (Burma) - Mongolia - Regiun d’administraziun speziala Macao, China + Mongolia + Regiun d’administraziun speziala Macao, China Macao - Inslas Mariannas dal Nord - Martinique - Mauretania - Montserrat - Malta - Mauritius - Maldivas - Malawi - Mexico - Malaisia - Mosambic - Namibia - Nova Caledonia - Niger - Insla Norfolk - Nigeria - Nicaragua - Pajais Bass - Norvegia - Nepal - Nauru - Niue - Nova Zelanda - Oman + Inslas Mariannas dal Nord + Martinica + Mauretania + Montserrat + Malta + Mauritius + Maledivas + Malawi + Mexico + Malaisia + Mosambic + Namibia + Nova Caledonia + Niger + Insla Norfolk + Nigeria + Nicaragua + Pajais Bass + Norvegia + Nepal + Nauru + Niue + Nova Zelanda + Aotearoa (Nova Zelanda) + Oman Panama - Peru - Polinesia Franzosa - Papua Nova Guinea - Filippinas - Pakistan - Pologna - Saint Pierre e Miquelon - Pitcairn - Puerto Rico - Territori Palestinais + Peru + Polinesia Franzosa + Papua Nova Guinea + Filippinas + Pakistan + Pologna + Saint Pierre e Miquelon + Pitcairn + Puerto Rico + Territori Palestinais Palestina - Portugal - Palau - Paraguai - Katar - Oceania Periferica - Réunion - Rumenia - Serbia + Portugal + Palau + Paraguai + Qatar + Oceania Periferica + Réunion + Rumenia + Serbia Russia - Ruanda - Arabia Saudita - Inslas Salomonas - Seychellas - Sudan - Svezia - Singapur - Sontg’Elena - Slovenia - Svalbard e Jan Mayen - Slovachia - Sierra Leone - San Marino - Senegal - Somalia - Surinam + Ruanda + Arabia Saudita + Inslas da Salomon + Seychellas + Sudan + Svezia + Singapur + Sontg’Elena + Slovenia + Svalbard e Jan Mayen + Slovachia + Sierra Leone + Son Marin + Senegal + Somalia + Surinam Sudan dal Sid - São Tomé & Príncipe - El Salvador + São Tomé e Príncipe + El Salvador Sint Maarten - Siria + Siria Eswatini - Swaziland + Swasiland Tristan da Cunha - Inslas Turks e Caicos - Tschad - Territoris Franzos Meridiunals - Togo - Tailanda - Tadschikistan - Tokelau - Timor da l’Ost - Turkmenistan - Tunesia - Tonga - Tirchia - Trinidad e Tobago - Tuvalu - Taiwan - Tansania - Ucraina - Uganda + Inslas Turks e Caicos + Tschad + Territoris Franzos Meridiunals + Togo + Tailanda + Tadschikistan + Tokelau + Timor da l’Ost + Timor-Leste + Turkmenistan + Tunesia + Tonga + Tirchia + Trinidad e Tobago + Tuvalu + Taiwan + Tansania + Ucraina + Uganda Inslas Pitschnas Perifericas dals Stadis Unids da l’America - Naziuns Unidas - Stadis Unids da l’America - US - Uruguay - Usbekistan - Citad dal Vatican - Saint Vincent e las Grenadinas - Venezuela + Naziuns unidas + Stadis Unids da l’America + USA + Uruguai + Usbekistan + Citad dal Vatican + Son Vincenz e las Grenadinas + Venezuela Inslas Virginas Britannicas Inslas Virginas Americanas - Vietnam - Vanuatu - Wallis & Futuna - Samoa - accents pseudo - pseudo-bidirecziunal + Vietnam + Vanuatu + Wallis e Futuna + Samoa + pseudo-accents + pseudo-bidi Cosovo - Jemen - Mayotte - Africa dal Sid - Sambia - Simbabwe + Jemen + Mayotte + Africa dal Sid + Sambia + Simbabwe regiun nunenconuschenta @@ -1020,63 +1042,138 @@ CLDR data files are interpreted according to the LDML specification (http://unic valencian - chalender + chalender format da valuta - zavrada + zavrada valuta - ciclus da las uras + visualisaziun dals emojis + ciclus da las uras (12 u 24h) stil da sigl da lingia + sigls da lingia entaifer pleds sistem da mesira - dumbers + dumbers + Interrupziun da la frasa suenter ina abreviaziun - chalender budistic - chalender chinais - chalender coptic + chalender budistic + budistic + chalender chinais + chinais + chalender coptic + coptic chalender dangi + dangi chalender etiopic - chalender gregorian - chalender ebraic + etiopic + chalender etiopic amete alem + etiopic amete alem + chalender gregorian + gregorian + chalender ebraic + ebraic chalender naziunal indic - chalender islamic - chalender islamic civil + chalender hijri + hijri + chalender hijri (tabellar, epoca civila) + hijri (tabellar, epoca civila) chalender islamic (Arabia Saudita) - chalender islamic (Umm al-Qura) - chalender tenor ISO 8601 - chalender giapunais + chalender hijri (Umm al-Qura) + hijri (Umm al-Qura) + chalender gregorian (cun l’onn al cumenzament) + chalender giapunais + giapunais chalender persian - chalender da la Republica Chinaisa + persian + chalender minguo + minguo format da valuta per la contabilitad + contabilitad format da valuta da standard - chinaisa tradiziunala - Big5 + standard zavrada unicode standard - chinaisa simplifitgada - GB2312 + standard unicode cudesch da telefon Pinyin tschertga generala + tschertga zavrada da standard + standard urden dals stritgs reglas tradiziunalas + predefinì + emoji + text sistem da 12 uras (0–11) + 12 (0–11) sistem da 12 uras (1–12) + 12 (1–12) sistem da 24 uras (0–23) + 24 (0–23) sistem da 24 uras (1–24) + 24 (1–24) stil da sigl da lingia liber + liber stil da sigl da lingia normal + normal stil da sigl da lingia strict + strict + divider tut + preservar tut + normal + preservar en frasas sistem metric - sistem da mesira imperial - sistem da mesira US + metric + sistem imperial britannic + imperial britannic + sistem da mesira USA + USA cifras indic-arabas - dumbers armens - cifras bengalas - dumbers georgians + cifras indic-arabas extendidas + dumbers armens + dumbers armens en minusclas + cifras bengalas + cifras chakma + cifras devanagari + cifras etiopicas + cifras da ladezza cumplaina + dumbers georgians + dumbers grecs + dumbers grecs en minusclas + cifras gujarati + cifras gurmukhi + dumbers chinais decimals + dumbers en chinais simplifitgà + dumbers finanziars en chinais simplifitgà + dumbers en chinais tradiziunal + dumbers finanziars en chinais tradiziunal + dumbers ebraics + cifras javanaisas + dumbers giapunais + dumbers finanziars giapunais + cifras khmer + cifras kannada + cifras laotas cifras occidentalas + cifras malayalam + cifras meetei mayek + cifras dal Myanmar + cifras ol chiki + cifras oriya + dumbers romans + dumbers romans en minusclas + dumbers tamil tradiziunal + cifras tamilas + cifras telugu + cifras en thai + cifras tibetanas + cifras vai + Deactivà + Activà metric - englais - american + britannic + USA Lingua: {0} @@ -1091,10 +1188,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic [. ’ % ‰ + − 0 1 2 3 4 5 6 7 8 9] - « - » - - + « + » + + @@ -1102,23 +1199,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic - EEEE, 'ils' d MMMM y G + EEEE, 'ils' d MMMM y G - d MMMM y G + d MMMM y G - dd-MM-y G + d MMM y G GyMMdd - dd-MM-y GGGGG + dd-MM-y GGGGG @@ -1130,6 +1227,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'las' {0} + + {1} 'a' 'las' {0} + @@ -1138,6 +1238,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'las' {0} + + {1} 'a' 'las' {0} + @@ -1150,43 +1253,93 @@ CLDR data files are interpreted according to the LDML specification (http://unic - E d. - E h:mm a - E h:mm:ss a - y G - LLL y G - dd-MM-y GGGGG - E, dd-MM-y GGGGG - d MMMM y G - E, d MMMM y G - h a + E d + E h:mm a + E h:mm:ss a + y G + MM-y G + dd-MM-y G + E, dd-MM-y G + LLL y G + dd-MM-y G + E, dd-MM-y G + d MMMM y G + E, d MMMM y G h:mm a h:mm:ss a h:mm:ss a v HH:mm:ss v h:mm a v HH:mm v - dd-MM - E, dd-MM - dd-MM - E, dd-MM - d MMMM - E, d MMMM - y G - MM-y GGGGG - E, dd-MM-y GGGGG - LLL y G - dd-MM-y GGGGG - E, dd-MM-y GGGGG - LLLL y G - d MMMM y G - E, d MMMM y G - QQQ y G - QQQQ y G + dd-MM + E, dd-MM + d MMM + E, d MMM + d MMMM + E, d MMMM + y G + MM-y GGGGG + E, dd-MM-y GGGGG + LLL y G + dd-MM-y GGGGG + E, dd-MM-y GGGGG + LLLL y G + d MMMM y G + E, d MMMM y G + QQQ y G + QQQQ y G + y G + MM-y G + dd-MM-y G + E, dd-MM-y G + MMM y G + d MMM y G + E, d MMM y G + MMMM y G + QQQ y G + QQQQ y G - d.–d. + d – d + + + y G – y G + y–y G + + + MM-y G – MM-y G + MM-y – MM-y G + MM-y – MM-y G + + + dd – dd-MM-y G + dd-MM-y G – dd-MM-y G + dd – dd-MM-y G + dd-MM-y – dd-MM-y G + + + E dd-MM-y – E dd-MM-y G + E dd-MM-y G – E dd-MM-y G + E dd-MM-y – E dd-MM-y G + E dd-MM-y – E dd-MM-y G + + + MMM y G – MMM y G + MMM–MMM y G + MMM y – MMM y G + + + d–d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G + + + E d – E d MMM y G + E d MMM y G – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G h a – h a @@ -1207,76 +1360,79 @@ CLDR data files are interpreted according to the LDML specification (http://unic h–h a v - LL–LL + LL–LL - dd-MM – dd-MM - dd-MM – dd-MM + dd – dd-MM + dd-MM – dd-MM - E, dd-MM – E, dd-MM - E, dd-MM – E, dd-MM + E dd-MM – E dd-MM + E dd-MM – E dd-MM + + + MMM–MMM - dd-MM – dd-MM - dd-MM – dd-MM + d–d MMM + d MMM – d MMM - E, dd-MM – E, dd-MM - E, dd-MM – E, dd-MM + E d – E d MMM + E d MMM – E d MMM - d.–d MMMM - d MMMM – d MMMM + d – d MMMM + d MMMM – d MMMM - E, d. – E, d MMMM - E, d MMMM – E, d MMMM + E d. – E d MMMM + E d MMMM – E d MMMM - y–y G + y–y G - LL-y – LL-y GGGGG - LL-y – LL-y GGGGG + MM-y – MM-y G + MM-y – MM-y G - dd-MM-y – dd-MM-y GGGGG - dd-MM-y – dd-MM-y GGGGG - dd-MM-y – dd-MM-y GGGGG + d-M-y – d-M-y G + d-M-y – d-M-y G + d-M-y – d-M-y G - E, dd-MM-y – E, dd-MM-y GGGGG - E, dd-MM-y – E, dd-MM-y GGGGG - E, dd-MM-y – E, dd-MM-y GGGGG + E d-M-y – E d-M-y G + E d-M-y – E d-M-y G + E d-M-y – E d-M-y G - LLL–LLL y G - LLL y – LLL y G + MMM – MMM y G + MMM y – MMM y G - dd-MM-y – dd-MM-y GGGGG - dd-MM-y – dd-MM-y GGGGG - dd-MM-y – dd-MM-y GGGGG + d–d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E, dd-MM-y – E, dd-MM-y GGGGG - E, dd-MM-y – E, dd-MM-y GGGGG - E, dd-MM-y – E, dd-MM-y GGGGG + E d – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G - LLLL–LLLL y G - LLLL y – LLLL y G + LLLL–LLLL y G + LLLL y – LLLL y G - d.–d MMMM y G - d MMMM – d MMMM y G - d MMMM y – d MMMM y G + d – d MMMM y G + d MMMM – d MMMM y G + d MMMM y – d MMMM y G - E, d. – E, d MMMM y G - E, d MMMM – E, d MMMM y G - E, d MMMM y – E, d MMMM y G + E d – E d MMMM y + E d MMMM – E d MMMM y + E d MMMM y – E d MMMM y @@ -1393,16 +1549,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + a + p + + + avant Cristus + avant l’èra cuminaivla suenter Cristus + da l’èra cuminaivla - av. Cr. - BCE - s. Cr. - CE + a.Cr. + a.e.c. + s.C. + e.c. @@ -1454,66 +1620,125 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {1} {0} + {1}, {0} + + + {1} 'a' 'las' {0} + + + {1} 'a' 'las' {0} - {1} {0} + {1}, {0} + + + {1} 'a' 'las' {0} + + + {1} 'a' 'las' {0} - {1} {0} + {1}, {0} + + + {1}, {0} + + + {1}, {0} - {1} {0} + {1}, {0} + + + {1}, {0} + + + {1}, {0} - E d. + E d E h:mm a E h:mm:ss a y G - dd-MM-y GGGGG + MM-y G + dd-MM-y G + E, dd-MM-y G LLL y G - dd-MM-y GGGGG - E, dd-MM-y GGGGG + dd-MM-y G + E, d MMM y G d MMMM y G E, d MMMM y G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v dd-MM E, dd-MM - dd-MM - E, dd-MM + d MMM + E, d MMM d MMMM E, d MMMM - W. 'emna' MMMM - W. 'emna' MMMM + 'emna' W 'dal' 'mais' LLLL + 'emna' W 'dal' 'mais' LLLL LL-y - dd-MM-y - E, dd-MM-y - LLL y - dd-MM-y - E, dd-MM-y + d-M-y + E, d-M-y + MMM y + d MMM y + E, d MMM y LLLL y d MMMM y E, d MMMM y QQQ y QQQQ y - w. 'dal' Y - w. 'emna' 'dal' Y + 'emna' w 'dal' Y + 'emna' w 'dal' Y - - h a – h a - h–h a + + y G – y G + y–y G + + + MM-y G – MM-y G + MM-y – MM-y G + MM-y – MM-y G + + + dd – dd-MM-y G + dd-MM-y G – dd-MM-y G + dd-MM – dd-MM-y G + dd-MM-y – dd-MM-y G + + + E dd-MM-y – E dd-MM-y G + E dd-MM-y G – E dd-MM-y G + E dd-MM – E dd-MM-y G + E dd-MM-y – E dd-MM-y G + + + MMM y G – MMM y G + MMM–MMM y G + MMM y – MMM y G + + + d–d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G + + + E d – E d MMM y G + E d MMM y G – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G h:mm a – h:mm a @@ -1525,78 +1750,74 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - LL–LL - dd-MM – dd-MM + dd – dd-MM dd-MM – dd-MM - E, dd-MM – E, dd-MM - E, dd-MM – E, dd-MM + E dd-MM – E dd-MM + E dd-MM – E dd-MM - dd-MM – dd-MM - dd-MM – dd-MM + d–d MMM + d MMM – d MMM - E, dd-MM – E, dd-MM - E, dd-MM – E, dd-MM + E d – E d MMM + E d MMM – E d MMM - d.–d MMMM + d – d MMMM d MMMM – d MMMM - E, d. – E, d MMMM - E, d MMMM – E, d MMMM + E d. – E d MMMM + E d MMMM – E d MMMM - LL-y – LL-y - LL-y – LL-y + MM-y – MM-y + MM-y – MM-y - dd-MM-y – dd-MM-y - dd-MM-y – dd-MM-y - dd-MM-y – dd-MM-y + d-M-y – d-M-y + d-M-y – d-M-y + d-M-y – d-M-y - E, dd-MM-y – E, dd-MM-y - E, dd-MM-y – E, dd-MM-y - E, dd-MM-y – E, dd-MM-y + E d-M-y – E d-M-y + E d-M-y – E d-M-y + E d-M-y – E d-M-y - LLL–LLL y - LLL y – LLL y + MMM – MMM y + MMM y – MMM y - dd-MM-y – dd-MM-y - dd-MM-y – dd-MM-y - dd-MM-y – dd-MM-y + d–d MMM y + d MMM – d MMM y + d MMM y – d MMM y - E, dd-MM-y – E, dd-MM-y - E, dd-MM-y – E, dd-MM-y - E, dd-MM-y – E, dd-MM-y + E d – E d MMM y + E d MMM – E d MMM y + E d MMM y – E d MMM y LLLL–LLLL y LLLL y – LLLL y - d.–d MMMM y + d – d MMMM y d MMMM – d MMMM y d MMMM y – d MMMM y - E, d. – E, d MMMM y - E, d MMMM – E, d MMMM y - E, d MMMM y – E, d MMMM y + E d – E d MMMM y + E d MMMM – E d MMMM y + E d MMMM y – E d MMMM y @@ -1604,25 +1825,181 @@ CLDR data files are interpreted according to the LDML specification (http://unic - epoca + èra + + + èra + + + èra - onn + onn l’onn passà quest onn l’onn proxim + + en {0} onn + en {0} onns + + + avant {0} onn + avant {0} onns + + + + + en {0} onn + en {0} onns + + + avant {0} onn + avant {0} onns + + + + o. + l’onn passà + quest onn + l’onn prox. + + en {0}o + en {0}o + + + avant {0}o + avant {0}o + quartal + l’ultim quartal + quest quartal + il proxim quartal + + en {0} quartal + en {0} quartals + + + avant {0} quartal + avant {0} quartals + - qrtl + quart. + + en {0} qrtl. + en {0} qrtls. + + + avant {0} qrtl. + avant {0} qrtls. + + + + Q + + en {0}q + en {0}q + + + avant {0}q + avant {0}q + - mais + mais + l’ultim mais + quest mais + il proxim mais + + en {0} mais + en {0} mais + + + avant {0} mais + avant {0} mais + + + + ultim mais + quest mais + proxim mais + + en {0} mais + en {0} mais + + + avant {0} mais + avant {0} mais + + + + m. + ultim mais + quest mais + proxim mais + + en {0}mais + en {0}mais + + + avant {0}mais + avant {0}mais + - emna + emna + l’ultima emna + quest’emna + proxim’emna + + en {0} emna + en {0} emnas + + + avant {0} emna + avant {0} emnas + + l’emna dals {0} + + + ultim’emna + quest’emna + proxim’emna + + en {0} emna + en {0} emnas + + + avant {0} emna + avant {0} emnas + + l’emna dals {0} + + + e. + ultim’emna + quest’emna + proxim’emna + + en {0}e + en {0}e + + + avant {0}e + avant {0}e + + l’emna dals {0} + + + emna dal mais + + + emna dal mais + + + emna mais di @@ -1631,540 +2008,1705 @@ CLDR data files are interpreted according to the LDML specification (http://unic oz damaun puschmaun + + en {0} di + en {0} dis + + + avant {0} di + avant {0} dis + + + + + en {0} di + en {0} dis + + + avant {0} di + avant {0} dis + d + + en {0}d + en {0}d + + + avant {0}d + avant {0}d + + + + di da l’onn + + + di da l’onn + + + di da l’onn di da l’emna - + + di dal mais + + + di dal mais + + + di dal mais + + + l’ultima dumengia + questa dumengia + proxima dumengia - +{0} dumengia - en {0} du + en {0} dumengia + en {0} dumengias + + + avant {0} dumengia + avant {0} dumengias + + ultima dum. + questa dum. + proxima dum. + + en {0} dum. + en {0} dum. + + + avant {0} dum. + avant {0} dum. + + + + ultima du + questa du + prox. du + + en {0} du + en {0} dum. + + + avant {0} du + avant {0} du + + + + l’ultim glindesdi + quest glindesdi + proxim glindesdi + + en {0} glindesdi + en {0} glindesdis + + + avant {0} glindesdi + avant {0} glindesdis + + + + ultim glind. + quest glind. + proxim glind. + + en {0} glind. + en {0} glind. + + + avant {0} glind. + avant {0} glind. + + + + ultim gli + quest gli + prox. gli + + en {0} gli + en {0} gli + + + avant {0} gli + avant {0} gli + + + + l’ultim mardi + quest mardi + proxim mardi + + en {0} mardi + en {0} mardis + + + avant {0} mardi + avant {0} mardis + + + + ultim mardi + quest mardi + proxim mar + + en {0} mardi + en {0} mardis + + + avant {0} mardi + avant {0} mardis + + + + ultim ma + quest ma + prox. ma + + en {0} ma + en {0} ma + + + avant {0} ma + avant {0} ma + + + + l’ultima mesemna + questa mesemna + proxima mesemna + + en {0} mesemna + en {0} mesemnas + + + avant {0} mesemna + avant {0} mesemnas + + + + ultima mesem. + questa mesem. + proxima mesem. + + en {0} mesem. + en {0} mesem. + + + avant {0} mesem. + avant {0} mesem. + + + + ultima me + questa me + prox. me + + en {0} me + en {0} me + + + avant {0} me + avant {0} me + + + + l’ultima gievgia + questa gievgia + proxima gievgia + + en {0} gievgia + en {0} gievgias + + + avant {0} gievgia + avant {0} gievgias + + + + ultima giev. + questa giev. + proxima giev. + + en {0} giev. + en {0} giev. + + + avant {0} giev. + avant {0} giev. + + + + ultima gie + questa gie + prox. gie + + en {0} gie + en {0} gie + + + avant {0} gie + avant {0} gie + + + + l’ultim venderdi + quest venderdi + proxim venderdi + + en {0} venderdi + en {0} venderdis + + + avant {0} venderdi + avant {0} venderdis + + + + ultim vend. + quest vend. + proxim vend. + + en {0} vend. + en {0} vend. + + + avant {0} vend. + avant {0} vend. + + + + ultim ve + quest ve + prox. ve + + en {0} ve + en {0} ve + + + avant {0} ve + avant {0} ve + + + + l’ultima sonda + questa sonda + proxima sonda + + en {0} sonda + en {0} sondas + + + avant {0} sonda + avant {0} sondas + + + + ultima sonda + questa sonda + proxima sonda + + en {0} sonda + en {0} sondas + + + avant {0} sonda + avant {0} sondas + + + + ultima so + questa so + prox. so + + en {0} so + en {0} so + + + avant {0} so + avant {0} so + + + + AM/PM + - mesadad dal di + AM/PM + + + AM/PM ura + quest’ura + + en {0} ura + en {0} uras + + + avant {0} ura + avant {0} uras + + + + h + + en {0} h + en {0} h + + + avant {0} h + avant {0} h + + + + h + + en {0}h + en {0}h + + + avant {0}h + avant {0}h + minuta + questa minuta + + en {0} minuta + en {0} minutas + + + avant {0} minuta + avant {0} minutas + min + + en {0} min + en {0} min + + + avant {0} min + avant {0} min + + + + + en {0} min + en {0} min + + + avant {0} min + avant {0} min + secunda + ussa + + en {0} secunda + en {0} secundas + + + avant {0} secunda + avant {0} secundas + s + + en {0} s + en {0} s + + + avant {0} s + avant {0} s + + + + + en {0} s + en {0} s + + + avant {0} s + avant {0} s + zona d’urari + + zona + - temp: {0} - temp da stad: {0} - temp normal: {0} + {0} (temp local) + {0} (temp da stad) + {0} (temp normal) - Temp universal coordinà + temp universal coordinà - citad nunenconuschenta - - - The Valley - - - Tirana + lieu nunenconuschent - Jerevan - - - Showa - - - Mac Murdo - - - San Juan, Argentinia - - - Ushuaïa - - - San Salvador de Jujuy - - - Tucumán - - - Córdoba - - - Oranjestad + Jerevan - Bruxelles + Brüssel + + + Son Barthélemy - Bermudas - - - Bandar Seri Begawan - - - Eirunepé - - - Cuiabá - - - Belém - - - Araguaína - - - São Paulo - - - Fernando de Noronha - - - Belmopan - - - Saint John’s + Bermudas - West Island + Inslas Cocos Turitg - Insla da Pasca + Insla da Pasca - - Ürümqi + + Schanghai + + + Havanna - Cap Verd - - - Curaçao + Cap Verd - Flying Fish Cove + Insla da Nadal + + + Prag - Dschibuti + Dschibuti - Algier - - - Galápagos - - - El Aaiún + Algier - Inslas Canarias + Inslas Canarias - Addis Abeba + Addis Abeba - Fidschi - - - Port Stanley - - - Weno - - - Palikir - - - Tofol + Fidschi - Inslas Feroe + Inslas Feroe - temp da stad britannic + temp da stad da la Gronda Britannia Londra - - Saint Peter Port - - - Godthåb + + Tiflis - Basse-Terre + Guadalupa Athen - Georgia dal Sid - - - Hagåtña + Georgia dal Sid - Hongkong + Hongkong - - Macassar + + + temp da stad da l’Irlanda + - Douglas + Insla da Man + + + Calcutta - Bagdad + Bagdad - Teheran + Teheran + + + Reykjavík Roma - - Saint Helier - - Giamaica + Giamaica - Tokio + Tokio - Bischkek - - - South Tarawa + Bischkek - Comoras + Comoras - Saint Kitts + Saint Kitts - - Seul + + Pjöngjang - Inslas Cayman + Inslas Cayman - - Aqtöbe + + Qostanai + + + Qysylorda - Santa Lucia + Sontga Lucia - Luxemburg + Luxemburg - - Brades + + Tripolis + + + Martinica - Maldivas - - - Mazatlán + Maledivas - Citad da Mexico - - - Nouméa + Citad dal Mexico - Kingston - - - Yaren - - - Alofi + Insla Norfolk - Mascate - - - Rikitea + Mascat - Karatschi + Karatschi - Varsovia + Varsovia - Saint Pierre + Saint Pierre - Azoras + Azoras - Lissabon - - - Melekok - - - Asunción - - - Réunion + Lissabon Bucarest + + Belgrad + - Moscau + Moscau + + + Astrachan - Jekaterinburg - - - Nowosibirsk + Jekaterinburg - Krasnojarsk + Krasnojarsk + + + Tschita - Jakutsk + Jakutsk + + + Chandyga - Sachalin + Sachalin - Kamtschatka + Kamtschatka - Riyad - - - Honiara + Riad - Khartum + Khartum - Singapur + Singapur - Sontg’elena + Sontg’elena - Mogadischu - - - São Tomé - - - Salvador - - - Cockburn Town - - - Lomé + Mogadischu - Duschanbe + Duschanbe - Aşgabat - - - Nukuʻalofa + Aşgabat - Daressalam + Daressalam - - Alasca + + Kiev + + + Beulah, Dakota dal Nord - North Dakota (New Salem) + New Salem, Dakota dal Nord - North Dakota (Central) - - - Vincennes - - - Petersburg - - - Tell City - - - Knox - - - Winamac - - - Marengo - - - Vevay - - - Monticello + Center, Dakota dal Nord - Samarcanda + Samarcanda - Taschkent + Taschkent - Saint Vincent - - - Road Town + Son Vincenz - Saint Thomas + Saint Thomas Citad da Ho Chi Minh - - Matāʻutu - + + + temp da l’Afganistan + + + + + temp da l’Africa Centrala + + + + + temp da l’Africa Orientala + + + + + temp normal da l’Africa Meridiunala + + + + + temp da l’Africa Occidentala + + + + + temp da l’Alasca + temp normal da l’Alasca + temp da stad da l’Alasca + + + + + temp da l’Amazonas + temp normal da l’Amazonas + temp da stad da l’Amazonas + + - Temp central - Temp da standard central - Temp da stad central + temp dal center USA + temp normal dal center USA + temp da stad dal center USA - Temp oriental - Temp da standard oriental - Temp da stad oriental + temp da l’ost USA + temp normal da l’ost USA + temp da stad da l’ost USA - Temp da muntogna - Temp da standard da muntogna - Temp da stad da muntogna + temp dals Rocky Mountains + temp normal dals Rocky Mountains + temp da stad dals Rocky Mountains - Temp pacific - Temp da standard pacific - Temp da stad pacific + temp dal Pacific USA + temp normal dal Pacific USA + temp da stad dal Pacific USA + + + + + temp da la Samoa + temp normal da la Samoa + temp da stad da la Samoa + + + + + temp arab + temp normal arab + temp da stad arab + + + + + temp da l’Argentina + temp normal da l’Argentina + temp da stad da l’Argentina + + + + + temp da l’Argentina occidentala + temp normal da l’Argentina occidentala + temp da stad da l’Argentina occidentala + + + + + temp da l’Armenia + temp normal da l’Armenia + temp da stad da l’Armenia - Temp atlantic - Temp da standard atlantic - Temp da stad atlantic + temp da l’Atlantic USA + temp normal da l’Atlantic USA + temp da stad da l’Atlantic USA + + + + + temp dal center da l’Australia + temp normal dal center da l’Australia + temp da stad dal center da l’Australia + + + + + temp dal center-vest da l’Australia + temp normal dal center-vest da l’Australia + temp da stad dal center-vest da l’Australia + + + + + temp da l’ost da l’Australia + temp normal da l’ost da l’Australia + temp da stad da l’ost da l’Australia + + + + + temp dal vest da l’Australia + temp normal dal vest da l’Australia + temp da stad dal vest da l’Australia + + + + + temp da l’Aserbaidschan + temp normal da l’Aserbaidschan + temp da stad da l’Aserbaidschan + + + + + temp da las Azoras + temp normal da las Azoras + temp da stad da las Azoras + + + + + temp dal Bangladesch + temp normal dal Bangladesch + temp da stad dal Bangladesch + + + + + temp dal Butan + + + + + temp da la Bolivia + + + + + temp da la Brasilia + temp normal da la Brasilia + temp da stad da la Brasilia + + + + + temp dal Brunei + + + + + temp dal Cap Verd + temp normal dal Cap Verd + temp da stad dal Cap Verd + + + + + temp dals Chamorro + + + + + temp da las Inslas Chatham + temp normal da las Inslas Chatham + temp da stad da las Inslas Chatham + + + + + temp dal Chile + temp normal dal Chile + temp da stad dal Chile + + + + + temp da la China + temp normal da la China + temp da stad da la China + + + + + temp da l’Insla da Nadal + + + + + temp da las Inslas Cocos + + + + + temp da la Columbia + temp normal da la Columbia + temp da stad da la Columbia + + + + + temp da las Inslas Cook + temp normal da las Inslas Cook + temp da stad da las Inslas Cook + + + + + temp da la Cuba + temp normal da la Cuba + temp da stad da la Cuba + + + + + temp da Davis + + + + + temp da Dumont d’Urville + + + + + temp dal Timor da l’Ost + + + + + temp da l’Insla da Pasca + temp normal da l’Insla da Pasca + temp da stad da l’Insla da Pasca + + + + + temp da l’Ecuador - Temp da l’Europa Centrala - Temp da standard da l’Europa Centrala - Temp da stad da l’Europa Centrala + temp da l’Europa Centrala + temp normal da l’Europa Centrala + temp da stad da l’Europa Centrala - Temp da l’Europa Orientala - Temp da standard da l’Europa Orientala - Temp da stad da l’Europa Orientala + temp da l’Europa Orientala + temp normal da l’Europa Orientala + temp da stad da l’Europa Orientala + + + + + temp da l’extrem orient da l’Europa - Temp da l’Europa dal Vest - Temp da standard da l’Europa dal Vest - Temp da stad da l’Europa dal Vest + temp da l’Europa dal Vest + temp normal da l’Europa dal Vest + temp da stad da l’Europa dal Vest + + + + + temp da las Inslas Falkland + temp normal da las Inslas Falkland + temp da stad da las Inslas Falkland + + + + + temp dal Fidschi + temp normal dal Fidschi + temp da stad dal Fidschi + + + + + temp da la Guyana Franzosa + + + + + temp dals Territoris Franzos Meridiunals ed Antarctics + + + + + temp da las Inslas Galápagos + + + + + temp da las Inslas Gambier + + + + + temp da la Georgia + temp normal da la Georgia + temp da stad da la Georgia + + + + + temp da las Inslas Gilbert - Temp Greenwich + temp dal meridian da Greenwich + + + + + temp da la Grönlanda orientala + temp normal da la Grönlanda orientala + temp da stad da la Grönlanda orientala + + + + + temp da la Grönlanda occidentala + temp normal da la Grönlanda occidentala + temp da stad da la Grönlanda occidentala + + + + + temp normal dal Golf + + + + + temp da la Guyana + + + + + temp normal dal Hawai e las Aleutinas + + + + + temp dal Hawai e las Aleutinas + temp normal dal Hawai e las Aleutinas + temp da stad dal Hawai e da las Aleutinas + + + + + temp dal Hongkong + temp normal dal Hongkong + temp da stad dal Hongkong + + + + + temp da Hovd + temp normal da Hovd + temp da stad da Hovd + + + + + temp normal da l’India + + + + + temp da l’Ocean Indic + + + + + temp da l’Indochina + + + + + temp dal center da l’Indonesia + + + + + temp da l’ost da l’Indonesia + + + + + temp dal vest da l’Indonesia + + + + + temp da l’Iran + temp normal da l’Iran + temp da stad da l’Iran + + + + + temp dad Irkutsk + temp normal dad Irkutsk + temp da stad dad Irkutsk + + + + + temp da l’Israel + temp normal da l’Israel + temp da stad da l’Israel + + + + + temp dal Giapun + temp normal dal Giapun + temp da stad dal Giapun + + + + + temp dal Kasachstan + + + + + temp dal Kasachstan oriental + + + + + temp dal Kasachstan occidental + + + + + temp da la Corea + temp normal da la Corea + temp da stad da la Corea + + + + + temp da Kosrae + + + + + temp da Krasnojarsk + temp normal da Krasnojarsk + temp da stad da Krasnojarsk + + + + + temp dal Kirghistan + + + + + temp da las Inslas da la Lingia + + + + + temp da Lord Howe + temp normal da Lord Howe + temp da stad da Lord Howe + + + + + temp da Magadan + temp normal da Magadan + temp da stad da Magadan + + + + + temp da la Malaisia + + + + + temp da las Maledivas + + + + + temp da las Inslas Marquesas + + + + + temp da las Inslas da Marshall + + + + + temp dal Mauritius + temp normal dal Mauritius + temp da stad dal Mauritius + + + + + temp da Mawson + + + + + temp mexican dal Pacific + temp normal mexican dal Pacific + temp da stad mexican dal Pacific + + + + + temp dad Ulaanbaatar + temp normal dad Ulaanbaatar + temp da stad dad Ulaanbaatar + + + + + temp da Moscau + temp normal da Moscau + temp da stad da Moscau + + + + + temp dal Myanmar + + + + + temp da Nauru + + + + + temp dal Nepal + + + + + temp da la Nova Caledonia + temp normal da la Nova Caledonia + temp da stad da la Nova Caledonia + + + + + temp da la Nova Zelanda + temp normal da la Nova Zelanda + temp da stad da la Nova Zelanda + + + + + temp da la Terranova + temp normal da la Terranova + temp da stad da la Terranova + + + + + temp da Niue + + + + + temp da l’Insla Norfolk + temp normal da l’Insla Norfolk + temp da stad da l’Insla Norfolk + + + + + temp da Fernando de Noronha + temp normal da Fernando de Noronha + temp da stad da Fernando de Noronha + + + + + temp da Novosibirsk + temp normal da Novosibirsk + temp da stad da Novosibirsk + + + + + temp dad Omsk + temp normal dad Omsk + temp da stad dad Omsk + + + + + temp dal Pakistan + temp normal dal Pakistan + temp da stad dal Pakistan + + + + + temp da Palau + + + + + temp da la Papua Nova Guinea + + + + + temp dal Paraguai + temp normal dal Paraguai + temp da stad dal Paraguai + + + + + temp dal Peru + temp normal dal Peru + temp da stad dal Peru + + + + + temp da las Filippinas + temp normal da las Filippinas + temp da stad da las Filippinas + + + + + temp da las Inslas Fenix + + + + + temp da Saint Pierre e Miquelon + temp normal da Saint Pierre e Miquelon + temp da stad da Saint Pierre e Miquelon + + + + + temp da las Inslas Pitcairn + + + + + temp da Pohnpei + + + + + temp da la Corea dal Nord + + + + + temp da la Réunion + + + + + temp da Rothera + + + + + temp da Sachalin + temp normal da Sachalin + temp da stad da Sachalin + + + + + temp da la Samoa Americana + temp normal da la Samoa Americana + temp da stad da la Samoa Americana + + + + + temp da las Seychellas + + + + + temp normal dal Singapur + + + + + temp da las Inslas da Salomon + + + + + temp da la Georgia dal Sid + + + + + temp dal Surinam + + + + + temp da Shōwa + + + + + temp da Tahiti + + + + + temp dal Taiwan + temp normal dal Taiwan + temp da stad dal Taiwan + + + + + temp dal Tadschikistan + + + + + temp da Tokelau + + + + + temp da Tonga + temp normal da Tonga + temp da stad da Tonga + + + + + temp da Chuuk + + + + + temp dal Turkmenistan + temp normal dal Turkmenistan + temp da stad dal Turkmenistan + + + + + temp da las Inslas da Tuvalu + + + + + temp da l’Uruguai + temp normal da l’Uruguai + temp da stad da l’Uruguai + + + + + temp da l’Usbekistan + temp normal da l’Usbekistan + temp da stad da l’Usbekistan + + + + + temp dal Vanuatu + temp normal dal Vanuatu + temp da stad dal Vanuatu + + + + + temp da la Venezuela + + + + + temp da Vladivostok + temp normal da Vladivostok + temp da stad da Vladivostok + + + + + temp da Volgograd + temp normal da Volgograd + temp da stad da Volgograd + + + + + temp da Vostok + + + + + temp da l’Insla Wake + + + + + temp da Wallis e Futuna + + + + + temp da Jakutsk + temp normal da Jakutsk + temp da stad da Jakutsk + + + + + temp da Jekaterinburg + temp normal da Jekaterinburg + temp da stad da Jekaterinburg + + + + + temp dal Yukon - - + , + + · - - - - #,##0 % - - - + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 milliun + 0 milliuns + 00 milliuns + 00 milliuns + 000 milliuns + 000 milliuns + 0 milliarda + 0 milliardas + 00 milliardas + 00 milliardas + 000 milliardas + 000 milliardas + 0 billiun + 0 billiuns + 00 billiuns + 00 billiuns + 000 billiuns + 000 billiuns + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 miu'.' + 0 miu'.' + 00 miu'.' + 00 miu'.' + 000 miu'.' + 000 miu'.' + 0 mia'.' + 0 mia'.' + 00 mia'.' + 00 mia'.' + 000 mia'.' + 000 mia'.' + 0 biu'.' + 0 biu'.' + 00 biu'.' + 00 biu'.' + 000T biu'.' + 000 biu'.' + + + - #,##0.00 ¤ + ¤#,##0.00 + + + ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) + #,##0.00;(#,##0.00) - 0K ¤ - 0K ¤ - 00K ¤ - 00K ¤ - 000K ¤ - 000K ¤ - 0M ¤ - 0M ¤ - 00M ¤ - 00M ¤ - 000M ¤ - 000M ¤ - 0G ¤ - 0G ¤ - 00G ¤ - 00G ¤ - 000G ¤ - 000G ¤ - 0T ¤ - 0T ¤ - 00T ¤ - 00T ¤ - 000T ¤ - 000T ¤ + 0 + 0 + 0 + 0 + 0 + 0 + ¤0 miu'.' + ¤ 0 miu'.' + ¤0 miu'.' + ¤ 0 miu'.' + ¤00 miu'.' + ¤ 00 miu'.' + ¤00 miu'.' + ¤ 00 miu'.' + ¤000 miu'.' + ¤ 000 miu'.' + ¤000 miu'.' + ¤ 000 miu'.' + ¤0 mia'.' + ¤ 0 mia'.' + ¤0 mia'.' + ¤ 0 mia'.' + ¤00 mia'.' + ¤ 00 mia'.' + ¤00 mia'.' + ¤ 00 mia'.' + ¤000 mia'.' + ¤ 000 mia'.' + ¤000 mia'.' + ¤ 000 mia'.' + ¤0 biu'.' + ¤ 0 biu'.' + ¤0 biu'.' + ¤ 0 biu'.' + ¤00 biu'.' + ¤ 00 biu'.' + ¤00 biu'.' + ¤ 00 biu'.' + ¤000T biu'.' + ¤ 000T biu'.' + ¤000 biu'.' + ¤ 000 biu'.' - {0} {1} - {0} {1} @@ -2198,9 +3740,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic leks albanais - dram armen - dram armen - drams armens + dram da l’Armenia + dram da l’Armenia + drams da l’Armenia flurin da las Antillas Ollandaisas @@ -2241,7 +3783,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic peso argentin - pesos argentins + peso argentin pesos argentins @@ -2256,7 +3798,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic flurin da l’Aruba - flurins da l’Aruba + flurin da l’Aruba flurins da l’Aruba @@ -2277,7 +3819,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic marc convertibel da la Bosnia-Erzegovina marc convertibel da la Bosnia-Erzegovina - marcs convertibel da la Bosnia-Erzegovina + marcs convertibels da la Bosnia-Erzegovina nov dinar da la Bosnia-Erzegovina (1994–1997) @@ -2286,13 +3828,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar da Barbados - dollars da Barbados + dollar da Barbados dollars da Barbados - taka bangladais - taka bangladais - takas bangladais + taka dal Bangladesch + taka dal Bangladesch + takas dal Bangladesch franc beltg (convertibel) @@ -2341,7 +3883,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar da las Bermudas - dollars da las Bermudas + dollar da las Bermudas dollars da las Bermudas @@ -2388,13 +3930,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar da las Bahamas - dollars da las Bahamas + dollar da las Bahamas dollars da las Bahamas - ngultrum butanais - ngultrum butanais - ngultrums butanais + ngultrum dal Butan + ngultrum dal Butan + ngultrums dal Butan kyat burmais @@ -2402,9 +3944,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic kyats burmais - pula da la Botswana - pula da la Botswana - pulas da la Botswana + pula da la Botsuana + pula da la Botsuana + pulas da la Botsuana rubel bieloruss (1994–1999) @@ -2423,7 +3965,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar dal Belize - dollars dal Belize + dollar dal Belize dollars dal Belize @@ -2459,7 +4001,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic peso chilen - pesos chilens + peso chilen pesos chilens @@ -2479,16 +4021,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic peso columbian - pesos columbians + peso columbian pesos columbians unidad de valor real - colon da la Costa Rica - colons da la Costa Rica - colons da la Costa Rica + colón da la Costa Rica + colón da la Costa Rica + colóns da la Costa Rica dinar serb (2002–2006) @@ -2507,7 +4049,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic peso cuban - pesos cubans + peso cuban pesos cubans @@ -2521,9 +4063,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic glivras cipriotas - cruna tscheca - cruna tcheca - crunas tschecas + curuna tscheca + curuna tscheca + curunas tschecas marc da la Germania da l’Ost @@ -2541,13 +4083,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic francs dal Dschibuti - cruna danaisa - cruna danaisa - crunas danaisas + curuna danaisa + curuna danaisa + curunas danaisas peso dominican - pesos dominicans + peso dominican pesos dominicans @@ -2570,9 +4112,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic glivras egipzianas - nakfa eritreic - nakfa eritreic - nakfas eritreics + nakfa da l’Eritrea + nakfa da l’Eritrea + nakfas da l’Eritrea peseta spagnola (conto A) @@ -2609,7 +4151,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic glivra dal Falkland - glivras dal Falkland + glivra dal Falkland glivras dal Falkland @@ -2618,9 +4160,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic francs franzos - glivra britannica - glivra britannica - glivras britannicas + glivra sterlina + glivra sterlina + glivras sterlinas kupon larit georgian @@ -2648,9 +4190,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic glivras da Gibraltar - dalasi gambic - dalasi gambic - dalasis gambics + dalasi da la Gambia + dalasi da la Gambia + dalasis da la Gambia franc da la Guinea @@ -2674,7 +4216,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic quetzal da la Guatemala - quetzals da la Guatemala + quetzal da la Guatemala quetzals da la Guatemala @@ -2689,7 +4231,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar da la Guyana - dollars da la Guyana + dollar da la Guyana dollars da la Guyana @@ -2698,9 +4240,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollars da Hongkong - lempira hondurian - lempira hondurian - lempiras hondurians + lempira honduriana + lempira honduriana + lempiras hondurianas dinar croat @@ -2714,7 +4256,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic gourde haitian - gourdes haitians + gourde haitian gourdes haitians @@ -2723,7 +4265,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic forints ungarais - rupia indonaisa + rupia indonaisa rupia indonaisa rupias indonaisas @@ -2741,9 +4283,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic schekels israelians (1980–1985) - nov schekel israelian - nov schekel israelian - novs schekels israelians + nov shekel israelian + nov shekel israelian + novs shekels israelians rupia indica @@ -2764,9 +4306,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic veglia cruna islandaisa - cruna islandaisa - cruna islandaisa - crunas islandaisas + curuna islandaisa + curuna islandaisa + curunas islandaisas lira taliana @@ -2794,9 +4336,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic schillings kenians - som kirgis - som kirgis - soms kirgis + som kirghis + som kirghis + soms kirghis riel cambodschan @@ -2804,9 +4346,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic riels cambodschans - franc comorian - franc comorian - francs comorians + franc da las Comoras + franc da las Comoras + francs da las Comoras won da la Corea dal Nord @@ -2969,9 +4511,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic tugriks mongolics - pataca dal Macao - pataca dal Macao - patacas dal Macao + pataca da Macao + pataca da Macao + patacas da Macao ouguiya da la Mauretania (1973–2017) @@ -3045,9 +4587,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic meticals dal Mosambic - dollar namibian - dollar namibian - dollars namibians + dollar da la Namibia + dollar da la Namibia + dollars da la Namibia naira nigeriana @@ -3068,9 +4610,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic flurins ollandais - cruna norvegiaisa - cruna norvegiaisa - crunas norvegiaisas + curuna norvegiaisa + curuna norvegiaisa + curunas norvegiaisas rupia nepalaisa @@ -3089,7 +4631,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic balboa dal Panama - balboas dal Panama + balboa dal Panama balboas dal Panama @@ -3097,7 +4639,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic sol peruan - soles peruans + sol peruan soles peruans @@ -3119,9 +4661,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic rupias pakistanas - zloty polac - zloty polac - zlotys polacs + zloti polac + zloti polac + zlotis polacs zloty polac (1950–1995) @@ -3133,13 +4675,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic guarani paraguaian - guaranis paraguaians + guarani paraguaian guaranis paraguaians - rial da Katar - rial da Katar - rials da Katar + riyal dal Qatar + riyal dal Qatar + riyals dal Qatar dollar rodesian @@ -3205,14 +4747,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic glivras sudanaisas (1957–1998) - cruna svedaisa - cruna svedaisa - crunas svedaisas + curuna svedaisa + curuna svedaisa + curunas svedaisas - dollar dal Singapur - dollar dal Singapur - dollars dal Singapur + dollar da Singapur + dollar da Singapur + dollars da Singapur glivra da Sontg’Elena @@ -3235,9 +4777,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic leones da la Sierra Leone - leone da la Sierra Leone (1964—2022) - leone da la Sierra Leone (1964—2022) - leones da la Sierra Leone (1964—2022) + leone da la Sierra Leone (1964–2022) + leone da la Sierra Leone (1964–2022) + leones da la Sierra Leone (1964–2022) schilling somalian @@ -3245,9 +4787,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic schillings somalians - dollar surinam - dollars surinams - dollars surinams + dollar dal Surinam + dollar dal Surinam + dollars dal Surinam flurin surinam @@ -3263,7 +4805,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic dobras da São Tomé e Príncipe (1977–2017) - dobra da São Tomé e Principe + dobra da São Tomé e Príncipe dobra da São Tomé e Príncipe dobras da São Tomé e Príncipe @@ -3281,9 +4823,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic glivras sirianas - lilangeni dal Swaziland - lilangeni dal Swaziland - emalangenis dal Swaziland + lilangeni dal Swasiland + lilangeni dal Swasiland + lilangenis dal Swasiland baht tailandais @@ -3316,9 +4858,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic dinars tunesians - paʻanga da Tonga - paʻanga da Tonga - pa’angas da Tonga + paʻanga dal Tonga + paʻanga dal Tonga + pa’angas dal Tonga escudo dal Timor @@ -3337,7 +4879,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar da Trinidad e Tobago - dollars da Trinidad e Tobago + dollar da Trinidad e Tobago dollars da Trinidad e Tobago @@ -3346,9 +4888,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic novs dollars taiwanais - schilling tansanian - schilling tansanian - schillings tansanians + schilling da la Tansania + schilling da la Tansania + schillings da la Tansania hryvnia ucranaisa @@ -3389,9 +4931,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic nov peso da l’Uruguay (1975–1993) - peso da l’Uruguay - peso da l’Uruguai - pesos da l’Uruguai + peso uruguaian + peso uruguaian + pesos uruguaians som usbec @@ -3405,9 +4947,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic bolivar venezuelan (2008–2018) - bolívar venezuelan - bolívar venezuelan - bolívars venezuelans + bolívar venezolan + bolívar venezolan + bolívars venezolans dong vietnamais @@ -3462,6 +5004,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar da la Caribica Orientala dollars da la Caribica Orientala + + flurin caribic + flurin caribic + flurins caribics + dretgs da prelevaziun spezials dretg da prelevaziun spezial @@ -3515,7 +5062,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic valuta nunenconuschenta - (unitad nunenconuschenta da la valuta) + (valuta nunenconuschenta) (valuta nunenconuschenta) @@ -3564,7 +5111,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwachas da la Sambia (1968–2012) - kwacha da la sambia + kwacha da la Sambia kwacha da la Sambia kwachas da la Sambia @@ -3583,6 +5130,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollar dal Simbabwe (1980–2008) dollars dal Simbabwe (1980–2008) + + aur dal Simbabwe + aur dal Simbabwe + aur dal Simbabwe + dollar dal Simbabwe (2009) dollar dal Simbabwe (2009) @@ -3594,9 +5146,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic dollars dal Simbabwe (2008) - - ≈{0} - {0} di {0} dis @@ -3605,9 +5154,281 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + deci{0} + + + centi{0} + + + milli{0} + + + micro{0} + + + nano{0} + + + pico{0} + + + femto{0} + + + atto{0} + + + zepto{0} + + + yocto{0} + + + ronto{0} + + + quecto{0} + + + deca{0} + + + hecto{0} + + + kilo{0} + + + mega{0} + + + giga{0} + + + tera{0} + + + peta{0} + + + exa{0} + + + zetta{0} + + + yotta{0} + + + ronna{0} + + + quetta{0} + + + kibi{0} + + + mebi{0} + + + gibi{0} + + + tebi{0} + + + pebi{0} + + + exbi{0} + + + zebi{0} + + + yobi{0} + {0} per {1} + + {0} quadrat + {0} quadrat + + + {0} cubic + {0} cubic + + + {0}-{1} + + + forzas g + {0} forza g + {0} forzas g + + + meters per secunda quadrat + {0} meters per secunda quadrat + {0} meter per secunda quadrat + + + rotaziuns + {0} rotaziun + {0} rotaziuns + + + radians + {0} radian + {0} radians + + + grads + {0} grad + {0} grads + + + minutas d’artg + {0} minuta d'artg + {0} minutas d'artg + + + secundas d’artg + {0} secunda d’artg + {0} secundas d’artg + + + kilometers quadrats + {0} kilometer quadrat + {0} kilometers quadrats + {0} per kilometer quadrat + + + hectaras + {0} hectara + {0} hectaras + + + meters quadrat + {0} meter quadrat + {0} meters quadrats + {0} per meter quadrat + + + centimeters quadrats + {0} centimeter quadrat + {0} centimeters quadrats + {0} per centimeter quadrat + + + miglias quadrats + {0} miglia quadrat + {0} miglias quadrats + {0} per miglia quadrat + + + acras + {0} acra + {0} acras + + + yards quadrats + {0} yard quadrat + {0} yards quadrats + + + pes quadrats + {0} pe quadrat + {0} pes quadrats + + + poleschs quadrats + {0} polesch quadrat + {0} poleschs quadrats + {0} per polesch quadrat + + + dunams + {0} dunam + {0} dunams + + + carats + {0} carat + {0} carats + + + milligrams per deciliter + {0} milligram per deciliter + {0} milligrams per deciliter + + + millimols per liter + {0} millimol per liter + {0} millimols per liter + + + elements + {0} element + {0} elements + + + parts + {0} part + {0} parts + + + parts per milliun + {0} part per milliun + {0} parts per milliun + + + pertschient + {0} pertschient + {0} pertschient + + + promil + {0} promil + {0} promil + + + per diesch milli + {0} per diesch milli + {0} per diesch milli + + + mols + {0} mol + {0} mols + + + da glucosa + {0} da glucosa + {0} da glucosa + + + liters per kilometer + {0} liter per kilometer + {0} liters per kilometer + + + liters per 100 kilometers + {0} liter per 100 kilometers + {0} liters per 100 kilometers + + + miglias per gallun + {0} miglia per gallun + {0} miglias per gallun + + + miglias per gallun imperial + {0} miglia per gallun imperial + {0} miglias per gallun imperial + petabytes {0} petabyte @@ -3663,6 +5484,37 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} bit {0} bits + + tschientaners + {0} tschientaner + {0} tschientaners + + + decennis + {0} decenni + {0} decennis + + + {0} per onn + + + quartals + {0} quartal + {0} quartals + {0}/quartal + + + {0} per mais + + + {0} per emna + + + {0} per di + + + {0} per ura + {0} minuta {0} minutas @@ -3678,53 +5530,698 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} millisecunda {0} millisecundas + + microsecundas + {0} microsecunda + {0} microsecundas + + + nanosecundas + {0} nanosecunda + {0} nanosecundas + + + ampers + {0} ampere + {0} amperes + + + milliamperes + {0} milliampere + {0} milliamperes + + + ohms + {0} ohm + {0} ohms + + + volts + {0} volt + {0} volts + + + kilocalorias + {0} kilocaloria + {0} kilocalorias + + + calorias + {0} caloria + {0} calorias + + + kilojoules + {0} kilojoule + {0} kilojoules + + + joules + {0} joule + {0} joules + + + uras kilowatt + {0} ura kilowatt + {0} uras kilowatt + + + electronvolts + {0} electronvolt + {0} electronvolts + + + therm US + {0} therm US + {0} therm US + + + glivra-forza + {0} glivra-forza + {0} glivra-forza + + + Newtons + {0} Newton + {0} Newtons + + + kilowatt-uras per 100 kilometers + {0} kilowatt-ura per 100 kilometers + {0} kilowatt-uras per 100 kilometers + + + gigahertz + {0} gigahertz + {0} gigahertz + + + megahertz + {0} megahertz + {0} megahertz + + + kilohertz + {0} kilohertz + {0} kilohertz + + + hertz + {0} hertz + {0} hertz + + + em tipografic + {0} pixel {0} pixels + + megapixels + {0} megapixel + {0} megapixels + + + pixels per centimeter + {0} pixel per centimeter + {0} pixels per centimeter + + + pixels per polesch + {0} pixel per polesch + {0} pixels per polesch + + + radius da la terra + {0} radius da la terra + {0} radius da la terra + kilometers {0} kilometer {0} kilometers + {0} per kilometer {0} meter {0} meters + {0} per meter + + + decimeters + {0} decimeter + {0} decimeters centimeters {0} centimeter {0} centimeters + {0} per centimeter millimeters {0} millimeter {0} millimeters + + micrometers + {0} micrometer + {0} micrometers + + + nanometers + {0} nanometer + {0} nanometers + + + picometers + {0} picometer + {0} picometers + + + miglia + {0} miglia + {0} miglias + + + yards + {0} yard + {0} yards + + + pes + {0} pe + {0} pes + {0} per pe + + + poleschs + {0} polesch + {0} poleschs + {0} per polesch + + + parsecs + {0} parsec + {0} parsecs + + + onns da glisch + {0} onn da glisch + {0} onns da glisch + + + unitads astronomicas + {0} unitad astronomica + {0} unitads astronomicas + + + miglias marinas + {0} miglia marina + {0} miglias marinas + + + miglia scandinava + {0} miglia scandinava + {0} miglias scandinavas + + + puncts tipografics + {0} punct + {0} puncts + + + radius solars + {0} radius solar + {0} radius solars + + + lux + {0} lux + {0} lux + + + candela + {0} candela + {0} candela + + + lumen + {0} lumen + {0} lumen + + + luminusitads solaras + {0} luminusitad solara + {0} luminusitads solaras + + + tonnas + {0} tonna + {0} tonnas + kilograms - {0} kilogram - {0} kilograms + {0} kilogram + {0} kilograms + {0} per kilogram - {0} gram - {0} grams + {0} gram + {0} grams + {0} per gram + + + milligrams + {0} milligram + {0} milligrams + + + micrograms + {0} microgram + {0} micrograms + + + tonnas curtas + + + glivras + {0} glivra + {0} glivras + {0} per glivra + + + unzas + {0} unza + {0} unzas + {0} per unza + + + unzas finas + {0} unza fina + {0} unzas finas + + + carats + {0} carat + {0} carats + + + daltons + {0} dalton + {0} daltons + + + massas da terra + {0} massa da terra + {0} massas da terra + + + massas solaras + {0} massa solara + {0} massas solaras + + + grauns + {0} graun + {0} grauns + + + gigawatts + {0} gigawatt + {0} gigawatts + + + megawatts + {0} megawatt + {0} megawatts + + + kilowatts + {0} kilowatt + {0} kilowatts + + + watts + {0} watt + {0} watts + + + milliwatts + {0} milliwatt + {0} milliwatts + + + forzas-chaval + {0} forza-chaval + {0} forzas-chaval + + + millimeters colonna d’argient viv + {0} millimeter colonna d’argient viv + {0} millimeters colonna d’argient viv + + + d’argient viv + {0} d’argient viv + {0} d’argient viv + + + glivras per polesch quadrat + {0} glivra per polesch quadrat + {0} glivras per polesch quadrat + + + poleschs colonna d’argient viv + {0} polesch colonna d’argient viv + {0} poleschs colonna d’argient viv + + + millibar + {0} millibar + {0} millibar + + + atmosferas + {0} atmosfera + {0} atmosferas + + + pascal + {0} pascal + {0} pascal + + + hectopascal + {0} hectopascal + {0} hectopascal + + + kilopascal + {0} kilopascal + {0} kilopascal + + + megapascal + {0} megapascal + {0} megapascal kilometers per ura {0} kilometer per ura {0} kilometers per ura + + meters per secunda + {0} meter per secunda + {0} meters per secunda + + + miglias per ura + {0} miglia per ura + {0} miglias per ura + + + nufs + {0} nuf + {0} nufs + + + beaufort + beaufort {0} + beaufort {0} + + + grads + {0} grad + {0} grads + grads celsius {0} grad celsius {0} grads celsius + + grads fahrenheit + {0} grad fahrenheit + {0} grads fahrenheit + + + kelvin + {0} kelvin + {0} kelvin + + + Newton meters + {0} Newton meter + {0} Newton meters + + + kilometers cubics + {0} kilometer cubic + {0} kilometers cubics + + + meters cubics + {0} meter cubic + {0} meters cubics + {0} per meter cubic + + + centimeters cubics + {0} centimeter cubic + {0} centimeters cubics + {0} per centimeter cubic + + + miglias cubicas + {0} miglia cubica + {0} miglias cubicas + + + yards cubics + {0} yard cubic + {0} yards cubics + + + pes cubics + {0} pe cubic + {0} pes cubics + + + poleschs cubics + {0} polesch cubic + {0} poleschs cubics + + + megaliters + {0} megaliter + {0} megaliters + + + hectoliters + {0} hectoliter + {0} hectoliters + {0} liter {0} liters {0} per liter + + deciliters + {0} deciliter + {0} deciliters + + + centiliters + {0} centiliter + {0} centiliters + + + milliliters + {0} milliliter + {0} milliliters + + + pintas metricas + {0} pinta metrica + {0} pintas metricas + + + cups metrics + {0} cup metric + {0} cups metrics + + + acre-feet + {0} acre-foot + {0} acre-feet + + + galluns + {0} gallun + {0} galluns + {0} per gallun + + + galluns imperials + {0} gallun imperial + {0} galluns imperials + {0} per gal imp + + + quarts + {0} quart + {0} quarts + + + pintas + {0} pinta + {0} pintas + + + cups + {0} cup + {0} cups + + + unzas liquidas + {0} unza liquida + {0} unzas liquidas + + + unzas liquidas imperialas + {0} unza liquida imperiala + {0} unzas liquidas imperialas + + + tschaduns gronds + {0} tschadun grond + {0} tschaduns gronds + + + tschaduns pitschens + {0} tschadun pitschen + {0} tschaduns pitschens + + + barrels + {0} barrel + {0} barrels + + + tschaduns da dessert + {0} tschadun da dessert + {0} tschaduns da dessert + + + tschaduns da dessert imperials + {0} tschadun da dessert imperial + {0} tschaduns da dessert imperials + + + guts + {0} gut + {0} guts + + + drams + {0} dram + {0} drams + + + jiggers + {0} jiggers + {0} jiggers + + + presas + {0} presa + {0} presas + + + quarts imperials + {0} quart imperial + {0} quarts imperials + + + steradians + {0} steradian + {0} steradians + + + katals + {0} katal + {0} katals + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + calorias [IT] + {0} caloria [IT] + {0} calorias [IT] + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + teslas + {0} tesla + {0} teslas + + + Webers + {0} Weber + {0} Webers + + + glisch + {0} glisch + {0} glisch + + + parts per milliarda + {0} part per milliarda + {0} parts per milliarda + + + notgs + {0} notg + {0} notgs + {0} per notg + {0} ost {0} nord @@ -3733,86 +6230,401 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - PByte + + forzas g - - TByte + + rot + {0} rot + {0} rot - - Tbit + + radians - - GByte + + grads - - Gbit + + arcmins + {0} arcmin + {0} arcmins - - MByte + + arcsecs + {0} arcsec + {0} arcsecs - - Mbit + + ha - - kByte + + acras - - kbit + + dunams + + + carats + + + elem. + {0} elem. + {0} elem. + + + {0} part + {0} part + + + parts/milliun + + + pertschient + + + promil + + + per diesch milli + + + Glc + {0} Glc + {0} Glc + + + l/km + {0} l/km + {0} l/km + + + l/100 km + {0} l/100 km + {0} l/100 km + + + miglias/gallun + {0} mpg + {0} mpg + + + miglias/gal imp. + + + B + + + tsch. + {0} tsch. + {0} tsch. + + + dec. + {0} dec. + {0} dec. onns {0} onn {0} onns + {0}/o. + + + quart. + {0} quart. + {0} quart. + {0}/quart. mais {0} mais {0} mais + {0}/mais emnas {0} emna {0} emnas + {0}/emna dis {0} di {0} dis + {0}/di uras - {0} ura - {0} uras + {0} h + {0} h + {0}/ura minutas - {0} min. - {0} mins. + {0} min + {0} min secundas - {0} sec. - {0} secs. + {0} sec + {0} sec + + + volts + + + joules + + + electronvolt + + + therm US + {0} therm US + {0} therm US + + + Newton pixels + + megapixels + + + pixels per polesch + - meters + m + + + miglia + + + yards + + + pes + + + poleschs + + + parsecs + + + onns da glisch + + + puncts + + + lux + + + candela + + + lumen + + + luminusitads solaras grams - - km/ura + + daltons + + + massas solaras + + + grauns + {0} gr + {0} gr + + + W + + + PS + {0} PS + {0} PS + + + mmHg + {0} mmHg + {0} mmHg + + + da Hg + {0} da Hg + {0} da Hg - {0} °C - {0} °C + {0}°C + {0}°C + + + Ml + {0} Ml + {0} Ml + + + hl + {0} hl + {0} hl - liters + l + + + dl + {0} dl + {0} dl + + + cl + {0} cl + {0} cl + + + ml + {0} ml + {0} ml + + + acre ft + + + gal + {0} gal + {0} gal + {0}/gal + + + gal imp + {0} gal imp + {0} gal imp + {0}/gal imp + + + cups + + + fl oz + {0} fl oz + {0} fl oz + + + tg + {0} tg + {0} tg + + + tp + {0} tp + {0} tp + + + td + {0} td + {0} td + + + Imp. dessert spoons + {0} dsp-Imp. + {0} dsp-Imp. + + + guts + {0} gt + {0} gt + + + drams + {0} dram + {0} drams + + + jiggers + {0} jiggers + {0} jiggers + + + presas + {0} pr + {0} pr + + + qt imp + {0} qt imp + {0} qt imp + + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + + glisch + {0} glisch + {0} glisch + + + parts/milliarda + + + notgs + {0} notg + {0} notgs + {0}/notg direcziun @@ -3823,50 +6635,350 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + G + {0}G + {0}Gs + + + {0}m/s² + {0}m/s² + + + rot + {0}rot + {0}rot + + + {0}rad + {0}rad + + + ° + + + {0}km² + {0}km² + + + ha + {0}ha + {0}ha + + + {0}m² + {0}m² + + + {0}cm² + {0}cm² + + + {0}mi² + {0}mi² + + + ac + {0}ac + {0}ac + + + {0}yd² + {0}yd² + + + {0}ft² + {0}ft² + + + {0}in² + {0}in² + + + {0}dunam + {0}dunam + + + {0}kt + {0}kt + + + {0}mg/dL + {0}mg/dL + + + {0}mmol/L + {0}mmol/L + + + elem. + {0}elem. + {0}elem. + + + parts/milliun + {0}ppm + {0}ppm + + + pertschient + + + promil + + + {0}mol + {0}mol + + + Glc + + + l/km + {0}l/km + {0}l/km + + + l/100km + {0}l/100km + {0}l/100km + + + mpg + {0}mpg + {0}mpg + + + mpg UK + {0}m/gUK + {0}m/gUK + + + PB + {0}PB + {0}PB + + + TB + {0}TB + {0}TB + + + Tb + {0}Tb + {0}Tb + + + GB + {0}GB + {0}GB + + + Gb + {0}Gb + {0}Gb + + + MB + {0}MB + {0}MB + + + Mb + {0}Mb + {0}Mb + + + kB + {0}kB + {0}kB + + + kb + {0}kb + {0}kb + + + B + {0}B + {0}B + + + {0}bit + {0}bit + + + tsch. + {0}tsch. + {0}tsch. + + + dec. + {0}dec. + {0}dec. + - onn - {0} onns - {0} onns + o. + {0}o. + {0}o. + {0}/o. + + + Q + {0}Q + {0}Q + {0}/Q + + + m. + {0}m. + {0}m. + {0}/m. - emna - {0} emnas - {0} emnas + e. + {0}e. + {0}e. + {0}/e. - di - {0} dis - {0} dis + d + {0}d + {0}d - ura - {0} uras - {0} uras + h + {0}h + {0}h min - {0} mins. - {0} mins. + {0}m + {0}m sec - {0} secs. - {0} secs. + {0}s + {0}s {0}ms {0}ms + + {0}μs + {0}μs + + + {0}ns + {0}ns + + + {0}A + {0}A + + + {0}mA + {0}mA + + + {0}Ω + {0}Ω + + + {0}V + {0}V + + + {0}kcal + {0}kcal + + + {0}cal + {0}cal + + + {0}kJ + {0}kJ + + + J + {0}J + {0}J + + + {0}kWh + {0}kWh + + + {0}eV + {0}eV + + + therm US + {0}therm US + {0}therm US + + + {0}lbf + {0}lbf + + + {0}N + {0}N + {0}kWh/100km {0}kWh/100km + + {0}GHz + {0}GHz + + + {0}MHz + {0}MHz + + + {0}kHz + {0}kHz + + + {0}Hz + {0}Hz + + + {0}em + {0}em + + + px + {0}px + {0}px + + + {0}MP + {0}MP + + + {0}ppcm + {0}ppcm + + + pixels per polesch + {0}ppi + {0}ppi + + + {0}R⊕ + {0}R⊕ + {0}km {0}km - meter + m {0}m {0}m @@ -3878,33 +6990,412 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mm {0}mm + + {0}μm + {0}μm + + + {0}nm + {0}nm + + + {0}pm + {0}pm + + + {0}mi + {0}mi + + + {0}yd + {0}yd + + + {0}ft + {0}ft + + + {0}in + {0}in + + + {0}pc + {0}pc + + + {0}ly + {0}ly + + + {0}au + {0}au + + + {0}nmi + {0}nmi + + + {0}smi + {0}smi + + + {0}pt + {0}pt + + + {0}R☉ + {0}R☉ + + + lux + {0}lx + {0}lx + + + {0}cd + {0}cd + + + lumen + {0}lm + {0}lm + + + {0}L☉ + {0}L☉ + + + {0}t + {0}t + + + {0}kg + {0}kg + - gram + g + {0}g + {0}g + + + {0}mg + {0}mg + + + {0}μg + {0}μg + + + {0}lb + {0}lb + + + {0}oz + {0}oz + + + {0}oz t + {0}oz t + + + {0}CD + {0}CD + + + {0}Da + {0}Da + + + {0}M⊕ + {0}M⊕ + + + {0}M☉ + {0}M☉ + + + gr + {0}gr + {0}gr + + + {0}GW + {0}GW + + + {0}MW + {0}MW + + + {0}kW + {0}kW + + + W + {0}W + {0}W + + + {0}mW + {0}mW + + + PS + {0}PS + {0}PS + + + mmHg + {0}mmHg + {0}mmHg + + + da Hg + {0} da Hg + {0} da Hg + + + {0}psi + {0}psi + + + ″ Hg + {0}″ Hg + {0}″ Hg + + + {0}bar + {0}bar + + + {0}atm + {0}atm + + + {0}Pa + {0}Pa + + + {0}hPa + {0}hPa + + + {0}kPa + {0}kPa + + + {0}MPa + {0}MPa km/h + {0}km/h + {0}km/h + + + {0}m/s + {0}m/s + + + mi/hr + {0}mi/h + {0}mi/h + + + {0}kn + {0}kn + + + B{0} + B{0} {0}°C {0}°C + + {0}K + {0}K + + + {0}N⋅m + {0}N⋅m + + + {0}km³ + {0}km³ + + + {0}m³ + {0}m³ + + + {0}cm³ + {0}cm³ + + + {0}mi³ + {0}mi³ + + + {0}yd³ + {0}yd³ + + + {0}ft³ + {0}ft³ + + + {0}in³ + {0}in³ + + + Ml + {0}Ml + {0}Ml + + + hl + {0}hl + {0}hl + - liter + l + {0}l + {0}l + + + dl + {0}dl + {0}dl + + + cl + {0}cl + {0}cl + + + ml + {0}ml + {0}ml + + + {0}mpt + {0}mpt + + + {0}mc + {0}mc + + + acre ft + {0}ac ft + {0}ac ft + + + gal + {0}gal + {0}gal + {0}/gal - {0} gal imp - {0} gal imp + gal imp + {0}gal imp + {0}gal imp + {0}/gal imp + + + {0}qt + {0}qt + + + {0}pt + {0}pt + + + {0}c + {0}c + + + fl oz + {0}fl oz + {0}fl oz - {0} fl oz imp - {0} fl oz imp + Imp fl oz + {0}fl oz Im + {0}fl oz Im + + + tg + {0}tg + {0}tg + + + tp + {0}tp + {0}tp + + + {0}bbl + {0}bbl + + + td + {0}td + {0}td + dsp Imp {0}dsp-Imp {0}dsp-Imp + + gt + {0}gt + {0}gt + + + fl.dr. + {0}fl.dr. + {0}fl.dr. + + + {0}jigger + {0}jigger + + + pr + {0}pr + {0}pr + + + qt imp + {0}qt imp + {0}qt imp + + + cal-IT + + + glisch + {0}glisch + {0}glisch + + + parts/milliarda + {0}ppb + {0}ppb + + + notgs + {0}notg + {0}notgs + {0}/notg + {0}O + {0}N {0}S {0}V @@ -3919,12 +7410,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} u {1} {0} u {1} + + {0}, {1} + {0}, {1} + {0} {1} {0} {1} {0} {1} {0} {1} + + {0}, {1} + {0}, {1} + @@ -3932,7 +7431,313 @@ CLDR data files are interpreted according to the LDML specification (http://unic na:n + + {0} – tut + {0} – cumpatibilitad + {0} – incorporà + {0} – expandì + {0} a sanestra + {0} a dretga + {0} – istoric + {0} – varia + {0} – auter + sistems da scrittira – {0} + {0} stritg + {0} stritgs + sbassà {0} + elevà {0} + activitads + sistems da scrittira africans + sistems da scrittira americans + animals u natira + frizzas + corp + segns cun rom + Braille + edifizi + simbols d’enumeraziun u stailas + jamo consonantic + simbols da valuta + lingetta u stritg d’uniun + cifras + simbols da divinaziun + frizzas vers engiu + frizzas vers ensi ed engiu + sistems da scrittira da l’Asia da l’Ost + sistems da scrittira europeics + feminin + bandiera + bandieras + da mangiar e da baiver + format & spazi + variantas en plaina largezza + furmas geometricas + variantas en mesa largezza + caracters han + radicals han + hanzi (simplifitgà) + hanzi (tradiziunal) + cor + sistems da scrittira istorics + caracters da descripziun ideografica + kana giapunais + tasta + frizzas a sanestra + frizzas a sanestra ed a dretga + simbols sco letras + diever limità + masculin + simbols matematics + sistems da scrittira dal Proxim Orient + varia + sistems da scrittira moderns + modificatur + simbols musicals + natira + senza spazi + cifras + objects + auter + en pèrs + persuna + alfabet fonetic + pictograms + lieu + planta + interpuncziun + frizzas a dretga + segn u simbol + variantas pitschnas + smiley u persuna + sistems da scrittira da l’Asia dal Sid + sistems da scrittira da l’Asia dal Sidost + spazi + simbols + simbols tecnics + accents d’intunaziun + viadi + viadi u lieu + frizzas ensi + variantas + jamo vocalic + aura + scripts da l’Asia dal Vest + spazi vid + cursiv + dimensiun optica + inclinaziun + largezza + grossezza + cursiv + legenda + titel + visur + placat + cursiv invers + vertical + inclinà + extrainclinà + ultracondensà + extracondensà + condensà + semicondensà + semiexpandì + expandì + extraexpandì + ultraexpandì + fin + extralev + lev + semilev + cudesch + mesaun + semigrass + grass + extragrass + nair + extranair + fracziuns verticalas + spazi tranter maiusclas + ligaturas opziunalas + fracziuns diagonalas + cifras maiusclas + cifras medievalas + dumbers ordinals + cifras proporziunalas + maiusclettas + cifras tabellaras + nulla cun stritg diagonal + + und rm + informal + + {title} {given} {given2} {surname} {generation} {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {given-informal-monogram-allCaps}{surname-monogram-allCaps} + + + {given} {given2-initial} {surname} {generation} {credentials} + + + {given-informal} {surname} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {given-initial} {given2-initial} {surname} + + + {given-informal} {surname-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname}, {title} {given} {given2} {generation} {credentials} + + + {surname}, {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps}{given-informal-monogram-allCaps} + + + {surname}, {given} {given2-initial} {generation} {credentials} + + + {surname}, {given-informal} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname}, {given-initial} {given2-initial} + + + {surname}, {given-initial} + + + {title} {surname} + + + {given-informal} + + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {surname-core}, {given} {given2} {surname-prefix} + + + {surname}, {given-informal} + + + {surname-core}, {given} {given2-initial} {surname-prefix} + + + {surname}, {given-informal} + + + {surname-core}, {given-initial} {given2-initial} {surname-prefix} + + + {surname}, {given-informal} + + + Ursina + + + Aita + Caduff + + + Gian Carlo + Ramun + Foffa + + + dr. + Margaritta Marionna + Rita + Maria + de + Planta + ∅∅∅ + jr. + CF + + + Rüdiger + + + Käthe + Müller + + + Zäzilia + Hamish + Stöber + + + Prof. Dr. + Ada Cornelia + Neele + César Martín + von + Brühl + González Domingo + Jr + MD DDS + + diff --git a/make/data/cldr/common/main/ro.xml b/make/data/cldr/common/main/ro.xml index 5add9d07498..44de014592e 100644 --- a/make/data/cldr/common/main/ro.xml +++ b/make/data/cldr/common/main/ro.xml @@ -151,7 +151,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ greacă elamită engleză - engleză (S.U.A) + engleză (UK) engleză medie esperanto spaniolă @@ -284,6 +284,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölsch kurdă + kurdă + kurmangi kumyk kutenai komi @@ -865,6 +867,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ China Columbia Insula Clipperton + Sark Costa Rica Cuba Capul Verde @@ -1057,7 +1060,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tunisia Tonga Turcia - Türkiye + TR-variant Trinidad și Tobago Tuvalu Taiwan @@ -1219,35 +1222,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sortare numerică puterea sortării monedă + Prezentare emojiuri ciclu orar (12 sau 24) - stil de întrerupere a liniei + stil de întrerupere a rândului (chineză, japoneză, coreeană) + întrerupere a rândului în interiorul cuvântului sistem de unități de măsură numere + întrerupere propoziție după abr. fus orar variantă locală utilizare privată calendar budist + budist calendar chinezesc + chinezesc calendar copt + copt calendar dangi + dangi calendar etiopian + etiopian calendar etiopian amete alem + etiopian amete alem calendar gregorian + gregorian calendar ebraic + ebraic calendar național indian calendarul hegirei + al hegirei calendarul hegirei (tabular, civil) + al hegirei (tabular, civil) calendar islamic (Arabia Saudită, lunar) calendar islamic (tabular, epocă astronomică) calendarul hegirei (Umm al-Qura) + al hegirei (Umm al-Qura) calendar ISO-8601 calendar japonez + japonez calendar persan + persan calendarul Republicii Chineze + al Republicii Chineze Format monedă contabilitate + contabilitate Format monedă standard + standard Ordonați simbolurile Ordonați ignorând simbolurile Ordonați accentele în mod normal @@ -1257,23 +1279,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ordonați mai întâi majusculele Ordonați neținând seama de diferența dintre majuscule/minuscule Ordonați ținând seama de diferența dintre majuscule/minuscule - ordine de sortare a chinezei tradiționale - Big5 ordine de sortare anterioară, pentru compatibilitate + compatibilitate ordine de sortare a dicționarului + dicționar ordine de sortare Unicode implicită + Unicode implicită ordine de sortare a emojiurilor regulile europene de sortare - ordine de sortare a chinezei simplificate - GB2312 ordine de sortare după cartea de telefon + carte de telefon ordine de sortare fonetică + fonetică ordine de sortare pinyin + pinyin căutare cu scop general + căutare Căutați în funcție de consoana inițială hangul ordine de sortare standard + standard ordine de sortare după trasare + trasare ordine de sortare tradițională + tradițională ordine de sortare după radical și trasare + radical și trasare ordine de sortare zhuyin + zhuyin Ordonați fără normalizare Ordonați caracterele unicode normalizat Ordonați cifrele individual @@ -1286,18 +1318,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Cu lățime întreagă Cu jumătate de lățime Numeric + implicită + emojiuri + text sistem cu 12 ore (0–11) + 12 (0–11) sistem cu 12 ore (1–12) + 12 (1–12) sistem cu 24 de ore (0–23) + 24 (0–23) sistem cu 24 de ore (1–24) + 24 (1–24) stil liber de întrerupere a liniei - stil normal de întrerupere a liniei - stil strict de întrerupere a liniei + liber + stil de normal întrerupere a rândului + normal + stil strict de întrerupere a rândului + strict + întrerupere oriunde + fără întrerupere + normal + fără întrerupere în expresii transliterare BGN SUA transliterare GEGN ONU sistemul metric + metric sistemul imperial de unități de măsură + britanic sistemul american de unități de măsură + american cifre ahom cifre indo-arabe cifre indo-arabe extinse @@ -1383,6 +1432,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ cifre vai cifre warang citi cifre wancho + dezactivată + activată metric @@ -1412,9 +1463,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1508,11 +1556,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - înainte de Anno Martyrum după Anno Martyrum - î.A.M. A.M. @@ -1537,16 +1583,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - înainte de Întrupare - după Întrupare - - - î.Într. - d.Într. - - @@ -1580,6 +1616,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'la' {0} + + {1} 'la' {0} + @@ -1588,6 +1627,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'la' {0} + + {1} 'la' {0} + @@ -1604,11 +1646,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM.y G dd.MM.y G + E, dd.MM.y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a dd.MM @@ -1955,6 +1998,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'la' {0} + + {1} 'la' {0} + @@ -1963,11 +2009,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'la' {0} + + {1} 'la' {0} + {1}, {0} + + {1} 'la' {0} + @@ -1979,15 +2031,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM.y G dd.MM.y G + E, dd.MM.y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + 'h' HH v dd.MM E, dd.MM dd.MM @@ -2051,10 +2105,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM – E, d MMM y G E, d MMM y – E, d MMM y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -2065,10 +2115,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - M–M @@ -2313,18 +2359,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ acum {0} de luni - - - peste {0} lună - peste {0} luni - peste {0} luni - - - acum {0} lună - acum {0} luni - acum {0} luni - - +{0} lună @@ -2746,8 +2780,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ sâ. -{0} săpt. + + a.m./p.m. + - a.m/p.m. + a.m./p.m. + + + a.m./p.m. oră @@ -2890,15 +2930,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Oraș necunoscut - - Tirana - Erevan - - Showa - Viena @@ -2920,6 +2954,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Capul Verde + + Insula Christmas + Praga @@ -2983,7 +3020,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bișkek - Enderbury + Insula Canton Comore @@ -2991,6 +3028,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Phenian + + Seul + Kuweit @@ -3018,9 +3058,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Luxemburg - - Chișinău - Podgorița @@ -3120,9 +3157,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damasc - - N’Djamena - Dușanbe @@ -3132,6 +3166,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiev + + Insula Wake + Beulah, Dakota de Nord @@ -3176,9 +3213,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ora Africii Occidentale - Ora standard a Africii Occidentale - Ora de vară a Africii Occidentale + Ora Africii Occidentale @@ -3239,9 +3274,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ora din Apia - Ora standard din Apia - Ora de vară din Apia + Ora din Samoa + Ora standard din Samoa + Ora de vară din Samoa @@ -3544,7 +3579,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ora de Greenwhich + Ora de Greenwich GMT @@ -3574,6 +3609,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ora din Guyana + + + Ora standard din Hawaii-Aleutine + + Ora din Hawaii-Aleutine @@ -4174,24 +4214,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) - 0 mie ¤ - 0 mii ¤ - 0 mii ¤ - 00 mii ¤ - 00 mii ¤ - 00 mii ¤ - 000 mii ¤ - 000 mii ¤ - 000 mii ¤ + 0 K ¤ + 0 K ¤ + 0 K ¤ + 00 K ¤ + 00 K ¤ + 00 K ¤ + 000 K ¤ + 000 K ¤ + 000 K ¤ 0 mil'.' ¤ 0 mil'.' ¤ 0 mil'.' ¤ @@ -5521,6 +5562,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dolari est-caraibi XCD + + gulden caraib + gulden caraib + guldeni caraibi + guldeni caraibi + drepturi speciale de tragere @@ -5626,6 +5673,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dolari Zimbabwe (1980–2008) dolari Zimbabwe (1980–2008) + + Zimbabwe Gold + Zimbabwe Gold + Zimbabwe Gold + Zimbabwe Gold + dolar Zimbabwe (2009) @@ -5797,10 +5850,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine {0} forță g unei forțe g - {0} forță g - {0} forță g - {0} forță g - {0} forță g + {0} forțe g + {0} forțe g + {0} de forțe g + {0} de forțe g masculine @@ -5979,7 +6032,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} de itemi {0} de itemi - + + părți + {0} parte + {0} părți + {0} de părți + + feminine părți pe milion {0} parte pe milion @@ -6028,6 +6087,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} de moli {0} de moli + + de glucoză + {0} de glucoză + {0} de glucoză + {0} de glucoză + masculine litri pe kilometru @@ -6935,6 +7000,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} de milimetri coloană de mercur {0} de milimetri coloană de mercur + + de mercur + {0} de mercur + {0} de mercur + {0} de mercur + livre pe inch pătrat {0} livră pe inch pătrat @@ -7050,9 +7121,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} de noduri - Beaufort {0} - Beaufort {0} - Beaufort {0} + {0} grad Beaufort + {0} grade Beaufort + {0} de grade Beaufort neuter @@ -7241,6 +7312,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} de căni metrice {0} de căni metrice + + uncii lichide metrice + uncie lichidă metrică + {0} uncii lichide metrice + {0} de uncii lichide metrice + acru-picioare {0} acru-picior @@ -7346,17 +7423,88 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} quarte imperiale {0} de quarte imperiale + + steradieni + {0} steradian + {0} steradieni + {0} de steradieni + + + katali + {0} katal + {0} katali + {0} de katali + + + coulombi + {0} coulomb + {0} coulombi + {0} de coulombi + + + farazi + {0} farad + {0} farazi + {0} de farazi + + + henry + {0} henry + {0} henry + {0} de henry + + + siemenși + {0} siemens + {0} siemenși + {0} de siemenși + + + calorii [IT] + {0} calorie [IT] + {0} calorii [IT] + {0} de calorii [IT] + + + becquereli + {0} becquerel + {0} becquereli + {0} de becquereli + + + sievert + {0} sievert + {0} sieverți + {0} de sieverți + + + gray + {0} gray + {0} gray + {0} de gray + + + kilograme-forță + {0} kilogram-forță + {0} kilograme-forță + {0} de kilograme-forță + + + tesla + {0} tesla + {0} tesla + {0} de tesla + + + weberi + {0} weber + {0} weberi + {0} de weberi + feminine - lumină - {0} lumină - {0} lumină - {0} lumină - {0} lumină - {0} lumină - {0} lumină - + feminine părți pe miliard {0} parte pe miliard @@ -7375,14 +7523,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} nopți {0} de nopți {0} de nopți - {0}/noapte punct cardinal - {0} E - {0} N - {0} S - {0} V + {0} est + {0} nord + {0} sud + {0} vest @@ -7449,11 +7596,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} itemi {0} de itemi + + parte + {0} parte + {0} părți + {0} de părți + {0} mol {0} moli {0} moli + + Glc + l/km {0} l/km @@ -7673,6 +7829,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} CP {0} CP + + de Hg + {0} de Hg + {0} de Hg + {0} de Hg + in Hg {0} in Hg @@ -7789,13 +7951,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt imp. {0} qt imp. + + cal-IT + lumină {0} lumină {0} lumină {0} lumină - + părți/miliard @@ -7807,7 +7972,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ direcție - {0}V + {0} E + {0} N + {0} S + {0} V @@ -7847,6 +8015,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} itemi {0} itemi + + parte + {0} parte + {0} părți + {0} părți + {0} ‰ {0} ‰ @@ -7857,6 +8031,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + mi/gal {0} mi/gal @@ -7922,6 +8099,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ g + + de Hg + {0} de Hg + {0} de Hg + {0} de Hg + {0}″ Hg {0}″ Hg @@ -7983,21 +8166,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt im {0} qt im - - lumină - {0} lumină - {0} lumină - {0} lumină - - - părți/miliard - - - nopți - {0} noapte - {0} nopți - {0} de nopți - {0}/noapte + + cal-IT diff --git a/make/data/cldr/common/main/root.xml b/make/data/cldr/common/main/root.xml index 4aee72f9dec..cb483de4be8 100644 --- a/make/data/cldr/common/main/root.xml +++ b/make/data/cldr/common/main/root.xml @@ -42,8 +42,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [] [] - [\- ‑ , . % ‰ + 0 1 2 3 4 5 6 7 8 9] - [\- ‑ , ; \: ! ? . ( ) \[ \] \{ \}] + [\- ‑ , . % ‰ + − 0 1 2 3 4 5 6 7 8 9] + [] + [\- ‐‑ , ; \: ! ? . ( ) \[ \] \{ \}] + [] + [\- ‐‑ , . /] {0}… …{0} {0}…{1} @@ -393,6 +396,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -401,6 +407,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -409,6 +418,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -417,6 +429,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + h B @@ -424,6 +439,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm:ss B d ccc + E h B E h:mm B E h:mm:ss B d, E @@ -440,6 +456,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm h:mm:ss a HH:mm:ss + h a v + HH'h' v L MM-dd MM-dd, E @@ -648,8 +666,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ERA0 - ERA1 + AM @@ -757,8 +774,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ERA0 - ERA1 + AA + AM @@ -792,7 +809,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ERA0 + AA @@ -897,7 +914,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - GGGGG y-MM-dd + G y-MM-dd GGGGGyMMdd @@ -913,6 +930,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -921,6 +941,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -929,6 +952,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -937,6 +963,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + h B @@ -944,15 +973,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm:ss B d ccc + E h B E h:mm B E h:mm:ss B d, E + E h a E h:mm a E HH:mm E h:mm:ss a E HH:mm:ss G y - GGGGG y-MM-dd + G y-MM + G y-MM-dd + G y-MM-dd, E G y MMM G y MMM d G y MMM d, E @@ -962,6 +995,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm h:mm:ss a HH:mm:ss + h a v + HH'h' v L MM-dd MM-dd, E @@ -972,9 +1007,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mm:ss G y G y - GGGGG y-MM - GGGGG y-MM-dd - GGGGG y-MM-dd, E + G y-MM + G y-MM-dd + G y-MM-dd, E G y MMM G y MMM d G y MMM d, E @@ -1014,21 +1049,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G y–y - GGGGG y-MM – GGGGG y-MM - GGGGG y-MM – y-MM - GGGGG y-MM – y-MM + G y-MM – G y-MM + G y-MM – y-MM + G y-MM – y-MM - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – GGGGG y-MM-dd - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd + G y-MM-dd – y-MM-dd + G y-MM-dd – G y-MM-dd + G y-MM-dd – y-MM-dd + G y-MM-dd – y-MM-dd - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – GGGGG y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – G y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E G y MMM – G y MMM @@ -1105,18 +1140,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G y–y - GGGGG y-MM – y-MM - GGGGG y-MM – y-MM + G y-MM – y-MM + G y-MM – y-MM - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd + G y-MM-dd – y-MM-dd + G y-MM-dd – y-MM-dd + G y-MM-dd – y-MM-dd - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E G y MMM–MMM @@ -1355,6 +1390,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -1363,6 +1401,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -1371,6 +1412,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -1379,6 +1423,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + h B @@ -1386,15 +1433,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm:ss B d ccc + E h B E h:mm B E h:mm:ss B d, E + E h a E h:mm a E HH:mm E h:mm:ss a E HH:mm:ss G y - GGGGG y-MM-dd + G y-MM + G y-MM-dd + G y-MM-dd, E G y MMM G y MMM d G y MMM d, E @@ -1408,6 +1459,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm:ss v h:mm a v HH:mm v + h a v + HH'h' v L MM-dd MM-dd, E @@ -1461,21 +1514,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G y–y - GGGGG y-MM – GGGGG y-MM - GGGGG y-MM – y-MM - GGGGG y-MM – y-MM + G y-MM – G y-MM + G y-MM – y-MM + G y-MM – y-MM - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – GGGGG y-MM-dd - GGGGG y-MM-dd – y-MM-dd - GGGGG y-MM-dd – y-MM-dd + G y-MM-dd – y-MM-dd + G y-MM-dd – G y-MM-dd + G y-MM-dd – y-MM-dd + G y-MM-dd – y-MM-dd - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – GGGGG y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E - GGGGG y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – G y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E + G y-MM-dd, E – y-MM-dd, E G y MMM – G y MMM @@ -1728,7 +1781,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Saka + Śaka @@ -1817,6 +1870,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ AH + BH @@ -2070,7 +2124,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MM-dd, E LLL MMM d - MMM d + MMM d, E MMMM d MMMM 'week' W mm:ss @@ -2844,8 +2898,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Before R.O.C. - R.O.C. + BROC + ROC @@ -3189,6 +3243,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ +HH:mm;-HH:mm GMT{0} GMT + GMT+? {0} {0} (+1) {0} (+0) @@ -3198,12 +3253,48 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ UTC + + Tirana + + + Showa + Dumont-d’Urville + + Río Gallegos + + + Tucumán + + + Córdoba + St. Barthélemy + + Eirunepé + + + Cuiabá + + + Santarém + + + Belém + + + Araguaína + + + São Paulo + + + Maceió + Fernando de Noronha @@ -3213,12 +3304,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ St. John’s + + Ürümqi + + + Bogotá + Curaçao + + Büsingen + + + Galápagos + + + El Aaiún + Asmara + + Canarias + Chuuk @@ -3237,39 +3346,66 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kolkata + + Canton + + + Comores + St. Kitts St. Lucia + + Chișinău + Yangon + + Khovd + Macao Ciudad Juárez + + Mazatlán + Bahía de Banderas + + Ciudad de México + Mérida Cancún + + Nouméa + Kathmandu + + Saint-Pierre + Asunción Réunion + + Mahé + St. Helena @@ -3279,6 +3415,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Lower Prince’s Quarter + + N’Djamena + + + Lomé + Kyiv @@ -3324,6 +3466,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ho Chi Minh + + Wallis & Futuna + @@ -3332,9 +3477,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ latn 1 - - - @@ -3593,6 +3735,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -3602,9 +3747,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - @@ -3850,6 +3992,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -3859,9 +4004,240 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0}⁄{1} + {0} {1} + {0}⁠{1} + sometimes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4088,6 +4464,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -4097,9 +4476,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - @@ -4330,6 +4706,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -4339,9 +4718,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - @@ -4614,6 +4990,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -4878,6 +5257,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ RF + + + $ @@ -5187,6 +5569,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + @@ -5405,7 +5790,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ item {0} item - + + part + {0} part + + ppm {0} ppm @@ -5425,6 +5814,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mol {0} mol + + glucose + {0} Glc + L/km {0} L/km @@ -5866,6 +6259,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mm Hg {0} mm Hg + + Hg + {0} Hg + psi {0} psi @@ -6009,6 +6406,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mcup {0} mc + + fl oz m. + {0} fl oz m. + ac ft {0} ac ft @@ -6035,10 +6436,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ pt {0} pt + + pint Imp. + {0} pt Imp. + cup {0} c + + cup Imp. + {0} cup Imp. + US fl oz {0} fl oz US @@ -6087,11 +6496,163 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ qt Imp {0} qt Imp. + + sr + {0} sr + + + kat + {0} kat + + + C + {0} C + + + F + {0} F + + + H + {0} H + + + S + {0} S + + + calorie-IT + {0} cal-IT + + + BTU-IT + {0} BTU-IT + + + Bq + {0} Bq + + + Sv + {0} Sv + + + Gy + {0} Gy + + + kgf + {0} kgf + + + rod + {0} rod + + + chain + {0} chain + + + T + {0} T + + + Wb + {0} Wb + + + °R + {0} °R + + + fortnight + {0} fw + + + slug + {0} slug + + + gas E + {0} gas E + + + rin [JP] + {0} rin [JP] + + + sun [JP] + {0} sun [JP] + + + shaku [JP] + {0} shaku [JP] + + + shaku [cloth, JP] + {0} shaku [cloth, JP] + + + ken [JP] + {0} ken [JP] + + + jo [JP] + {0} jo [JP] + + + ri [JP] + {0} ri [JP] + + + bu [JP] + {0} bu [JP] + + + se [JP] + {0} se [JP] + + + cho [JP] + {0} cho [JP] + + + kosaji [JP] + {0} kosaji [JP] + + + osaji [JP] + {0} osaji [JP] + + + cup [JP] + {0} cup [JP] + + + shaku [vol, JP] + {0} shaku [vol, JP] + + + sai [JP] + {0} sai [JP] + + + to [JP] + {0} to [JP] + + + koku [JP] + {0} koku [JP] + light {0} light - + + fun [JP] + {0} fun [JP] + + ppb {0} ppb diff --git a/make/data/cldr/common/main/ru.xml b/make/data/cldr/common/main/ru.xml index f01b65479ab..15c63dc621f 100644 --- a/make/data/cldr/common/main/ru.xml +++ b/make/data/cldr/common/main/ru.xml @@ -293,6 +293,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ бафия кёльнский курдский + курдский + курманджи кумыкский кутенаи коми @@ -854,6 +856,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Китай Колумбия о-в Клиппертон + Сарк Коста-Рика Куба Кабо-Верде @@ -1131,35 +1134,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ числовая сортировка эффективность сортировки валюта + представление эмодзи формат времени (12- или 24-часовой) стиль перевода строки + стиль переноса слов система мер цифры + разрыв предложения после сокращения часовой пояс вариант региональных настроек частное буддийский календарь + буддийский китайский календарь + китайский коптский календарь + коптский календарь данги + данги эфиопский календарь + эфиопский эфиопский календарь амете-алем + эфиопский (амете-алем) григорианский календарь + григорианский еврейский календарь + еврейский Национальный календарь Индии календарь хиджры + хиджра гражданский календарь хиджры (табличный) + хиджра (табличный, гражданский) исламский календарь (Саудовская Аравия) исламский календарь (табличный, астрономическая эпоха) календарь хиджры (Умм аль-Кура) - календарь ISO-8601 + хиджра (Умм аль-Кура) + григорианский (сначала год) японский календарь + японский персидский календарь + персидский календарь Миньго + Миньго финансовый формат + финансовый стандартный формат + стандартный Сортировка символов Сортировка без учета символов Сортировка по акцентам в обычном порядке @@ -1169,23 +1191,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Приоритетная сортировка слов в верхнем регистре Сортировка вне зависимости от регистра Сортировка с учетом регистра - традиционный китайский - Big5 совместимый порядок сортировки + совместимый словарный порядок сортировки + словарный cтандартная сортировка Unicode + стандартный (Unicode) эмодзи европейские правила сортировки - упрощенный китайский - GB2312 порядок телефонной книги + телефонная книга фонетический порядок сортировки + фонетический пиньинь + пиньинь поиск + поиск Поиск по первой согласной хангыль стандартная сортировка + стандартный по чертам + по чертам традиционный порядок + традиционный сортировка по ключам, затем по чертам + по ключам, затем по чертам чжуинь + чжуинь Сортировка без нормализации Сортировка нормализованных символов Unicode Отдельная сортировка числовых значений @@ -1198,18 +1230,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ полноширинные символы полуширинные символы Числовая + по умолчанию + эмодзи + текстовые символы 12-часовой формат времени (0–11) + 12-часовой (0–11) 12-часовой формат времени (1–12) + 12-часовой (1–12) 24-часовой формат времени (0–23) + 24-часовой (0–23) 24-часовой формат времени (1–24) + 24-часовой (1–24) мягкий перевод строки + мягкий обычный перевод строки + обычный жесткий перевод строки + жесткий + переносить все + сохранять все + обычный стиль + сохранять во фразах система транслитерации BGN система транслитерации ООН метрическая система + метрическая британская система мер + британская американская система мер + американская арабско-индийские цифры расширенная система арабско-индийских цифр армянские цифры @@ -1271,6 +1320,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ тибетские цифры Традиционная система нумерации цифры ваи + выключено + включено Метрическая @@ -1338,13 +1389,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [{а́} {е́} {и́} {о́} {у́} {ы́} {э́} {ю́} {я́}] [А Б В Г Д ЕЁ Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я] [  \- ‑ , % ‰ + 0 1 2 3 4 5 6 7 8 9] + [. / A B C D E F I L M V X] [\- ‐‑ – — , ; \: ! ? . … '‘‚ "“„ « » ( ) \[ \] \{ \} § @ * / \& #] + [· + < = > ~ №] + [\- ‑ . '’ ( )] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1485,11 +1536,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - до Диоклетиана от Диоклетиана - до Диокл. от Диокл. @@ -1514,16 +1563,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - до воплощения Христа - от воплощения Христа - - - до Христа - от Христа - - @@ -1557,6 +1596,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} + @@ -1565,6 +1607,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} + @@ -1577,21 +1622,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E, h B ccc, h:mm B ccc, h:mm:ss B E, d + E, h a ccc, h:mm a ccc HH:mm ccc, h:mm:ss a ccc HH:mm:ss y 'г'. G + MM.y G dd.MM.y G + E, dd.MM.y G LLL y 'г'. G d MMM y 'г'. G E, d MMM y 'г'. G - h a + H h:mm a h:mm:ss a + h a, v + HH 'ч'. v dd.MM E, dd.MM d MMM @@ -1610,48 +1661,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ QQQQ y 'г'. G - {0} – {1} + {0} — {1} + + h B — h B + - h:mm – h:mm B - h:mm – h:mm B + h:mm B — h:mm B + h:mm — h:mm B + h:mm — h:mm B - y 'г'. G – y 'г'. G + y 'г'. G — y 'г'. G y–y 'гг'. G - MM.y G – MM.y G - MM.y – MM.y G - MM.y – MM.y G + MM.y G — MM.y G + MM.y — MM.y G + MM.y — MM.y G - dd.MM.y – dd.MM.y G - dd.MM.y G – dd.MM.y G - dd.MM.y – dd.MM.y G - dd.MM.y – dd.MM.y G + dd.MM.y — dd.MM.y G + dd.MM.y G — dd.MM.y G + dd.MM.y — dd.MM.y G + dd.MM.y — dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y G – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G + ccc, dd.MM.y — ccc, dd.MM.y G + ccc, dd.MM.y G — ccc, dd.MM.y G + ccc, dd.MM.y — ccc, dd.MM.y G + ccc, dd.MM.y — ccc, dd.MM.y G - LLL y 'г'. G – LLL y 'г'. G - LLL – LLL y 'г'. G - LLL y – LLL y 'гг'. G + LLL y 'г'. G — LLL y 'г'. G + LLL — LLL y 'г'. G + LLL y — LLL y 'гг'. G d–d MMM y 'г'. G - d MMM y 'г'. G – d MMM y 'г'. G - d MMM – d MMM y 'г'. G - d MMM y – d MMM y 'гг'. G + d MMM y 'г'. G — d MMM y 'г'. G + d MMM — d MMM y 'г'. G + d MMM y — d MMM y 'гг'. G - ccc, d MMM – ccc, d MMM y 'г'. G - ccc, d MMM y 'г'. G – ccc, d MMM y 'г'. G - ccc, d MMM – ccc, d MMM y 'г'. G - ccc, d MMM y – ccc, d MMM y 'гг'. G + ccc, d MMM — ccc, d MMM y 'г'. G + ccc, d MMM y 'г'. G — ccc, d MMM y 'г'. G + ccc, d MMM — ccc, d MMM y 'г'. G + ccc, d MMM y — ccc, d MMM y 'гг'. G h a – h a @@ -1689,61 +1744,61 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ M–M - dd.MM – dd.MM - dd.MM – dd.MM + dd.MM — dd.MM + dd.MM — dd.MM - E, dd.MM – E, dd.MM - E, dd.MM – E, dd.MM + E, dd.MM — E, dd.MM + E, dd.MM — E, dd.MM - LLL – LLL + LLL — LLL d–d MMM - d MMM – d MMM + d MMM — d MMM - ccc, d MMM – ccc, d MMM - ccc, d MMM – ccc, d MMM + ccc, d MMM — ccc, d MMM + ccc, d MMM — ccc, d MMM - LLLL – LLLL + LLLL — LLLL y–y 'гг'. G - MM.y – MM.y G - MM.y – MM.y G + MM.y — MM.y G + MM.y — MM.y G - dd.MM.y – dd.MM.y G - dd.MM.y – dd.MM.y G - dd.MM.y – dd.MM.y G + dd.MM.y — dd.MM.y G + dd.MM.y — dd.MM.y G + dd.MM.y — dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G - ccc, dd.MM.y – ccc, dd.MM.y G + ccc, dd.MM.y — ccc, dd.MM.y G + ccc, dd.MM.y — ccc, dd.MM.y G + ccc, dd.MM.y — ccc, dd.MM.y G - LLL – LLL y 'г'. G - LLL y 'г'. – LLL y 'г'. G + LLL — LLL y 'г'. G + LLL y 'г'. — LLL y 'г'. G d–d MMM y 'г'. G - d MMM – d MMM y 'г'. G - d MMM y 'г'. – d MMM y 'г'. G + d MMM — d MMM y 'г'. G + d MMM y 'г'. — d MMM y 'г'. G - ccc, d MMM – ccc, d MMM y 'г'. G - ccc, d MMM – ccc, d MMM y 'г'. G - ccc, d MMM y 'г'. – ccc, d MMM y 'г'. G + ccc, d MMM — ccc, d MMM y 'г'. G + ccc, d MMM — ccc, d MMM y 'г'. G + ccc, d MMM y 'г'. — ccc, d MMM y 'г'. G - LLLL – LLLL y 'г'. G - LLLL y 'г'. – LLLL y 'г'. G + LLLL — LLLL y 'г'. G + LLLL y 'г'. — LLLL y 'г'. G @@ -1987,6 +2042,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} + @@ -1995,6 +2053,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'в' {0} + + {1} 'в' {0} + @@ -2007,21 +2068,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E, h B ccc, h:mm B ccc, h:mm:ss B ccc, d + E, h a E h:mm a E h:mm:ss a y 'г'. G + MM.y GGGGG dd.MM.y GGGGG + E, dd.MM.y GGGGG LLL y 'г'. G d MMM y 'г'. G E, d MMM y 'г'. G - h a + H h:mm a h:mm:ss a h:mm:ss a v h:mm a v + h a, v + HH 'ч'. v dd.MM E, dd.MM dd.MM @@ -2034,7 +2101,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ W-'я' 'неделя' MMMM MM.y dd.MM.y - ccc, dd.MM.y 'г'. + ccc, dd.MM.y MM.y LLL y 'г'. d MMM y 'г'. @@ -2089,7 +2156,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a + + + HH–HH 'ч' h:mm a – h:mm a @@ -2103,7 +2172,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v + + + HH–HH 'ч'. v M–M @@ -3682,6 +3753,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ о-в Пасхи + + Койайке + Пунта-Аренас @@ -3947,10 +4021,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пномпень - о-в Эндербери - - - Кантон + о-в Кантон Киритимати @@ -4626,9 +4697,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Западная Африка - Западная Африка, стандартное время - Западная Африка, летнее время + Западная Африка @@ -5016,6 +5085,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Гайана + + + Гавайско-алеутское стандартное время + + Гавайско-алеутское время @@ -5466,6 +5540,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Трук + + + Турецкое время + Турецкое стандартное время + Турецкое летнее время + + Туркменистан @@ -5643,6 +5724,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + {0} {1} + @@ -5654,7 +5738,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -7116,6 +7203,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ восточно-карибских долларов восточно-карибского доллара + + карибский гульден + карибский гульден + карибских гульдена + карибских гульденов + карибского гульдена + Cg + СДР (специальные права заимствования) @@ -7214,6 +7309,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Доллар Зимбабве + + зимбабвийский золотой + зимбабвийский золотой + зимбабвийских золотых + зимбабвийских золотых + зимбабвийского золотого + Доллар Зимбабве (2009) @@ -8023,7 +8125,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} объекта {0} объекта - + + части + {0} часть + {0} части + {0} частей + {0} части + + feminine миллионные доли {0} миллионная доля @@ -8166,6 +8275,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} моля {0} моля + + глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + masculine литры на километр @@ -10789,6 +10905,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} миллиметра ртутного столба {0} миллиметра ртутного столба + + ртутного столба + {0} ртутного столба + {0} ртутного столба + {0} ртутного столба + {0} ртутного столба + фунты на квадратный дюйм {0} фунт на квадратный дюйм @@ -11665,6 +11788,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метрической чашки {0} метрической чашки + + метрические жидкие унции + {0} метрическая жидкая унция + {0} метрические жидкие унции + {0} метрических жидких унций + {0} метрической жидкой унции + акрофуты {0} акрофут @@ -12167,7 +12297,105 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} имп. кварты {0} имп. кварты - + + стерадианы + {0} стерадиан + {0} стерадиана + {0} стерадиан + {0} стерадиана + + + каталы + {0} катал + {0} катала + {0} катал + {0} катала + + + кулоны + {0} кулон + {0} кулона + {0} кулон + {0} кулона + + + фарады + {0} фарад + {0} фарада + {0} фарад + {0} фарада + + + генри + {0} генри + {0} генри + {0} генри + {0} генри + + + сименсы + {0} сименс + {0} сименса + {0} сименс + {0} сименса + + + международные калории + {0} международная калория + {0} международные калории + {0} международных калорий + {0} международной калории + + + беккерели + {0} беккерель + {0} беккереля + {0} беккерелей + {0} беккереля + + + зиверты + {0} зиверт + {0} зиверта + {0} зиверт + {0} зиверта + + + греи + {0} грей + {0} грея + {0} греев + {0} грея + + + килограмм-силы + {0} килограмм-сила + {0} килограмм-силы + {0} килограмм-сил + {0} килограмм-силы + + + теслы + {0} тесла + {0} теслы + {0} тесл + {0} теслы + + + веберы + {0} вебер + {0} вебера + {0} веберов + {0} вебера + + + скорости света + {0} скорость света + {0} скорости света + {0} скоростей света + {0} скорости света + + feminine миллиардные доли {0} миллиардная доля @@ -12468,6 +12696,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} объектов {0} объекта + + ч. + {0} ч. + {0} ч. + {0} ч. + {0} ч. + {0} % {0} % @@ -12493,6 +12728,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} моль {0} моль + + глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + л/км {0} л/км @@ -13196,6 +13438,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мм рт. ст. {0} мм рт. ст. + + рт. ст. + {0} рт. ст. + {0} рт. ст. + {0} рт. ст. + {0} рт. ст. + ф. на дюйм² {0} ф/дюйм² @@ -13428,6 +13677,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} м. чаш. {0} м. чаш. + + м. жидк. унц. + {0} м. жидк. унц. + {0} м. жидк. унц. + {0} м. жидк. унц. + {0} м. жидк. унц. + акрофут. {0} акрофут @@ -13563,6 +13819,104 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} имп. кварт. {0} имп. кварт. + + ср + {0} ср + {0} ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + {0} Ф + {0} Ф + + + Гн + {0} Гн + {0} Гн + {0} Гн + {0} Гн + + + См + {0} См + {0} См + {0} См + {0} См + + + калм + {0} калм + {0} калм + {0} калм + {0} калм + + + Бк + {0} Бк + {0} Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + {0} Гр + {0} Гр + + + кгс + {0} кгс + {0} кгс + {0} кгс + {0} кгс + + + Тл + {0} Тл + {0} Тл + {0} Тл + {0} Тл + + + Вб + {0} Вб + {0} Вб + {0} Вб + {0} Вб + + + ск. света + {0} ск. света + {0} ск. света + {0} ск. света + {0} ск. света + ноч. {0} ноч. @@ -13580,12 +13934,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + ч. + {0} ч. + {0} ч. + {0} ч. + {0} ч. + {0}% {0}% {0}% {0}% + + глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + {0} глюкозы + ми/имп. гал {0} ми/имп. гал @@ -13664,19 +14032,123 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} стн {0} стн + + рт. ст. + {0} рт. ст. + {0} рт. ст. + {0} рт. ст. + {0} рт. ст. + {0}°F {0} °F {0}°F {0}°F - - ноч. - {0} ноч. - {0} ноч. - {0} ноч. - {0} ноч. - {0}/ноч. + + м. жидк. унц. + {0} м. жидк. унц. + {0} м. жидк. унц. + {0} м. жидк. унц. + {0} м. жидк. унц. + + + ср + {0} ср + {0} ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + {0} Ф + {0} Ф + + + Гн + {0} Гн + {0} Гн + {0} Гн + {0} Гн + + + См + {0} См + {0} См + {0} См + {0} См + + + калм + {0} калм + {0} калм + {0} калм + {0} калм + + + Бк + {0} Бк + {0} Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + {0} Гр + {0} Гр + + + кгс + {0} кгс + {0} кгс + {0} кгс + {0} кгс + + + Тл + {0} Тл + {0} Тл + {0} Тл + {0} Тл + + + Вб + {0} Вб + {0} Вб + {0} Вб + {0} Вб + + + c + {0} c + {0} c + {0} c + {0} c напр. diff --git a/make/data/cldr/common/main/rw.xml b/make/data/cldr/common/main/rw.xml index 0c25e15c411..eabe4bf1c2f 100644 --- a/make/data/cldr/common/main/rw.xml +++ b/make/data/cldr/common/main/rw.xml @@ -167,18 +167,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic - mut. - gas. - wer. - mat. - gic. - kam. - nya. - kan. - nze. - ukw. - ugu. - uku. + Mut. + Gas. + Wer. + Mat. + Gic. + Kam. + Nya. + Kan. + Nze. + Ukw. + Ugu. + Uku. Mutarama @@ -199,13 +199,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic - cyu. - mbe. - kab. - gtu. - kan. - gnu. - gnd. + Cyu. + Mbe. + Kab. + Gtu. + Kan. + Gnu. + Gnd. Ku cyumweru @@ -236,17 +236,75 @@ CLDR data files are interpreted according to the LDML specification (http://unic + E, d E h:mm a E h:mm:ss a + y G + MM-y G + dd-MM-y G + E, dd-MM-y G + MMM y G + d MMM y G + E, d MMM y G h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + dd-MM + E, dd-MM + d MMM + E, d MMM + d MMMM + MM-y dd-MM-y + E, dd-MM-y + MMM y d MMMM y + E, d MMM y + MMMM y + QQQ y + QQQQ y + + y G–y G + y–y G + + + MM-y G– MM-y G + MM-y– MM-y G + MM-y– MM-y G + + + dd-MM-y– dd-MM-y G + dd-MM-y G – dd-MM-y G + dd-MM-y – dd-MM-y G + dd-MM-y – dd-MM-y G + + + E, dd-MM-y – E, dd-MM-y G + E, dd-MM-y G–E, dd-MM-y G + E, dd-MM-y – E, dd-MM-y G + E, dd-MM-y – E, dd-MM-y G + + + MMM y G – MMM y G + MMM–MMM y G + MMM y – MMM y G + + + d–d MMM y G + d-MMM-y G–d-MMM-y G + d MMM–d MMM y G + d-MMM-y–d-MMM-y G + + + E, d MMM–d MMM y G + E, d MMM y G–E, d MMM y G + E, d MMM y–E, d MMM G + E, d MMM y –E, d MMM y G + h a – h a h–h a @@ -266,53 +324,84 @@ CLDR data files are interpreted according to the LDML specification (http://unic h–h a v - MM-dd – MM-dd - MM-dd – MM-dd + dd-MM – dd-MM + dd-MM – dd-MM - MM-dd, E – MM-dd, E - MM-dd, E – MM-dd, E + E, dd-MM – E, dd-MM + E, dd-MM – E, dd-MM - MMM d – MMM d + d–d MMM + d MMM – d MMM - MMM d, E – MMM d, E - MMM d, E – MMM d, E + E, d MMM – E, d MMM + E, d MMM – E, d MMM - y-MM – y-MM - y-MM – y-MM + MM-y –MM-y + MM-y – MM-y - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd + dd-MM-y – dd-MM-y  + dd-MM-y – dd-MM-y + dd-MM-y – dd-MM-y - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E + E, dd–dd-MM–y – E, dd-dd-MM–y  + E, dd-MM-y –E, dd-MM-y + E, dd-MM-y –E, dd-MM-y - y MMM – y MMM + MMM–MMM y + MMM y – MMM y - y MMM d – MMM d - y MMM d – y MMM d + d–d MMM y + d MMM – d MMM y + d MMM y – d MMM y - y MMM d, E – MMM d, E - y MMM d, E – MMM d, E - y MMM d, E – y MMM d, E + E, d MMM – E, d MMM y + E, d MMM – E, d MMM y + E, d MMM y – E, d MMM y - y MMMM – y MMMM + MMMM – MMMM y + MMMM y – MMMM y + + + umwaka ushize + uyu mwaka + umwaka utaha + + + ukwezi gushize + uku kwezi + ukwezi gutaha + + + icyumweru gishize + iki cyumweru + icyumweru gitaha + + + ejo + uyu munsi + ejo + + + Ku Cyumweru hashize + kuri iki Cyumweru + Ku Cyumweru hazaza + + diff --git a/make/data/cldr/common/main/sa.xml b/make/data/cldr/common/main/sa.xml index 0d58bdfcbcd..9ed2f24a255 100644 --- a/make/data/cldr/common/main/sa.xml +++ b/make/data/cldr/common/main/sa.xml @@ -596,6 +596,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + ¤ #,##0.00 + #,##0.00 + + + @@ -605,6 +613,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/sah.xml b/make/data/cldr/common/main/sah.xml index 29ed04a5da4..a13d7ef0938 100644 --- a/make/data/cldr/common/main/sah.xml +++ b/make/data/cldr/common/main/sah.xml @@ -1031,6 +1031,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/sat.xml b/make/data/cldr/common/main/sat.xml index 8ed99a516cc..e750b13b01c 100644 --- a/make/data/cldr/common/main/sat.xml +++ b/make/data/cldr/common/main/sat.xml @@ -986,13 +986,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᱢᱤᱱᱜᱩᱣᱚ ᱢᱟᱦᱮᱛᱟ ᱯᱩᱭᱥᱟᱹ ᱠᱷᱟᱛᱟ ᱯᱷᱚᱨᱢᱟᱴ ᱢᱩᱞ ᱯᱩᱭᱥᱟᱹ ᱯᱷᱚᱨᱢᱟᱴ - ᱫᱤᱥᱤ ᱪᱟᱭᱱᱤᱡᱽ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱢᱟᱲᱟᱝ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱥᱟᱵᱟᱫ ᱜᱟᱫᱮᱞ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱢᱩᱞ ᱭᱩᱱᱤᱠᱳᱰ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱤᱢᱚᱡᱤ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱭᱩᱨᱚᱯᱤᱭᱟᱹᱱ ᱛᱷᱟᱨ ᱟᱸᱫᱮ - ᱥᱚᱦᱚᱡᱽ ᱪᱟᱭᱱᱤᱡᱽ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱯᱷᱚᱱᱯᱚᱛᱚᱵ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱯᱤᱱᱭᱟᱱ ᱛᱷᱟᱨ ᱟᱸᱫᱮ ᱫᱩᱦᱲᱟᱹ ᱛᱮᱭᱟᱨ ᱛᱷᱟᱨ ᱟᱸᱫᱮ @@ -1856,6 +1854,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ᱯᱟᱪᱮ ᱜᱽᱨᱤᱱᱞᱮᱱᱰ ᱥᱤᱛᱩᱝ ᱚᱠᱛᱚ + + + ᱦᱟᱣᱟᱭᱤᱼᱟᱞᱮᱣᱴᱤᱭᱟᱱ ᱢᱟᱱᱚᱠ ᱚᱠᱛᱚ + + ᱦᱟᱣᱟᱭᱤᱼᱟᱞᱮᱣᱴᱤᱭᱟᱱ ᱚᱠᱛᱚ diff --git a/make/data/cldr/common/main/sc.xml b/make/data/cldr/common/main/sc.xml index ec57770a997..e5f27dfa21d 100644 --- a/make/data/cldr/common/main/sc.xml +++ b/make/data/cldr/common/main/sc.xml @@ -12,6 +12,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + afar abcasu acehnesu adangme @@ -42,28 +43,37 @@ CLDR data files are interpreted according to the LDML specification (http://unic azerbaigianu azeru baschiru + baluci balinesu basaa bielorussu bemba + betawi bena bùlgaru haryanvi + baluci otzidentale bhojpuri bislama bini pees nieddos anii + tai dam bambara bengalesu tibetanu + bakhtiari brètone bodo bosnìacu + akoose + buriat buginesu blin catalanu + caddo cayuga + atsam chakma cecenu cebuanu @@ -75,11 +85,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic chipewyan cherokee cheyenne + chickasaw curdu tzentrale curdu, tzentrale curdu, sorani chilcotin corsicanu + coptu michif cree sud-orientale cree de sas campuras @@ -159,12 +171,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic haida hawaianu haida meridionale - ebreu + ebràicu hindi hindi (caràteres latinos) hinglish ilongu hmong + hmong njua croatu sòrabu artu crèolu haitianu @@ -193,6 +206,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic machame giavanesu georgianu + kara-kalpak cabilu kachin jju @@ -201,6 +215,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic tyap makonde cabubirdianu + qʼeqchiʼ + kenyang koro kaingang khasi @@ -226,6 +242,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic bafia coloniesu curdu + curdu + curmangi cumucu komi còrnicu @@ -242,6 +260,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic lìgure lillooet lakota + ladinu lombardu lingala laotianu @@ -250,12 +269,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic luri setentrionale sàmia lituanu + latgalianu luba-katanga tshiluba lunda mizo luyia lètone + laz maduresu magahi maithili @@ -269,6 +290,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic makhuwa-meetto meta’ marshallesu + mòchenu maori micmac minangkabau @@ -286,10 +308,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic limbas mùltiplas muscogee mirandesu + hmong daw burmesu erzya mazandarani nauru + min nan napoletanu nama norvegesu bokmål @@ -324,14 +348,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic oromo odia ossèticu + osage punjabi pangasinan pampanga papiamentu palauanu pidgin nigerianu + pali pijin polacu + piemontesu malecite-passamaquoddy prussianu pashto @@ -339,6 +366,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic portoghesu brasilianu portoghesu europeu quechua + k’iche’ rajasthani rapanui rarotonganu @@ -364,17 +392,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic sitzilianu scots sindhi + curdu meridionale sami setentrionale sena koyraboro senni sango + samogitianu tashelhit shan singalesu + sidamo islovacu + saraiki islovenu lushootseed meridionale samoanu + sami meridionale + sami de Lule sami de sos inari sami skolt shona @@ -384,10 +418,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic serbu sranan tongo swati + saho sotho meridionale salish de sas astrinturas sundanesu sukuma + sunwar isvedesu swahili swahili de su Congo @@ -415,6 +451,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic tok pisin turcu taroko + torwali tsonga tàtaru tutchone setentrionale @@ -441,6 +478,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic walser wolaita waray + warlpiri wolof wu calmucu @@ -727,7 +765,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Congo (Repùblica) Isvìtzera Costa de Avòriu - Côte d’Ivoire Ìsulas Cook Tzile Camerùn @@ -885,7 +922,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Portogallu Palau Paraguày - Catar + Catàr Otzeània perifèrica Riunione Romania @@ -1076,58 +1113,106 @@ CLDR data files are interpreted according to the LDML specification (http://unic formadu de valuta ordinamentu valuta + presentatzione emoji sistema oràriu (12 o 24 oras) casta de truncadura de lìnia + truncaduras de lìnia a intro de sas paràulas sistema de medida nùmeros + truncadura de fràsia a pustis de incurtz. calendàriu buddhista + buddhista calendàriu tzinesu + tzinesu calendàriu coptu + coptu calendàriu dangi + dangi calendàriu etìope + etìope calendàriu etìope Amete Alem + etìope Amete Alem calendàriu gregorianu + gregorianu calendàriu ebràicu + ebràicu calendàriu natzionale indianu + natzionale indianu calendàriu egirianu + egirianu calendàriu egirianu (tabulare, època tzivile) + egirianu (tabulare, època tzivile) calendàriu islàmicu (Aràbia Saudita, osservatzione) calendàriu islàmicu (tabulare, època astronòmica) + islàmicu (tabulare, època astronòmica) calendàriu egirianu (Umm al-Qura) + egirianu (Umm al-Qura) calendàriu ISO-8601 calendàriu giaponesu + giaponesu calendàriu persianu + persianu calendàriu minguo + minguo formadu de valuta contàbile + contàbile formadu de valuta istandard - ordinamentu de su tzinesu traditzionale - Big5 - ordinamentu antepostu, pro cumpatibilitade + istandard + ordinamentu antepostu, pro cumpatibilidade + cumpatibilidade ordinamentu de su ditzionàriu + ditzionàriu ordinamentu Unicode predefinidu + Unicode predefinidu ordinamentu de sas emoji règulas de ordinamentu europeas - ordinamentu de su tzinesu semplificadu - GB2312 ordinamentu de s’elencu telefònicu + elencu telefònicu + fonèticu ordinamentu pinyin + pinyin chirca genèrica + chirca chirca pro consonante hangul initziale ordinamentu istandard + istandard òrdine de sos tratos + tratos ordinamentu traditzionale + traditzionale ordinamentu in base a sos radicales + in base a sos radicales ordinamentu zhuyin + zhuyin + predefinida + emoji + testu sistema oràriu a 12 oras (0–11) + 12 (0–11) sistema oràriu a 12 oras (1–12) + 12 (1–12) sistema oràriu a 24 oras (0–23) + 24 (0–23) sistema oràriu a 24 oras (1–24) + 24 (1–24) truncadura de lìnia facoltativa + facoltativa truncadura de lìnia normale + normale truncadura de lìnia fortzada + fortzada + trunca totu + mantene totu + normale + mantene in sas fràsias sistema mètricu + mètricu sistema imperiale britànnicu + imperiale britànnicu sistema consuetudinàriu americanu + consuetudinàriu americanu tzifras ahom tzifras indo-àrabas tzifras indo-àrabas estèndidas @@ -1143,12 +1228,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic tzifras dhives akuru nùmeros etìopes tzifras a largària intrea + tzifras garay nùmeros georgianos tzifras gondi gunjala tzifras gondi masaram nùmeros grecos nùmeros grecos minùscolos tzifras gujarati + tzifras gurung khema tzifras gurmukhi nùmeros detzimales tzinesos nùmeros in tzinesu semplificadu @@ -1165,6 +1252,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic tzifras kawi tzifras khmer tzifras kannada + tzifras kirat rai tzifras tai tham hora tzifras tai tham tham tzifras laotianas @@ -1182,13 +1270,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic tzifras mro tzifras meitei mayek tzifras birmanas + tzifras birmanas de su pwo karen orientale + tzifras birmanas pao tzifras shan birmanas tzifras tai lang birmanas tzifras nag mundari tzifras n’ko tzifras ol chiki + tzifras ol onal tzifras odia tzifras osmanya + tzifras deliniadas tzifras rohingya hanifi nùmeros romanos nùmeros romanos minùscolos @@ -1198,6 +1290,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic tzifras lith singalesas tzifras sora sompeng tzifras sundanesas + tzifras sunuwar tzifras takri tzifras tai lue noas nùmeros tamil traditzionales @@ -1207,9 +1300,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic tzifras tibetanas tzifras tirhuta tzifras tangsa + tzifras tolong siki tzifras vai tzifras warang citi tzifras wancho + alluta + istudada mètricu @@ -1248,34 +1344,80 @@ CLDR data files are interpreted according to the LDML specification (http://unic EB + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y G – y G + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v - h a – h a v - h–h a v + hh a – hh a v + hh–hh a v @@ -1403,6 +1545,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'sas' {0} + + {1} 'a' 'sas' {0} + @@ -1411,6 +1556,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'sas' {0} + + {1} 'a' 'sas' {0} + @@ -1431,6 +1579,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMMM 'de' 'su' r (U) d 'de' MMMM 'de' 'su' r (U) E d 'de' MMMM 'de' 'su' r (U) + HH'o' v d/M E d/M d MMM @@ -1532,74 +1681,139 @@ CLDR data files are interpreted according to the LDML specification (http://unic - in antis de Diocletzianu annu de sos màrtires - a.D. a.M. + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v - h a – h a v - h–h a v + hh a – hh a v + hh–hh a v + + + + EEEE dd 'de' MMMM 'de' 'su' r (U) + + + + + dd 'de' MMMM 'de' 'su' r (U) + + + + + dd MMM r + + + + + dd-MM-r + + + - - - h B – h B - - - h:mm B – h:mm B - - - h a – h a - h–h a - - - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a - - - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v - - - h a – h a v - h–h a v - - + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + @@ -1637,16 +1851,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - in antis de s’Incarnatzione - a pustis de s’Incarnatzione - - - a.Inc. - p.Inc. - - @@ -1721,6 +1925,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'sas' {0} + + {1} 'a' 'sas' {0} + @@ -1729,6 +1936,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'sas' {0} + + {1} 'a' 'sas' {0} + @@ -1743,13 +1953,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic E d y G + MM/y G dd/MM/y GGGGG + E dd/MM/y G MMM y G d MMM y G E d MMM y G hh a + HH'o' hh:mm a hh:mm:ss a + HH'o' v d/M E d/M d MMM @@ -1768,6 +1982,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic QQQQ 'de' 'su' y G + + y G – y G + y – y G + M/y GGGGG – M/y GGGGG M/y – M/y GGGGG @@ -1802,6 +2020,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic E d MMM – E d MMM y G E d MMM y – E d MMM y G + + HH–HH'o' + + + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a + + + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v + + + hh a – hh a v + hh–hh a v + M–M @@ -2034,6 +2269,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'sas' {0} + + {1} 'a' 'sas' {0} + @@ -2042,6 +2280,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'sas' {0} + + {1} 'a' 'sas' {0} + @@ -2056,7 +2297,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic E d y G + MM/y G dd/MM/y GGGGG + E dd/MM/y G MMM y G d 'de' MMM 'de' 'su' y G E d 'de' MMM 'de' 'su' y G @@ -2065,8 +2308,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic d 'de' MMM E d 'de' MMM d 'de' MMMM - 'chida' W 'de' MMMM - 'chida' W 'de' MMMM + W'a' 'chida' 'de' MMMM + W'a' 'chida' 'de' MMMM MM/Y dd/MM/y E dd/MM/y @@ -2076,8 +2319,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMMM 'de' 'su' y QQQ y QQQQ 'de' 'su' y - 'chida' w 'de' 'su' Y - 'chida' w 'de' 'su' Y + w'a' 'chida' 'de' 'su' Y + w'a' 'chida' 'de' 'su' Y @@ -2220,34 +2463,80 @@ CLDR data files are interpreted according to the LDML specification (http://unic a.m. + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y G – y G + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v - h a – h a v - h–h a v + hh a – hh a v + hh–hh a v @@ -2289,35 +2578,84 @@ CLDR data files are interpreted according to the LDML specification (http://unic era Saka + + S + + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y G – y G + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v - h a – h a v - h–h a v + hh a – hh a v + hh–hh a v @@ -2357,76 +2695,167 @@ CLDR data files are interpreted according to the LDML specification (http://unic - era de s’Egira + era de s’ègira + in antis de s’ègira e.E. + a.E. E + A + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y G – y G + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v - h a – h a v - h–h a v + hh a – hh a v + hh–hh a v + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y G – y G + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v - - - h a – h a v - h–h a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v @@ -2472,34 +2901,80 @@ CLDR data files are interpreted according to the LDML specification (http://unic a.p. + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y G – y G + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v - h a – h a v - h–h a v + hh a – hh a v + hh–hh a v @@ -2515,34 +2990,80 @@ CLDR data files are interpreted according to the LDML specification (http://unic R.d.T + + + + EEEE d 'de' MMMM 'de' 'su' y G + + + + + d 'de' MMMM 'de' 'su' y G + + + + + dd MMM y G + + + + + dd/MM/y GGGGG + + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + {1} 'a' 'sas' {0} + + + + + {1}, {0} + + + + + {1}, {0} + + + + MM/y G + E dd/MM/y G + - - h B – h B - - - h:mm B – h:mm B - - G y – G y + y G – y G + y – y G - - h a – h a - h–h a + + HH–HH'o' - h:mm a – h:mm a - h:mm–h:mm a - h:mm–h:mm a + hh:mm a – hh:mm a + hh:mm–hh:mm a + hh:mm–hh:mm a - h:mm a – h:mm a v - h:mm–h:mm a v - h:mm–h:mm a v + hh:mm a – hh:mm a v + hh:mm–hh:mm a v + hh:mm–hh:mm a v - h a – h a v - h–h a v + hh a – hh a v + hh–hh a v @@ -2640,6 +3161,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ch. de su mese + + ch. de mese + die eris @@ -2950,13 +3474,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora {0} Ora legale: {0} Ora istandard: {0} - - - OIH - OIH - OLH - - Tempus coordinadu universale @@ -2968,12 +3485,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tzitade disconnota - - Tirana - - - Tucumán - Daca @@ -2995,6 +3506,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Zurigu + + Ìsula de Pasca + S’Avana @@ -3007,21 +3521,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic Praga - - Büsingen - Berlinu Algeri + + Ìsulas Galàpagos + Su Càiru Ìsulas Canàrias + + Madrìd + Addis Abeba @@ -3079,11 +3596,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Roma - - Enderbury - - - Canton + + Tòkyo Santu Cristolu @@ -3106,6 +3620,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Monròvia + + Vìlnius + Lussemburgu @@ -3145,6 +3662,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Azorras + + Madèira + Lisbona @@ -3178,6 +3698,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sant’Elene + + Lubiana + Santu Marinu @@ -3196,6 +3719,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Portu de Ispagna + + Kiev + Beulah, Dakota de su Nord @@ -3223,6 +3749,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Tzitade de Ho Chi Minh + + Wallis e Futuna + Maiota @@ -3255,9 +3784,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Ora de s’Àfrica otzidentale - Ora istandard de s’Àfrica otzidentale - Ora legale de s’Àfrica otzidentale + Ora de s’Àfrica otzidentale @@ -3541,6 +4068,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora istandard de Cuba Ora legale de Cuba + + OC + OIC + OLC + @@ -3649,6 +4181,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic OMG + + + Ora de sa Groenlàndia + Ora istandard de sa Groenlàndia + Ora legale de sa Groenlàndia + + Ora de sa Groenlàndia orientale @@ -3678,6 +4217,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora de sa Guyana + + + Ora istandard de sas ìsulas Hawaii-Aleutinas + + Ora de sas ìsulas Hawaii-Aleutinas @@ -4283,6 +4827,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00;(#,##0.00) @@ -4962,8 +5512,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic lira italiana - lira italiana - liras italianas + francu italianu + francos italianos dòllaru giamaicanu @@ -5700,6 +6250,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic dòllaru de sos Caràibes orientales dòllaros de sos Caràibes orientales + + fiorinu caraìbicu + fiorinu caraìbicu + fiorinos caraìbicos + diritos ispetziales de prelievu diritu ispetziale de prelievu @@ -6063,7 +6618,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} elementu {0} elementos - + partes pro millione {0} parte pro millione {0} partes pro millione @@ -6864,7 +7419,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} a sa velotzidade de sa lughe {0} a sa velotzidade de sa lughe - + partes pro milliardu {0} parte pro milliardu {0} partes pro milliardu @@ -7212,7 +7767,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} lughe {0} lughe - + partes/milliardu @@ -7306,7 +7861,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}elem. {0}elem. - + {0}ppm {0}ppm @@ -7946,7 +8501,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}l {0}l - + {0}ppb {0}ppb diff --git a/make/data/cldr/common/main/scn.xml b/make/data/cldr/common/main/scn.xml index 309d98394ea..37e92021b99 100644 --- a/make/data/cldr/common/main/scn.xml +++ b/make/data/cldr/common/main/scn.xml @@ -12,697 +12,707 @@ CLDR data files are interpreted according to the LDML specification (http://unic - afar - abkhasu - afrikaans - aghem - akan - amàricu - aragunisi - àrabbu livantinu di tramuntana - àrabbu - àrabbu nadaru mudernu - mapuche - assamisi - asu - asturianu - azzeru - bashkir - baluchi - basaa - belurrussu - bemba - betawi - bena - bùrgaru - haryanvi - bhojipuri - anii - bambara - bangladisi - brètuni - bodu - busnìacu - akoose - blin - catalanu - caddu - atsam - chakma - cicenu - cebbuanu - chiga - choctaw - cherokee - chickasaw - curdu cintrali - curdu Sorani - corsu - cecu - swampy cree - slavu dâ cresia - ciuvasciu - gallisi - danisi - tidiscu - tidiscu austrìacu - tidiscu autu sbìzziru - dogri - sorbu suttanu - duala - divehi - jola-fonyi - dzongkha - embu - ewe - grecu - ngrisi - ngrisi australianu - ngrisi canadisi - ngrisi britànnicu - ngrisi miricanu - spirantu - spagnolu - spagnolu dâ mèrica latina - spagnolu eurupeu - spagnolu missicanu - èstuni - bascu - ewondo - pirsianu - fula - fillannisi - filippinu - faruisi - francisi - francisi canadisi - francisi sbìzziru - francisi Cajun - friulanu - frìsuni uccidintali - irlannisi - ga - gaèlicu scuzzisi - geez - galizzianu - guarani - tidiscu sbìzziru - gujarati - gusii - mannisi - hausa - hawaiianu - ebbràicu - innianu - innianu (latinu) - innianu ngrisi - hmong njua - cruatu - surbu supranu - unghirisi - armenu - ntirlingua - innunisianu - ntirlingui - igbo - idu - islannisi - talianu - inuktitut - giappunisi - lojban - ngomba - machame - giavanisi - giurgianu - kara-kalpak - kabyle - jiu - kamba - makonde - capuvirdianu - kenyang - kaingang - koyra chiini - kikuyu - kazaku - kako - kalaallisut - kalenjin - khmer - kannada - curianu - konkani - kpelle - kashmiri - bafia - culunisi - curdu - còrnicu - kuvi - kirghizu - latinu - langi - lussimmurghisi - ganda - lìguri - lakota - ild - lummardu - lingala - lau - criolu dâ Louisiana - lituanu - latgallisi - luba-katanga - luyia - lèttuni - maithili - masai - moksha - meru - murisianu - margasciu - makhuwa-meetto - metaʼ - muchenu - māori - mi'kmaw - macèduni - malayalam - mòngulu - manipuri - mohawk - marathi - malisi - mautisi - mundang - assai lingui - muscogee - burmisi - erzya - mazanderani - nama - nurviggisi Bokmål - tidiscu suttanu - sàssuni suttanu - nipalisi - ulannisi - ciammingu - kwasio - nurviggisi Nynorsk - ngiemboon - nurviggisi - n’ko - navajo - uccitanu - odia - punjabi - pidgin niggirianu - pulaccu - prussianu - pashto - purtughisi - purtughisi brasilianu - purtughisi eurupeu - quechua - kʼicheʼ - rajasthani - rumanciu - rumenu - murdavu - russu - kinyarwanda - sàscritu - yakut - santali - sardu - sicilianu - sindhi - koyraboro senni - sinhala - sluvaccu - sluvenu - lule sami - inari sami - sòmalu - arbanisi - serbu - sunnanisi - svidisi - swahili - sirìacu - silisianu - tamil - telugu - tajik - tailannisi - tigrinya - turkmenu - tunganu - turcu - tàtaru - tamazight di l’Atlanti Cintrali - uyghur - ucrainu - lingua scanusciuta - urdu - uzbeku - vènitu - vietnamisi - makhuwa - volapük - wolof - xhosa - kangri - yoruba - nheengatu - cantunisi - cinisi cantunisi - zhuang - cinisi - cinisi, mannarinu - cinisi simprificatu - cinisi mannarinu simprificatu - cinisi tradizziunali - cinisi mannarinu tradizziunali - zulu - nuḍḍu cuntinutu linguìsticu + afar + abkhasu + afrikaans + aghem + akan + amàricu + aragunisi + àrabbu livantinu di tramuntana + àrabbu + àrabbu nadaru mudernu + mapuche + assamisi + asu + asturianu + azzeru + bashkir + baluchi + basaa + belurrussu + bemba + betawi + bena + bùrgaru + haryanvi + bhojipuri + anii + bambara + bangladisi + brètuni + bodu + busnìacu + akoose + blin + catalanu + caddu + atsam + chakma + cicenu + cebbuanu + chiga + choctaw + cherokee + chickasaw + curdu cintrali + curdu Sorani + corsu + cecu + swampy cree + slavu dâ cresia + ciuvasciu + gallisi + danisi + tidiscu + tidiscu austrìacu + tidiscu autu sbìzziru + dogri + sòrabbu suttanu + duala + divehi + jola-fonyi + dzongkha + embu + ewe + grecu + ngrisi + ngrisi australianu + ngrisi canadisi + ngrisi britànnicu + ngrisi dû RJ + ngrisi miricanu + ngrisi dî SJ + spirantu + spagnolu + spagnolu dâ mèrica latina + spagnolu eurupeu + spagnolu missicanu + èstuni + bascu + ewondo + pirsianu + fula + fillannisi + filippinu + faruisi + francisi + francisi canadisi + francisi sbìzziru + francisi Cajun + friulanu + frìsuni uccidintali + irlannisi + ga + gaèlicu scuzzisi + geez + galizzianu + guarani + tidiscu sbìzziru + gujarati + gusii + mannisi + hausa + hawaiianu + ebbràicu + innianu + innianu ngrisi + hmong njua + cruatu + sòrabbu supranu + criolu d’Haiti + unghirisi + armenu + ntirlingua + innunisianu + ntirlingui + igbo + idu + islannisi + italianu + inuktitut + giappunisi + lojban + ngomba + machame + giavanisi + giurgianu + kara-kalpak + kabyle + jiu + kamba + makonde + capuvirdianu + kenyang + kaingang + koyra chiini + kikuyu + kazzaku + kako + kalaallisut + kalenjin + khmer + kannada + curianu + konkani + kpelle + kashmiri + bafia + culunisi + curdu + curdu + kurmanji + còrnicu + kuvi + kirghizzu + latinu + langi + lussimmurghisi + ganda + lìguri + lakota + ild + lummardu + lingala + lau + criolu dâ Louisiana + lituanu + latgallisi + luba-katanga + luyia + lèttuni + maithili + masai + moksha + meru + murisianu + margasciu + makhuwa-meetto + metaʼ + muchenu + māori + mi'kmaw + macèduni + malayalam + mòngulu + manipuri + mohawk + marathi + malisi + mautisi + mundang + assai lingui + muscogee + burmisi + erzya + mazanderani + nama + nurviggisi Bokmål + tidiscu suttanu + sàssuni suttanu + nipalisi + ulannisi + ciammingu + kwasio + nurbiggisi Nynorsk + ngiemboon + nurbiggisi + n’ko + sothu di tramuntana + navajo + uccitanu + orìa + punjabi + pidgin niggirianu + pulaccu + prussianu + pashto + purtughisi + purtughisi brasilianu + purtughisi eurupeu + quechua + kʼicheʼ + rajasthani + rumanciu + rumenu + murdavu + russu + kinyarwanda + sàscritu + yakut + santali + sardu + sicilianu + sindhi + koyraboro senni + singalisi + sluvaccu + sluvenu + lule sami + inari sami + sòmalu + arbanisi + serbu + sunnanisi + svidisi + swahili + sirìacu + silisianu + tamil + telugu + tajik + tailannisi + tigrinya + turkmenu + tunganu + turcu + tàtaru + tamazight di l’Atlanti Cintrali + uyghur + ucrainu + lingua scanusciuta + urdu + uzbeku + vènitu + vietnamisi + makhuwa + volapük + wolof + xhosa + kangri + yoruba + nheengatu + cantunisi + cinisi cantunisi + zhuang + cinisi + cinisi, mannarinu + cinisi simprificatu + cinisi mannarinu simprificatu + cinisi tradizziunali + cinisi mannarinu tradizziunali + zulu + nuḍḍu cuntinutu linguìsticu - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Munnu - Àfrica - Mèrica di tramuntana cuntinintali - Mèrica di sciroccu - Uciània - Àfrica punintina - Mèrica cintrali - Àfrica livantina - Àfrica di tramuntana - Àfrica di menzu - Àfrica di sciroccu - Mèrichi - Mèrica di tramuntana - Caràibbi - Asia livantina - Asia di sciroccu - Asia di sciroccu-livantina - Europa di sciroccu - Australasia - Milanesia - Riggiuni dâ Micrunesia - Pulinesia - Asia - Asia cintrali - Asia punintina - Europa - Europa livantina - Europa di tramuntana - Europa punintina - Àfrica sutta-sahariana - Mèrica latina - Ìsula d’Ascinziuni - Annorra - Emirati Àrabbi Junciuti - Afghànistan - Antigua e Barbuda - Anguilla - Arbanìa - Armenia - Angola - Antàrtidi - Argintina - Samoa Miricani - Austria - Australia - Aruba - Ìsuli Åland - Azerbaijan - Bosnia e Herzegòvina - Barbados - Bàngladesh - Bergiu - Burkina Fasu - Burgarìa - Bahrain - Burundi - Benin - St. Barthélemy - Birmuda - Brunei - Bulivia - Caràibbi ulannisi - Brasili - Bahamas - Bhutan - Ìsula Bouvet - Botswana - Belurussia - Bilisi - Cànada - Ìsuli Cocos (Keeling) - Congu - Kinshasa - Congu (RDC) - Ripùbblica Centrafricana - Congu - Brazzaville - Congu (Ripùbblica) - Sbìzzira - Custa d’Avoriu - Ìsuli Cook - Cili - Càmerun - Cina - Culommia - Ìsula di Clipperton - Custa Rica - Cubba - Capu Virdi - Curaçao - Ìsula di Natali - Cipru - Cechia - Ripùbblica Ceca - Girmania - Diego Garcia - Gibbuti - Danimarca - Dumìnica - Ripùbblica Duminicana - Algirìa - Ceuta e Miliḍḍa - Ècuador - Estonia - Eggittu - Sahara punintinu - Eritrea - Spagna - Etiopia - Uniuni Eurupea - Zuna Euru - Fillannia - Figi - Ìsuli Falkland - Ìsuli Falkland (Ìsuli Marvini) - Micrunisia - Ìsuli Faroe - Franza - Gabon - Regnu Junciutu - RJ - Grenada - Giorgia - Guiana Francisi - Guernsey - Ghana - Gibbirterra - Gruillannia - Gammia - Guinìa - Guadalupa - Guinìa Equaturiali - Grecia - Giorgia di sciroccu e Ìsuli Sandwich australi - Guatimala - Guam - Guinìa-Bissau - Guiana - Hong Kong RAS dâ Cina - Hong Kong - Ìsuli Heard e McDonald - Hunnuras - Cruazzia - Haiti - Ungarìa - Ìsuli Canari - Innunesia - Irlanna - Isdraeli - Ìsula di Man - Innia - Tirritoriu Ucianicu di l’Innia Britànnica - Arcipèlagu Chagos - Iraq - Iran - Islanna - Italia - Jersey - Giamàica - Giurdania - Giappuni - Kenya - Kyrgyzistan - Camboggia - Kiribati - Còmoros - S. Kitts e Nevis - Curìa di Tramuntana - Curìa di Sciroccu - Kuwait - Ìsuli Cayman - Kazzàkistan - Laos - Lìbbanu - Santa Lucìa - Liechtenstein - Sri Lanka - Libberia - Lisothu - Lituania - Lussimmurgu - Littonia - Libbia - Maroccu - Mònacu - Murdova - Muntinegru - San Martinu - Madagascàr - Ìsuli Marshall - Macidonia di tramuntana - Mali - Myanmar (Burma) - Mungolia - Macau RAS dâ Cina - Macau - Ìsuli Marianna di Tramuntana - Martinica - Mauritania - Munzirratu - Mauta - Mauritius - Mardivi - Malawi - Mèssicu - Malesia - Muzzammicu - Namibbia - Nova Calidonia - Niger - Ìsula Norfolk - Niggeria - Nicaragua - Paisi Vasci - Nurveggia - Nepal - Nauru - Niue - Nova Zilannia - Aotearoa Nova Zilannia - Oman - Pànama - Pirù - Pulinisia Francisi - Papua Nova Guinìa - Filippini - Pàkistan - Pulonia - S. Pierre e Miquelon - Ìsuli Pitcairn - Portu Ricu - Tirritori Palistinesi - Palistina - Purtugallu - Palau - Paraguay - Qatar - Uciània di fora - Réunion - Rumanìa - Serbia - Russia - Ruanna - Arabbia Saudita - Ìsuli Salumuni - Seychelles - Sudan - Sbezzia - Singapuri - Sant’Èlina - Sluvenia - Svalbard e Jan Mayen - Sluvacchia - Sierra Liuni - San Marinu - Sènigal - Sumalia - Surinami - Sudan di sciroccu - São Tomé e Príncipe - El Salvador - Sint Maarten - Siria - Eswatini - Swazilannia - Tristan da Cunha - Ìsuli Turks e Càicos - Chad - Tirritori Francisi di Sciroccu - Togu - Tailannia - Tajìkistan - Tukilau - Timor-Leste - Timor di Livanti - Turkmènistan - Tunisìa - Tonga - Turchìa - Trinidad e Tobago - Tuvalu - Taiwan - Tanzania - Ucraina - Uganna - Ìsuli Miricani di Fora - Nazziuna Junciuti - Stati Junciuti - SJM - Uruguay - Uzbèkistan - Città dû Vaticanu - S. Vincent e Grenadine - Vinizzuela - Ìsuli Vìrgini Britànnichi - Ìsuli Vìrgini Miricani - Vietnam - Vanuatu - Wallis e Futuna - Samoa - Accenti fausi - Bidirizziunali fausu - Kòssuvu - Yemen - Mayotte - Africa di sciroccu - Zammia - Zimbabwe - Riggiuni scanusciuta + Munnu + Àfrica + Mèrica di tramuntana cuntinintali + Mèrica di sciroccu + Uciània + Àfrica punintina + Mèrica cintrali + Àfrica livantina + Àfrica di tramuntana + Àfrica di menzu + Àfrica di sciroccu + Mèrichi + Mèrica di tramuntana + Caràibbi + Asia livantina + Asia di sciroccu + Asia di sciroccu-livantina + Europa di sciroccu + Australasia + Milanesia + Riggiuni dâ Micrunesia + Pulinesia + Asia + Asia cintrali + Asia punintina + Europa + Europa livantina + Europa di tramuntana + Europa punintina + Àfrica sutta-sahariana + Mèrica latina + Ìsula d’Ascinziuni + Annorra + Emirati Àrabbi Junciuti + Afghànistan + Antigua e Barbuda + Anguilla + Arbanìa + Armenia + Angola + Antàrtidi + Argintina + Samoa Miricani + Austria + Australia + Aruba + Ìsuli Åland + Azerbaijan + Bosnia e Herzegòvina + Barbados + Bàngladesh + Bergiu + Burkina Fasu + Burgarìa + Bahrain + Burunni + Benin + St. Barthélemy + Birmuda + Brunei + Bulivia + Caràibbi ulannisi + Brasili + Bahamas + Bhutan + Ìsula Bouvet + Botswana + Bilurussia + Bilisi + Cànada + Ìsuli Cocos (Keeling) + Congu - Kinshasa + Congu (RDC) + Ripùbblica Centrafricana + Congu - Brazzaville + Congu (Ripùbblica) + Sbìzzira + Custa d’Avoriu + Ìsuli Cook + Cili + Càmerun + Cina + Culommia + Ìsula di Clipperton + Sark + Custa Rica + Cubba + Capu Virdi + Curaçao + Ìsula di Natali + Cipru + Cechia + Ripùbblica Ceca + Girmania + Diego Garcia + Gibbuti + Danimarca + Dumìnica + Ripùbblica Duminicana + Algirìa + Ceuta e Miliḍḍa + Ècuador + Estonia + Eggittu + Sahara punintinu + Eritrea + Spagna + Etiopia + Unioni Eurupea + Zuna Euru + Fillannia + Figi + Ìsuli Falkland + Ìsuli Falkland (Ìsuli Marvini) + Micrunisia + Ìsuli Faroe + Franza + Gabòn + Regnu Junciutu + RJ + Grenada + Giorgia + Guiana Francisi + Guernsey + Ghana + Gibbirterra + Gruillannia + Gammia + Guinìa + Guadalupa + Guinìa Equaturiali + Grecia + Giorgia di sciroccu e Ìsuli Sandwich australi + Guatimala + Guam + Guinìa-Bissau + Guiana + Hong Kong RAS dâ Cina + Hong Kong + Ìsuli Heard e McDonald + Hunnuras + Cruazzia + Haiti + Ungarìa + Ìsuli Canari + Innunesia + Irlanna + Isdraeli + Ìsula di Man + Innia + Tirritoriu Uciànicu di l’Innia Britànnica + Arcipèlagu Chagos + Iraq + Iran + Islanna + Italia + Jersey + Giamàica + Giurdania + Giappuni + Kenya + Kirghìzzistan + Camboggia + Kiribati + Còmoros + S. Kitts e Nevis + Curìa di Tramuntana + Curìa di Sciroccu + Kuwait + Ìsuli Cayman + Kazzàkistan + Laos + Lìbbanu + Santa Lucìa + Liechtenstein + Sri Lanka + Libberia + Lisothu + Lituania + Lussimmurgu + Littonia + Libbia + Maroccu + Mònacu + Murdova + Muntinegru + San Martinu + Madagascàr + Ìsuli Marshall + Macidonia di tramuntana + Mali + Myanmar (Birmania) + Mungolia + Macau RAS dâ Cina + Macau + Ìsuli Marianna di Tramuntana + Martinica + Mauritania + Munzirratu + Mauta + Maurizzius + Mardivi + Malawi + Mèssicu + Malesia + Muzzammicu + Namibbia + Nova Calidonia + Niger + Ìsula Norfolk + Niggeria + Nicaragua + Pajisi Basci + Nurbeggia + Nepal + Nauru + Niue + Nova Zilannia + Aotearoa Nova Zilannia + Oman + Pànama + Pirù + Pulinisia Francisi + Papua Nova Guinìa + Filippini + Pàkistan + Pulonia + S. Pierre e Miquelon + Ìsuli Pitcairn + Portu Ricu + Tirritori Palistinesi + Palistina + Purtugallu + Palau + Paraguay + Qatar + Uciània di fora + Riunion + Rumanìa + Serbia + Russia + Ruanna + Arabbia Saudita + Ìsuli Salumuni + Seychelles + Sudan + Sbezzia + Singapuri + Sant’Èlina + Sluvenia + Svalbard e Jan Mayen + Sluvacchia + Sierra Liuni + San Marinu + Sènigal + Sumalia + Surinami + Sudan di sciroccu + São Tomé e Príncipe + El Salvador + Sint Maarten + Siria + Eswatini + Swazzilannia + Tristan da Cunha + Ìsuli Turks e Càicos + Chad + Tirritori Francisi di Sciroccu + Togu + Tailannia + Tajìkistan + Tukilau + Timor-Leste + Timor di Livanti + Turkmènistan + Tunisìa + Tonga + Turchìa + Trinidad e Tobago + Tuvalu + Taiwan + Tanzania + Ucraina + Uganna + Ìsuli Miricani di Fora + Nazzioni Junciuti + Stati Junciuti + SJ + Uruguay + Uzbèkistan + Città dû Vaticanu + S. Vincent e Grenadine + Vinizzuela + Ìsuli Vìrgini Britànnichi + Ìsuli Vìrgini Miricani + Vietnam + Vanuatu + Wallis e Futuna + Samoa + Accenti fausi + Bidirizziunali fausu + Kòssuvu + Yemen + Mayotte + Àfrica di sciroccu + Zammia + Zimbabwe + Riggiuni scanusciuta - Calannariu - Sistema di misura - Nùmmari + Calannariu + Sistema di misura + Nùmmari - Calannariu buddista - Calannariu cinisi - Calannariu coptu - Calannariu dangi - Calannariu etìupi - Calannariu etìupi Amete-Alem - Calannariu grigurianu - Calannariu ebbràicu - Calannariu slàmicu - Calannariu slàmicu civili - Calannariu slàmicu Umm Al-Qura - Calannariu ISO-8601 - Calannariu giappunisi - Calannariu pirsianu - Calannariu minguo - Arringu Pridifinitu - Sistema mètricu - Sistema mpiriali - Sistema miricanu - Nùmmari di Punenti + Calannariu buddista + Calannariu cinisi + Calannariu coptu + Calannariu dangi + Calannariu etìupi + Calannariu etìupi Amete-Alem + Calannariu grigurianu + Grigurianu + Calannariu ebbràicu + Calannariu slàmicu + Calannariu slàmicu civili + Calannariu slàmicu Umm Al-Qura + Calannariu grigurianu (prima l’annu) + Calannariu giappunisi + Calannariu pirsianu + Calannariu minguo + Arringu pridifinutu + Pridifinutu + Sistema mètricu + Sistema mpiriali + Sistema miricanu + Nùmmari di Punenti - mètricu - ngrisi - miricanu + mètricu + ngrisi + miricanu - Lingua: {0} - Scrittura: {0} - Riggiuni: {0} + Lingua: {0} + Scrittura: {0} + Riggiuni: {0} [aàâ b c dḍ eèê f g h iìî j l m n oòô p q r s t uùû v z] [ç đ éë ə ḥ k š w x y] [A B C D E F G H I J L M N O P Q R S T U V Z] - [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [\- ‑ , . % ‰ + − 0 1 2 3 4 5 6 7 8 9 ª ᵘ] + [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] @@ -710,172 +720,180 @@ CLDR data files are interpreted according to the LDML specification (http://unic - EEEE d MMMM y G + EEEE d MMMM y G - d MMMM y G + d MMMM y G - d MMM y G + d MMM y G - dd/MM/y GGGGG + dd/MM/y GGGGG - {1} {0} + {1} {0} - {1} 'a' 'l''''uri' {0} + {1} 'a' 'l'’'uri' {0} + + + {1} 'a' 'l'’'uri' {0} - {1} {0} + {1} {0} - {1} 'a' 'l''''uri' {0} + {1} 'a' 'l'’'uri' {0} + + + {1} 'a' 'l'’'uri' {0} - {1} {0} + {1} {0} - {1} {0} + {1} {0} - E d - E hh:mm a - E hh:mm:ss a - y G - d/M/y GGGGG - MMM y G - d MMM y G - E d MMM y G - hh:mm a - hh:mm:ss a - d/M - E d/M - d MMM - E d MMM - d MMMM - y G - y G - M/y GGGGG - d/M/y GGGGG - E d/M/y GGGGG - MMMM y G - d MMM y G - E d MMM y G - MMMM y G - QQQ/y G - QQQQ 'dû' y G + E d + E hh:mm a + E hh:mm:ss a + y G + MM/y G + d/M/y GGGGG + E MM/dd/y G + MMM y G + d MMM y G + E d MMM y G + hh:mm a + hh:mm:ss a + d/M + E d/M + d MMM + E d MMM + d MMMM + y G + y G + M/y GGGGG + d/M/y GGGGG + E d/M/y GGGGG + MMMM y G + d MMM y G + E d MMM y G + MMMM y G + QQQ/y G + QQQQ 'dû' y G - y G – y G - y–y G + y G – y G + y–y G - M/y GGGGG – M/y GGGGG - M/y – M/y GGGGG - M/y – M/y GGGGG + M/y GGGGG – M/y GGGGG + M/y – M/y GGGGG + M/y – M/y GGGGG - d/M/y – d/M/y GGGGG - d/M/y GGGGG – d/M/y GGGGG - d/M/y – d/M/y GGGGG - d/M/y – d/M/y GGGGG + d/M/y – d/M/y GGGGG + d/M/y GGGGG – d/M/y GGGGG + d/M/y – d/M/y GGGGG + d/M/y – d/M/y GGGGG - E d/M/y – E d/M/y GGGGG - E dd/MM/y GGGGG – E dd/MM/y GGGGG - E d/M/y – E d/M/y GGGGG - E d/M/y – E d/M/y GGGGG + E d/M/y – E d/M/y GGGGG + E dd/MM/y GGGGG – E dd/MM/y GGGGG + E d/M/y – E d/M/y GGGGG + E d/M/y – E d/M/y GGGGG - MMM y G – MMM y G - MMM–MMM y G - MMM y – MMM y G + MMM y G – MMM y G + MMM–MMM y G + MMM y – MMM y G - d–d MMM y G - d MMM y G – d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G + d–d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E d MMM – E d MMM y G - E d MMM y G – E d MMM y G - E d MMM – E d MMM y G - E d MMM y – E d MMM y G + E d MMM – E d MMM y G + E d MMM y G – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G - M – M + M – M - d/M – d/M - d/M – d/M + d/M – d/M + d/M – d/M - E d/M – E d/M - E d/M – E d/M + E d/M – E d/M + E d/M – E d/M - d–d MMM - d MMM – d MMM + d–d MMM + d MMM – d MMM - E d MMM – E d MMM - E d MMM – E d MMM + E d MMM – E d MMM + E d MMM – E d MMM - y–y G + y–y G - M/y – M/y GGGGG - M/y – M/y GGGGG + M/y – M/y GGGGG + M/y – M/y GGGGG - d/M/y – d/M/y GGGGG - d/M/y – d/M/y GGGGG - d/M/y – d/M/y GGGGG + d/M/y – d/M/y GGGGG + d/M/y – d/M/y GGGGG + d/M/y – d/M/y GGGGG - E d/M/y – E d/M/y GGGGG - E d/M/y – E d/M/y GGGGG - E d/M/y – E d/M/y GGGGG + E d/M/y – E d/M/y GGGGG + E d/M/y – E d/M/y GGGGG + E d/M/y – E d/M/y GGGGG - MMM–MMM y G - MMM y – MMM y G + MMM–MMM y G + MMM y – MMM y G - d–d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G + d–d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E d MMM – E d MMM y G - E d MMM – E d MMM y G - E d MMM y – E d MMM y G + E d MMM – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G - MMMM–MMMM y G - MMMM y – MMMM y G + MMMM–MMMM y G + MMMM y – MMMM y G @@ -884,391 +902,352 @@ CLDR data files are interpreted according to the LDML specification (http://unic - jin - fri - mar - apr - maj - giu - gnt - agu - sit - utt - nuv - dic + jin + fri + mar + apr + maj + giu + gnt + agu + sit + utt + nuv + dic - jinnaru - frivaru - marzu - aprili - maju - giugnu - giugnettu - agustu - sittèmmiru - uttùviru - nuvèmmiru - dicèmmiru + jinnaru + frivaru + marzu + aprili + maju + giugnu + giugnettu + agustu + sittèmmiru + uttùviru + nuvèmmiru + dicèmmiru - J - F - M - A - M - G - G - A - S - U - N - D - - - jinnaru - frivaru - marzu - aprili - maju - giugnu - giugnettu - agustu - sittèmmiru - uttùviru - nuvèmmiru - dicèmmiru + J + F + M + A + M + G + G + A + S + U + N + D - dum - lun - mar - mer - jov - ven - sab - - - d - l - m - m - j - v - s + dum + lun + mar + mer + jov + ven + sab - du - lu - ma - me - jo - ve - sa + du + lu + ma + me + jo + ve + sa - dumìnica - lunnidìa - martidìa - mercuridìa - jovidìa - venniridìa - sàbbatu + dumìnica + lunnidìa + martidìa + mercuridìa + jovidìa + venniridìa + sàbbatu - - dum - lun - mar - mer - jov - ven - sab - - d - l - m - m - j - v - s - - - du - lu - ma - me - jo - ve - sa - - - dumìnica - lunnidìa - martidìa - mercuridìa - jovidìa - venniridìa - sàbbatu + d + l + m + m + j + v + s - 1T - 2T - 3T - 4T + 1T + 2T + 3T + 4T - 1ᵘ trimestri - 2ᵘ trimestri - 3ᵘ trimestri - 4ᵘ trimestri - - - - - 1T - 2T - 3T - 4T - - - 1ᵘ trimestri - 2ᵘ trimestri - 3ᵘ trimestri - 4ᵘ trimestri + 1ᵘ trimestri + 2ᵘ trimestri + 3ᵘ trimestri + 4ᵘ trimestri - prima di Cristu - prima di l’èbbica cumuni - doppu di Cristu - èbbica cumuni + prima di Cristu + prima di l’èbbica cumuni + doppu di Cristu + èbbica cumuni - p.C. - p.E.C. - d.C. - E.C. + p.C. + p.E.C. + d.C. + E.C. - pC - pEC - dC - EC + pC + pEC + dC + EC - EEEE d MMMM y + EEEE d MMMM y - d MMMM y + d MMMM y - d MMM y + d MMM y - d/M/yy + d/M/yy - HH:mm:ss zzzz + HH:mm:ss zzzz - HH:mm:ss z + HH:mm:ss z - HH:mm:ss + HH:mm:ss - HH:mm + HH:mm - {1} {0} + {1} {0} + + + {1} 'a' 'l'’'uri' {0} + + + {1} 'a' 'l'’'uri' {0} - {1} {0} + {1} {0} + + + {1} 'a' 'l'’'uri' {0} + + + {1} 'a' 'l'’'uri' {0} - {1} {0} + {1} {0} + + + {1} 'a' 'l'’'uri' {0} + + + {1} 'a' 'l'’'uri' {0} - {1} {0} + {1} {0} + + + {1} 'ê' {0} + + + {1} 'ê' {0} - E d - E h:mm a - E h:mm:ss a - y G - d/M/y G - MMM y G - d MMM y G - E d MMM y G - h:mm a - h:mm:ss a - h:mm:ss a v - h:mm a v - d/M - E d/M - d MMM - E d MMM - d MMMM - 'simana' W 'di' MMMM - 'simana' W 'di' MMMM - M/y - d/M/y - E d/M/y - MMM y - d MMM y - E d MMM y - MMMM y - QQQ y - QQQQ 'dû' y - 'simana' w 'dû' Y - 'simana' w 'dû' Y + E d + E h:mm a + E h:mm:ss a + y G + MM/y G + d/M/y G + E dd/MM/y G + MMM y G + d MMM y G + E d MMM y G + h:mm a + h:mm:ss a + h:mm:ss a v + h:mm a v + d/M + E d/M + d MMM + E d MMM + d MMMM + 'simana' W 'di' MMMM + 'simana' W 'di' MMMM + M/y + d/M/y + E d/M/y + MMM y + d MMM y + E d MMM y + MMMM y + QQQ y + QQQQ 'dû' y + 'simana' w 'dû' Y + 'simana' w 'dû' Y - h:mm B – h:mm B - h:mm – h:mm B - h:mm – h:mm B + h:mm – h:mm B + h:mm – h:mm B - y G – y G - y – y G + y G – y G + y – y G - M/y G – M/y G - M/y – M/y G - M/y – M/y G + M/y G – M/y G + M/y – M/y G + M/y – M/y G - d/M/y – d/M/y G - d/M/y G – d/M/y G - d/M/y – d/M/y G - d/M/y – d/M/y G + d/M/y – d/M/y G + d/M/y G – d/M/y G + d/M/y – d/M/y G + d/M/y – d/M/y G - E d/M/y – E d/M/y G - E d/M/y G – E d/M/y G - E d/M/y – E d/M/y G - E d/M/y – E d/M/y G + E d/M/y – E d/M/y G + E d/M/y G – E d/M/y G + E d/M/y – E d/M/y G + E d/M/y – E d/M/y G - MMM y – MMM y G - MMM–MMM y G - MMM y – MMM y G + MMM y – MMM y G + MMM–MMM y G + MMM y – MMM y G - d–d MMM y G - d MMM y G – d MMM y G - d MMM – d MMM y G - d MMM y – d MMM y G + d–d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E d MMM – E d MMM y G - E d MMM y G – E d MMM y G - E d MMM – E d MMM y G - E d MMM y – E d MMM y G + E d MMM – E d MMM y G + E d MMM y G – E d MMM y G + E d MMM – E d MMM y G + E d MMM y – E d MMM y G - h:mm a – h:mm a - h:mm – h:mm a - h:mm – h:mm a + h:mm a – h:mm a + h:mm – h:mm a + h:mm – h:mm a - h:mm a – h:mm a v - h:mm – h:mm a v - h:mm – h:mm a v + h:mm a – h:mm a v + h:mm – h:mm a v + h:mm – h:mm a v - M/d – M/d - M/d – M/d + M/d – M/d + M/d – M/d - E M/d – E M/d - E M/d – E M/d + E M/d – E M/d + E M/d – E M/d - d–d MMM - d MMM – d MMM + d–d MMM + d MMM – d MMM - E d MMM – E d MMM - E d MMM – E d MMM + E d MMM – E d MMM + E d MMM – E d MMM - M/y – M/y - M/y – M/y + M/y – M/y + M/y – M/y - d/M/y – d/M/y - d/M/y – d/M/y - d/M/y – d/M/y + d/M/y – d/M/y + d/M/y – d/M/y + d/M/y – d/M/y - E d/M/y – E d/M/y - E d/M/y – E d/M/y - E d/M/y – E d/M/y + E d/M/y – E d/M/y + E d/M/y – E d/M/y + E d/M/y – E d/M/y - MMM–MMM y - MMM y – MMM y + MMM–MMM y + MMM y – MMM y - d–d MMM y - d MMM – d MMM y - d MMM y – d MMM y + d–d MMM y + d MMM – d MMM y + d MMM y – d MMM y - E d MMM – E d MMM y - E d MMM – E d MMM y - E d MMM y – E d MMM y + E d MMM – E d MMM y + E d MMM – E d MMM y + E d MMM y – E d MMM y - MMMM–MMMM y - MMMM y – MMMM y + MMMM–MMMM y + MMMM y – MMMM y @@ -1276,2385 +1255,2361 @@ CLDR data files are interpreted according to the LDML specification (http://unic - èbbica + èbbica - èbb. + èbb. - èbb + èbb - annu - l’annu passatu - st’annu - l’annu pròssimu + annu + l’annu passatu + st’annu + l’annu vinturu - ntra n’annu - ntra {0} anni + ntra n’annu + ntra {0} anni - n’annu nnarrè - {0} anni nnarrè + n’annu nnarrè + {0} anni nnarrè - a. - l’a. passatu - st’a. - l’a. pròssimu - - ntra n’annu - ntra {0} anni - + a. + l’a. passatu + st’a. + l’a. vinturu - l’a. passatu - st’.a - u pròssimu annu - - ntra n’annu - ntra {0} anni - + l’a. passatu + st’.a + l’a. vinturu - trimestri - l’ùrtimu trimestri - stu trimestri - u pròssimu trimestri + trimestri + l’ùrtimu trimestri + stu trimestri + u pròssimu trimestri - ntra un trimestri - ntra {0} trimestri + ntra un trimestri + ntra {0} trimestri - un trimestri nnarrè - {0} trimestri nnarrè + un trimestri nnarrè + {0} trimestri nnarrè - tri. + tri. - ntra un tri. - ntra {0} tri. + ntra un tri. + ntra {0} tri. - un tri. nnarrè - {0} tri. nnarrè + un tri. nnarrè + {0} tri. nnarrè - tri + tri - ntra un t. - ntra {0} t. + ntra un t. + ntra {0} t. - un t. nnarrè - {0} t. nnarrè + un t. nnarrè + {0} t. nnarrè - misi - u misi passatu - stu misi - u pròssimu misi + misi + u misi passatu + stu misi + u misi vinturu - ntra un misi - ntra {0} misi + ntra un misi + ntra {0} misi - un misi nnarrè - {0} misi nnarrè + un misi nnarrè + {0} misi nnarrè - m. - u m. passatu - stu m. - u pròssimu m. + m. + u m. passatu + stu m. + u m. vinturu - ntra un m. - ntra {0} m. + ntra un m. + ntra {0} m. - un m. nnarrè - {0} m. nnarrè + un m. nnarrè + {0} m. nnarrè - u m. passatu - stu m. - u pròssimu m. - - ntra un m. - ntra {0} m. - - - un m. nnarrè - {0} m. nnarrè - + u m. passatu + stu m. + u m. vinturu - simana - a simana passata - sta simana - a pròssima simana + simana + a simana passata + sta simana + a pròssima simana - ntra na simana - ntra {0} simani + ntra na simana + ntra {0} simani - na simana nnarrè - {0} simani nnarrè + na simana nnarrè + {0} simani nnarrè - a simana di {0} + a simana di {0} - smn. - a smn. passata - sta smn. - a pròssima smn. - a smn. di {0} - - - a smn. passata - sta smn. - a pròssima smn. - a smn. di {0} + smn. + a smn. passata + sta smn. + a pròssima smn. + a smn. di {0} - simana dû misi + simana dû misi - smn. dû m. + smn. dû m. - jornu - ajeri - oji - dumani + jornu + ajeri + oji + dumani - ntra un jornu - ntra {0} jorna + ntra un jornu + ntra {0} jorna - un jornu nnarrè - {0} jorna nnarrè + un jornu nnarrè + {0} jorna nnarrè - j. - ajeri - oji - dumani + j. - jornu di l’annu + jornu di l’annu - j. di l’a. + j. di l’a. - jornu dâ simana + jornu dâ simana - j. dâ smn. + j. dâ smn. - l’ùrtima dumìnica - sta dumìnica - a pròssima dumìnica + l’ùrtima dumìnica + sta dumìnica + a pròssima dumìnica - ntra na dumìnica - ntra {0} dumìnichi + ntra na dumìnica + ntra {0} dumìnichi - na dumìnica nnarrè - {0} dumìnichi nnarrè + na dumìnica nnarrè + {0} dumìnichi nnarrè - l’ùrtima dum. - sta dum. - a pròssima dum. + l’ùrtima dum. + sta dum. + a pròssima dum. - ntra na dum. - ntra {0} dum. + ntra na dum. + ntra {0} dum. - na dum. nnarrè - {0} dum. nnarrè - - - - l’ùrtima dum. - sta dum. - a pròssima dum. - - ntra na dum. - ntra {0} dum. - - - na dum. nnarrè - {0} dum. nnarrè + na dum. nnarrè + {0} dum. nnarrè - l’ùrtimu lùnnidi - stu lùnnidi - u pròssimu lùnnidi + l’ùrtimu lùnnidi + stu lùnnidi + u pròssimu lùnnidi - ntra un lùnnidi - ntra {0} lùnnidi + ntra un lùnnidi + ntra {0} lùnnidi - un lùnnidi nnarrè - {0} lùnnidi nnarrè + un lùnnidi nnarrè + {0} lùnnidi nnarrè + + AM/PM + - ura + ura - u. + u. - minutu + minutu - min. + min. - sicunnu - ora + sicunnu + ora - sic. + sic. - fusu urariu + fusu urariu - fusu + fusu - {0} (ura ligali) - {0} (ura sulari) + {0} (ura ligali) + {0} (ura sulari) - Ura Curdinata Univirsali + Ura Curdinata Univirsali - Scanusciutu + Scanusciutu - - Tirana + + Dubbai + + + Basi Rothera + + + Terra di Palmer + + + Basi Troll + + + Basi Showa + + + Basi Mawson + + + Basi Vostok + + + Basi Casey + + + Basi Dumont d’Urville + + + Basi McMurdo - Còrduba + Còrduba - Adilaidi + Adilaidi - Sarajevu + Sarajevu - Brusseli + Bruselli - Birmuda + Birmuda - Campu Ranni + Campu Granni - San Paulu + San Paulu - Bilisi + Bilisi - Riggina + Riggina - Torontu + Turontu - Zurigu + Zurigu + + + Ìsula di Pasca - Custa Rica + Custa Rica - Capu Virdi + Capu Virdi - Natali + Natali - Nicusìa + Nicusìa - Praga + Praga - Birlinu + Birlinu - Gibbuti + Gibbuti - Dumìnica + Dumìnica - Santu Dumingu + Santu Dumingu - Algeri + Algeri - Galàpagos + Galàpagos - Cairu + Cairu - Canari + Canari - Cèuta + Cèuta - Hèlsinki + Hèlsinki - Figi + Figi - Pariggi + Pariggi - Ura ligali Britànnica + Ura ligali Britànnica - Lònnira + Lònnira - Gibbirterra + Gibbirterra - Guadalupa + Guadalupa - Ateni + Ateni - Giorgia di sciroccu + Giorgia di sciroccu - Guatimala + Guatimala - Guiana + Guiana - Zagabbria + Zagabbria - Giacarta + Giacarta - Ura sulari Irlannisi + Ura sulari Irlannisi - Dubblinu + Dubblinu - Girusalemmi + Girusalemmi - Ìsula di Man + Ìsula di Man - Kurkata + Kurkata - Roma + Roma - Giamaica + Giamaica - Ammàn + Ammàn - Nairobbi + Nairobbi - Siul + Siul - Santa Lucìa + Santa Lucìa - Culummu + Culummu - Lussimburgu + Lussimmurgu - Trìpuli + Trìpuli - Casabblanca + Casabblanca - Mònacu + Mònacu - Macau + Macau - Martinica + Martinica - Munzirratu + Munzirratu - Mauta + Mauta - Mardivi + Mardivi - Muntirrei + Muntirrei - Cità dû Mèssicu + Cità dû Mèssicu - Mascati + Mascati - Pànama + Pànama - Marchesi + Ìsuli Marchesi - Varsavia + Varsavia + + + Ìsuli Pitcairn - Portu Ricu + Portu Ricu - Gazza + Gazza - Azzorri + Azzorri - Lisbona + Lisbona - Belgradu + Belgradu - Mosca + Mosca - Vòlgugrad + Vòlgugrad - Yekatirimmurgu + Yekatirimmurgu - Vladìvustok + Vladìvustok - Stuccorma + Stuccorma - Singapuri + Singapuri - Sant’Èlina + Sant’Èlina - San Marinu + San Marinu - Mugadisciu + Mugadisciu - Damascu + Damascu - Tùnisi + Tùnisi - Ìstanbul + Ìstanbul - Portu di Spagna + Portu di Spagna - Kiev + Kiev + + + Atollu Midway + + + Ìsula Wake - Beulah, Dakota di Tramuntana + Beulah, Dakota di Tramuntana - New Salem, Dakota di Tramuntana + New Salem, Dakota di Tramuntana - Centru, Dakota di Tramuntana + Centru, Dakota di Tramuntana - Ditroit + Ditroit - Nova Jorca + Nova Jorca - Samarcanna + Samarcanna - Vaticanu + Vaticanu + + + Wallis e Futuna - Ura di l’Afghànistan + Ura di l’Afghànistan - Ura di l’Àfrica Cintrali + Ura di l’Àfrica Cintrali - Ura di l’Àfrica di Livanti + Ura di l’Àfrica di Livanti - Ura Nurmali di l’Àfrica di Sciroccu + Ura Nurmali di l’Àfrica di Sciroccu - Ura di l’Àfrica di Punenti - Ura sulari di l’Àfrica di Punenti - Ura ligali di l’Àfrica di Punenti + Ura di l’Àfrica di Punenti - Ura di l’Alaska - Ura sulari di l’Alaska - Ura ligali di l’Alaska + Ura di l’Alaska + Ura sulari di l’Alaska + Ura ligali di l’Alaska - AKT - AKST - AKDT + AKT + AKST + AKDT - Ura di l’Amazzonia - Ura sulari di l’Amazzonia - Ura ligali di l’Amazzonia + Ura di l’Amazzonia + Ura sulari di l’Amazzonia + Ura ligali di l’Amazzonia - Ura cintrali - Ura sulari cintrali - Ura ligali cintrali + Ura cintrali + Ura sulari cintrali + Ura ligali cintrali - CT - CST - CDT + CT + CST + CDT - Ura livantina - Ura sulari livantina - Ura ligali livantina + Ura livantina + Ura sulari livantina + Ura ligali livantina - ET - EST - EDT + ET + EST + EDT - Ura dî muntagni - Ura sulari dî muntagni - Ura ligali dî muntagni + Ura dî muntagni + Ura sulari dî muntagni + Ura ligali dî muntagni - MT - MST - MDT + MT + MST + MDT - Ura dû Pacìficu - Ura sulari dû Pacìficu - Ura ligali dû Pacìficu + Ura dû Pacìficu + Ura sulari dû Pacìficu + Ura ligali dû Pacìficu - PT - PST - PDT + PT + PST + PDT - Ura di Apia - Ura sulari di Apia - Ura ligali di Apia + Ura di Samoa + Ura sulari di Samoa + Ura ligali di Samoa - Ura Àrabba - Ura sulari Àrabba - Ura ligali Àrabba + Ura Àrabba + Ura sulari Àrabba + Ura ligali Àrabba - Ura di l’Argintina - Ura sulari di l’Argintina - Ura ligali di l’Argintina + Ura di l’Argintina + Ura sulari di l’Argintina + Ura ligali di l’Argintina - Ura di l’Argintina di punenti - Ura sulari di l’Argintina di punenti - Ura ligali di l’Argintina di punenti + Ura di l’Argintina di punenti + Ura sulari di l’Argintina di punenti + Ura ligali di l’Argintina di punenti - Ura di l’Armenia - Ura sulari di l’Armenia - Ura ligali di l’Armenia + Ura di l’Armenia + Ura sulari di l’Armenia + Ura ligali di l’Armenia - Ura di l’Atlànticu - Ura sulari di l’Atlànticu - Ura ligali di l’Atlànticu + Ura di l’Atlànticu + Ura sulari di l’Atlànticu + Ura ligali di l’Atlànticu - AT - AST - ADT + AT + AST + ADT - Ura di l’Australia cintrali - Ura sulari di l’Australia cintrali - Ura ligali di l’Australia cintrali + Ura di l’Australia cintrali + Ura sulari di l’Australia cintrali + Ura ligali di l’Australia cintrali - Ura di l’Australia cintrali di punenti - Ura sulari di l’Australia cintrali di punenti - Ura ligali di l’Australia cintrali di punenti + Ura di l’Australia cintrali di punenti + Ura sulari di l’Australia cintrali di punenti + Ura ligali di l’Australia cintrali di punenti - Ura di l’Australia di livanti - Ura sulari di l’Australia di livanti - Ura ligali di l’Australia di livanti + Ura di l’Australia di livanti + Ura sulari di l’Australia di livanti + Ura ligali di l’Australia di livanti - Ura di l’Australia di punenti - Ura sulari di l’Australia di punenti - Ura ligali di l’Australia di punenti + Ura di l’Australia di punenti + Ura sulari di l’Australia di punenti + Ura ligali di l’Australia di punenti - Ura di l’Azerbaijan - Ura sulari di l’Azerbaijan - Ura ligali di l’Azerbaijan + Ura di l’Azerbaijan + Ura sulari di l’Azerbaijan + Ura ligali di l’Azerbaijan - Ura di l’Azzorri - Ura sulari di l’Azzorri - Ura ligali di l’Azzorri + Ura di l’Azzorri + Ura sulari di l’Azzorri + Ura ligali di l’Azzorri - Ura dû Bàngladesh - Ura sulari dû Bàngladesh - Ura ligali dû Bàngladesh + Ura dû Bàngladesh + Ura sulari dû Bàngladesh + Ura ligali dû Bàngladesh - Ura dû Bhutan + Ura dû Bhutan - Ura dâ Bulivia + Ura dâ Bulivia - Ura di Brasilia - Ura sulari di Brasilia - Ura ligali di Brasilia + Ura di Brasilia + Ura sulari di Brasilia + Ura ligali di Brasilia - Ura dû Brunei + Ura dû Brunei - Ura di Capu Virdi - Ura sulari di Capu Virdi - Ura ligali di Capu Virdi + Ura di Capu Virdi + Ura sulari di Capu Virdi + Ura ligali di Capu Virdi - Ura di Chamorro + Ura di Chamorro - Ura di Chatham - Ura sulari di Chatham - Ura ligali di Chatham + Ura di Chatham + Ura sulari di Chatham + Ura ligali di Chatham - Ura dû Cili - Ura sulari dû Cili - Ura ligali dû Cili + Ura dû Cili + Ura sulari dû Cili + Ura ligali dû Cili - Ura dâ Cina - Ura sulari dâ Cina - Ura ligali dâ Cina + Ura dâ Cina + Ura sulari dâ Cina + Ura ligali dâ Cina - Ura di l’Ìsula di Natali + Ura di l’Ìsula di Natali - Ura di l’Ìsuli Cocos + Ura di l’Ìsuli Cocos - Ura dâ Culummia - Ura sulari dâ Culummia - Ura ligali dâ Culummia + Ura dâ Culommia + Ura sulari dâ Culommia + Ura ligali dâ Culommia - Ura di l’Ìsuli Cook - Ura sulari di l’Ìsuli Cook - Ura ligali di l’Ìsuli Cook + Ura di l’Ìsuli Cook + Ura sulari di l’Ìsuli Cook + Ura ligali di l’Ìsuli Cook - Ura di Cubba - Ura sulari di Cubba - Ura ligali di Cubba + Ura di Cubba + Ura sulari di Cubba + Ura ligali di Cubba - CuT - CuST - CuDT + CuT + CuST + CuDT - Ura di Davis + Ura di Davis - Ura di Dumont-d’Urville + Ura di Dumont d’Urville - Ura di Timor di Livanti + Ura di Timor di Livanti - Ura di l’Ìsula di Pasca - Ura sulari di l’Ìsula di Pasca - Ura ligali di l’Ìsula di Pasca + Ura di l’Ìsula di Pasca + Ura sulari di l’Ìsula di Pasca + Ura ligali di l’Ìsula di Pasca - Ura di l’Ècuador + Ura di l’Ècuador - Ura Cintrali Eurupea - Ura sulari Cintrali Eurupea - Ura ligali Cintrali Eurupea + Ura Cintrali Eurupea + Ura sulari Cintrali Eurupea + Ura ligali Cintrali Eurupea - Ura di l’Europa di Livanti - Ura sulari di l’Europa di Livanti - Ura ligali di l’Europa di Livanti + Ura di l’Europa di Livanti + Ura sulari di l’Europa di Livanti + Ura ligali di l’Europa di Livanti - Ura di l’Europa cchiù a Livanti + Ura di l’Europa cchiù a Livanti - Ura di l’Europa di Punenti - Ura sulari di l’Europa di Punenti - Ura ligali di l’Europa di Punenti + Ura di l’Europa di Punenti + Ura sulari di l’Europa di Punenti + Ura ligali di l’Europa di Punenti - Ura di l’Ìsuli Falkland - Ura sulari di l’Ìsuli Falkland - Ura ligali di l’Ìsuli Falkland + Ura di l’Ìsuli Falkland + Ura sulari di l’Ìsuli Falkland + Ura ligali di l’Ìsuli Falkland - Ura dî Figi - Ura sulari dî Figi - Ura ligali dî Figi + Ura dî Figi + Ura sulari dî Figi + Ura ligali dî Figi - Ura dâ Guiana Francisi + Ura dâ Guiana Francisi - Ura Francisi di Sciroccu e di l’Antàrtidi + Ura Francisi di Sciroccu e di l’Antàrtidi - Ura dî Galàpagos + Ura dî Galàpagos - Ura di Gambier + Ura di Gambier - Ura dâ Giorgia - Ura sulari dâ Giorgia - Ura ligali dâ Giorgia + Ura dâ Giorgia + Ura sulari dâ Giorgia + Ura ligali dâ Giorgia - Ura di l’Ìsuli Gilbert + Ura di l’Ìsuli Gilbert - Ura Minzana di Greenwich + Ura Minzana di Greenwich - Ura dâ Gruillannia - Ura sulari dâ Gruillannia - Ura ligali dâ Gruillannia + Ura dâ Gruillannia + Ura sulari dâ Gruillannia + Ura ligali dâ Gruillannia - Ura dâ Gruillannia livantina - Ura sulari dâ Gruillannia livantina - Ura livantina dâ Gruillannia livantina + Ura dâ Gruillannia livantina + Ura sulari dâ Gruillannia livantina + Ura livantina dâ Gruillannia livantina - Ura dâ Gruillannia punintina - Ura sulari dâ Gruillannia punintina - Ura ligali dâ Gruillannia punintina + Ura dâ Gruillannia punintina + Ura sulari dâ Gruillannia punintina + Ura ligali dâ Gruillannia punintina - Ura Nurmali dû Gurfu + Ura Nurmali dû Gurfu - Ura dâ Guiana + Ura dâ Guiana + + + Ura sulari di l’Hawaai + + + HAST + + - Ura di l’Hawaai - Ura sulari di l’Hawaai - Ura ligali di l’Hawaai + Ura di l’Hawaai + Ura sulari di l’Hawaai + Ura ligali di l’Hawaai - HAT - HAST - HADT + HAT + HAST + HADT - Ura di Hong Kong - Ura sulari di Hong Kong - Ura ligali di Hong Kong + Ura di Hong Kong + Ura sulari di Hong Kong + Ura ligali di Hong Kong - Ura di Hovd - Ura sulari di Hovd - Ura ligali di Hovd + Ura di Khovd + Ura sulari di Khovd + Ura ligali di Khovd - Ura sulari di l’Ìnnia + Ura sulari di l’Ìnnia - Ura di l’Ucianu Innianu + Ura di l’Ucianu Innianu - Ura di l’Innucina + Ura di l’Innucina - Ura di l’Innunesia cintrali + Ura di l’Innunesia cintrali - Ura di l’Innunesia di livanti + Ura di l’Innunesia di livanti - Ura di l’Innunesia di punenti + Ura di l’Innunesia di punenti - Ura di l’Iran - Ura sulari di l’Iran - Ura ligali di l’Iran + Ura di l’Iran + Ura sulari di l’Iran + Ura ligali di l’Iran - Ura di Irtkutsk - Ura sulari di Irtkutsk - Ura ligali di Irtkutsk + Ura di Irtkutsk + Ura sulari di Irtkutsk + Ura ligali di Irtkutsk - Ura di Isdraeli - Ura sulari di Isdraeli - Ura ligali di Isdraeli + Ura di Isdraeli + Ura sulari di Isdraeli + Ura ligali di Isdraeli - Ura dû Giappuni - Ura sulari dû Giappuni - Ura ligali dû Giappuni + Ura dû Giappuni + Ura sulari dû Giappuni + Ura ligali dû Giappuni - Ura dû Kazzàkistan + Ura dû Kazzàkistan - Ura dû Kazzàkistan di Livanti + Ura dû Kazzàkistan di Livanti - Ura dû Kazzàkistan di Punenti + Ura dû Kazzàkistan di Punenti - Ura dâ Curìa - Ura sulari dâ Curìa - Ura ligali dâ Curìa + Ura dâ Curìa + Ura sulari dâ Curìa + Ura ligali dâ Curìa - Ura di Kosrae + Ura di Kosrae - Ura di Krasnoyarsk - Ura sulari di Krasnoyarsk - Ura ligali di Krasnoyarsk + Ura di Krasnoyarsk + Ura sulari di Krasnoyarsk + Ura ligali di Krasnoyarsk - Ura dû Kirghìzzistan + Ura dû Kirghìzzistan - Ura di l’Ìsuli Line + Ura di l’Ìsuli Line - Ura di Lord Howe - Ura sulari di Lord Howe - Ura ligali di Lord Howe + Ura di Lord Howe + Ura sulari di Lord Howe + Ura ligali di Lord Howe - Ura di Magdan - Ura sulari di Magdan - Ura ligali di Magdan + Ura di Magdan + Ura sulari di Magdan + Ura ligali di Magdan - Ura dâ Malisia + Ura dâ Malisia - Ura dî Mardivi + Ura dî Mardivi - Ura dî Marchesi + Ura dî Marchesi - Ura di l’Ìsuli Marshall + Ura di l’Ìsuli Marshall - Ura di Mauritius - Ura sulari di Mauritius - Ura ligali di Mauritius + Ura di Mauritius + Ura sulari di Mauritius + Ura ligali di Mauritius - Ura di Mawson + Ura di Mawson - Ura dû Mèssicu Pacìficu - Ura sulari dû Mèssicu Pacìficu - Ura ligali dû Mèssicu Pacìficu + Ura dû Mèssicu Pacìficu + Ura sulari dû Mèssicu Pacìficu + Ura ligali dû Mèssicu Pacìficu - Ura di Ulaanbaatar - Ura sulari di Ulaanbaatar - Ura ligali di Ulaanbaatar + Ura di Ulaanbaatar + Ura sulari di Ulaanbaatar + Ura ligali di Ulaanbaatar - Ura di Mosca - Ura sulari di Mosca - Ura ligali di Mosca + Ura di Mosca + Ura sulari di Mosca + Ura ligali di Mosca - Ura di Myanmar + Ura di Myanmar - Ura di Nauru + Ura di Nauru - Ura dû Nepal + Ura dû Nepal - Ura dâ Nova Calidonia - Ura sulari dâ Nova Calidonia - Ura ligali dâ Nova Calidonia + Ura dâ Nova Calidonia + Ura sulari dâ Nova Calidonia + Ura ligali dâ Nova Calidonia - Ura dâ Nova Zilannia - Ura sulari dâ Nova Zilannia - Ura ligali dâ Nova Zilannia + Ura dâ Nova Zilannia + Ura sulari dâ Nova Zilannia + Ura ligali dâ Nova Zilannia - Ura di Tirranova - Ura sulari di Tirranova - Ura ligali di Tirranova + Ura di Tirranova + Ura sulari di Tirranova + Ura ligali di Tirranova - Ura di Niue + Ura di Niue - Ura di l’Ìsula Norfolk - Ura sulari di l’Ìsula Norfolk - Ura ligali di l’Ìsula Norfolk + Ura di l’Ìsula Norfolk + Ura sulari di l’Ìsula Norfolk + Ura ligali di l’Ìsula Norfolk - Ura di Fernando di Noronha - Ura sulari di Fernando di Noronha - Ura ligali di Fernando di Noronha + Ura di Fernando di Noronha + Ura sulari di Fernando di Noronha + Ura ligali di Fernando di Noronha - Ura di Novosibirsk - Ura sulari di Novosibirsk - Ura ligali di Novosibirsk + Ura di Novosibirsk + Ura sulari di Novosibirsk + Ura ligali di Novosibirsk - Ura di Omsk - Ura sulari di Omsk - Ura ligali di Omsk + Ura di Omsk + Ura sulari di Omsk + Ura ligali di Omsk - Ura dû Pàkistan - Ura sulari dû Pàkistan - Ura ligali dû Pàkistan + Ura dû Pàkistan + Ura sulari dû Pàkistan + Ura ligali dû Pàkistan - Ura di Palau + Ura di Palau - Ura dâ Papua Nova Guinìa + Ura dâ Papua Nova Guinìa - Ura dû Paraguay - Ura sulari dû Paraguay - Ura ligali dû Paraguay + Ura dû Paraguay + Ura sulari dû Paraguay + Ura ligali dû Paraguay - Ura dû Pirù - Ura sulari dû Pirù - Ura ligali dû Pirù + Ura dû Pirù + Ura sulari dû Pirù + Ura ligali dû Pirù - Ura dî Filippini - Ura sulari dî Filippini - Ura ligali dî Filippini + Ura dî Filippini + Ura sulari dî Filippini + Ura ligali dî Filippini - Ura di l’Ìsuli Phoenix + Ura di l’Ìsuli Phoenix - Ura di S. Pierre e Miquelon - Ura sulari di S. Pierre e Miquelon - Ura ligali di S. Pierre e Miquelon + Ura di S. Pierre e Miquelon + Ura sulari di S. Pierre e Miquelon + Ura ligali di S. Pierre e Miquelon - Ura di Pitcairn + Ura di Pitcairn - Ura di Ponape + Ura di Pohnpei - Ura di Pyongyang + Ura dâ Curia di Tramuntana - Ura di Réunion + Ura di Réunion - Ura di Rothera + Ura di Rothera - Ura di Sakhalin - Ura sulari di Sakhalin - Ura ligali di Sakhalin + Ura di Sakhalin + Ura sulari di Sakhalin + Ura ligali di Sakhalin - Ura dî Samoa - Ura sulari dî Samoa - Ura ligali dî Samoa + Ura dî Samoa miricani + Ura sulari dî Samoa miricani + Ura ligali dî Samoa miricani - Ura dî Seychelles + Ura dî Seychelles - Ura di Singapuri + Ura di Singapuri - Ura di l’Ìsuli Salumuni + Ura di l’Ìsuli Salumuni - Ura dâ Giorgia di sciroccu + Ura dâ Giorgia di sciroccu - Ura dû Surinami + Ura dû Surinami - Ura di Syowa + Ura di Syowa - Ura di Tahiti + Ura di Tahiti - Ura di Taipei - Ura sulari di Taipei - Ura ligali di Taipei + Ura di Taiwan + Ura sulari di Taiwan + Ura ligali di Taiwan - Ura dû Taggìkistan + Ura dû Taggìkistan - Ura di Tukilau + Ura di Tukilau - Ura di Tonga - Ura sulari di Tonga - Ura ligali di Tonga + Ura di Tonga + Ura sulari di Tonga + Ura ligali di Tonga - Ura di Chuuk + Ura di Chuuk - Ura dû Turkmènistan - Ura sulari dû Turkmènistan - Ura ligali dû Turkmènistan + Ura dû Turkmènistan + Ura sulari dû Turkmènistan + Ura ligali dû Turkmènistan - Ura di Tuvalu + Ura di Tuvalu - Ura di l’Uruguay - Ura sulari di l’Uruguay - Ura ligali di l’Uruguay + Ura di l’Uruguay + Ura sulari di l’Uruguay + Ura ligali di l’Uruguay - Ura di l’Uzbèkistan - Ura sulari di l’Uzbèkistan - Ura ligali di l’Uzbèkistan + Ura di l’Uzbèkistan + Ura sulari di l’Uzbèkistan + Ura ligali di l’Uzbèkistan - Ura di Vanuatu - Ura sulari di Vanuatu - Ura ligali di Vanuatu + Ura di Vanuatu + Ura sulari di Vanuatu + Ura ligali di Vanuatu - Ura dû Vinizzuela + Ura dû Vinizzuela - Ura di Vladìvustok - Ura sulari di Vladìvustok - Ura ligali di Vladìvustok + Ura di Vladìvustok + Ura sulari di Vladìvustok + Ura ligali di Vladìvustok - Ura di Vòlgugrad - Ura sulari di Vòlgugrad - Ura ligali di Vòlgugrad + Ura di Vòlgugrad + Ura sulari di Vòlgugrad + Ura ligali di Vòlgugrad - Ura di Vostok + Ura di Vostok - Ura di l’Ìsula Wake + Ura di l’Ìsula Wake - Ura di Wallis e Futuna + Ura di Wallis e Futuna - Ura di Yakutsk - Ura sulari di Yakutsk - Ura ligali di Yakutsk + Ura di Yakutsk + Ura sulari di Yakutsk + Ura ligali di Yakutsk - Ura di Yekatirimmurgu - Ura sulari di Yekatirimmurgu - Ura ligali di Yekatirimmurgu + Ura di Yekatirimmurgu + Ura sulari di Yekatirimmurgu + Ura ligali di Yekatirimmurgu - Ura dû Yukon + Ura dû Yukon - , - . + , + . - 0 migghiaru - 0 mila - 00 mila - 00 mila - 000 mila - 000 mila - 0 miliuni - 0 miliuna - 00 miliuna - 00 miliuna - 000 miliuna - 000 miliuna - 0 miliardu - 0 miliardi - 00 miliardi - 00 miliardi - 000 miliardi - 000 miliardi - 0 biliuni - 0 biliuna - 00 biliuna - 00 biliuna - 000 biliuna - 000 biliuna + 0 migghiaru + 0 mila + 00 mila + 00 mila + 000 mila + 000 mila + 0 miliuni + 0 miliuna + 00 miliuna + 00 miliuna + 000 miliuna + 000 miliuna + 0 miliardu + 0 miliardi + 00 miliardi + 00 miliardi + 000 miliardi + 000 miliardi + 0 biliuni + 0 biliuna + 00 biliuna + 00 biliuna + 000 biliuna + 000 biliuna - Dirham di l’Emirati Àrabbi Junciuti - dirham EAJ - dirham EAJ + Dirham di l’Emirati Àrabbi Junciuti + dirham EAJ + dirham EAJ - Afghani afghanu - afghani afghanu - afghani afghani + Afghani afghanu + afghani afghanu + afghani afghani - Lek arbanisi - lek arbanisi - lek arbanisi + Lek arbanisi + lek arbanisi + lek arbanisi - Dram armenu - dram armenu - dram armeni + Dram armenu + dram armenu + dram armeni - Ciurinu di l’Antiḍḍi Ulannisi - ciurinu di l’Antiḍḍi Ulannisi - ciurini di l’Antiḍḍi Ulannisi + Ciurinu di l’Antiḍḍi Ulannisi + ciurinu di l’Antiḍḍi Ulannisi + ciurini di l’Antiḍḍi Ulannisi - Kwanza angulisi - kwanza angulisi - kwanza angulisi + Kwanza angulisi + kwanza angulisi + kwanza angulisi - Pesu argintinu - pesu argintinu - pesi argintini + Pesu argintinu + pesu argintinu + pesi argintini - Dòllaru australianu - dòllaru australianu - dòllari australiani + Dòllaru australianu + dòllaru australianu + dòllari australiani - Ciurinu d’Arubba - ciurinu d’Arubba - ciurini d’Arubba + Ciurinu d’Arubba + ciurinu d’Arubba + ciurini d’Arubba - Manat azzeru - manat azzeru - manat azzeri + Manat azzeru + manat azzeru + manat azzeri - Marcu cummirtìbbili dâ Bosnia-Herzegòvina - marcu cummirtìbbili dâ Bosnia-Herzegòvina - marchi cummirtìbbili dâ Bosnia-Herzegòvina + Marcu cummirtìbbili dâ Bosnia-Herzegòvina + marcu cummirtìbbili dâ Bosnia-Herzegòvina + marchi cummirtìbbili dâ Bosnia-Herzegòvina - Dòllaru dî Barbados - dòllaru dî Barbados - dòllari dî Barbados + Dòllaru dî Barbados + dòllaru dî Barbados + dòllari dî Barbados - Taka dû Bàngladesh - taka dû Bàngladesh - taka dû Bàngladesh + Taka dû Bàngladesh + taka dû Bàngladesh + taka dû Bàngladesh - Lev bùrgaru - lev bùrgaru - lev bùrgari + Lev bùrgaru + lev bùrgaru + lev bùrgari - Dìnaru dû Bahrain - dìnaru dû Bahrain - dìnari dû Bahrain + Dìnaru dû Bahrain + dìnaru dû Bahrain + dìnari dû Bahrain - Francu dû Burundi - francu dû Burundi - franchi dû Burundi + Francu dû Burundi + francu dû Burundi + franchi dû Burundi - Dòllaru dî Birmuda - dòllaru dî Birmuda - dòllari dî Birmuda + Dòllaru dî Birmuda + dòllaru dî Birmuda + dòllari dî Birmuda - Dòllaru dû Brunei - dòllaru dû Brunei - dòllari dû Brunei + Dòllaru dû Brunei + dòllaru dû Brunei + dòllari dû Brunei - Bulivianu - bulivianu - buliviani + Bulivianu + bulivianu + buliviani - Riali brasilianu - riali brasilianu - riali brasiliani + Riali brasilianu + riali brasilianu + riali brasiliani - Dòllaru dî Bahamas - dòllaru dî Bahamas - dòllari dî Bahamas + Dòllaru dî Bahamas + dòllaru dî Bahamas + dòllari dî Bahamas - Ngultrum butanisi - ngultrum butanisi - ngultrum butanisi + Ngultrum butanisi + ngultrum butanisi + ngultrum butanisi - Pula dû Botswana - pula dû Botswana - pula dû Botswana + Pula dû Botswana + pula dû Botswana + pula dû Botswana - Rubblu belurrussu - rubblu belurrussu - rubbli belurrussi + Rubblu belurrussu + rubblu belurrussu + rubbli belurrussi - Dòllaru dû Bilisi - dòllaru dû Bilisi - dòllari dû Bilisi + Dòllaru dû Bilisi + dòllaru dû Bilisi + dòllari dû Bilisi - Dòllaru canadisi - dòllaru canadisi - dòllari canadisi + Dòllaru canadisi + dòllaru canadisi + dòllari canadisi - Francu cungulisi - francu cungulisi - franchi cungulisi + Francu cungulisi + francu cungulisi + franchi cungulisi - Francu sbìzziru - francu sbìzziru - franchi sbìzziri + Francu sbìzziru + francu sbìzziru + franchi sbìzziri - Pesu cilenu - pesu cilenu - pesi cileni + Pesu cilenu + pesu cilenu + pesi cileni - Yuan cinisi (di fora) - yuan cinisi (di fora) - yuan cinisi (di fora) + Yuan cinisi (di fora) + yuan cinisi (di fora) + yuan cinisi (di fora) - Yuan cinisi - yuan cinisi - yuan cinisi + Yuan cinisi + yuan cinisi + yuan cinisi - Pesu culummianu - pesu culummianu - pesi culummiani + Pesu culummianu + pesu culummianu + pesi culummiani - Culón dâ Custa Rica - culón dâ Custa Rica - culoni dâ Custa Rica + Culón dâ Custa Rica + culón dâ Custa Rica + culoni dâ Custa Rica - Pesu cubbanu cummirtìbbili - pesu cubbanu cummirtìbbili - pesi cubbani cummirtìbbili + Pesu cubbanu cummirtìbbili + pesu cubbanu cummirtìbbili + pesi cubbani cummirtìbbili - Pesu cubbanu - pesu cubbanu - pesi cubbani + Pesu cubbanu + pesu cubbanu + pesi cubbani - Scudu capuvirdisi - scudu capuvirdisi - scudi capuvirdisi + Scudu di Capu Virdi + scudu di Capu Virdi + scudi di Capu Virdi - Curuna ceca - curuna ceca - curuni cechi + Curuna ceca + curuna ceca + curuni cechi - Francu di Gibbuti - francu di Gibbuti - franchi di Gibbuti + Francu di Gibbuti + francu di Gibbuti + franchi di Gibbuti - Curuna danisi - curuna danisi - curuni danisi + Curuna danisi + curuna danisi + curuni danisi - Pesu duminicanu - pesu duminicanu - pesi duminicani + Pesu duminicanu + pesu duminicanu + pesi duminicani - Dìnaru argirinu - dìnaru argirinu - dìnari argirini + Dìnaru argirinu + dìnaru argirinu + dìnari argirini - Stirlina eggizziana - stirlina eggizziana - stirlini eggizziani + Stirlina eggizziana + stirlina eggizziana + stirlini eggizziani - Nafka eritreu - nafka eritreu - nafka eritrei + Nafka eritreu + nafka eritreu + nafka eritrei - Birr etiupi - birr etiupi - birr etiupi + Birr etiupi + birr etiupi + birr etiupi - Euru - euru - euru + Euru + euru + euru - Dòllaru dî Figi - dòllaru dî Figi - dòllari dî Figi + Dòllaru dî Figi + dòllaru dî Figi + dòllari dî Figi - Stirlina di l’Ìsuli Falkland - stirlina di l’Ìsuli Falkland - stirlini di l’Ìsuli Falkland + Stirlina di l’Ìsuli Falkland + stirlina di l’Ìsuli Falkland + stirlini di l’Ìsuli Falkland - Stirlina Britànnica - stirlina Britànnica - stirlini Britànnica + Stirlina Britànnica + stirlina Britànnica + stirlini Britànnichi - Lari giurgianu - lari giurgianu - lari giurgiani + Lari giurgianu + lari giurgianu + lari giurgiani - Cedi ganisi - cedi ganisi - cedi ganisi + Cedi ganisi + cedi ganisi + cedi ganisi - Stirlina di Gibbirterra - stirlina di Gibbirterra - stirlini di Gibbirterra + Stirlina di Gibbirterra + stirlina di Gibbirterra + stirlini di Gibbirterra - Dalasi dû Gammia - dalasi dû Gammia - dalasi dû Gammia + Dalasi dû Gammia + dalasi dû Gammia + dalasi dû Gammia - Francu dâ Guinìa - francu dâ Guinìa - franchi dâ Guinìa + Francu dâ Guinìa + francu dâ Guinìa + franchi dâ Guinìa - Quetzal dâ Guatimala - quetzal dâ Guatimala - quetzal dâ Guatimala + Quetzal dû Guatimala + quetzal dû Guatimala + quetzal dû Guatimala - Dòllaru dâ Guiana - dòllaru dâ Guiana - dòllari dâ Guiana + Dòllaru dâ Guiana + dòllaru dâ Guiana + dòllari dâ Guiana - Dòllaru di Hong Kong - dòllaru di Hong Kong - dòllari di Hong Kong + Dòllaru di Hong Kong + dòllaru di Hong Kong + dòllari di Hong Kong - Limpira di l’Hunnuras - limpira di l’Hunnuras - limpira di l’Hunnuras + Limpira di l’Hunnuras + limpira di l’Hunnuras + limpira di l’Hunnuras - Kuna cruata - kuna cruata - kuni cruati + Kuna cruata + kuna cruata + kuni cruati - Gordu d’Haiti - gordu d’Haiti - gordi d’Haiti + Gordu d’Haiti + gordu d’Haiti + gordi d’Haiti - Ciurinu unghirisi - ciurinu unghirisi - ciurini unghirisi + Ciurinu unghirisi + ciurinu unghirisi + ciurini unghirisi - Rupìa innunisiana - rupìa innunisiana - rupìi innunisiani + Rupìa innunisiana + rupìa innunisiana + rupìi innunisiani - Novu siclu isdraelianu - novu siclu isdraelianu - novi sicli isdraeliani + Novu siclu isdraelianu + novu siclu isdraelianu + novi sicli isdraeliani - Rupìa inniana - rupìa inniana - rupìi inniani + Rupìa inniana + rupìa inniana + rupìi inniani - Dìnaru irachenu - dìnaru irachenu - dìnari iracheni + Dìnaru irachenu + dìnaru irachenu + dìnari iracheni - Riali iranianu - riali iranianu - riali iraniani + Riali iranianu + riali iranianu + riali iraniani - Curuna islannisi - curuna islannisi - curuni islannisi + Curuna islannisi + curuna islannisi + curuni islannisi - Dòllaru giamaicanu - dòllaru giamaicanu - dòllari giamaicanu + Dòllaru giamaicanu + dòllaru giamaicanu + dòllari giamaicanu - Dìnaru giurdanu - dìnaru giurdanu - dìnari giurdani + Dìnaru giurdanu + dìnaru giurdanu + dìnari giurdani - Yen giappunisi - yen giappunisi - yen giappunisi + Yen giappunisi + yen giappunisi + yen giappunisi - Scillinu dû Kenya - scillinu dû Kenya - scillini dû Kenya + Scillinu dû Kenya + scillinu dû Kenya + scillini dû Kenya - Som dû Kyrgyzistan - som dû Kyrgyzistan - som dû Kyrgyzistan + Som dû Kirghìzzistan + som dû Kirghìzzistan + som dû Kirghìzzistan - Riel cambuggianu - riel cambuggianu - riel cambuggianI + Riel cambuggianu + riel cambuggianu + riel cambuggianI - Francu dî Cumori - francu dî Cumori - franchi dî Cumori + Francu dî Cumori + francu dî Cumori + franchi dî Cumori - Won dâ Curìa di Tramuntana - won dâ Curìa di Tramuntana - won dâ Curìa di Tramuntana + Won dâ Curìa di Tramuntana + won dâ Curìa di Tramuntana + won dâ Curìa di Tramuntana - Won dâ Curìa di Sciroccu - won dâ Curìa di Sciroccu - won dâ Curìa di Sciroccu + Won dâ Curìa di Sciroccu + won dâ Curìa di Sciroccu + won dâ Curìa di Sciroccu - Dìnaru dû Kuwait - dìnaru dû Kuwait - dìnari dû Kuwait + Dìnaru dû Kuwait + dìnaru dû Kuwait + dìnari dû Kuwait - Dòllaru di l’Ìsuli Cayman - dòllaru di l’Ìsuli Cayman - dòllari di l’Ìsuli Cayman + Dòllaru di l’Ìsuli Cayman + dòllaru di l’Ìsuli Cayman + dòllari di l’Ìsuli Cayman - Tenge dû Kazzàkistan - tenge dû Kazzàkistan - tenge dû Kazzàkistan + Tenge dû Kazzàkistan + tenge dû Kazzàkistan + tenge dû Kazzàkistan - Kip lauisi - kip lauisi - kip lauisi + Kip lauisi + kip lauisi + kip lauisi - Stirlina libbanisi - stirlina libbanisi - stirlini libbanisi + Stirlina libbanisi + stirlina libbanisi + stirlini libbanisi - Rupìa dû Sri Lanka - rupìa dû Sri Lanka - rupìi dû Sri Lanka + Rupìa dû Sri Lanka + rupìa dû Sri Lanka + rupìi dû Sri Lanka - Dòllaru dâ Libberia - dòllaru dâ Libberia - dòllari dâ Libberia + Dòllaru dâ Libberia + dòllaru dâ Libberia + dòllari dâ Libberia - Loti dû Lisothu - loti dû Lisothu - loti dû Lisothu + Loti dû Lisothu + loti dû Lisothu + loti dû Lisothu - Dìnaru lìbbicu - dìnaru lìbbicu - dìnari lìbbichi + Dìnaru lìbbicu + dìnaru lìbbicu + dìnari lìbbichi - Dirham marucchinu - dirham marucchinu - dirham marucchini + Dirham marucchinu + dirham marucchinu + dirham marucchini - Leu murdavu - leu murdavu - lei murdavi + Leu murdavu + leu murdavu + lei murdavi - Ariary margasciu - ariary margasciu - ariary margasci + Ariary margasciu + ariary margasciu + ariary margasci - Dìnaru macèduni - dìnaru macèduni - dìnari macèduni + Dìnaru macèduni + dìnaru macèduni + dìnari macèduni - Kyat dû Myanmar - kyat dû Myanmar - kyat dû Myanmar + Kyat dû Myanmar + kyat dû Myanmar + kyat dû Myanmar - Tugrik mòngulu - tugrik mòngulu - tugrik mònguli + Tugrik mòngulu + tugrik mòngulu + tugrik mònguli - Pataca di Macau - pataca di Macau - patachi di Macau + Patacca di Macau + patacca di Macau + patacchi di Macau - Ouguiya mauritanu - ouguiya mauritanu - ouguiya mauritani + Ouguiya mauritanu + ouguiya mauritanu + ouguiya mauritani - Rupìa di Mauritius - rupìa di Mauritius - rupìi di Mauritius + Rupìa di Mauritius + rupìa di Mauritius + rupìi di Mauritius - Rufiyaa dî Mardivi - rufiyaa dî Mardivi - rufiyaa dî Mardivi + Rufiyaa dî Mardivi + rufiyaa dî Mardivi + rufiyaa dî Mardivi - Kwacha dû Malawi - kwacha dû Malawi - kwacha dû Malawi + Kwacha dû Malawi + kwacha dû Malawi + kwacha dû Malawi - Pesu missicanu - pesu missicanu - pesi missicani + Pesu missicanu + pesu missicanu + pesi missicani - Ringgit malisi - ringgit malisi - ringgit malisi + Ringgit malisi + ringgit malisi + ringgit malisi - Mètical dû Muzzammicu - mètical dû Muzzammicu - mètical dû Muzzammicu + Mètical dû Muzzammicu + mètical dû Muzzammicu + mètical dû Muzzammicu - Dòllaru dâ Namibbia - dòllaru dâ Namibbia - dòllari dâ Namibbia + Dòllaru dâ Namibbia + dòllaru dâ Namibbia + dòllari dâ Namibbia - Naira niggirianu - naira niggirianu - naira niggiriani + Naira niggirianu + naira niggirianu + naira niggiriani - Còrdubba dâ Nicaragua - còrdubba dâ Nicaragua - còrdubba dâ Nicaragua + Còrdubba dû Nicaragua + còrdubba dû Nicaragua + còrdubba dû Nicaragua - Curuna nurviggisi - curuna nurviggisi - curuni nurviggisi + Curuna nurviggisi + curuna nurviggisi + curuni nurviggisi - Rupìa nipalisi - rupìa nipalisi - rupìi nipalisi + Rupìa nipalisi + rupìa nipalisi + rupìi nipalisi - Dòllaru dâ Nova Zilannia - dòllaru dâ Nova Zilannia - dòllari dâ Nova Zilannia + Dòllaru dâ Nova Zilannia + dòllaru dâ Nova Zilannia + dòllari dâ Nova Zilannia - Riali di l’Oman - riali di l’Oman - riali di l’Oman + Riali di l’Oman + riali di l’Oman + riali di l’Oman - Barboa di Pànama - barboa di Pànama - barboa di Pànama + Barboa di Pànama + barboa di Pànama + barboa di Pànama - Suli piruvianu - suli piruvianu - suli piruvianu + Suli piruvianu + suli piruvianu + suli piruvianu - Kina dâ Papua Nova Guinìa - kina dâ Papua Nova Guinìa - kina dâ Papua Nova Guinìa + Kina dâ Papua Nova Guinìa + kina dâ Papua Nova Guinìa + kina dâ Papua Nova Guinìa - Pesu filippinu - pesu filippinu - pesi filippini + Pesu filippinu + pesu filippinu + pesi filippini - Rupìa pakistana - rupìa pakistana - rupìi pakistani + Rupìa pakistana + rupìa pakistana + rupìi pakistani - Zloty pulaccu - zloty pulaccu - zloty pulacchi + Zloty pulaccu + zloty pulaccu + zloty pulacchi - Guaranì dû Paraguay - guaranì dû Paraguay - guaranì dû Paraguay + Guaranì dû Paraguay + guaranì dû Paraguay + guaranì dû Paraguay - Riali dû Qatar - riali dû Qatar - riali dû Qatar + Riali dû Qatar + riali dû Qatar + riali dû Qatar - Leu rumenu - leu rumenu - lei rumeni + Leu rumenu + leu rumenu + lei rumeni - Dìnaru serbu - dìnaru serbu - dìnari serbi + Dìnaru serbu + dìnaru serbu + dìnari serbi - Rubblu russu - rubblu russu - rubbli russi + Rubblu russu + rubblu russu + rubbli russi - Francu dû Ruanna - francu dû Ruanna - franchi dû Ruanna + Francu dû Ruanna + francu dû Ruanna + franchi dû Ruanna - Riali di l’Arabbia Saudita - riali di l’Arabbia Saudita - riali di l’Arabbia Saudita + Riali di l’Arabbia Saudita + riali di l’Arabbia Saudita + riali di l’Arabbia Saudita - Dòllaru di l’Ìsuli Salumuni - dòllaru di l’Ìsuli Salumuni - dòllari di l’Ìsuli Salumuni + Dòllaru di l’Ìsuli Salumuni + dòllaru di l’Ìsuli Salumuni + dòllari di l’Ìsuli Salumuni - Rupìa dî Seychelles - rupìa dî Seychelles - rupìi dî Seychelles + Rupìa dî Seychelles + rupìa dî Seychelles + rupìi dî Seychelles - Stirlina sudanisi - stirlina sudanisi - stirlini sudanisi + Stirlina sudanisi + stirlina sudanisi + stirlini sudanisi - Curuna svidisi - curuna svidisi - curuni svidisi + Curuna sbidisi + curuna sbidisi + curuni sbidisi - Dòllaru di Singapuri - dòllaru di Singapuri - dòllari di Singapuri + Dòllaru di Singapuri + dòllaru di Singapuri + dòllari di Singapuri - Stirlina di Sant’Èlina - stirlina di Sant’Èlina - stirlini di Sant’Èlina + Stirlina di Sant’Èlina + stirlina di Sant’Èlina + stirlini di Sant’Èlina - Liuni dâ Sierra Liuni - liuni dâ Sierra Liuni - liuna dâ Sierra Liuni + Liuni dâ Sierra Liuni + liuni dâ Sierra Liuni + liuna dâ Sierra Liuni - Liuni dâ Sierra Liuni (1964—2022) - liuni dâ Sierra Liuni (1964—2022) - liuna dâ Sierra Liuni (1964—2022) + Liuni dâ Sierra Liuni (1964—2022) + liuni dâ Sierra Liuni (1964—2022) + liuna dâ Sierra Liuni (1964—2022) - Scillinu sòmalu - scillinu sòmalu - scillini sòmali + Scillinu sòmalu + scillinu sòmalu + scillini sòmali - Dòllaru dû Surinami - dòllaru dû Surinami - dòllari dû Surinami + Dòllaru dû Surinami + dòllaru dû Surinami + dòllari dû Surinami - Stirlina dû Sudan di sciroccu - stirlina dû Sudan di sciroccu - stirlini dû Sudan di sciroccu + Stirlina dû Sudan di sciroccu + stirlina dû Sudan di sciroccu + stirlini dû Sudan di sciroccu - Dobra di São Tomé & Príncipe - dobra di São Tomé & Príncipe - dobra di São Tomé & Príncipe + Dobra di São Tomé & Príncipe + dobra di São Tomé & Príncipe + dobra di São Tomé & Príncipe - Stirlina siriana - stirlina siriana - stirlini siriani + Stirlina siriana + stirlina siriana + stirlini siriani - Lilangeni di Eswatini - lilangeni di Eswatini - lilangeni di Eswatini + Lilangeni di Eswatini + lilangeni di Eswatini + lilangeni di Eswatini - Baht tailannisi - baht tailannisi - baht tailannisi + Baht tailannisi + baht tailannisi + baht tailannisi - Somoni dû Tajìkistan - somoni dû Tajìkistan - somoni dû Tajìkistan + Somoni dû Tajìkistan + somoni dû Tajìkistan + somoni dû Tajìkistan - Manat turkmenu - manat turkmenu - manat turkmeni + Manat turkmenu + manat turkmenu + manat turkmeni - Dìnaru tunisinu - dìnaru tunisinu - dìnari tunisini + Dìnaru tunisinu + dìnaru tunisinu + dìnari tunisini - Tongan Paʻanga - Tongan paʻanga - Tongan paʻanga + Tongan Paʻanga + Tongan paʻanga + Tongan paʻanga - Lira turca - lira turca - liri turchi + Lira turca + lira turca + liri turchi - Dòllaru di Trinidad e Tobago - dòllaru di Trinidad e Tobago - dòllari di Trinidad e Tobago + Dòllaru di Trinidad e Tobago + dòllaru di Trinidad e Tobago + dòllari di Trinidad e Tobago - Novu dòllaru taiwanisi - novu dòllaru taiwanisi - novi dòllari taiwanisi + Novu dòllaru taiwanisi + novu dòllaru taiwanisi + novi dòllari taiwanisi - Scillinu dâ Tanzania - scillinu dâ Tanzania - scillini dâ Tanzania + Scillinu dâ Tanzania + scillinu dâ Tanzania + scillini dâ Tanzania - Grivnia ucràina - grivnia ucràina - grivni ucràini + Grivnia ucràina + grivnia ucràina + grivni ucràini - Scillinu di l’Uganna - scillinu di l’Uganna - scillini di l’Uganna + Scillinu di l’Uganna + scillinu di l’Uganna + scillini di l’Uganna - Dòllaru miricanu - dòllaru miricanu - dòllari miricani + Dòllaru miricanu + dòllaru miricanu + dòllari miricani - Pesu di l’Uruguay - pesu di l’Uruguay - pesi di l’Uruguay + Pesu di l’Uruguay + pesu di l’Uruguay + pesi di l’Uruguay - Som di l’Uzbèkistan - som di l’Uzbèkistan - som di l’Uzbèkistan + Som di l’Uzbèkistan + som di l’Uzbèkistan + som di l’Uzbèkistan - Bulivar dû Vinizzuela - bulivar dû Vinizzuela - bulivar dû Vinizzuela + Bulivar dû Vinizzuela + bulivar dû Vinizzuela + bulivar dû Vinizzuela - Dong vietnamisi - dong vietnamisi - dong vietnamisi + Dong vietnamisi + dong vietnamisi + dong vietnamisi - Vatu di Vanuatu - vatu di Vanuatu - vatu di Vanuatu + Vatu di Vanuatu + vatu di Vanuatu + vatu di Vanuatu - Tala samuanu - Tala samuanu - Tala samuani + Tala samuanu + Tala samuanu + Tala samuani - Francu CFA di l’Àfrica cintrali - francu CFA di l’Àfrica cintrali - franchi CFA di l’Àfrica cintrali + Francu CFA di l’Àfrica cintrali + francu CFA di l’Àfrica cintrali + franchi CFA di l’Àfrica cintrali - Dòllaru dî Caraibbi di livanti - dòllaru dî Caraibbi di livanti - dòllari dî Caraibbi di livanti + Dòllaru dî Caraibbi di livanti + dòllaru dî Caraibbi di livanti + dòllari dî Caraibbi di livanti + + + ciurinu caraìbbicu - Francu CFA di l’Àfrica di punenti - francu CFA di l’Àfrica di punenti - franchi CFA di l’Àfrica di punenti + Francu CFA di l’Àfrica di punenti + francu CFA di l’Àfrica di punenti + franchi CFA di l’Àfrica di punenti - Francu CFP - francu CFP - franchi CFP + Francu CFP + francu CFP + franchi CFP - Munita Scanusciuta - (munita scanusciuta) - (munita scanusciuta) + Munita Scanusciuta + (munita scanusciuta) + (munita scanusciuta) - Riali dû Yemen - riali dû Yemen - riali dû Yemen + Riali dû Yemen + riali dû Yemen + riali dû Yemen - Rand di l’Àfrica di Sciroccu - rand di l’Àfrica di Sciroccu - rand di l’Àfrica di Sciroccu + Rand di l’Àfrica di Sciroccu + rand di l’Àfrica di Sciroccu + rand di l’Àfrica di Sciroccu - Kwacha dâ Zammia - kwacha dâ Zammia - kwacha dâ Zammia + Kwacha dâ Zammia + kwacha dâ Zammia + kwacha dâ Zammia + + + oru dû Zimbabwe {0} jornu {0} di jorna {0} jorna + Pigghia a {0}ª a manu dritta. - - - dirizzioni - {0}L - {0}T - {0}P - - - dirizzioni - {0}L - {0}T - {0}P - - - - - dirizzioni - {0}L - {0}T - {0}P + dirizzioni + {0}L + {0}T + {0}P - hh:mm + hh:mm - hh:mm:ss + hh:mm:ss - mm:ss + mm:ss - {0} e {1} - {0} e {1} + {0} e {1} + {0} e {1} - {0} o {1} - {0} o {1} - - - {0} o {1} - {0} o {1} - - - {0} o {1} - {0} o {1} - - - {0} e {1} - {0} e {1} - - - {0} e {1} - {0} e {1} - - - {0} e {1} - {0} e {1} - - - {0} e {1} - {0} e {1} - - - {0} e {1} - {0} e {1} + {0} o {1} + {0} o {1} - se:s + se:s diff --git a/make/data/cldr/common/main/sd.xml b/make/data/cldr/common/main/sd.xml index 19b23be9f41..d3ddcdae45e 100644 --- a/make/data/cldr/common/main/sd.xml +++ b/make/data/cldr/common/main/sd.xml @@ -42,6 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic آزربائيجاني ازري ڪينيڊا + بلوچي بالينيس باسا بيلاروسي @@ -222,6 +223,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic بافيا ڪلونئين ڪردي + ڪردي + ڪرمانجي ڪومڪ ڪومي ڪورنش @@ -569,10 +572,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic اندورا متحده عرب امارات افغانستان - انٽيگا ۽ باربد + اينٽيگا ۽ باربوڊا انگويلا البانيا - ارمینیا + آرمينيا انگولا انٽارڪٽيڪا ارجنٽينا @@ -582,7 +585,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic عروبا الند ٻيٽ آذربائيجان - بوسنيا ۽ هرزوگووينا + بوسنيا ۽ هرزيگووينا باربڊوس بنگلاديش بيلجيم @@ -601,7 +604,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ڀوٽان بووٽ ٻيٽ بوٽسوانا - بیلارس + بيلاروس بيليز ڪينيڊا ڪوڪوس ٻيٽ @@ -619,6 +622,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic چين ڪولمبيا ڪلپرٽن ٻيٽ + سارڪ ڪوسٽا ريڪا ڪيوبا ڪيپ وردي @@ -671,7 +675,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic گوام گني بسائو گيانا - هانگ ڪانگ SAR + هانگ ڪانگ SAR چين هانگ ڪانگ هرڊ ۽ مڪڊونلڊ ٻيٽ هنڊورس @@ -759,7 +763,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic فلپائن پاڪستان پولينڊ - سینٽ پیئر و میڪوئیلون + سينٽ پيئر ۽ ميڪيلون پٽڪئرن ٻيٽ پيوئرٽو ريڪو فلسطيني علائقا @@ -782,15 +786,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic سنگاپور سينٽ ھيلينا سلوینیا - سوالبارڊ ۽ جان ماین + سوالبارڊ ۽ يان ماین سلوواڪيا سيرا ليون - سین مرینو + سان مرینو سينيگال سوماليا سورينام ڏکڻ سوڊان - سائو ٽوم ۽ پرنسپیي + سائو ٽومي ۽ پرنسپیي ال سلواڊور سنٽ مارٽن شام @@ -810,7 +814,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic تيونيسيا ٽونگا ترڪييي - ٽريني ڊيڊ ۽ ٽوباگو ٻيٽ + ٽرينيڊاڊ ۽ ٽوباگو توالو تائیوان تنزانيا @@ -854,44 +858,85 @@ CLDR data files are interpreted according to the LDML specification (http://unic سڪي جو فارميٽ ترتيب ڇانٽي سڪو + ايموجي پيشڪاري ڪلاڪ سائيڪل لائن ٽوڙڻ انداز + لفظن وچ ۾ لڪير ٽوڙ ماپڻ جو نظام انگ + تخفيف کانپوءِ جملو ٽوڙ ٻڌ ڌرم جو ڪئلينڊر + ٻوڌي چيني ڪئلينڊر + چيني ڪاپٽڪ ڪئلينڊر + ڪاپٽڪ دانگي ڪئلينڊر + دانگي ايٿوپيائي ڪئلينڊر + ايٿيوپيائي ايٿوپڪ اميٽي عليم ڪئلينڊر + ايٿيوپيائي اميٽي اليم جارجيائي ڪئلينڊر + جارجيائي عبراني ڪئلينڊر + عبراني هندوستاني قومي ڪئلينڊر + هندستاني قومي هجري ڪئلينڊر + هجري هجري ڪئلينڊر (ٽيبل وارو، شهري دور) + هجري (ٽيبليائي، شهري دور) هجري ڪئلينڊر (ٽيبلر، فلڪياتي دور) + هجري (ٽيبليائي، فلڪياتي دور) هجري ڪئلينڊر (اُم القرا) + هجري (اُم القری) ISO-8601 ڪئلينڊر جاپاني ڪئلينڊر + جاپاني فارسي ڪئلينڊر + فارسي منگوو ڪئلينڊر + منگوو اڪائونٽنگ سڪو فارميٽ + اڪائونٽنگ معياري سڪو فارميٽ + معياري ڊفالٽ يوني ڪوڊ ترتيب ڇانٽي + ڊفالٽ يونيڪوڊ عام مقصد جي ڳولا + ڳولا معياري ترتيب ڇانٽي + معياري + ڊفالٽ + ايموجي + متن 12 ڪلاڪ جو سسٽم (0–11) + 12 (0–11) 12 ڪلاڪ جو سسٽم (1–12) + 12 (1–12) 24 ڪلاڪ جو سسٽم (0–23) + 24 (0–23) 24 ڪلاڪ جو سسٽم (1–24) + 24 (1–24) لوز لائن ٽوڙ انداز + ڍرو عام لائن ٽوڙ انداز + عام سخت لائن ٽوڙ انداز + سخت + سڀ ٽوڙ + سڀ رک + عام + محاورن وچ ۾ رک ميٽرڪ نظام + ميٽرڪ امپيريل ماپڻ جو نظام + برطانيا آمريڪا جو ماپڻ جو نظام + آمريڪا عربي-هندي عدد وڌايل عربي-هندي عدد ارمينيائي انگ @@ -932,6 +977,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ٿائي عدد تبتي عدد وائي انگ اکر + بند + چالو ميٽرڪ @@ -953,7 +1000,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic [ء آ ا ب ٻ پ ڀ ت ث ٺ ٽ ٿ ج {جھ} ڃ ڄ چ ڇ ح خ د ذ ڊ ڌ ڍ ڏ ر ز ڙ س ش ص ض ط ظ ع غ ف ڦ ق ک ڪ گ {گھ} ڱ ڳ ل م ن ڻ ه ھ و ي] [َ ُ ِ ئ] [ا ب ٻ پ ڀ ت ث ٺ ٽ ٿ ج {جھ} ڃ ڄ چ ڇ ح خ د ذ ڊ ڌ ڍ ڏ ر ز ڙ س ش ص ض ط ظ ع غ ف ڦ ق ک ڪ گ {گھ} ڱ ڳ ل م ن ڻ ه ھ و ي] - [⹁ ⁏ \: ! ۔ ‘ ( ) \[ \] \{ \} /] + [\- ‑ ، ؛ \: ! ؟ … ‘’ "” ( ) \[ \] ٭ /] @@ -1011,6 +1058,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + آچر + سو + اڱ + اربع + خم + جم + ڇن + آچر سومر @@ -1025,21 +1081,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic آچر سو - اڱارو + اڱ اربع خم - جمعو - ڇنڇر + جم + ڇن - Q1 - Q2 - Q3 - Q5 + پهرين ٽماهي + ٻين ٽماهي + ٽين ٽماهي + چوٿين ٽماهي پهرين ٽي ماهي @@ -1050,22 +1106,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Q1 - Q2 - Q3 - Q4 + پهرين ٽماهي + ٻين ٽماهي + ٽين ٽماهي + چوٿين ٽماهي - صبح، منجهند - شام، منجهند + صبح + شام - صبح، منجهند - منجهند، شام + صبح + شام صبح، منجهند @@ -1074,8 +1130,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic - صبح، منجهند - منجهند، شام + صبح + شام + + + صبح + شام صبح، منجهند @@ -1091,10 +1151,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic عام دور - BC - BCE - CD - CE + ق م + ع @@ -1167,7 +1225,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic + E B h + MM-y G M/d/y G + E, dd-MM-y G ھفتو W جو MMMM ھفتو W جو MMMM ھفتو w جو Y @@ -1293,7 +1354,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic پويون سال پويون سال - {0} سالن ۾ + {0} سال ۾ {0} سالن ۾ @@ -1305,11 +1366,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic پوئين سال هن سال اڳين سال + + {0} سال ۾ + {0} سالن ۾ + پوئين سال هن سال اڳيئن سال + + {0}سال ۾ + {0}سالن ۾ + + + {0}سال پهرين + {0}سال پهرين + ٽي ماهي @@ -1317,21 +1390,27 @@ CLDR data files are interpreted according to the LDML specification (http://unic هن ٽي ماهي اڳين ٽي ماهي - {0} ٽي ماهي ۾ - {0} ٽي ماهي ۾ + {0} ٽماهي ۾ + {0} ٽماهين ۾ {0} ٽي ماهي پهرين {0} ٽي ماهي پهرين + + + {0} ٽماهي ۾ + {0} ٽماهين ۾ + + مهينو پوئين مهيني هن مهيني اڳين مهيني - {0} مهينن ۾ + {0} مهيني ۾ {0} مهينن ۾ @@ -1345,14 +1424,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic هن هفتي اڳين هفتي - {0} هفتن ۾ + {0} هفتي ۾ {0} هفتن ۾ - {0} هفتا پهرين + {0} هفتو پهرين {0} هفتا پهرين - {0} جي هفتي + {0} واري هفتي + + + + {0} هفتي ۾ + {0} هفتن ۾ + + + + + {0}هفتي ۾ + {0}هفتن ۾ + مهيني جي هفتي @@ -1393,12 +1484,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} آچر پهرين + + + {0} آچر ۾ + {0} آچرن ۾ + + + + + {0} آچر ۾ + {0} آچرن ۾ + + پوئين سومر هن سومر اڳين سومر - {0} سومرن ۾ + {0} سومر ۾ {0} سومرن ۾ @@ -1406,6 +1509,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} سومر پهرين + + + {0} سومر ۾ + {0} سومرن ۾ + + پوئين اڱاري هن اڱاري @@ -1419,17 +1528,39 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} اڱارا پهرين + + + {0} اڱاري ۾ + {0} اڱارن ۾ + + پوئين اربع هن اربع اڳين اربع - {0} اربعن ۾ - {0} اربعن ۾ + {0} اربع ۾ + {0} اربعائن ۾ - {0} اربعا پهرين - {0} اربعا پهرين + {0} اربع پهرين + {0} اربعائون پهرين + + + + + {0} اربع ۾ + {0} اربعائن ۾ + + + {0} اربع پهرين + {0} اربعائون پهرين + + + + + {0} اربع ۾ + {0} اربعائن ۾ @@ -1445,6 +1576,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} خميس پهرين + + + {0} خميس ۾ + {0} خميسن ۾ + + پوئين جمعي هن جمعي @@ -1507,11 +1644,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} منٽن ۾ + + + {0} منٽ ۾ + {0} منٽن ۾ + + سيڪنڊ هاڻي - {0} سيڪنڊن ۾ + {0} سيڪنڊ ۾ {0} سيڪنڊن ۾ @@ -1519,11 +1662,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} سيڪنڊ پهرين + + + {0} سيڪنڊ ۾ + {0} سيڪنڊن ۾ + + + + + {0} سيڪنڊ ۾ + {0} سيڪنڊن ۾ + + ٽائيم زون + GMT+؟ {0} وقت {0} ڏينهن جو وقت {0} معياري وقت @@ -1635,7 +1791,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic پاگو پاگو - وينا + ويئينا پرٿ @@ -1883,6 +2039,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ايسٽر + + ڪوئيئيڪي + پنٽا اريناس @@ -2148,10 +2307,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic فنام پينه - اينڊربري - - - ڪانٽن + ڪانٽن ٻيٽ ڪريٽمٽي @@ -2820,9 +2976,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - اولهه آفريقا جو وقت - اولهه آفريقا جو معياري وقت - اولهه آفريقا جي اونهاري جو وقت + اولهه آفريقا جو وقت @@ -3172,6 +3326,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic گيانائي وقت + + + هوائي اليوٽين جو معياري وقت + + هوائي اليوٽين جو وقت @@ -3745,63 +3904,54 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + ¤ #,##0.00;(¤ #,##0.00) + + + + + + + ¤ #,##0.00;(¤ #,##0.00) + + + ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) - ¤0هزار - ¤ 0هزار - ¤0هزار - ¤ 0هزار - ¤00هزار - ¤ 00هزار - ¤00هزار - ¤ 00هزار - ¤000لک - ¤ 000لک - ¤000لک - ¤ 000لک - ¤00لک - ¤ 00لک - ¤00لک - ¤ 00لک - ¤0ڪروڙ - ¤ 0ڪروڙ - ¤0ڪروڙ - ¤ 0ڪروڙ - ¤00ڪروڙ - ¤ 00ڪروڙ - ¤00ڪروڙ - ¤ 00ڪروڙ - ¤0ارب - ¤ 0ارب - ¤0ارب - ¤ 0ارب - ¤00ارب - ¤ 00ارب - ¤00ارب - ¤ 00ارب - ¤0کرب - ¤ 0کرب - ¤0کرب - ¤ 0کرب - ¤0ٽرلين - ¤ 0ٽرلين - ¤0ٽرلين - ¤ 0ٽرلين - ¤00ٽرلين - ¤ 00ٽرلين - ¤00ٽرلين - ¤ 00ٽرلين - ¤000ٽرلين - ¤ 000ٽرلين - ¤000ٽرلين - ¤ 000ٽرلين + ¤ 0 هزار + ¤ 0 هزار + ¤ 00 هزار + ¤ 00 هزار + ¤ 000 هزار + ¤ 000 هزار + ¤ 0 ملين + ¤ 0 ملين + ¤ 00 ملين + ¤ 00 ملين + ¤ 000 ملين + ¤ 000 ملين + ¤ 0 بلين + ¤ 0 بلين + ¤ 00 بلين + ¤ 00 بلين + ¤ 000 بلين + ¤ 000 بلين + ¤ 0 ٽرلين + ¤ 0 ٽرلين + ¤ 00 ٽرلين + ¤ 00 ٽرلين + ¤ 000 ٽرلين + ¤ 000 ٽرلين @@ -4203,8 +4353,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic سیرا لیونيائي لیون (1964—2022) - سیرا لیونيائي لیون (1964—2022) - سیرا لیونيائي لیون (1964—2022) سومالي شلنگ @@ -4222,9 +4370,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic سائو ٽوم ۽ پرنسپي دوبرا - سيريائي پائونڊ + شامي پائونڊ شامي پائونڊ - سيريائي پائونڊ + شامي پائونڊ سوازي للانگيني @@ -4296,6 +4444,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic اوڀر ڪيريبين ڊالر + + ڪريبيئن گلڊر + ڪريبيئن گلڊر + ڪريبيئن گلڊر + اولهه آفريڪا فرينڪ @@ -4314,6 +4467,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic زمبائي ڪواچا + + زمبابوي سون + زمبابوي سون + زمبابوي سون + {0} ڪتاب @@ -4453,7 +4611,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} مليگرام في ڊيسيليٽر {0} ملي گرامز في ڊيسي ليٽر - + + حصا + {0} حصو + {0} حصا + + حصا في ملين {0} حصو في ملين {0} حصا في ملين @@ -4467,6 +4630,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} مول {0} مولز + + گلوڪوز جو + گلوڪوز جو {0} + گلوڪوز جو {0} + {0} ليٽرز في ڪلو ميٽر {0} ليٽرز في ڪلو ميٽر @@ -4542,18 +4710,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ٽه ماهيون - {0} ٽه ماهيون - {0} ٽه ماهيون - {0}/ٽه ماهي - {0} مهينو - {0} مهينا {0} في مهينو - {0} هفتو - {0} هفتا {0} في هفتو @@ -4752,6 +4913,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic مرڪري جو {0} ملي ميٽر مرڪري جو {0} ملي ميٽر + + مرڪيوري جو + مرڪيوري جو {0} + مرڪيوري جو {0} + پائونڊز في اسڪوائر انچ {0} پائونڊ في اسڪوائر انچ @@ -4840,20 +5006,77 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} بيريلز {0} بيريلز - - نوري - {0} نوري - {0} نوري + + اسٽيراڊيئن + {0} اسٽيراڊيئن + {0} اسٽيراڊيئن - + + ڪيٽال + {0} ڪيٽال + {0} ڪيٽال + + + ڪولمبس + {0} ڪولمب + {0} ڪولمبس + + + فيراڊ + {0} فيراڊ + {0} فيراڊ + + + هينري + {0} هينري + {0} هينري + + + سيمنز + {0} سيمنز + {0} سيمنز + + + ڪيلوريز [IT] + {0} ڪيلوريز [IT] + {0} ڪيلوريز [IT] + + + بيڪرل + {0} بيڪرل + {0} بيڪرل + + + سيورٽس + {0} سيورٽ + {0} سيورٽ + + + گري + {0} گري + {0} گري + + + ڪلوگرام فورس + {0} ڪلوگرام فورس + {0} ڪلوگرام فورس + + + ٽيسلا + {0} ٽيسلا + {0} ٽيسلا + + + ويبر + {0} ويبر + {0} ويبر + + حصا في ارب {0} حصو في ارب {0} حصا في ارب - راتيون - {0} رات - {0} راتيون {0} في رات @@ -4967,12 +5190,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} آئٽم {0} آئٽم + + حصو + {0} حصو + {0} حصو + پيرمائيرڊ مول + + Glc + {0} Glc + {0} Glc + ليٽرز في ڪلو ميٽر @@ -5371,6 +5604,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mmHg {0} mm Hg + + Hg جو + Hg جو {0} + Hg جو {0} + بار {0} بار @@ -5524,12 +5762,57 @@ CLDR data files are interpreted according to the LDML specification (http://unic بيريل + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Sv + {0} Sv + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + نوري {0} نوري {0} نوري - + حصا/ارب {0} ح ف ا {0} ح ف ا @@ -5569,7 +5852,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}m² - ص {0}ص {0}ص @@ -5580,29 +5862,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}س {0}س - {0}/س {0}ٽه ماهي {0}ٽه ماهي - {0}/ٽه ماهي مهينو {0}مهينو {0}مهينا - {0}/مهينو هفتو {0}هفتو {0}هفتا - {0}/هفتو {0}ڏينهن {0}ڏينهن - {0}/ڏينهن {0}سيڪنڊ @@ -5698,21 +5975,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} km/h {0} km/h + + cal-IT + - نوري {0}نوري {0}نوري - + ح ف ا {0}ح ف ا {0}ح ف ا - راتيون {0}رات {0}راتيون - {0}/رات @@ -5728,15 +6005,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} يا {1} - {0}، {1} {0}, {1} {0}، {1} - - {0}، {1} - - {0}، {1} {0}, {1} {0}، {1} diff --git a/make/data/cldr/common/main/sd_Deva.xml b/make/data/cldr/common/main/sd_Deva.xml index 9b331766891..280a8c48036 100644 --- a/make/data/cldr/common/main/sd_Deva.xml +++ b/make/data/cldr/common/main/sd_Deva.xml @@ -247,11 +247,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic आर्त सू मंग - बु॒ध + ॿुध विस जुम छंछ + + + सू + मं + ॿु + वि + जु + छं + आर्तवार सूमर @@ -434,15 +443,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic साल + पोएं साल + हिन साल + ईंदड़ साल टिमाही महिनो + पोएं महिने + हिन महिने + ईंदड़ महिने हफ्तो + पोएं हफ़्ते + हिन हफ़्ते + ईंदड़ हफ़्ते दीं॒हुं @@ -453,6 +471,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic हफ्ते जो दीं॒हुं + + पोएं आर्तवार + हिन आर्तवार + ईंदड़ आर्तवार + दीं॒हुं/ रातु @@ -518,6 +541,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic अटलांटिक दीं॒ह जो वक्त + + + वक़्तु + एज़ोर्स मइयारी वक़्तु + एज़ोर्स ऊनहारे जो वक़्तु + + मरकज़ी यूरोपी वक्त diff --git a/make/data/cldr/common/main/se.xml b/make/data/cldr/common/main/se.xml index bdc806c27e5..cfeb48cffa3 100644 --- a/make/data/cldr/common/main/se.xml +++ b/make/data/cldr/common/main/se.xml @@ -934,6 +934,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/se_FI.xml b/make/data/cldr/common/main/se_FI.xml index aae2f5a8890..778b687cae4 100644 --- a/make/data/cldr/common/main/se_FI.xml +++ b/make/data/cldr/common/main/se_FI.xml @@ -1190,9 +1190,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Oarje-Afrihká áigi - Oarje-Afrihká dálveáigi - Oarje-Afrihká geasseáigi + Oarje-Afrihká áigi @@ -1542,6 +1540,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyana áigi + + + Hawaii-aleuhtalaš dálveáigi + + Hawaii-aleuhtalaš áigi diff --git a/make/data/cldr/common/main/sg.xml b/make/data/cldr/common/main/sg.xml index 629d51fe367..e4d68482ec4 100644 --- a/make/data/cldr/common/main/sg.xml +++ b/make/data/cldr/common/main/sg.xml @@ -577,6 +577,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00;¤-#,##0.00 + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 + + + ¤ #,##0.00;¤-#,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/sgs.xml b/make/data/cldr/common/main/sgs.xml new file mode 100644 index 00000000000..b19983727eb --- /dev/null +++ b/make/data/cldr/common/main/sgs.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + Kalba: {0} + Skripts: {0} + Regijuons: {0} + + + + [a ā b c č d e ē ė {ė̄} f g h i ī j k l m n o ō p r s š t u ū v z ž] + [{ch} {dz} {dž}] + [A Ā B C Č D E Ē Ė {Ė̄} F G H I Ī J K L M N O Ō P R S Š T U Ū V Z Ž] + [, % ‰ + − 0 1 2 3 4 5 6 7 8 9] + [\- ‐‑ – — , ; \: ! ? . … “„ ( ) \[ \] \{ \}] + + + + + + + + + + tēp:t + nē:n + + + diff --git a/make/data/cldr/common/main/sgs_LT.xml b/make/data/cldr/common/main/sgs_LT.xml new file mode 100644 index 00000000000..c01f0c14bdb --- /dev/null +++ b/make/data/cldr/common/main/sgs_LT.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/make/data/cldr/common/main/shn.xml b/make/data/cldr/common/main/shn.xml index 75b20be6149..324f3b29bb7 100644 --- a/make/data/cldr/common/main/shn.xml +++ b/make/data/cldr/common/main/shn.xml @@ -11,22 +11,11108 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + {0}၊ {1} + - တႆး + ဢႃးၾႃႇ + ဢပ်ႇၶႃးၸီႇယႅၼ်ႇ + ဢၾရိၵၢၼ်း + ဢၵ်ႉႁဵမ် + ဢႃးၵၼ်ႇ + ဢမ်ႇႁႄးရိၵ်ႉ + ဢရၵၼိတ်ႉ + ဢူဝ်ႇပူဝ်ႇလူဝ်ႇ + လႄႇဝၼ်ႇတိၼ်း ဢႃႇရၢပ်ႉ + ဢႃႇရၢပ်ႈ + လၵ်းၸဵင် ဢႃႇရၢပ်ႈ ပၢၼ်မႂ်ႇ + မပူးၶျီႇ + ဢႃႇသမ်ႇ + ဢသူး + ဢတိူဝ်ႇရီႇယႅၼ်ႇ + ဢႃႇၸႃႇပၢႆႇၸၼ်ႇ + ပၢတ်ႇသျ်ၵေးသ် + ပလူးၶျီႇ + ပႃးသႃႇ + ပႄႇလႃႇရုတ်ႈ + ပႅမ်ႇပႃႇ + ပႅတ်ႉထဝီႇ + ပႅၼ်းၼႃႈ + ပူႇၵႃႇရီႇယႃႇ + ႁႃႇယၼ်ႇဝီႇ + ပလူးၶျီႇ ပွတ်းတူၵ်း + ပူဝ်ႉၵျ်ပူႇရီႇ + ဢႃးၼီႈ + တႆးလမ် + ပႅမ်ပႃရႃႇ + ပင်းၵလႃႇ + ထိပႅတ်ႉ + ပၵ်းထီႇဢႃးရီႇ + ပရႅတ်ႉတၼ်ႇ + ပူဝ်တူဝ် + ပေႃးသၼီးယႃး + ဢၵ်ႉၶူးသ် + ပိူဝ်းယႅတ်ႇ + ပလိၼ်ႇ + ၶႅတ်ႇတလၼ်ႇ + ၶႅတ်ႇတူဝ်း + ဢႅတ်ႉသမ်ႇ + ၶျၵ်ႉမႃး + ၶျႅတ်ႉၶျႅၼ်ႇ + သိုပ်ႇပႂႃးၼူဝ်ႇ + ၶျီၵႃႇ + ၶျွၵ်ႉတေႃႇ + ၶျေရၵီႇ + ၶျိၵ်ႉၵသေႃး + ၶိူဝ်းတိတ်ႉသျ် ပွတ်းၵၢင် + ၶိူဝ်းတိတ်ႉသျ်၊ သူဝ်ႇရၼ်းၼီႇ + ၵေႃသီၵၼ်ႇ + ၶွပ်းထိၵ်ႇ + ၶျႅၵ်ႈ + သွမ်ႇပီႇၶရိ + ၶျၢတ်ႉသလႃးဝိၵ်ႉ + ၶျူးဝၢတ်ႇ + ဝႄးလ်သျ် + တေးၼိတ်ႉသျ် + တၢႆးတႃႇ + ၵျႃႇမၼ်ႇ + ၵျႃႇမၼ်ႇ (ဢေႃးသထရီးယႃး) + ၵျႃႇမၼ်ႇ (သဝိတ်ႈၸႃႇလႅၼ်ႇ) + ၸႃမႃႇ + တွၵ်ႉၵရိပ်ႉ + လူဝ်းဝႃးသေႃႇပီႇယႅၼ်ႇ + တူးဝႃးလႃႇ + တီႇဝႄးႁီႇ + ၵျူဝ်လႃ-ၾူင်းၼီႇ + ၸွင်းၵႃႇ + ဢႅမ်းပူး + ယူး + ၵရိတ်ႈ + ဢိင်းၵလဵတ်ႈ + ဢိင်းၵလဵတ်ႈ (ဢေႃႉသထရေးလီးယႃး) + ဢိင်းၵလဵတ်ႈ (ၶႅၼ်ႇၼေႇတႃႇ) + ဢိင်းၵလဵတ်ႈ (မိူင်းႁူမ်ႈတုမ်ႁေႃၶမ်း ပရိတ်ႈတဵၼ်ႇ) + ဢိင်းၵလဵတ်ႈ (ယူႇၶေႇ) + ဢိင်းၵလဵတ်ႈ (မိူင်းႁူမ်ႈတုမ် ဢမႄႇရိၵ) + ဢိင်းၵလဵတ်ႈ (ယူႇဢႅတ်ႉသ်) + ဢႅတ်ႉသ်ပရႅၼ်တူဝ်ႇ + သပဵၼ်ႇ + သပဵၼ်ႇ လတိၼ်ႇ ဢမႄႇရိၵၢၼ်ႇ + သပဵၼ် (ယူးရူပ်ႉ) + သပဵၼ်ႇ (မႅၵ်ႇသီႇၵူဝ်ႇ) + ဢႄႇသတူဝ်းၼီးယႃး + ပႃႉသ် + ဢဝၢၼ်တူဝ်ႇ + ပႃႇသျႃး + ပႃႇသျႃး (ဢႃႇၾၵၢၼ်ႇၼီႇသတၢၼ်ႇ) + ၾူလႃႇ + ၾိၼ်ႇလႅၼ်ႇ + ၾီလိပ်ႈပိၼ်း + ၾႄးရူဝ်းဢီးသ် + ၾရၢင်ႇသဵတ်ႈ + ၾရၢင်ႇသဵတ်ႈ (ၶႅၼ်ႇၼေႇတႃႇ) + ၾရၢင်ႇသဵတ်ႈ (သဝိတ်ႈၸႃႇလႅၼ်ႇ) + ၾရၢင်ႇသဵတ်ႈ ၶေးၵျုၼ်ႇ + ၾရီႇသီႇယႅၼ်ႇ ပွတ်းႁွင်ႇ + ၾရီႇယူးလီယႅၼ်ႇ + ၾရီႇသီႇယႅၼ်ႇ ပွတ်းတူၵ်း + ဢၢႆးရိတ်ႉသျ် + ၵႃႉ + ၵေးလိၵ်ႉ သၵွတ်ႉတိသျ် + ၵျီႉသ် + ၵလီးသီယႅၼ်ႇ + ၵႂႃႇရႃၼီး + ၵျႃႇမၼ်ႇသဝိတ်ႉ + ၵူးၵျရႃႇတီႇ + ၵတ်ႉသီး + မႅၼ်ႉ + ႁၢဝ်းသႃႇ + ႁဝၢႆႇယၼ်ႇ + ႁီးပရူး + ႁိၼ်ႇတီႇ + ႁိၼ်ႇတီႇ (လတိၼ်ႇ) + ႁိင်းၵလဵတ်ႈ + မင်းၼိဝ်းဝႃႇ + ၶရူဝ်ႇဢေးသျႃး + သေႃးပီးယႅၼ်း ပွတ်းၼိူဝ် + ႁေးသျုၼ်း ၶရီးဢူဝ်ႇ + ႁၢင်ႇၵေႇရီႇ + ဢႃႇမေးၼီးယႃး + ဢိၼ်ထႃလိၼ်းၵႂႃႇ + ဢိၼ်ႇတူဝ်ႇၼီးသျႃး + ဢိၼ်ႇထႃႇလိၼ်းၵူၺ်ႇ + ဢိၵ်ႉပူဝ်း + သိသျွၼ်ယီႈ + ဢီးတူဝ်ႇ + ဢၢႆးသလႅၼ်ႇ + ဢီႇတႃႇလီႇ + ဢီၼွၵ်းတီတုတ်ႈ + ၵျႃႇပၢၼ်ႇ + လူဝ်ၸပႅၼ်ႇ + ဢၢမ်းၵူမ်ႈပႃႇ + မၶျၢမ်း + ၵျႃးဝၼိတ်ႉ + ၵျေႃႇၵျႃႇ + ၶရႃး-ၶႄႇလ်ၽၵ်ႉ + ၶပၢႆယႂ်ႇ + ၵျူး + ၶမ်းပႃႇ + တႃယႅပ်ႉ + မၢၵ်ႈၶွၼ်းတေႇ + ၶပ်ႉပူဝႃႇတီႇယႃႇၼူဝ်ႇ + ၶႅၵ်ႉၶျီႇ + ၶႅၼ်ယင်ႇ + ၶဵင်းၵင်ႇ + ၶူဝ်းရၶျိၼ်းၼၢႆး + ၶူႇၶူးယူႇ + ၵႃးၸႅၵ်ႇ + ၵႃးၵူဝ်ႇ + ၵလႃႈလီးသုတ်ႇ + ၵႄလႅၼ်ႈၵျိၼ်ႇ + ၶမဵၼ် + ၶၼႃးတႃႇ + ၵၢဝ်းလီ + ၶွၼ်းၶႃၼီး + ၽႄႈလႄႈ + ၶႅသ်ႉမီးရီႇ + သျမ်ပလႃႇ + ပဵပ်ႉၾီးယႃး + ၵူဝ်ႇလူဝ်ၼီယႅၼ်ႇ + ၶိူဝ်းတိတ်ႉသျ် + ၶိူဝ်းတိတ်ႉသျ် + ၵူႇရမၼ်ႇၵျီႇ + ၶူဝ်းၼိတ်ႉသျ် + ၵူႇဝီႇ + ၶေးလ်ၵဵတ်ႇ + လတိၼ်ႇ + လႅင်းၵျီႇ + လၢၵ်ႈၸိမ်ႇပၢၵ်ႈ + ၵႅၼ်တႃႇ + လီႇၵူးရီႇယႅၼ်ႇ + လၶူဝ်တႃႇ + လႃႇတိၼ်ႇ + လွမ်းပၢတ်ႉ + လိင်ႇၵႄလ်လႃႇ + လၢဝ်း + လူႇဝီႇသီႇယႃးၼႃးၶရီးဢူဝ်ႇ + လူႇရီႇ ပွတ်းႁွင်ႇ + လီႉတူႇဝေးၼီးယႃး + လတ်ႉၵေႇလီႇယႅၼ်ႇ + လူႇပႃႇ-ၵႃႇတၢၼ်ႇၵႃႇ + လူဝ် + လူးယီယႃး + လၢတ်ႈဝီႇယႃႇ + လၢတ်ႉၸ် + မၢႆႇတီႇလီႇ + မၸၢႆႇ + မူၵ်ႉသျႃႇ + မေရူႇ + မူဝ်ရိသျႅၼ်ႇ + မလၵႅတ်ႉသီႇ + မၵ်ႉၶႂႃး-မီထူဝ်ႇ + မႅတ်ႉထႃႇ + မေႃႇၶျီႇၼူဝ်ႇ + မၢဝ်းရီႇ + မီးၵမႃႇ + မႄႇၶေႇတူဝ်းၼီးယႃး + မလေႇယႃလမ်ႇ + မူင်ႇၵူဝ်းလီးယႃး + မၼိပူႇရ် + မူဝ်ႉႁၢၵ်ႇ + မရႃႉတီႇ + မလေး + မႄးလ်ထီး + မုၼ်းတင်ႈ + ၽႃႇသႃႇလၢႆလၢႆဢၼ် + မတ်ႉသ်ၶူဝ်းၵီႇ + မင်းတေႃႇ + မၢၼ်ႈ + ဢႄရၸီးယႃး + မႃၸၼ်တႃရၼ်ၼီႇ + ၶႄႇမိၼ်းၼၢၼ် + ၼႃးမႃႈ + ၼေႃႇဝူၺ်း ပွၵ်ႉၶ်မေႃႇ + ဢိၼ်တပႄႇလႃႇ ပွတ်းႁွင်ႇ + ၵျႃႇမၼ်ႇပွတ်းတႂ်ႈ + ၵျႃႇမၼ်ႇပွတ်းတႂ်ႈ (ၼႄႇတႃႇလႅၼ်ႇ) + ၼေႇပႃႇလီႇ + တၢတ်ႉၶျ် + တၢတ်ႉၶျ် (ပႄႇၵျီႇယမ်ႇ) + ၶႂႃႇသျိဝ်း + ၼေႃႇဝူၺ်း ၼၢႆးၼေႃႉၸ်ၶ် + ဢႅၼ်ၵျႅၼ်းပုၼ်း + ၼေႃႇဝူၺ်း + ဢင်းၶူဝ်း + ဢိၼ်တပႄႇလႃႇ ပွတ်းၸၢၼ်း + သူဝ်​ထူဝ်ႇ ပွတ်းႁွင်ႇ + ၼူဝ်းဝႃႇ + ၼႃးဝႁူဝ်ႇ + ၺႅၼ်ၵျႃႇ + ၺၢၼ်ၶေႃးလႄႇ + ဢွၵ်ႉသီထႅၼ်ႈ + ဢူဝ်ႇၵႃႇၼႃႇၵၼ်ႇ + ဢူဝ်ရူဝ်မူဝ် + ဢူဝ်ႇတီးယႃး + ဢေႃႈသႅတ်ႉထိၵ်ႉ + ဢူဝ်းသဵတ်ႉ + ပုၼ်ႇၵျႃႇပီႇ + ပႃပီယႃမႅၼ်းတူဝ်ႇ + ၼၢႆႇၵျီးရီးယႅၼ်းၽိတ်ႉၵျိၼ်ႇ + ပႃႇလိ + ၽိၵျိၼ်ႇ + ပူဝ်ႇလႅၼ်ႇ + ၽိတ်ႉမွၼ်းထိတ်ႉသ် + ၽရတ်ႉသီႇယႅၼ်ႇ + ၽတ်ႉသ်ျတူဝ်ႇ + ပေႃးတူႉၵၢဝ်ႇ + ပေႃးတူႉၵၢဝ်ႇ ပရႃႇၸီး + ပေႃးတူႉၵၢဝ်ႇ ယူးရူပ်ႉ + ၶႅတ်ႉၶျူႇဝႃႇ + ၶေးသ်ျ + ရၵျသထႃးၼီႇ + ရူဝ်ႇႁိၼ်ႇၵျႃႇ + ရပ်ႉၾီႇယႅၼ်ႇ + ရူဝ်မႅၼ်ႇသ်ျ + ရုၼ်းတီႇ + ရူဝ်ႇမေးၼီးယႃး + ရူဝ်ႇမေးၼီးယႃး (မေႃႇတူဝ်းဝႃး) + ရွမ်ႇပူဝ်ႇ + ရတ်ႈသျႃး + ၶိၼ်ၺႃဝၼ်းတႃႇ + ရဝႃ + သၼ်းသၶရိတ်ႉ + ယႃႇၵုတ်ႉ + သႅမ်ပူးရူး + သၼ်ႇတႃႇလီႇ + သၼ်ၵူး + သႃတီးၼီးယႅၼ်း + သီႇသီးလီးယႅၼ်း + သိၼ်းတီႇ + ၶိူဝ်းတိတ်ႉသ်ျ ပွတ်းၸၢၼ်း + သႃးမီး ပွတ်းႁွင်ႇ + သႄၼႃႇ + ၶူဝ်ရႃပူဝ်ႇရူဝ်ႇသႅၼ်ၼီႇ + သၼ်ၵူဝ်ႇ + သမူဝ်ႇၵျိတ်ႉသျၼ်ႇ + တႃႉၶျႄႇလ်ႁိတ်ႉ + တႆး + သိၼ်ႁႃးလႃႇ + သီတႃးမူဝ်း + သလူဝ်ႇဝၵ်ႉ + သရၢႆးၵီႇ + သလူဝ်ႇဝီးၼီးယႃး + သႃးမီး ပွတ်းၸၢၼ်း + လူးသႅမ်းမီး + ဢိၼ်းၼရီႇသႃးမီး + သၵွတ်ႉသႃးမီး + သျူဝ်းၼႃႇ + သူဝ်ႇမႃႇလီႇ + ဢႃႇပႃးၼီးယႃး + သႃးပီးယႃး + သဝႃတီ + သႁူဝ်ႇ + သူဝ်ထူဝ်ႇ ပွတ်းၸၢၼ်း + သုၼ်းတၼိတ်ႉသ် + သုၼ်ႇဝႃႇ + သုၺ်းတိတ်ႉသျ် + သုၺ်ႇႁီးလီႇ + သုၺ်ႇႁီးလီႇ (ၶွင်ႇၵူဝ်ႇ - ၶိၼ်သျႃးသႃႇ) + သီးရီးဢႅၵ်ႉ + သၢႆလီးသီႇယႅၼ်ႇ ပွတ်းတႂ်ႈ + တမီးလ် + ထႄးလူႇၵူႇ + ထႄးသူဝ်ႇ + တႃၵျိၵ်ႉ + ထႆး + ထီႇၵရိၼ်းၺႃႇ + ထီးၵရီႇ + ထၢၵ်ႉမႅၼ်ႇ + သဝႃးၼႃႇ + ထွင်းၵၼ်ႇ + ထူဝ်ႇၶီႇၽူဝ်းၼႃႇ + ထွၵ်ႉၽိသိၼ်ႇ + တိူဝ်ႇၵီႇ + တႃႇရူဝ်ႇၵူဝ်ႇ + ထေႃးဝႃႇလီႇ + သွင်းၵႃႇ + ထထႃး + ထႅတ်ႉသဝၢၵ်ႉ + ထူးဝႃႇ + ဢတ်ႉလႅတ်ႉ ထမၸိတ်ႉ ပွတ်းၵၢင် + ဝီႇၵႃႇ + ယူႇၶရဵၼ်း + ဢမ်ႇႁူႉၸၵ်း ၽႃႇသႃႇ + ဢူးတူႇ + ဢူးၸပၵ်ႉ + ဝၢႆး + ဝႅၼ်းတႃႇ + ဝႅၼ်ႇၼီးသျၼ်ႇ + ဝႅတ်ႉၼမ်း + မၵ်ႉၶႂႃး + ဝေႃးလၽုၵ်း + ဝၼ်ၵျူဝ် + ဝေႃးလုၼ်း + ဝေႃးသႃႇ + ဝူဝ်လေတႃႇ + ဝေႃးပီႇရီႇ + ဝေႃးလွပ်ႇ + ႁူဝ်းသႃႇ + ၵင်ႇၵရီႇ + သူဝ်းၵႃႇ + ယၢင်းပႅၼ် + ယိတ်ႉတိတ်ႉသျ် + ယေႃးရူႇပႃႇ + ၼိၼ်းၵႃတူႇ + ၶႅၼ်းထူၼ်းၼိတ်ႉသ် + ၸႂၢင်ႈ + လၵ်းၸဵင် မူဝ်ရူဝ်ၵၼ်ႇ ထမၸိတ်ႉ + ၶႄႇ + ၶႄႇ (ပၢၼ်မႂ်ႇ) + ၶႄႇမၼ်းတရိၼ်း ပၢၼ်မႂ်ႇ + ၶႄႇ (ပၢၼ်ၵဝ်ႇ) + ၸူးလူး + ဢမ်ႇမီးၶေႃႈၼမ်းၽႃႇသႃႇ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - မျၢၼ်ႇမႃႇ (မိူင်းမၢၼ်ႈ) - မိူင်းထႆး + ၵမ်ႇၽႃႇ + ဢႃႇၾရိၵ + ဢမႄႇရိၵႁွင်ႇ + ဢမႄႇရိၵၸၢၼ်း + ဢူဝ်းသီးၼီးယႃး + ဢႃႇၾရိၵ ပွတ်းတူၵ်း + ဢမႄႇရိၵ ပွတ်းၵၢင် + ဢႃႇၾရိၵ ပွတ်းဢွၵ်ႇ + ဢႃႇၾရိၵ ပွတ်းႁွင်ႇ + ဢႃႇၾရိၵ တွၼ်ႈၵၢင် + ဢႃႇၾရိၵ ပွတ်းၸၢၼ်း + ဢမႄႇရိၵ + ဢမႄႇရိၵ ပွတ်းႁွင်ႇ + ၶႃႇရိပ်ႈပီႇယၼ်ႇ + ဢေးသျႃး ပွတ်းဢွၵ်ႇ + ဢေးသျႃး ပွတ်းၸၢၼ်း + ဢေးသျႃး ၸဵင်ႇၸၢၼ်းဝၼ်းဢွၵ်ႇ + ယူးရူပ်ႉ ပွတ်းၸၢၼ်း + ဢေႃႉသထရႃႇလေးသျႃး + မႄႇလၼ်ႇၼီးသျႃး + ၼႃႈလိၼ် မၢႆႇၶရူဝ်ႇၼေးသျၼ်း + ပေႃႇလီႇၼေးသျႃး + ဢေးသျႃး + ဢေးသျႃး ပွတ်းၵၢင် + ဢေးသျႃး ပွတ်းတူၵ်း + ယူးရူပ်ႉ + ယူးရူပ်ႉ ပွတ်းဢွၵ်ႇ + ယူးရူပ်ႉ ပွတ်းႁွင်ႇ + ယူးရူပ်ႉ ပွတ်းတူၵ်း + ဢႃႇၾရိၵ သႃႇႁႃႇရၽႄ + လတိၼ်ႇ ဢမႄႇရိၵ + ၵုၼ်ဢေႇသႅၼ်းသျိၼ်ႇ + ဢႅၼ်ႇတူဝ်ႇရႃႇ + မိူင်းႁူမ်ႈတုမ် ၸဝ်ႈၾႃႉ ဢႃႇရၢပ်ႈ + ဢႃႇၾၵၢၼ်ႇၼီႇသတၢၼ်ႇ + ဢႅၼ်ႇထီႇၵႂႃႇ လႄႈ ပႃႇပူးတႃႇ + ဢႅၼ်ႇၵုၺ်ႇလႃႇ + ဢႃႇပႃးၼီးယႃး + ဢႃႇမေးၼီးယႃး + ဢႅၼ်ႇၵူဝ်ႇလႃႇ + ဢႅၼ်ႇတၢၵ်ႈတီးၵႃႈ + ဢႃႇၵျႅၼ်ႇတီးၼႃး + သႃႇမူဝ်းဝႃႇ ၶွ​င် ဢမႄႇရိၵၢၼ်ႇ + ဢေႃးသထရီးယႃး + ဢေႃႉသထရေးလီးယႃး + ဢႃႇရူးပႃး + မူႇၵုၼ် ဢေႃးလႅၼ်ႇ + ဢႃႇၸႃႇပၢႆႇၸၼ်ႇ + ပေႃးသၼီးယႃး လႄႈ ႁႃႇၸီႇၵူဝ်းဝီးၼႃး + ပႃးပေႇတူတ်ႈ + ပင်းၵလႃးတဵတ်ႈ + ပႄႇၵျီႇယမ်ႇ + ပူႇၵီႇၼႃးၾႃးသူဝ်ႇ + ပူႇၵႃႇရီႇယႃႇ + ပႃႇရဵၼ်း + ပူႇရုၼ်းတီႇ + ပႄႇၼိၼ်း + သဵင်ႉပႃႇထႄးလႄႇမီႇ + ပႃႇမိဝ်းတႃး + ပရူႇၼၢႆး + ပူဝ်ႇလီးပီးယႃး + ၼႄႇတႃႇလႅၼ်ႇ တီႈ ၶႃႇရိပ်ႈပီႇယၼ်ႇ + ပရႃႇၸီး + ပႃႇႁႃးမႃး + ၽူႇတၢၼ်ႇ + မူႇၵုၼ် ပူးဝႅတ်ႉ + ပွတ်ႉသဝႃႇၼႃႇ + ပႄႇလႃႇရုတ်ႈ + ပႄႇလိတ်ႈ + ၶႅၼ်ႇၼေႇတႃႇ + မူႇၵုၼ် ၶူဝ်းၵတ်ႉ (ၶီးလိင်း) + ၶွင်ႇၵူဝ်ႇ - ၶိၼ်သျႃးသႃႇ + ၶွင်ႇၵူဝ်ႇ (DRC) + မိူင်းႁူမ်ႈပွင်လူၺ်ႈၵူၼ်းလၢႆ ဢႃႇၾရိၵ ပွတ်းၵၢင် + ၶွင်ႇၵူဝ်ႇ - ပရႃၸဝီးလ် + ၶွင်ႇၵူဝ်ႇ (မိူင်းႁူမ်ႈပွင်လူၺ်ႈၵူၼ်းလၢႆ) + သဝိတ်ႈၸႃႇလႅၼ်ႇ + ဢၢႆႇဝူဝ်ႇရီႇၶူတ်ႈ + မူႇၵုၼ် ၶုၵ်ႈ + ၶျီႇလီႇ + ၶႅမ်းမႃးရုၼ်း + ၶႄႇ + ၵူဝ်ႇလမ်ႇပီႇယႃႇ + ၵုၼ်ၶလိပ်ႉပႃႇတၼ်ႇ + သၢၵ်ႉၶ် + ၵေႃးသတႃႇရိၵႃႇ + ၵူးပႃး + ၶဵပ်ႉဝႄႇတီႇ + ၵူးရႃႇသၢဝ်ႇ + ၵုၼ်ၶရိတ်ႉသမၢတ်ႉ + သၢႆႉပရႅတ်ႈ + ၶျႅၵ်ႈ + မိူင်းၸွမ်ပွင်ၸိုင်ႈ ၶျႅၵ်ႈ + ၵျႃႇမၼီႇ + တီႇယေးၵူဝ်း ၵရႃႇသီးယႃး + ၵျီႇပူးတီႇ + တႅၼ်းမၢၵ်ႈ + တူဝ်ႇမီႇၼိၵ + တူဝ်ႇမီႇၼီႇၵၼ်ႇ + ဢႄးၵျီးရီးယႃး + သူးတ လႄႈ မႄႇလီႇလႃႇ + ဢေႇၵႂႃႇတေႃႇ + ဢႄႇသတူဝ်းၼီးယႃး + ဢီးၵျိပ်ႈ + သႃႇႁႃႇရႃႇ ပွတ်းတူၵ်း + ဢႄႇရီႇထရီးယႃး + သပဵၼ်ႇ + ဢီႇတီႇယူဝ်းပီးယႃး + ၸုမ်းၽွမ်ႉႁူမ်ႈ ယူးရူပ်ႉ + ၸူၼ်ႇယူးရူပ်ႉ + ၾိၼ်ႇလႅၼ်ႇ + ၾီႇၵျီႇ + မူႇၵုၼ် ၾွၵ်ႉလႅၼ်ႇ + မူႇၵုၼ် ၾွၵ်ႉလႅၼ်ႇ (ဢၢႆးသလတ်ႉသ် မႄႇလ်ဝီးၼတ်ႉသ်) + ၼႃႈလိၼ် မၢႆႇၶရူဝ်ႇၼေးသျၼ်း + မူႇၵုၼ် ၾႄးရူဝ်း + ၾရၢင်ႇသဵတ်ႈ + ၵႄးပုၼ်ႇ + မိူင်းႁူမ်ႈတုမ်ႁေႃၶမ်း ပရိတ်ႈတဵၼ်ႇ + ယူႇၶေႇ + ၵရႄႇၼႃႇတႃႇ + ၵျေႃႇၵျႃႇ + ၵုၺ်ႇယႃႇၼႃႇ ၶွင် ၾရၢင်ႇသဵတ်ႈ + ၵႂၢၼ်းသီ + ၵႃႇၼႃႇ + ၵျီႇပရေႃးတႃး + ၵရိၼ်းလႅၼ်း + ၵမ်ႇပီးယႃး + ၵီးၼီး + ၵႂႃးတီႇလုပ်ႈ + ဢီႇၵူၺ်ႇတေႃႇရီႇယႃႇ ၵီးၼီး + ၵရိတ်ႈ + ၵျေႃႇၵျႃႇ ပွတ်းၸၢၼ်း လႄႈ မူႇၵုၼ် သၢၼ်းဝိတ်ႉ ပွတ်းၸၢတ်း + ၵႂႃႇတမႃႇလႃႇ + ၵႂၢမ်ႇ + ၵီးၼီး-ပိတ်ႈသၢဝ်ႇ + ၵၢႆႇယႃးၼႃႇ + ႁွင်းၵွင်း ၼႃႈလိၵ်ႈဢုပ်ႉပိူင်ႇၶိုၵ်ႉတွၼ်း ၶႄႇ + ႁွင်းၵွင်း + မူႇၵုၼ် ႁိူတ်ႉ လႄႈ မူႇၵုၼ် မႅၵ်ႇတေႃႇၼႄႇ + ႁွၼ်ႇတူးရႅတ်ႈ + ၶရူဝ်ႇဢေးသျႃး + ႁေးတီႇ + ႁၢင်ႇၵေႇရီႇ + မူႇၵုၼ် ၶႅၼ်ႇၼရီႇ + ဢိၼ်ႇတူဝ်ႇၼီးသျႃး + ဢၢႆႇယႃႇလႅၼ်ႇ + ဢိတ်ႇသရေး + ၵုၼ်မႅၼ်း + ဢိၼ်းတီးယႃး + ၼႃႈလိၼ် သမုၵ်ႉတရႃႇဢိၼ်းတီးယႃး ၶွင် ဢိင်းၵလဵတ်ႈ + မူႇၵုၼ်ၶျႃးၵူဝ်ႉသ် + ဢီႇရၢၵ်ႈ + ဢီႇရၢၼ်း + ဢၢႆးသလႅၼ်ႇ + ဢီႇတႃႇလီႇ + ၵျႃႇသီႇ + ၵျႃႇမေႇၵႃႇ + ၵျေႃႇတၼ်ႇ + ၵျႃႇပၢၼ်ႇ + ၶႅၼ်ႇၺႃႇ + ၵႃႇၵိတ်ႈသတၼ်ႇ + ၵမ်ႇပေႃးတီးယႃး + ၵိရိပတီႇ + ၶူဝ်ႇမူဝ်ႇရူတ်ႈ + သဵင်ႉၶိတ်ႈ လႄႈ ၼႄးဝိတ်ႈ + ၵၢဝ်းလီႁွင်ႇ + ၵၢဝ်းလီၸၢၼ်း + ၶူႇဝဵတ်ႈ + မူႇၵုၼ် ၶေးမႅၼ်း + ၵႃႇၸၢၵ်ႈသတၼ်ႇ + လၢဝ်း + လႄႇပႃႇၼွၼ်ႇ + သဵင်ႉလူႉသျႃႇ + လိၵ်ႈတိၼ်ႇသတၢႆႇ + သီႇရိလင်းၵႃ + လၢႆႇပေးရီးယႃး + လႄႇသူဝ်းတူဝ်ႇ + လီႉတူႇဝေးၼီးယႃး + လၢၵ်ႈၸိမ်ႇပၢၵ်ႈ + လၢတ်ႈဝီႇယႃႇ + လိပ်ႉပျႃး + မေႃႇရူဝ်ႇၵူဝ်ႇ + မူဝ်ႇၼႃႉၶူဝ်ႇ + မေႃႇတူဝ်းဝႃး + မွၼ်ႇတေႇၼေးၵရူဝ်ႇ + သဵင်ႉမႃႇတိၼ် + မၢတ်ႈတႃႇၵၢတ်ႈသၵႃႇ + မူႇၵုၼ် မႃးသျႄႇ + မႄႇၶေႇတူဝ်းၼီးယႃးႁွင်ႇ + မႃႇလီႇ + မျၢၼ်ႇမႃႇ (မိူင်းမၢၼ်ႈ) + မူင်ႇၵူဝ်းလီးယႃး + မႃႇၵၢဝ်ႈ ၼႃႈလိၼ်ဢုပ်ႉပိူင်ႇၶိုၵ်ႉတွၼ်း ၶႄႇ + မႃႇၵၢဝ်ႈ + မူႇၵုၼ် မေႇရီႇယႃႇၼႃႇ ပွတ်းႁွင်ႇ + မႃးတိၼ်ႇၼိၵ်ႈ + မေႃႇရီႇတေးၼီးယႃး + မွၼ်းသိူဝ်းရၢတ်ႈ + မေႃးတႃႇ + မေႃးရီႇသႃႇ + မေႃႇတိပ်ႈ + မႃႇလႃႇဝီႇ + မႅၵ်ႇသီႇၵူဝ်ႇ + မလေးသျႃး + မူဝ်ႇၸမ်းပိၵ်ႈ + ၼႃႇမီးပီးယႃး + ၼိဝ်းၶႄႇလီႇတူဝ်းၼီးယႃး + ၼၢႆးၵျႃး + ၵုၼ်ၼေႃႇၾုၵ်ႉ + ၼၢႆႇၵျီးရီးယႃး + ၼီႇၵႃႇရႃႇၵႂႃႇ + ၼႄႇတႃႇလႅၼ်ႇ + ၼေႃႇဝူၺ်း + ၼေႇပေႃး + ၼၢဝ်ရူး + ၼီးဝႄႇ + ၼိဝ်းၸီႇလႅၼ်ႇ + ဢဝ်တႄးရူဝ်း ၼိဝ်းၸီႇလႅၼ်ႇ + ဢူဝ်ႇမၢၼ်ႇ + ပႃႈၼႃးမႃး + ပေႇရူႉ + ပေႃႇလီႇၼေးသျႃး ၶွင် ၾရၢင်ႇသဵတ်ႈ + ပႃးပႂႃႇၼိဝ်းၵီးၼီး + ၾီလိပ်ႈပိၼ်း + ပႃႇၵိတ်ႈသတၼ်ႇ + ပူဝ်ႇလႅၼ်ႇ + သဵင်ႉပီးယႃး လႄႈ မိၵ်ႈၵွႆႇလွၼ်ႇ + မူႇၵုၼ် ၽိတ်ႉၶႅၼ်ႇ + ပေႃႇတူဝ်ႇရီးၵူဝ်း + ၼႃႈလိၼ် ပႃႇလႅတ်ႇသတိၼ်းၼီးယႅၼ်း + ပႃးလဵတ်ႈသတၢႆး + ပေႃးတူႉၵၢဝ်ႇ + ပႃႇလၢဝ်း + ပႃႇရႃႇၵူၺ်း + ၶႃႇတႃႇ + ဢွၵ်ႉလၢႆးယိၼ်း ဢူဝ်းသီးၼီးယႃး + ရေႇၼီႇယၼ်ႇ + ရူဝ်ႇမေးၼီးယႃး + သႃးပီးယႃး + ရတ်ႈသျႃး + ရဝၢၼ်းတႃႇ + သေႃႇတီႇဢႃႇရေးပီးယႃး + မူႇၵုၼ် သေႃႇလေႃႇမၼ်ႇ + သေးသျႄႇ + သူႇတၼ်ႇ + သုၺ်ႇတိၼ်ႇ + သိင်ႇၵႃႇပူဝ်ႇ + သဵင်ႉႁႄးလႄးၼႃႇ + သလူဝ်ႇဝေးၼီးယႃး + သဝႃးလ်ပၢတ်ႇ လႄႈ ၸၼ်မၢႆးယႅၼ်ႇ + သလူဝ်ႇဝႃးၵီးယႃး + သီႇဢႄႇရႃႇလီႇယူၼ်ႇ + သၼ်းမႃႇရီႇၼေႃႇ + သီႇၼီႇၵႃႇ + သူဝ်ႇမႃႇလီႇယႃး + သျူးရီးၼႃႇမႄႇ + သူႇတၼ်ႇၸၢၼ်း + သူၼ်ႇတူဝ်ႇမေး လႄႈ ပရိၼ်ႇသီႇပေႇ + ဢႄႇသႃႇဝႃႇတေႃႇ + သိၼ်ႉမႃႇတိၼ်ႇ + သီးရီးယႃး + ဢႅတ်ႇသ်ဝႃႇတီးၼီႇ + သႂႃႇၸီႇလႅၼ်ႇ + ထရီႇသၼ်ႇ တႃႇ ၶုၼ်းၺႃႇ + မူႇၵုၼ် ထၢၵ်ႈ လႄႈ ၶေးၶတ်ႉ + ၶျၢတ်ႈ + ၼႃႈလိၼ် ၾရၢင်ႇသဵတ်ႈ ပွတ်းၸၢၼ်း + ထူဝ်းၵူဝ်ႇ + မိူင်းထႆး + တႃႇၵျီႇၵီႇသတၼ်ႇ + ထူဝ်းၵေႇလၢဝ်ႇ + တီႇမေႃး-လႅတ်ႉသ်တႄး + တီႇမေႃးပွတ်းဢွၵ်ႇ + တၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ + တူႇၼီးသျႃး + ထွင်းၵႃႇ + တိူဝ်ႇၵီႇ + ထရီႇၼီႇတၢတ်ႈ လႄႈ ထူဝ်ႇပေးၵူဝ်ႇ + ထူးဝႃႇလူႇ + ထၢႆႇဝၢၼ်း + ထၼ်ႇၸၼ်းၼီးယႃး + ယူႇၶရဵၼ်း + ယူႇၵၼ်ႇတႃႇ + မူႇၵုၼ်ဢွၼ်ႇ ဢၼ်မီးၽၢႆႇၼွၵ်ႈ ယူႇဢႅတ်ႉသ် + ၸၢတ်ႈၸိုင်ႈလုမ်ႈၾႃႉ + မိူင်းႁူမ်ႈတုမ် ဢမႄႇရိၵ + ယူႇဢႅတ်ႉသ် + ဢုရုၵူၺ်း + ဢူႇၸပႄႉၵိတ်ႇသတၼ်ႇ + ဝႃႇတီႇၵၼ်ႇသီးတီး + သဵင်ႉဝိၼ်းသႅၼ်ႉ လႄႈ ၵရႄးၼႃးတိၼ်း + ဝႄႇၼေႇၸွႆးလႃး + မူႇၵုၼ် ဝႃႇၵျိၼ်ႇ ၶွင် ဢိင်းၵလဵတ်ႈ + မူႇၵုၼ် ဝႃႇၵျိၼ်ႇ ၶွင် ယူႇဢႅတ်ႉသ် + ဝႅတ်ႉၼမ်း + ဝႅၼ်ႇၼူးဝႃႇထူႇ + ဝႃးလိတ်ႈ လႄႈ ၾူႇတူးၼႃး + သႃႇမူဝ်းဝႃႇ + သူႇတူဝ်ႇ-ဢႅၵ်ႉသႅၼ်ႉ + သူႇတူဝ်ႇ-ပီးတီႇ + ၵူဝ်ႇသူဝ်ႇဝူဝ်ႇ + ယႄႇမႅၼ်ႇ + မႃႇယူတ်ႈ + ဢႃႇၾရိၵၸၢၼ်း + ၸမ်းပီးယႃး + ၸိမ်ႇပႃႇပူၺ်ႇ + ၼႃႈလိၼ် ဢမ်ႇႁူႉၸၵ်း + + လၢႆးတႅမ်ႈလိၵ်ႈၾိင်ႈထုင်းၵျႃႇမၼ်ႇ + လိၵ်ႈလၢႆး ရီႇသျႅၼ်ႇ ဢၼ်မီးပိူင်တၢႆ + လိၵ်ႈၵျႃႇမၼ်ႇ မိူဝ်ႈပီ 1996 + ဝၢႆးလင် ၾရၢင်ႇသဵတ်ႈ ပွတ်းၵၢင် တေႃႇထိုင် 1606 + ၾရၢင်ႇသဵတ်ႈပၢၼ်မႂ်ႇမိူဝ်ႈၸဝ်ႉ + ပၢႆးပၺ်ႇၺႃႇ + ပိူင်ၽွတ်ႇၶွတ်ႈ လွင်ႈတႅမ်ႈလိၵ်ႈ မိူဝ်ႈပီ 1943 + ALA-LC လွင်ႈႁဵတ်းႁႂ်ႈပဵၼ် ရူဝ်ႇမႅၼ်ႇ မိူဝ်ႈပီ 1997 + ၵႂၢမ်းလၢတ်ႈဢႃႇလူႇၵူႇ + လိၵ်ႈႁူမ်ႈမၢႆ ၽႃႇသႃႇၵႂၢမ်းလၢတ်ႈ ပေႃးတူႉၵၢဝ်ႇ မိူဝ်ႈပီ 1990 + တူဝ်မႄႈလိၵ်ႈလတိၼ်ႇ တိူဝ်ႇၵီႇၽွမ်ႉႁူမ်ႈ + ၵႂၢမ်းလၢတ်ႈ ပႃႇလၼ်ၵႃ ဢၼီႇ + ၸုမ်းၵႂၢမ်းလၢတ်ႈ ပႃႇလႃႇဝႅၼ်ႇတူဝ်ႇ ၶွင် ၵႃႇပူဝ်ႇဝႃႇတီႇဢႃႇၼူႇ + ၵႂၢမ်းလၢတ်ႈ ၵျူဝ်းၵျီဢူဝ်/ပီႇလႃႇ + တူဝ်မႄႈလိၵ်ႈ ပူဝ်ႁူဝ်ရိၵ်ႉ + ပူၼ်းတလိၼ်ႇ + ပၢင်ၵုမ်လူင် ၵၢၼ်တႅမ်ႈလိၵ်ႈ ၽႃႇသႃႇပေႃးတူႉၵၢဝ်ႇ-ပရႃႇၸီး မိူဝ်ႈပီ 1945 + တူဝ်မႄႈလိၵ်ႈ တၢၼ်ၵူဝ် + သႃးပီးယႅၼ်း ဢၼ်မီးသဵင်ဢွၵ်ႇ ဢီႇၵႃႇဝီႇယႅၼ်ႇ + ဢိင်းၵလဵတ်ႈပၢၼ်မႂ်ႇမိူဝ်ႈၸဝ်ႉ + ပၢႆးသဵင် IPA + ပၢႆးသဵင် UPA + ႁႅပ်ႉပၢၼ်ႇ ႁဵတ်းႁႂ်ႈပဵၼ် ရူဝ်ႇမႅၼ်ႇ + သႃးပီးယႅၼ်း ဢၼ်မီးသဵင်ဢွၵ်ႇ ဢီႇၸႅၵ်ႉဝီႇယႅၼ်ႇ + လၢႆးတႅမ်ႈလိၵ်ႈ ဢၼ်ၸႂ်ႉတိုဝ်းၼမ် + လၵ်းၸဵင် လၢႆးတႅမ်ႈလိၵ်ႈ + ၵႂၢမ်းလၢတ်ႈ လီႇပူဝ်ႇဝႃႇၸ် ၶွင် ရီႇသျႅၼ်ႇ + တူဝ်မႄႈလိၵ်ႈ မႅတ်ႉတႄႇလ်ၵူဝ်ႇ + သဵင်လဵဝ် + ၵႂၢမ်းလၢတ်ႈ ဢိၼ်ႇတူးၵ + ၵႂၢမ်းလၢတ်ႈ ၼႃတီသွၼ် + ၵႂၢမ်းလၢတ်ႈ ၼိဝႃႇ/ၵျိဝႃႇ + ဝူဝ်ႇလႃႇပူၵ်ႉ ၵၢပ်ႈပၢၼ်မႂ်ႇ + ၵႂၢမ်းလၢတ်ႈ ဢူဝ်ႇသီးယႃးၵူဝ်ႇ/ဢူဝ်ႇသူဝ်ႇၸႅၼ်ႇ + လွင်ႈတႅမ်ႈလိၵ်ႈ ပပ်ႉပိုတ်ႇတႅတ်ႈ ဢိင်းၵလဵတ်ႈ ဢွၵ်ႉသ်ၾူတ်ႉ + ၵႂၢမ်းလၢတ်ႈပႃႇမၵ + ပိၼ်းယိၼ်း ရူဝ်ႇမႅၼ်ႇ + ပူဝ်ႇလီတွၼ်းၼိၵ်ႉ + ၶွမ်ႇပိဝ်ႇတႃႇ + လၢႆးတႅမ်ႈလိၵ်ႈဢၼ်ၶိုၼ်းမႄးထတ်းဝႆႉ + ၶလၢတ်ႉသိၵ်ႉ ဝူဝ်ႇလႃႇပူၵ်ႉ + ရီႇသျႅၼ်ႇ + သႃႇႁူဝ်ႇ + ၽႃႇသႃႇဢိင်းၵလဵတ်ႈ ပိူင်သၵွတ်ႉ + သၵၢဝ်ႉ + ၵႂၢမ်းလၢတ်ႈ သတူဝ်းလ်ဝီႇၸႃႇ/သူဝ်ႇလ်ပီႇၵႃႇ + ၸုမ်းၵႂၢမ်းလၢတ်ႈ သူဝ်ႇတႃႇဝႅၼ်ႇတူဝ်ႇ ၶွင် ၵႃႇပူႇဝႃႇတီႇဢႃၼူႇ + လိၵ်ႈလၢႆး တႃရႃသၵီးဝီႇၵႃႇ + လၢႆးတႅမ်ႈလိၵ်ႈၽွမ်ႉႁူမ်ႈ + လၢႆးတႅမ်ႈလိၵ်ႈ ဢၼ်ၽွမ်ႉႁူမ်ႈၶိုၼ်းမႄးထတ်းဝႆႉ + တူဝ်လိၵ်ႈယူႇၼီႇၾူၼ်းပၢႆးသဵင် + ဝႃလႅၼ်သီႇယႅၼ်ႇ + ဝဵတ်ႉ-ၵိဝ်းသ် ရူဝ်ႇမႅၼ်ႇ + + + ပၵ်းယဵမ်ႈဝၼ်း + ပိူင်ၽၢင်ငိုၼ်းတွင်း + ၸႅၵ်ႇၶပ်ႉ + ငိုၼ်းတွင်း + လွင်ႈၼႄဢီႇမူဝ်းၵျိ + တူင်ႇဝူင်းယၢမ်းမူင်း (12 လႄႈ 24) + လွင်ႈၶဵင်ႈၶႅင် ၼႂ်းၵၢၼ်တတ်းထႅဝ်လိၵ်ႈ + လွင်ႈတတ်းထႅဝ်ၼႂ်းၶေႃႈၵႂၢမ်း + ပိူင်ၵၢၼ်တႅၵ်ႈ + တူဝ်ၼပ်ႉ + တတ်းတူၼ်ႈထႅဝ်လိၵ်ႈဝၢႆးၵႂၢမ်းယေႃႈ + + + ပၵ်းယဵမ်ႈဝၼ်း ၸၢဝ်းပုတ်ႉထ + ၸၢဝ်းပုတ်ႉထ + ပၵ်းယဵမ်ႈဝၼ်းၶႄႇ + ၶႄႇ + ပၵ်းယဵမ်ႈဝၼ်း ၶွပ်ႉတိၵ်ႉ + ၶွပ်ႉတိၵ်ႉ + ပၵ်းယဵမ်ႈဝၼ်း တႅင်းၵီႇ + တႅင်းၵီႇ + ပၵ်းယဵမ်ႈဝၼ်း ဢီႇတီႇယူဝ်းပီးယႃး + ၸၢဝ်းဢီႇတီႇယူဝ်းပီးယႃး + ပၵ်းယဵမ်ႈဝၼ်း ဢမိတ်ႉဢလႅမ်း ဢီႇတီႇယူဝ်းပီးယႃး + ဢမိတ်ႉဢလႅမ်း ဢီႇတီႇယူဝ်းပီးယႃး + ပၵ်းယဵမ်ႈဝၼ်း ၵရႅၵ်ႉၵူဝ်ႇရီႇယၼ်ႇ + ၵရႅၵ်ႉၵူဝ်ႇရီႇယၼ်ႇ + ပပ်ႉယဵမ်ႈဝၼ်း ႁီးပရူး + ႁီးပရူး + ပၵ်းယဵမ်ႈဝၼ်းၸိူဝ်ႉၸၢတ်ႈဢိၼ်းတီးယႃး + ၸိူဝ်ႉၸၢတ်ႈဢိၼ်းတီးယႃး + ပၵ်းယဵမ်ႈဝၼ်းႁိၸရိ + ႁိၸရိ + ပပ်ႉယဵမ်ႈဝၼ်းႁိၸရိ (လွၵ်းသဵၼ်ႈ၊ ပၢၼ်ၵူၼ်းမိူင်း) + ႁိၸရိ (လွၵ်းသဵၼ်ႈ၊ ပၢၼ်ၵူၼ်းမိူင်း) + ပၵ်းယဵမ်ႈဝၼ်းႁိၸရိ (သေႃႇတီႇဢႃႇရေးပီးယႃး၊ လွင်ႈႁၼ်) + ပၵ်းယဵမ်ႈဝၼ်းႁိၸရိ (လွၵ်းသဵၼ်ႈ၊ ပၢၼ်ပၢႆးလႅင်လၢဝ်) + ႁိၸရိ (လွၵ်းသဵၼ်ႈ၊ ပၢၼ်ပၢႆးလႅင်လၢဝ်) + ပၵ်းယဵမ်ႈဝၼ်းႁိၸရိ (ဢုမ်ဢႄလ်ၵူးရႃႇ) + ႁိၸရိ (ဢုမ်ဢႄလ်ၵူးရႃႇ) + ပၵ်းယဵမ်ႈဝၼ်း ၵရႅၵ်ႉၵူဝ်ႇရီႇယၼ်ႇ (ပီဢွၼ်တၢင်းသုတ်း) + ပၵ်းယဵမ်ႈဝၼ်းၵျႃႇပၢၼ်ႇ + ၸၢဝ်းၵျႃႇပၢၼ်ႇ + ပၵ်းယဵမ်ႈဝၼ်းပႃႇသျႃး + ပႃႇသျႃး + ပၵ်းယဵမ်ႈဝၼ်းမိင်းၵူႈ + မိင်းၵူႈ + ပိူင်ငိုၼ်း ၵၢၼ်ၼပ်ႉသွၼ်ႇ + ၵၢၼ်ၼပ်ႉသွၼ်ႇ + လၵ်းၸဵင် ပိူင်ၽၢင်ငိုၼ်းတွင်း + လၵ်းၸဵင် + ၸႅၵ်ႇၶပ်ႉ ဢၼ်ပူၼ်ႉမႃး တႃႇႁႂ်ႈမၼ်း ၵိုင်ႇငၢမ်ႇၵၼ် + လွင်ႈငမ်ႇမႅၼ်ႈ + ၸႅၵ်ႇၶပ်ႉ ပပ်ႉပိုတ်ႇတႅတ်ႈ + ပပ်ႉပိုတ်ႇတႅတ်ႈ + လၵ်းၸဵင် ၸႅၵ်ႇၶပ်ႉ ယူႇၼီႇၶူတ်ႉ + လၵ်းၸဵင် ယူႇၼီႇၶူတ်ႉ + ၸႅၵ်ႇၶပ်ႉ ဢီႇမူဝ်းၵျိ + ပိူင်ၶပ်ႉၸႅၼ်ႇမိူင်းယူးရူပ်ႉ + ၸႅၵ်ႇၶပ်ႉပပ်ႉၽူၼ်း + ပပ်ႉၽူၼ်း + ပၢႆးသဵင် + ၸႅၵ်ႇၶပ်ႉ ပိၼ်းယိၼ်း + ပိၼ်းယိၼ်း + ၵၢၼ်ၶူၼ်ႉႁႃ ဢၼ်ၸႂ်ႉတိုဝ်း ၵူႈလွင်ႈလွင်ႈ + ၶူၼ်ႉႁႃ + ၶူၼ်ႉႁႃၸွမ်း တူဝ်မႄႈလိၵ်ႈတႄႇ ႁင်းၵူးလ် + ၸႅၵ်ႇၶပ်ႉလၵ်းၸဵင် + လၵ်းၸဵင် + ၸႅၵ်ႇၶပ်ႉ ႁွႆးမိုဝ်းၸၼ် + ႁွႆးမိုဝ်းၸၼ် + ၸႅၵ်ႇၶပ်ႉၽိင်ႈထုင်း + ၽိင်ႈထုင်း + ၸႅၵ်ႇၶပ်ႉ ႁွႆးမိုဝ်း-ငဝ်ႈပိုၼ်ႉ + ႁွႆးမိုဝ်း-ငဝ်ႈပိုၼ်ႉ + ၸႅၵ်ႇၶပ်ႉ ၸူးယိၼ်း + ၸူးယိၼ်း + ငဝ်ႈပိုင်း + ဢီႇမူဝ်းၵျိ + လိၵ်ႈ + ပိူင်ယၢမ်းမူင်း 12 (0–11) + 12 (0–11) + ပိူင်ယၢမ်းမူင်း 12 (1–12) + 12 (1–12) + ပိူင်ယၢမ်းမူင်း 24 (0–23) + 24 (0–23) + ပိူင်ယၢမ်းမူင်း 24 (1–24) + 24 (1–24) + လၢႆးတတ်းထႅဝ်လိၵ်ႈ ဝႆႉလူမ် + ဝႆႉလူမ် + လၢႆးတတ်းထႅဝ်လိၵ်ႈ ပၵတိ + ပၵတိ + လၢႆးတတ်းထႅဝ်လိၵ်ႈ ၶဵင်ႈၶႅင် + ၶဵင်ႈၶႅင် + တတ်းမူတ်း + ဝႆႉမူတ်း + ပၵတိ + သိမ်းဝႆႉၼႂ်း ပွင်ႈလိၵ်ႈ + ပိူင်မႅတ်ႉထရိတ်ႉ + မႅတ်ႉထရိတ်ႉ + ပိူင်ၵၢၼ်တႅၵ်ႈ ဢိမ်ႇၽီးရီးယႄးလ် + ယူႇၶေႇ + ပိူင်ၵၢၼ်တႅၵ်ႈ ယူႇဢႅတ်ႉသ် + ယူႇဢႅတ်ႉသ် + တူဝ်ၼပ်ႉ ဢႃႇႁူမ်ႇ + တူဝ်ၼပ်ႉ ဢႃရပိၵ်ႉ-ဢိၼ်တိၵ်ႉ + တူဝ်ၼပ်ႉ ဢႃရပိၵ်ႉ-ဢိၼ်တိၵ်ႉ ဢၼ်ၶႂၢၵ်ႈဝႆႉ + တူဝ်ၼပ်ႉ ဢႃႇမေးၼီးယႃး + တူဝ်ၼပ်ႉတူဝ်ဢွၼ်ႇ ဢႃႇမေးၼီးယႃး + တူဝ်ၼပ်ႉ ပႃႇလီႇ + တူဝ်ၼပ်ႉ ပင်းၵလႃး + တူဝ်ၼပ်ႉ ပရႃမီႇ + တူဝ်ၼပ်ႉ ၶျႅၵ်ႉမႃး + တူဝ်ၼပ်ႉ ၶျႅမ် + တူဝ်ၼပ်ႉ သရီးရိၵ်ႉ + တူဝ်ၼပ်ႉ တႄဝၼႃးၵရီႇ + တူဝ်ၼပ်ႉ တၢႆႉၾ်ဢၵ်ႉၶူးလူႇ + တူဝ်ၼပ်ႉ ဢီႇတီႇယူဝ်းပီးယႃး + တူဝ်ၼပ်ႉ တၢင်းၵႂၢင်ႈတဵမ်ထူၼ်ႈ + တူဝ်ၼပ်ႉ ၵႃႇရေး + တူဝ်ၼပ်ႉ ၵျေႃႇၵျႃႇ + တူဝ်ၼပ်ႉ ၵုၼ်ၵျႃလႃၵွၼ်းတီႇ + တူဝ်ၼပ်ႉ မသႃရမ်ႇၵွၼ်းတီႇ + တူဝ်ၼပ်ႉ ၵရိတ်ႈ + တူဝ်ၼပ်ႉတူဝ်ဢွၼ်ႇ ၵရိတ်ႈ + တူဝ်ၼပ်ႉ ၵူးၵျရႃႇတီႇ + တူဝ်ၼပ်ႉ ၵူႇရုင်ႇၶေႇမ + တူဝ်ၼပ်ႉ ၵူရမုၵ်ႉၶီႇ + တူဝ်ၼပ်ႉ ၸုတ်ႉၶႄႇ + တူဝ်ၼပ်ႉ ၶႄႇမႂ်ႇ + တူဝ်ၼပ်ႉ ၵၢၼ်ငိုၼ်းတွင်း ၶႄႇမႂ်ႇ + တူဝ်ၼပ်ႉ ၶႄႇၵဝ်ႇ + တူဝ်ၼပ်ႉ ၵၢၼ်ငိုၼ်းတွင်း ၶႄႇၵဝ်ႇ + တူဝ်ၼပ်ႉ ႁီးပရူး + တူဝ်ၼပ်ႉ ပႃႁႃမူင်း + တူဝ်ၼပ်ႉ ၺႃႇၵဵင်းပႂႃႈၶျူႈမူင်း + တူဝ်ၼပ်ႉ ၵျႃႇဝႃး + တူဝ်ၼပ်ႉ ၵျႃႇပၢၼ်ႇ + တူဝ်ၼပ်ႉ ၵၢၼ်ငိုၼ်းတွင်း ၵျႃႇပၢၼ်ႇ + တူဝ်ၼပ်ႉ ၵယႃးလီ + တူဝ်ၼပ်ႉ ၶႃးဝီ + တူဝ်ၼပ်ႉ ၶမဵၼ် + တူဝ်ၼပ်ႉ ၶၼ်ၼႃးတႃႇ + တူဝ်ၼပ်ႉ ၵီႇရတ်ႉရၢႆး + တူဝ်ၼပ်ႉ တႆးထမ်း ႁူဝ်ႇရႃႇ + တူဝ်ၼပ်ႉ တႆးထမ်း + တူဝ်ၼပ်ႉ လၢဝ်း + တူဝ်ၼပ်ႉမိူင်းဝၼ်းတူၵ်း + တူဝ်ၼပ်ႉ လိပ်ႉၶျႃႇ + တူဝ်ၼပ်ႉ လိမ်ပူး + တူဝ်ၼပ်ႉ ပၢႆးၼပ်ႉ ဢၼ်ၼႃ + တူဝ်ၼပ်ႉ ပၢႆးၼပ်ႉ ဢၼ်ပႃးသွင်ႁွႆး + တူဝ်ၼပ်ႉ ပၢႆးၼပ်ႉ မူဝ်ႇၼူဝ်ႇသပေႉသ် + တူဝ်ၼပ်ႉ ပၢႆးၼပ်ႉ သႅၼ်းသႄႇရိပ်ႉ ဢၼ်ၼႃ + တူဝ်ၼပ်ႉ ပၢႆးၼပ်ႉ သႅၼ်းသႄႇရိပ်ႉ + တူဝ်ၼပ်ႉ မလေးယႃးလမ်ႇ + တူဝ်ၼပ်ႉ မူဝ်ႇတီႇ + တူဝ်ၼပ်ႉ မူင်ႇၵူဝ်းလီးယႃး + တူဝ်ၼပ်ႉ မရူဝ်ႇ + တူဝ်ၼပ်ႉ မီး​တီးမယဵၵ်ႇၶ် + တူဝ်ၼပ်ႉမၢၼ်ႈ + တူဝ်ၼပ်ႉ ယၢင်းပူဝ်း မျၢၼ်ႇမႃႇ ပွတ်းဢွၵ်ႇ + တူဝ်ၼပ်ႉ ပဢူဝ်း + တူဝ်ၼပ်ႉတႆး + တူဝ်ၼပ်ႉ တႆးလႅင် + တူဝ်ၼပ်ႉ ၼၢၵ်ႉမုၼ်ႇတရီႇ + တူဝ်ၼပ်ႉ ဢိၼ်းၶူဝ်း + တူဝ်ၼပ်ႉ ဢူဝ်းၶျိၶီ + တူဝ်ၼပ်ႉ ဢူဝ်ႇလ်ဢူဝ်ႇၼႃႇလ် + တူဝ်ၼပ်ႉ ဢူဝ်းတီးယႃႇ + တူဝ်ၼပ်ႉ ဢေႃသမႅၼ်းၺႃႇ + တူဝ်ၼပ်ႉ ဢၢဝ်ႉလၢႆး + တူဝ်ၼပ်ႉ ရူဝ်ႇႁိၼ်ႇၵျႃႇ ႁၼ်ၼီၾီး + တူဝ်ၼပ်ႉ ရူဝ်ႇမႅၼ်ႇ + တူဝ်ၼပ်ႉ တူဝ်ဢွၼ်ႇရူဝ်ႇမႅၼ်ႇ + တူဝ်ၼပ်ႉ သေႃရတ်ႉသ်ျထရႃႇ + တူဝ်ၼပ်ႉ သျႃရႃးတႃႇ + တူဝ်ၼပ်ႉ ၶူးတဝႃႇတီႇ + တူဝ်ၼပ်ႉ သိၼ်ႇႁႃႇလႃႇလိတ်ႉ + တူဝ်ၼပ်ႉ သူဝ်ႇရႃႇသူမ်ႈပႅင်း + တူဝ်ၼပ်ႉ သုၼ်တၼိတ်ႉ + တူဝ်ၼပ်ႉ သုၼုဝႃႇ + တူဝ်ၼပ်ႉ တၵ်ႉၵရီႇ + တူဝ်ၼပ်ႉ တႆးလိုဝ်ႉ + တူဝ်ၼပ်ႉ တမီးလ်ၵဝ်ႇ + တူဝ်ၼပ်ႉ တမီးလ် + တူဝ်ၼပ်ႉ ထႄးလူႇၵူႇ + တူဝ်ၼပ်ႉ ထႆး + တူဝ်ၼပ်ႉ တိပႅတ်ႉ + တူဝ်ၼပ်ႉ တီႇႁူးတႃႇ + တူဝ်ၼပ်ႉ ထႅင်းသႃႇ + တူဝ်ၼပ်ႉ တူဝ်ႇလူင်သီႇၵီႇ + တူဝ်ၼပ်ႉ ဝၢႆး + တူဝ်ၼပ်ႉ ဝႃႇရၢင်းသီႇတီႇ + တူဝ်ၼပ်ႉ ဝၼ်ႉၶျၢဝ် + ဢိုတ်း + ပိုတ်ႇ + + + မႅတ်ႉထရိတ်ႉ + ယူႇၶေႇ + ယူႇဢႅတ်ႉသ် + + + ၽႃႇသႃႇ: {0} + သၶရိပ်ႉ: {0} + တူင်ႇ: {0} + - [\u200Bး ႞ ႟ ၵ ၶ ၷ င ၸ ၺ ꧣ တ ထ ၻ ၼ ပ ၽ ၾ ၿ ꧤ မ ယ ျ ရ ြ လ ဝ ွ ႂ ႀ သ ႁ ဢ ႃ ိ ီ ု ူ ေ ႄ ꧥ ် ႇ ႈ ႉ ႊ] - [ꩡ ꩦ ꩧ ꩨ ꩩ ꩮ] - [ၵ ၶ ၷ ꧠ င ၸ ꩡ ꧡ ꧢ ၺ ꩦ ꩧ ꩨ ꩩ တ ထ ၻ ၼ ပ ၽ ၾ ၿ ꧤ မ ယ ရ လ ဝ ႀ သ ႁ ꩮ ဢ] - [႐ ႑ ႒ ႓ ႔ ႕ ႖ ႗ ႘ ႙] - [၊ ။ ‘’ “”] + [ံး ႞ ႟ ၵ ၶ ၷ ꧠ င ၸ ꩡ ၺ ꩦ ꩧ ꩨ ꩩ ꧣ တ ထ ၻ ꩪ ၼ ပ ၽ ၾ ၿ ꧤ မ ယ ျ ရ ြ လ ဝ ွ ႂ ႀ သ ႁ ꩮ ဢ ႃ ိ ီ ု ူ ေ ႄ ဵ ႅ ႆ ၢ ꧥ ် ႇ ႈ ႉ ႊ] + [၀႐ ၁႑ ၂႒ ၃႓ ၄႔ ၅႕ ၆႖ ၇႗ ၈႘ ၉႙ ၚ ၐ ၑ ၥ ၒ ၓ ၔ ၕ ဨ ဳ ၖ ၗ ၘ ၙ ဴ] + [႞ ႟ ၵ ၶ ၷ ꧠ င ၸ ꩡ ၺ ꧣ တ ထ ၻ ꩪ ၼ ပ ၽ ၾ ၿ မ ယ ရ လ ဝ ႀ သ ႁ ꩮ ဢ] + [\- ‑ , . % ‰ + 0၀႐ 1၁႑ 2၂႒ 3၃႓ 4၄႔ 5၅႕ 6၆႖ 7၇႗ 8၈႘ 9၉႙] + [\- ‐‑ – — … ၊ ။ ‘’ “” ( ) \[ \] \{ \} @ * / #] + + + + + + ပီသႃႇသၼႃႇ + + + ပ.သ. + + + ပ.သ. + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + GGGGG y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + GGGGG y-MM-dd + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM + GGGGG y-MM-dd + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM – GGGGG y-MM + GGGGG y-MM – y-MM + GGGGG y-MM – y-MM + + + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – GGGGG y-MM-dd + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – y-MM-dd + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM – y-MM + GGGGG y-MM – y-MM + + + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – y-MM-dd + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + + + + + r(U) MMMM d - EEEE + + + + + r(U) MMMM d + + + + + r MMM d + + + + + r-MM-dd + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + r MMM d - E + r(U) MMMM d - E + MM-dd - E + MMM d - E + r-MM-dd - E + r MMM d - E + r(U) MMMM d - E + + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + y-MM-dd - E – y-MM-dd - E + y-MM-dd - E – y-MM-dd - E + y-MM-dd - E – y-MM-dd - E + + + U MMM d၊ E – MMM d - E + U MMM d၊ E – MMM d - E + U MMM d၊ E – U MMM d - E + + + + + + + + + ထွၵ်ႉ + ပႃႇပႃႇ + ႁတ်ႉထေႃး + ၵိၶ် + တူဝ်ႇပႃႇ + ဢႅမ်းသႄးရ် + ပရမ်ႇႁတ်ႉ + ပႃႇရႃႇမူဝ်ႇတႃႇ + ပႃႇသၢၼ်ႇ + ပဝ်းၼႃး + ဢႅပ်ႉပႅပ်ႉ + မႅတ်ႉသရႃႇ + ၼႃႇသီႇ + + + ထွၵ်ႉ + ပႃႇပႃႇ + ႁတ်ႉထေႃး + ၵိၶ် + တူဝ်ႇပႃႇ + ဢႅမ်းသႄးရ် + ပရမ်ႇႁတ်ႉ + ပႃႇရႃႇမူဝ်ႇတႃႇ + ပႃႇသၢၼ်ႇ + ပဝ်းၼႃး + ဢႅပ်ႉပႅပ်ႉ + မႅတ်ႉသရႃႇ + ၼႃႇသီႇ + + + + + ထွၵ်ႉ + ပႃႇပႃႇ + ႁတ်ႉထေႃး + ၵိၶ် + တူဝ်ႇပႃႇ + ဢႅမ်းသႄးရ် + ပရမ်ႇႁတ်ႉ + ပႃႇရႃႇမူဝ်ႇတႃႇ + ပႃႇသၢၼ်ႇ + ပဝ်းၼႃး + ဢႅပ်ႉပႅပ်ႉ + မႅတ်ႉသရႃႇ + ၼႃႇသီႇ + + + ထွၵ်ႉ + ပႃႇပႃႇ + ႁတ်ႉထေႃး + ၵိၶ် + တူဝ်ႇပႃႇ + ဢႅမ်းသႄးရ် + ပရမ်ႇႁတ်ႉ + ပႃႇရႃႇမူဝ်ႇတႃႇ + ပႃႇသၢၼ်ႇ + ပဝ်းၼႃး + ဢႅပ်ႉပႅပ်ႉ + မႅတ်ႉသရႃႇ + ၼႃႇသီႇ + + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + GGGGG y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + GGGGG y-MM-dd + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM + GGGGG y-MM-dd + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM – GGGGG y-MM + GGGGG y-MM – y-MM + GGGGG y-MM – y-MM + + + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – GGGGG y-MM-dd + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – y-MM-dd + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + HH–HH + + + HH–HHမ v + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM – y-MM + GGGGG y-MM – y-MM + + + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – y-MM-dd + GGGGG y-MM-dd – y-MM-dd + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + လိူၼ်ထူၼ်ႈၼိုင်ႈ + လိူၼ်ထူၼ်ႈသွင် + လိူၼ်ထူၼ်ႈသၢမ် + လိူၼ်ထူၼ်ႈသီႇ + လိူၼ်ထူၼ်ႈႁႃႈ + လိူၼ်ထူၼ်ႈႁူၵ်း + လိူၼ်ထူၼ်ႈၸဵတ်း + လိူၼ်ထူၼ်ႈပႅတ်ႇ + လိူၼ်ထူၼ်ႈၵဝ်ႈ + လိူၼ်ထူၼ်ႈသိပ်း + လိူၼ်ထူၼ်ႈသိပ်းဢဵတ်း + လိူၼ်ထူၼ်ႈသိပ်းသွင် + + + + + + + r(U) MMMM d - EEEE + + + + + r(U) MMMM d + + + + + r MMM d + + + + + r-MM-dd + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + r MMM d - E + r(U) MMMM d - E + MM-dd - E + MMM d - E + r-MM-dd - E + r MMM d - E + r(U) MMMM d - E + + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + y-MM-dd - E – y-MM-dd - E + y-MM-dd - E – y-MM-dd - E + y-MM-dd - E – y-MM-dd - E + + + U MMM d၊ E – MMM d - E + U MMM d၊ E – MMM d - E + U MMM d၊ E – U MMM d - E + + + + + + + + + မႅတ်ႉသ်ရႅမ်ႇ + တႅၵ်ႉၵမ်ႇ + ႁႄႇတႃႇ + တႃးသတ်ႉသ် + တႄးလ် + ယေႇၵတိတ်ႉ + မႅၵ်ႇၵႃႇပိတ်ႉ + မိယႃႇၸီႇယႃႇ + ၵႅၼ်ႇပၢတ်ႉ + သိၼ်း + ႁႅမ်းလႄး + ၼႁၢတ်ႉသ် + ပႃႇၵူႇမႅၼ်ႇ + + + မႅတ်ႉသ်ရႅမ်ႇ + တႅၵ်ႉၵမ်ႇ + ႁႄႇတႃႇ + တႃးသတ်ႉသ် + တႄးလ် + ယေႇၵတိတ်ႉ + မႅၵ်ႇၵႃႇပိတ်ႉ + မိယႃႇၸီႇယႃႇ + ၵႅၼ်ႇပၢတ်ႉ + သိၼ်း + ႁႅမ်းလႄး + ၼႁၢတ်ႉသ် + ပႃႇၵူႇမႅၼ်ႇ + + + + + မႅတ်ႉသ်ရႅမ်ႇ + တႅၵ်ႉၵမ်ႇ + ႁႄႇတႃႇ + တႃးသတ်ႉသ် + တႄးလ် + ယေႇၵတိတ်ႉ + မႅၵ်ႇၵႃႇပိတ်ႉ + မိယႃႇၸီႇယႃႇ + ၵႅၼ်ႇပၢတ်ႉ + သိၼ်း + ႁႅမ်းလႄး + ၼႁၢတ်ႉသ် + ပႃႇၵူႇမႅၼ်ႇ + + + မႅတ်ႉသ်ရႅမ်ႇ + တႅၵ်ႉၵမ်ႇ + ႁႄႇတႃႇ + တႃးသတ်ႉသ် + တႄးလ် + ယေႇၵတိတ်ႉ + မႅၵ်ႇၵႃႇပိတ်ႉ + မိယႃႇၸီႇယႃႇ + ၵႅၼ်ႇပၢတ်ႉ + သိၼ်း + ႁႅမ်းလႄး + ၼႁၢတ်ႉသ် + ပႃႇၵူႇမႅၼ်ႇ + + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + + ၸၼ်ႇ + ၾႅပ်ႇ + မၢတ်ႉၶ်ျ + ဢေႇ + မေႇ + ၸုၼ်ႇ + ၸူႇ + ဢေႃး + သႅပ်ႇ + ဢွၵ်ႇ + ၼူဝ်ႇ + တီႇ + + + ၸ. + ၾ. + မ. + ဢ. + မ. + ၸ. + ၸ. + ဢ. + သ. + ဢ. + ၼ. + တ. + + + ၸၼ်ႇဝႃႇရီႇ + ၾႅပ်ႇဝႃႇရီႇ + မၢတ်ႉၶ်ျ + ဢေႇပရႄႇ + မေႇ + ၸုၼ်ႇ + ၸူႇလၢႆႇ + ဢေႃးၵၢတ်ႉ + သႅပ်ႇထႅမ်ႇပႃႇ + ဢွၵ်ႇထူဝ်ႇပႃႇ + ၼူဝ်ႇဝႅမ်ႇပႃႇ + တီႇသႅမ်ႇပႃႇ + + + + + ၸၼ်ႇ + ၾႅပ်ႇ + မၢတ်ႉၶ်ျ + ဢေႇ + မေႇ + ၸုၼ်ႇ + ၸူႇ + ဢေႃး + သႅပ်ႇ + ဢွၵ်ႇ + ၼူဝ်ႇ + တီႇ + + + ၸ. + ၾ. + မ. + ဢ. + မ. + ၸ. + ၸ. + ဢ. + သ. + ဢ. + ၼ. + တ. + + + ၸၼ်ႇဝႃႇရီႇ + ၾႅပ်ႇဝႃႇရီႇ + မၢတ်ႉၶ်ျ + ဢေႇပရႄႇ + မေႇ + ၸုၼ်ႇ + ၸူႇလၢႆႇ + ဢေႃးၵၢတ်ႉ + သႅပ်ႇထႅမ်ႇပႃႇ + ဢွၵ်ႇထူဝ်ႇပႃႇ + ၼူဝ်ႇဝႅမ်ႇပႃႇ + တီႇသႅမ်ႇပႃႇ + + + + + + + တိတ်ႉ + ၸၼ် + ၵၢၼ်း + ပုတ်ႉ + ၽတ်း + သုၵ်း + သဝ် + + + တိ. + ၸ. + ၵ. + ပု. + ၽ. + သု. + သ. + + + တိတ်ႉ + ၸၼ် + ၵၢၼ်း + ပုတ်ႉ + ၽတ်း + သုၵ်း + သဝ် + + + ဝၼ်းဢႃးတိတ်ႉ + ဝၼ်းၸၼ် + ဝၼ်းဢင်းၵၢၼ်း + ဝၼ်းပုတ်ႉ + ဝၼ်းၽတ်း + ဝၼ်းသုၵ်း + ဝၼ်းသဝ် + + + + + တိတ်ႉ + ၸၼ် + ၵၢၼ်း + ပုတ်ႉ + ၽတ်း + သုၵ်း + သဝ် + + + တိ. + ၸ. + ၵ. + ပု. + ၽ. + သု. + သ. + + + တိတ်ႉ + ၸၼ် + ၵၢၼ်း + ပုတ်ႉ + ၽတ်း + သုၵ်း + သဝ် + + + တိတ်ႉ + ၸၼ် + ၵၢၼ်း + ပုတ်ႉ + ၽတ်း + သုၵ်း + သဝ် + + + + + + + သၢမ်လိူၼ်ႁွပ်ႈ 1 + သၢမ်လိူၼ်ႁွပ်ႈ 2 + သၢမ်လိူၼ်ႁွပ်ႈ 3 + သၢမ်လိူၼ်ႁွပ်ႈ 4 + + + သၢမ်လိူၼ်ႁွပ်ႈ 1 + သၢမ်လိူၼ်ႁွပ်ႈ 2 + သၢမ်လိူၼ်ႁွပ်ႈ 3 + သၢမ်လိူၼ်ႁွပ်ႈ 4 + + + + + ႁွပ်ႈ1 + ႁွပ်ႈ2 + ႁွပ်ႈ3 + ႁွပ်ႈ4 + + + သၢမ်လိူၼ်ႁွပ်ႈ 1 + သၢမ်လိူၼ်ႁွပ်ႈ 2 + သၢမ်လိူၼ်ႁွပ်ႈ 3 + သၢမ်လိူၼ်ႁွပ်ႈ 4 + + + + + + + တၸ. + တလ. + + + ၸ. + လ. + + + တွၼ်ႈၸဝ်ႉ + တွၼ်ႈလႃႈ + + + + + တၸ. + တလ. + + + တၸ. + တလ. + + + တွၼ်ႈၸဝ်ႉ + တွၼ်ႈလႃႈ + + + + + + ဢွၼ်ၼႃႈၸဝ်ႈၶရိတ်ႉ + ဢွၼ်ၼႃႈပၢၼ်ၵၢင်လၢႆ + ပီၶရိတ်ႉ + ပၢၼ်ၵၢင်လၢႆ + + + ပီႇၸီႇ + ပီႇၸီႇဢီး + ဢေႇတီႇ + ၸီႇဢီး + + + ပီႇၸီႇ + ပီႇၸီႇဢီး + ဢေႇတီႇ + ၸီႇဢီး + + + + + + y MMMM d - EEEE + + + + + y MMMM d + + + + + y MMM d + + + + + y-MM-dd + + + + + + + HH:mm:ss zzzz + + + + + HH:mm:ss z + + + + + HH:mm:ss + + + + + HH:mm + + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + ဝူင်ႈထူၼ်ႈ W ၶွင်လိူၼ် MMMM + y-MM-dd - E + y MMM d - E + ဝူင်ႈထူၼ်ႈ w ၶွင်ပီ Y + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + y-MM-dd - E – y-MM-dd - E + y-MM-dd - E – y-MM-dd - E + y-MM-dd - E – y-MM-dd - E + + + y MMM d - E – MMM d - E + y MMM d - E – MMM d - E + y MMM d - E – y MMM d - E + + + + + + + + + တိသျရိ + ႁေႇသျဝၼ်ႇ + ၶိတ်ႉသလႅပ်ႉ + တႄႇဝႅတ်ႉ + သျေႇဝတ်ႉ + ဢႃႇတႃႇ I + ဢႃႇတႃႇ + ဢႃႇတႃႇ II + ၼီႇသၢၼ်း + ဢီႇယႃႇ + သီႇဝၼ်ႇ + တမ်ႇမုတ်ႉၸ် + ဢၢပ်ႉၾ် + ဢႄႇလူးလ် + + + တိသျရိ + ႁေႇသျဝၼ်ႇ + ၶိတ်ႉသလႅပ်ႉ + တႄႇဝႅတ်ႉ + သျေႇဝတ်ႉ + ဢႃႇတႃႇ I + ဢႃႇတႃႇ + ဢႃႇတႃႇ II + ၼီႇသၢၼ်း + ဢီႇယႃႇ + သီႇဝၼ်ႇ + တမ်ႇမုတ်ႉၸ် + ဢၢပ်ႉၾ် + ဢႄႇလူးလ် + + + + + တိသျရိ + ႁေႇသျဝၼ်ႇ + ၶိတ်ႉသလႅပ်ႉ + တႄႇဝႅတ်ႉ + သျေႇဝတ်ႉ + ဢႃႇတႃႇ I + ဢႃႇတႃႇ + ဢႃႇတႃႇ II + ၼီႇသၢၼ်း + ဢီႇယႃႇ + သီႇဝၼ်ႇ + တမ်ႇမုတ်ႉၸ် + ဢၢပ်ႉၾ် + ဢႄႇလူးလ် + + + တိသျရိ + ႁေႇသျဝၼ်ႇ + ၶိတ်ႉသလႅပ်ႉ + တႄႇဝႅတ်ႉ + သျေႇဝတ်ႉ + ဢႃႇတႃႇ I + ဢႃႇတႃႇ + ဢႃႇတႃႇ II + ၼီႇသၢၼ်း + ဢီႇယႃႇ + သီႇဝၼ်ႇ + တမ်ႇမုတ်ႉၸ် + ဢၢပ်ႉၾ် + ဢႄႇလူးလ် + + + + + + တ.ၸ. + + + တ.ၸ. + + + တ.ၸ. + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + + ၵျၢႆးတရႃႇ + ဝၢႆးသႃၶႃႇ + ၵျႅတ်ႉသ်ထႃႇ + ဢသႃထႃ + သရဝၼ + ၽႃႇတရႃႇ + ဢသဝိၼႃႇ + ၵႃတိၵႃႇ + ဢၵရႃႇႁႃယႃၼႃႇ + ​ပေႃးသႃႇ + မႃႇၵႃႇ + ၽႃလ်ၵူၼႃႇ + + + ၵျၢႆးတရႃႇ + ဝၢႆးသႃၶႃႇ + ၵျႅတ်ႉသ်ထႃႇ + ဢသႃထႃ + သရဝၼ + ၽႃႇတရႃႇ + ဢသဝိၼႃႇ + ၵႃတိၵႃႇ + ဢၵရႃႇႁႃယႃၼႃႇ + ​ပေႃးသႃႇ + မႃႇၵႃႇ + ၽႃလ်ၵူၼႃႇ + + + + + ၵျၢႆးတရႃႇ + ဝၢႆးသႃၶႃႇ + ၵျႅတ်ႉသ်ထႃႇ + ဢသႃထႃ + သရဝၼ + ၽႃႇတရႃႇ + ဢသဝိၼႃႇ + ၵႃတိၵႃႇ + ဢၵရႃႇႁႃယႃၼႃႇ + ​ပေႃးသႃႇ + မႃႇၵႃႇ + ၽႃလ်ၵူၼႃႇ + + + ၵျၢႆးတရႃႇ + ဝၢႆးသႃၶႃႇ + ၵျႅတ်ႉသ်ထႃႇ + ဢသႃထႃ + သရဝၼ + ၽႃႇတရႃႇ + ဢသဝိၼႃႇ + ၵႃတိၵႃႇ + ဢၵရႃႇႁႃယႃၼႃႇ + ​ပေႃးသႃႇ + မႃႇၵႃႇ + ၽႃလ်ၵူၼႃႇ + + + + + + သၵ်ႉၵႃႇ + + + သၵ်ႉၵႃႇ + + + သၵ်ႉၵႃႇ + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + + မူႇ. + သႃႇ. + ရႃႇ. I + ရႃႇ. II + ၵျူႇ. I + ၵျူႇ. II + ရႃႇၸ်. + သျႃး. + ရႃ. + သျေႃး. + ၻူဝ်ႇလ်.ၵ. + ၻူဝ်ႇလ်.ႁ. + + + မူႇႁႃႇရမ်ႇ + သႃႇၾႃႇ + ရႃႇပီႇ I + ရႃႇပီႇ II + ၵျူႇမႃႇတႃႇ I + ၵျူႇမႃႇတႃႇ II + ရႃႇၸၢပ်ႉ + သျႃးပၢၼ်ႇ + ရႃႇမႃႇတၢၼ်ႇ + သျေႃးဝႃႇလ် + ၻူဝ်ႇလ်-ၵိတ + ၻူဝ်ႇလ်ႁိတ်ႉၸႃႇ + + + + + မူႇ. + သႃႇ. + ရႃႇ. I + ရႃႇ. II + ၵျူႇ. I + ၵျူႇ. II + ရႃႇၸ်. + သျႃး. + ရႃ. + သျေႃး. + ၻူဝ်ႇလ်.ၵ. + ၻူဝ်ႇလ်.ႁ. + + + မူႇႁႃႇရမ်ႇ + သႃႇၾႃႇ + ရႃႇပီႇ I + ရႃႇပီႇ II + ၵျူႇမႃႇတႃႇ I + ၵျူႇမႃႇတႃႇ II + ရႃႇၸၢပ်ႉ + သျႃးပၢၼ်ႇ + ရႃႇမႃႇတၢၼ်ႇ + သျေႃးဝႃႇလ် + ၻူဝ်ႇလ်-ၵိတ + ၻူဝ်ႇလ်ႁိတ်ႉၸႃႇ + + + + + + ပီႁေးၵျိရႃႇ + ဢွၼ်ၼႃႈ ႁေးၵျိရႃႇ + + + ပ.ႁ. + ဢ.ႁ. + + + ပ.ႁ. + ဢ.ႁ. + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + တႆးၵႃႇ (645–650) + ႁၵုၶျိ (650–671) + ႁၵုႁူဝ်ႇ (672–686) + သူးၶျူဝ်ႇ (686–701) + တႆးႁူဝ်ႇ (701–704) + ၵေးယိုင်ႇ (704–708) + ဝႃးတူဝ်ႇ (708–715) + ရေးၵီႇ (715–717) + ယူဝ်းရူဝ်ႇ (717–724) + ၸိၼ်ႈၵီႇ (724–729) + တႅၼ်းပျူဝ်ႇ (729–749) + တႅၼ်းပျူဝ်ႇ-ၵၼ်းပူဝ်ႇ (749–749) + တႅၼ်းပျူဝ်ႇ-သျူဝ်းႁူဝ်ႇ (749–757) + တႅၼ်းပျူဝ်ႇ-ႁူဝ်ႇၸီႇ (757–765) + တႅၼ်းပျူဝ်ႇ-ၸိၼ်းၵူဝ်ႇ (765–767) + ၸိၼ်းၵူဝ်ႇ-ၵေးယိုင်ႇ (767–770) + ႁူဝ်ၵီႇ (770–780) + တႅၼ်းဢူဝ်ႇ (781–782) + ဢႅၼ်ရိယႃၵု (782–806) + တႆးတူဝ်ႇ (806–810) + ၶူဝ်းၼိၼ်ႇ (810–824) + တႅၼ်းၶျူဝ်ႇ (824–834) + ၸူဝ်းဝႃႇ (834–848) + ၵႃးသျူဝ်ႇ (848–851) + ၼိၼ်းၸူႇ (851–854) + သၢႆးၵူဝ်ႇ (854–857) + တႅၼ်းဢၼ်ႇ (857–859) + ၸူဝ်းၵၼ်ႇ (859–877) + ၵၼ်းၵျူဝ်ႇ (877–885) + ၼိၼ်းၼႃႇ (885–889) + ၵၼ်းပျူဝ်ႇ (889–898) + သျူဝ်းတႆႇ (898–901) + ဢႅၼ်းၵီႇ (901–923) + ဢႅၼ်းၶျူဝ်ႇ (923–931) + ၸူဝ်းႁေႇ (931–938) + တႅၼ်းၵျူဝ်ႇ (938–947) + တႅၼ်းရိယႃၵု (947–957) + တႅၼ်းတူဝ်ၵု (957–961) + ဢူဝ်းဝႃႇ (961–964) + ၵူဝ်းႁူဝ်ႇ (964–968) + ဢၼ်းၼႃႇ (968–970) + တႅၼ်းရိယႃၵု (970–973) + တႅၼ်းဢႅၼ်ႇ (973–976) + ၸူဝ်းၵႅၼ်ႇ (976–978) + တႅၼ်းၵႅၼ်ႇ (978–983) + ဢီးၵၼ်ႇ (983–985) + ၶၢၼ်းၼႃႉ (985–987) + ဢီးဢႅၼ်ႇ (987–989) + ဢီးသူဝ်ႇ (989–990) + သျူဝ်းရိယႃၵု (990–995) + ၶျူဝ်းတူဝ်ၵု (995–999) + ၶျူဝ်းႁူဝ်ႇ (999–1004) + ၶၢၼ်းၵူဝ်ႇ (1004–1012) + ၶျူဝ်းဝႃႇ (1012–1017) + ၶၢၼ်းၼိၼ်ႇ (1017–1021) + ၸီးဢၼ်ႇ (1021–1024) + မၼ်းၸူႇ (1024–1028) + ၶျူဝ်းၵႅၼ်ႇ (1028–1037) + ၶျူဝ်းရိယႃၵု (1037–1040) + ၶျူဝ်းၵျူႇ (1040–1044) + ၶၢၼ်းတူဝ်ၵု (1044–1046) + ဢီးသျူဝ်ႇ (1046–1053) + တႅၼ်းၵီႇ (1053–1058) + ၶူဝ်းႁေႇ (1058–1065) + ၸီးရိယႃၵု (1065–1069) + ဢႅၼ်းၵျူႇ (1069–1074) + ၸူဝ်းႁူဝ်ႇ (1074–1077) + သျူဝ်းရိယႃၵု (1077–1081) + ဢီးႁူဝ်ႇ (1081–1084) + ဢူဝ်းတူဝ်ၵု (1084–1087) + ၶၢၼ်းၸီႇ (1087–1094) + ၵႃးႁူဝ်ႇ (1094–1096) + ဢီးၶျူဝ်ႇ (1096–1097) + ၸူဝ်းတူဝ်ၵု (1097–1099) + ၵူဝ်းဝႃႇ (1099–1104) + ၶျူဝ်းၸီႇ (1104–1106) + ၵႃးသျူဝ်ႇ (1106–1108) + တႅၼ်းၼိၼ်ႇ (1108–1110) + တႅၼ်းဢီႇ (1110–1113) + ဢီးၵျူႇ (1113–1118) + ၵႅၼ်းဢီႇ (1118–1120) + ႁူဝ်းဢၼ်ႇ (1120–1124) + တႅၼ်းၸီႇ (1124–1126) + တႆးၸီႇ (1126–1131) + တႅၼ်းသျူဝ်ႇ (1131–1132) + ၶျူဝ်းသျူဝ်ႇ (1132–1135) + ႁူဝ်းဢႅၼ်ႇ (1135–1141) + ဢီးၸီႇ (1141–1142) + ၵူဝ်းၸီႇ (1142–1144) + တႅၼ်းယူဝ်ႇ (1144–1145) + ၵျူးဢၼ်ႇ (1145–1151) + ၼိၼ်းပေႇ (1151–1154) + ၵျူးၸူႇ (1154–1156) + ႁူဝ်းၵႅၼ်ႇ (1156–1159) + ႁေးၸီႇ (1159–1160) + ဢီးရိယႃၵု (1160–1161) + ဢူဝ်းႁူဝ်ႇ (1161–1163) + ၶျူဝ်းၵၼ်ႇ (1163–1165) + ဢီးမၼ်ႇ (1165–1166) + ၼိၼ်းဢၼ်ႇ (1166–1169) + ၵႃးဢူဝ်ႇ (1169–1171) + သျူဝ်းဢၼ်ႇ (1171–1175) + ဢၼ်းၵႅၼ်ႇ (1175–1177) + ၸီးသျူဝ်ႇ (1177–1181) + ယူဝ်းဝႃႇ (1181–1182) + ၸူးဢီႇ (1182–1184) + ၵႅၼ်းရိယႃၵု (1184–1185) + ပုၼ်းၸီႇ (1185–1190) + ၵႅၼ်းၵျူႇ (1190–1199) + သျူဝ်းၸီႇ (1199–1201) + ၵႅၼ်းၼိၼ်ႇ (1201–1204) + ၵႅၼ်းၵျူႇ (1204–1206) + ၵႅၼ်းဢီႇ (1206–1207) + ၸူဝ်းၵႅၼ်ႇ (1207–1211) + ၵႅၼ်းရိယႃၵု (1211–1213) + ၵႅၼ်းပူဝ်ႇ (1213–1219) + ၸူဝ်းၵျူႇ (1219–1222) + ၸူဝ်းဢူဝ်ႇ (1222–1224) + ၵႅၼ်းၼိၼ်ႇ (1224–1225) + ၵႃးရူဝ်ၵု (1225–1227) + ဢၼ်းတေႇ (1227–1229) + ၶၢၼ်းၵီႇ (1229–1232) + ၸူဝ်းဢီႇ (1232–1233) + တႅၼ်းပုၵု (1233–1234) + ပုၼ်းရိယႃၵု (1234–1235) + ၵႃးတေႇ (1235–1238) + ယႃးၵုၼိၼ်း (1238–1239) + ဢၼ်းဢူဝ်ႇ (1239–1240) + ၼိၼ်းၸီႇ (1240–1243) + ၵၼ်းၵႅၼ်ႇ (1243–1247) + ႁူဝ်းၸီႇ (1247–1249) + ၵႅၼ်းၶျူဝ်ႇ (1249–1256) + ၵူဝ်းၵႅၼ်ႇ (1256–1257) + သျူဝ်းၵႃႇ (1257–1259) + သျူဝ်းၵႅၼ်ႇ (1259–1260) + ပုၼ်းဢူဝ်ႇ (1260–1261) + ၵူဝ်းၶျူဝ်ႇ (1261–1264) + ပုၼ်းဢီႇ (1264–1275) + ၶၢၼ်းၸီႇ (1275–1278) + ၶူဝ်းဢၼ်ႇ (1278–1288) + သျူဝ်းဢူဝ်ႇ (1288–1293) + ဢီးၼိၼ်ႇ (1293–1299) + သျူဝ်းဢၼ်ႇ (1299–1302) + ၵႅၼ်းၵႅၼ်ႇ (1302–1303) + ၵႃးၵႅၼ်ႇ (1303–1306) + တူဝ်းၵုၸိ (1306–1308) + ဢၼ်းၵျူဝ်ႇ (1308–1311) + ဢူဝ်းၶျူဝ်ႇ (1311–1312) + သျူဝ်းဝႃႇ (1312–1317) + ပုၼ်းပူဝ်ႇ (1317–1319) + ၵႅၼ်းဢူဝ်ႇ (1319–1321) + ၵႅၼ်းၵူဝ်ႇ (1321–1324) + သျူဝ်းၶျူႇ (1324–1326) + ၵႃးရိယႃၵု (1326–1329) + ၵႅၼ်းတူဝ်ၵု (1329–1331) + ၵႅၼ်းၵူဝ်ႇ (1331–1334) + ၵႅၼ်းမူႇ (1334–1336) + ဢၼ်းၵႅၼ်ႇ (1336–1340) + ၵူဝ်းၵူဝ်ၵု (1340–1346) + သျူဝ်းႁေႇ (1346–1370) + ၵႅၼ်းတူဝ်ၵု (1370–1372) + ပုၼ်းၶျူႇ (1372–1375) + တႅၼ်းၸူႇ (1375–1379) + ၵူဝ်းရိယႃၵု (1379–1381) + ၵူဝ်းဝႃႇ (1381–1384) + ၵႅၼ်းၶျူႇ (1384–1392) + သျီးတူဝ်ၵု (1384–1387) + ၵႃးၵေႇ (1387–1389) + ၵူဝ်းဢူဝ်ႇ (1389–1390) + မေးတူဝ်ၵု (1390–1394) + ဢူဝ်းဢီႇ (1394–1428) + သျူဝ်းၶျူဝ်ႇ (1428–1429) + ဢီးၶျူဝ်ႇ (1429–1441) + ၵႃးၵိသု (1441–1444) + ပုၼ်းဢၼ်ႇ (1444–1449) + ႁူဝ်းတူဝ်ႇၵု (1449–1452) + ၵျူဝ်းတူဝ်ၵု (1452–1455) + ၵူဝ်းသျူဝ်ႇ (1455–1457) + ၶျူဝ်းရူဝ်ၵု (1457–1460) + ၵၼ်းသျူဝ်ႇ (1460–1466) + ပုၼ်းသျူဝ်ႇ (1466–1467) + ဢူဝ်းၼိၼ်ႇ (1467–1469) + ပုၼ်းမေႇ (1469–1487) + ၶျူဝ်းၵျူဝ်ႇ (1487–1489) + ဢၼ်းတူဝ်ၵု (1489–1492) + မေးဢူဝ်ႇ (1492–1501) + ပုၼ်းၵီႇ (1501–1504) + ဢီးသျူဝ်ႇ (1504–1521) + တႆးဢီႇ (1521–1528) + ၵျူဝ်းရူဝ်ၵု (1528–1532) + တႅၼ်းပုၼ်ႇ (1532–1555) + ၵူဝ်းၸီႇ (1555–1558) + ဢီးရူဝ်ၵု (1558–1570) + ၵႅၼ်းၵီႇ (1570–1573) + တႅၼ်းသျူဝ်ႇ (1573–1592) + ပုၼ်းရူဝ်ၵု (1592–1596) + ၵေးၶျူဝ်ႇ (1596–1615) + ၵႅၼ်းၼႃႇ (1615–1624) + ၶၢၼ်းဢီႇ (1624–1644) + သျူဝ်းႁူဝ်ႇ (1644–1648) + ၵေးဢၼ်ႇ (1648–1652) + ၸူဝ်းဢူဝ်ႇ (1652–1655) + မေးရေၵိ (1655–1658) + မၼ်းၸီႇ (1658–1661) + ၶၢၼ်းပုၼ်ႇ (1661–1673) + ဢၼ်းပူဝ်ႇ (1673–1681) + တႅၼ်းၼႃႇ (1681–1684) + ၸူဝ်းၵျူဝ်ႇ (1684–1688) + ၵႅၼ်းရူဝ်ၵု (1688–1704) + ႁူဝ်းဢီႇ (1704–1711) + သျူဝ်းတူဝ်ၵု (1711–1716) + ၵျူဝ်းႁူဝ်ႇ (1716–1736) + ၵႅၼ်းပုၼ်ႇ (1736–1741) + ၶၢၼ်းပူဝ်ႇ (1741–1744) + ဢၼ်းၵျူဝ်ႇ (1744–1748) + ၶၢၼ်းဢႅၼ်ႇ (1748–1751) + ႁူဝ်းရေၵိ (1751–1764) + မေးဝႃႇ (1764–1772) + ဢၼ်းဢီႇ (1772–1781) + တႅၼ်းမေႇ (1781–1789) + ၶၢၼ်းသေႇ (1789–1801) + ၵျူဝ်းဝႃႇ (1801–1804) + ပုၼ်းၵႃႇ (1804–1818) + ပုၼ်းသေႇ (1818–1830) + တၼ်းပူဝ်ႇ (1830–1844) + ၵူဝ်းၵႃႇ (1844–1848) + ၵႃးဢီႇ (1848–1854) + ဢၼ်းသေႇ (1854–1860) + မၼ်းဢႅၼ်ႇ (1860–1861) + ပုၼ်းၵျူႇ (1861–1864) + ၵႅၼ်းၸီႇ (1864–1865) + ၵေးဢူဝ်ႇ (1865–1868) + မေးၸီႇ + တႆးသျူဝ်ႇ + သျူဝ်းဝႃႇ + ႁေးသႄႇ + ရေးဝႃႇ + + + တႆးၵႃႇ (645–650) + ႁၵုၶျိ (650–671) + ႁၵုႁူဝ်ႇ (672–686) + သူးၶျူဝ်ႇ (686–701) + တႆးႁူဝ်ႇ (701–704) + ၵေးယိုင်ႇ (704–708) + ဝႃးတူဝ်ႇ (708–715) + ရေးၵီႇ (715–717) + ယူဝ်းရူဝ်ႇ (717–724) + ၸိၼ်ႈၵီႇ (724–729) + တႅၼ်းပျူဝ်ႇ (729–749) + တႅၼ်းပျူဝ်ႇ-ၵၼ်းပူဝ်ႇ (749–749) + တႅၼ်းပျူဝ်ႇ-သျူဝ်းႁူဝ်ႇ (749–757) + တႅၼ်းပျူဝ်ႇ-ႁူဝ်ႇၸီႇ (757–765) + တႅၼ်းပျူဝ်ႇ-ၸိၼ်းၵူဝ်ႇ (765–767) + ၸိၼ်းၵူဝ်ႇ-ၵေးယိုင်ႇ (767–770) + ႁူဝ်ၵီႇ (770–780) + တႅၼ်းဢူဝ်ႇ (781–782) + ဢႅၼ်ရိယႃၵု (782–806) + တႆးတူဝ်ႇ (806–810) + ၶူဝ်းၼိၼ်ႇ (810–824) + တႅၼ်းၶျူဝ်ႇ (824–834) + ၸူဝ်းဝႃႇ (834–848) + ၵႃးသျူဝ်ႇ (848–851) + ၼိၼ်းၸူႇ (851–854) + သၢႆးၵူဝ်ႇ (854–857) + တႅၼ်းဢၼ်ႇ (857–859) + ၸူဝ်းၵၼ်ႇ (859–877) + ၵၼ်းၵျူဝ်ႇ (877–885) + ၼိၼ်းၼႃႇ (885–889) + ၵၼ်းပျူဝ်ႇ (889–898) + သျူဝ်းတႆႇ (898–901) + ဢႅၼ်းၵီႇ (901–923) + ဢႅၼ်းၶျူဝ်ႇ (923–931) + ၸူဝ်းႁေႇ (931–938) + တႅၼ်းၵျူဝ်ႇ (938–947) + တႅၼ်းရိယႃၵု (947–957) + တႅၼ်းတူဝ်ၵု (957–961) + ဢူဝ်းဝႃႇ (961–964) + ၵူဝ်းႁူဝ်ႇ (964–968) + ဢၼ်းၼႃႇ (968–970) + တႅၼ်းရိယႃၵု (970–973) + တႅၼ်းဢႅၼ်ႇ (973–976) + ၸူဝ်းၵႅၼ်ႇ (976–978) + တႅၼ်းၵႅၼ်ႇ (978–983) + ဢီးၵၼ်ႇ (983–985) + ၶၢၼ်းၼႃႉ (985–987) + ဢီးဢႅၼ်ႇ (987–989) + ဢီးသူဝ်ႇ (989–990) + သျူဝ်းရိယႃၵု (990–995) + ၶျူဝ်းတူဝ်ၵု (995–999) + ၶျူဝ်းႁူဝ်ႇ (999–1004) + ၶၢၼ်းၵူဝ်ႇ (1004–1012) + ၶျူဝ်းဝႃႇ (1012–1017) + ၶၢၼ်းၼိၼ်ႇ (1017–1021) + ၸီးဢၼ်ႇ (1021–1024) + မၼ်းၸူႇ (1024–1028) + ၶျူဝ်းၵႅၼ်ႇ (1028–1037) + ၶျူဝ်းရိယႃၵု (1037–1040) + ၶျူဝ်းၵျူႇ (1040–1044) + ၶၢၼ်းတူဝ်ၵု (1044–1046) + ဢီးသျူဝ်ႇ (1046–1053) + တႅၼ်းၵီႇ (1053–1058) + ၶူဝ်းႁေႇ (1058–1065) + ၸီးရိယႃၵု (1065–1069) + ဢႅၼ်းၵျူႇ (1069–1074) + ၸူဝ်းႁူဝ်ႇ (1074–1077) + သျူဝ်းရိယႃၵု (1077–1081) + ဢီးႁူဝ်ႇ (1081–1084) + ဢူဝ်းတူဝ်ၵု (1084–1087) + ၶၢၼ်းၸီႇ (1087–1094) + ၵႃးႁူဝ်ႇ (1094–1096) + ဢီးၶျူဝ်ႇ (1096–1097) + ၸူဝ်းတူဝ်ၵု (1097–1099) + ၵူဝ်းဝႃႇ (1099–1104) + ၶျူဝ်းၸီႇ (1104–1106) + ၵႃးသျူဝ်ႇ (1106–1108) + တႅၼ်းၼိၼ်ႇ (1108–1110) + တႅၼ်းဢီႇ (1110–1113) + ဢီးၵျူႇ (1113–1118) + ၵႅၼ်းဢီႇ (1118–1120) + ႁူဝ်းဢၼ်ႇ (1120–1124) + တႅၼ်းၸီႇ (1124–1126) + တႆးၸီႇ (1126–1131) + တႅၼ်းသျူဝ်ႇ (1131–1132) + ၶျူဝ်းသျူဝ်ႇ (1132–1135) + ႁူဝ်းဢႅၼ်ႇ (1135–1141) + ဢီးၸီႇ (1141–1142) + ၵူဝ်းၸီႇ (1142–1144) + တႅၼ်းယူဝ်ႇ (1144–1145) + ၵျူးဢၼ်ႇ (1145–1151) + ၼိၼ်းပေႇ (1151–1154) + ၵျူးၸူႇ (1154–1156) + ႁူဝ်းၵႅၼ်ႇ (1156–1159) + ႁေးၸီႇ (1159–1160) + ဢီးရိယႃၵု (1160–1161) + ဢူဝ်းႁူဝ်ႇ (1161–1163) + ၶျူဝ်းၵၼ်ႇ (1163–1165) + ဢီးမၼ်ႇ (1165–1166) + ၼိၼ်းဢၼ်ႇ (1166–1169) + ၵႃးဢူဝ်ႇ (1169–1171) + သျူဝ်းဢၼ်ႇ (1171–1175) + ဢၼ်းၵႅၼ်ႇ (1175–1177) + ၸီးသျူဝ်ႇ (1177–1181) + ယူဝ်းဝႃႇ (1181–1182) + ၸူးဢီႇ (1182–1184) + ၵႅၼ်းရိယႃၵု (1184–1185) + ပုၼ်းၸီႇ (1185–1190) + ၵႅၼ်းၵျူႇ (1190–1199) + သျူဝ်းၸီႇ (1199–1201) + ၵႅၼ်းၼိၼ်ႇ (1201–1204) + ၵႅၼ်းၵျူႇ (1204–1206) + ၵႅၼ်းဢီႇ (1206–1207) + ၸူဝ်းၵႅၼ်ႇ (1207–1211) + ၵႅၼ်းရိယႃၵု (1211–1213) + ၵႅၼ်းပူဝ်ႇ (1213–1219) + ၸူဝ်းၵျူႇ (1219–1222) + ၸူဝ်းဢူဝ်ႇ (1222–1224) + ၵႅၼ်းၼိၼ်ႇ (1224–1225) + ၵႃးရူဝ်ၵု (1225–1227) + ဢၼ်းတေႇ (1227–1229) + ၶၢၼ်းၵီႇ (1229–1232) + ၸူဝ်းဢီႇ (1232–1233) + တႅၼ်းပုၵု (1233–1234) + ပုၼ်းရိယႃၵု (1234–1235) + ၵႃးတေႇ (1235–1238) + ယႃးၵုၼိၼ်း (1238–1239) + ဢၼ်းဢူဝ်ႇ (1239–1240) + ၼိၼ်းၸီႇ (1240–1243) + ၵၼ်းၵႅၼ်ႇ (1243–1247) + ႁူဝ်းၸီႇ (1247–1249) + ၵႅၼ်းၶျူဝ်ႇ (1249–1256) + ၵူဝ်းၵႅၼ်ႇ (1256–1257) + သျူဝ်းၵႃႇ (1257–1259) + သျူဝ်းၵႅၼ်ႇ (1259–1260) + ပုၼ်းဢူဝ်ႇ (1260–1261) + ၵူဝ်းၶျူဝ်ႇ (1261–1264) + ပုၼ်းဢီႇ (1264–1275) + ၶၢၼ်းၸီႇ (1275–1278) + ၶူဝ်းဢၼ်ႇ (1278–1288) + သျူဝ်းဢူဝ်ႇ (1288–1293) + ဢီးၼိၼ်ႇ (1293–1299) + သျူဝ်းဢၼ်ႇ (1299–1302) + ၵႅၼ်းၵႅၼ်ႇ (1302–1303) + ၵႃးၵႅၼ်ႇ (1303–1306) + တူဝ်းၵုၸိ (1306–1308) + ဢၼ်းၵျူဝ်ႇ (1308–1311) + ဢူဝ်းၶျူဝ်ႇ (1311–1312) + သျူဝ်းဝႃႇ (1312–1317) + ပုၼ်းပူဝ်ႇ (1317–1319) + ၵႅၼ်းဢူဝ်ႇ (1319–1321) + ၵႅၼ်းၵူဝ်ႇ (1321–1324) + သျူဝ်းၶျူႇ (1324–1326) + ၵႃးရိယႃၵု (1326–1329) + ၵႅၼ်းတူဝ်ၵု (1329–1331) + ၵႅၼ်းၵူဝ်ႇ (1331–1334) + ၵႅၼ်းမူႇ (1334–1336) + ဢၼ်းၵႅၼ်ႇ (1336–1340) + ၵူဝ်းၵူဝ်ၵု (1340–1346) + သျူဝ်းႁေႇ (1346–1370) + ၵႅၼ်းတူဝ်ၵု (1370–1372) + ပုၼ်းၶျူႇ (1372–1375) + တႅၼ်းၸူႇ (1375–1379) + ၵူဝ်းရိယႃၵု (1379–1381) + ၵူဝ်းဝႃႇ (1381–1384) + ၵႅၼ်းၶျူႇ (1384–1392) + သျီးတူဝ်ၵု (1384–1387) + ၵႃးၵေႇ (1387–1389) + ၵူဝ်းဢူဝ်ႇ (1389–1390) + မေးတူဝ်ၵု (1390–1394) + ဢူဝ်းဢီႇ (1394–1428) + သျူဝ်းၶျူဝ်ႇ (1428–1429) + ဢီးၶျူဝ်ႇ (1429–1441) + ၵႃးၵိသု (1441–1444) + ပုၼ်းဢၼ်ႇ (1444–1449) + ႁူဝ်းတူဝ်ႇၵု (1449–1452) + ၵျူဝ်းတူဝ်ၵု (1452–1455) + ၵူဝ်းသျူဝ်ႇ (1455–1457) + ၶျူဝ်းရူဝ်ၵု (1457–1460) + ၵၼ်းသျူဝ်ႇ (1460–1466) + ပုၼ်းသျူဝ်ႇ (1466–1467) + ဢူဝ်းၼိၼ်ႇ (1467–1469) + ပုၼ်းမေႇ (1469–1487) + ၶျူဝ်းၵျူဝ်ႇ (1487–1489) + ဢၼ်းတူဝ်ၵု (1489–1492) + မေးဢူဝ်ႇ (1492–1501) + ပုၼ်းၵီႇ (1501–1504) + ဢီးသျူဝ်ႇ (1504–1521) + တႆးဢီႇ (1521–1528) + ၵျူဝ်းရူဝ်ၵု (1528–1532) + တႅၼ်းပုၼ်ႇ (1532–1555) + ၵူဝ်းၸီႇ (1555–1558) + ဢီးရူဝ်ၵု (1558–1570) + ၵႅၼ်းၵီႇ (1570–1573) + တႅၼ်းသျူဝ်ႇ (1573–1592) + ပုၼ်းရူဝ်ၵု (1592–1596) + ၵေးၶျူဝ်ႇ (1596–1615) + ၵႅၼ်းၼႃႇ (1615–1624) + ၶၢၼ်းဢီႇ (1624–1644) + သျူဝ်းႁူဝ်ႇ (1644–1648) + ၵေးဢၼ်ႇ (1648–1652) + ၸူဝ်းဢူဝ်ႇ (1652–1655) + မေးရေၵိ (1655–1658) + မၼ်းၸီႇ (1658–1661) + ၶၢၼ်းပုၼ်ႇ (1661–1673) + ဢၼ်းပူဝ်ႇ (1673–1681) + တႅၼ်းၼႃႇ (1681–1684) + ၸူဝ်းၵျူဝ်ႇ (1684–1688) + ၵႅၼ်းရူဝ်ၵု (1688–1704) + ႁူဝ်းဢီႇ (1704–1711) + သျူဝ်းတူဝ်ၵု (1711–1716) + ၵျူဝ်းႁူဝ်ႇ (1716–1736) + ၵႅၼ်းပုၼ်ႇ (1736–1741) + ၶၢၼ်းပူဝ်ႇ (1741–1744) + ဢၼ်းၵျူဝ်ႇ (1744–1748) + ၶၢၼ်းဢႅၼ်ႇ (1748–1751) + ႁူဝ်းရေၵိ (1751–1764) + မေးဝႃႇ (1764–1772) + ဢၼ်းဢီႇ (1772–1781) + တႅၼ်းမေႇ (1781–1789) + ၶၢၼ်းသေႇ (1789–1801) + ၵျူဝ်းဝႃႇ (1801–1804) + ပုၼ်းၵႃႇ (1804–1818) + ပုၼ်းသေႇ (1818–1830) + တၼ်းပူဝ်ႇ (1830–1844) + ၵူဝ်းၵႃႇ (1844–1848) + ၵႃးဢီႇ (1848–1854) + ဢၼ်းသေႇ (1854–1860) + မၼ်းဢႅၼ်ႇ (1860–1861) + ပုၼ်းၵျူႇ (1861–1864) + ၵႅၼ်းၸီႇ (1864–1865) + ၵေးဢူဝ်ႇ (1865–1868) + မေးၸီႇ + တႆးသျူဝ်ႇ + သျူဝ်းဝႃႇ + ႁေးသီႇ + ရေးဝႃႇ + + + တႆးၵႃႇ + ႁၵုၶျိ + ႁႃးၵုႁူဝ် + သူးၶျူဝ်ႇ + တႆးႁူဝ်ႇ + ၵေးယိုင်ႇ + ဝႃးတူဝ်ႇ + ရေးၵီႇ + ယူဝ်းရူဝ်ႇ + ၸိၼ်းၵီႇ + တႅၼ်းပျူဝ်ႇ + တႅၼ်းပျူဝ်ႇ-ၵမ်းပူဝ်ႇ + တႅၼ်းပျူဝ်ႇ-သျူဝ်းႁူဝ်ႇ + တႅၼ်းပျူဝ်ႇ-ႁူဝ်းၸီႇ + တႅၼ်းပျူဝ်ႇ-ၸိၼ်းၵူဝ်ႇ + ၸိၼ်းၵူဝ်ႇ-ၵေးယိုင်ႇ + ႁူဝ်ၵီႇ + တႅၼ်းဢူဝ်ႇ + ဢႅၼ်ရိယႃၵု + တၢႆတူဝ်ႇ + ၶူဝ်းၼိၼ်ႇ + တႅၼ်းၶျူဝ်ႇ + ၸူဝ်းဝႃႇ + ၵႃသျူဝ်ႇ + ၼိၼ်းၸူႇ + သၢႆၵူဝ်ႇ + တႅၼ်းဢၼ်ႇ + ၸူဝ်းၵၼ် + ၵၼ်းၵျူဝ်ႇ + ၼိၼ်းၼႃႇ + ၵၼ်းပျူဝ်ႇ + သျူဝ်းတႆႇ + ဢႅၼ်းၵီႇ + ဢႅၼ်းၶျူဝ်ႇ + ၸူဝ်းႁေႇ + တႅၼ်းၵျူဝ်ႇ + တႅၼ်ရိယႃၵု + တႅၼ်းတူဝ်ၵု + ဢူဝ်းဝႃႇ + ၵူဝ်းႁူဝ်ႇ + ဢၼ်းၼႃႇ + တႅၼ်းရူဝ်ၵု + တႅၼ်းဢႅၼ်ႇ + ၸူဝ်းၵႅၼ်ႇ + တႅၼ်းၵႅၼ်ႇ + ဢီးၵၼ်ႇ + ၵၼ်းၼႃႉ + ဢီးဢႅၼ်ႇ + ဢီးသူဝ်ႇ + သျူဝ်ရိယႃၵု + ၶျူဝ်းတူဝ်ၵု + ၶျူဝ်းႁူဝ်ႇ + ၵၼ်းၵူဝ်ႇ + ၶျူဝ်းဝႃႇ + ၵၼ်းၼိၼ်ႇ + ၸီးဢၼ်ႇ + မၼ်းၸူႇ + ၶျူဝ်းၵႅၼ်ႇ + ၶျူဝ်ရိယႃၵု + ၶျူဝ်းၵျူႇ + ၵၼ်းတူဝ်ၵု + ဢီးသျူဝ်ႇ (1046–1053) + တႅၼ်းၵီႇ + ၵူဝ်းႁေႇ + ၸီရိယႃၵု + ဢႅၼ်းၵျူႇ + ၸူဝ်းႁူဝ်ႇ + ၸူဝ်ရိယႃၵု + ဢီးႁူဝ်ႇ + ဢူဝ်းတူဝ်ၵု + ၵၼ်းၸီႇ + ၵႃႁူဝ်ႇ + ဢီးၶျူဝ်ႇ + ၸူဝ်းတူဝ်ၵု + ၵူဝ်းဝႃႇ + ၶျူဝ်းၸီႇ + ၵႃၸူဝ်ႇ + တႅၼ်းၼိၼ်ႇ + တႅၼ်းဢီႇ + ဢီးၵျူႇ + ၵႅၼ်းဢီႇ + ႁူဝ်းဢၼ်ႇ + တႅၼ်းၸီႇ + တႆးၸီႇ + တႅၼ်းသျူဝ်ႇ + ၶျူဝ်းသျူဝ်ႇ + ႁူဝ်းဢႅၼ်ႇ + ဢီးၸီႇ + ၵူဝ်းၸီႇ + တႅၼ်းယူဝ်ႇ + ၵျူးဢၼ်ႇ + ၼိၼ်းပေႇ + ၵျူးၸူႇ + ႁူင်းၵႅၼ်ႇ + ႁေးၸီႇ + ဢိရယႃၵု + ဢူဝ်းႁူဝ်ႇ + ၶျူဝ်းၵၼ်ႇ + ဢီးမၼ်ႇ + ၼိၼ်းဢၼ်ႇ + ၵႃဢူဝ်ႇ + ၸူဝ်းဢၼ်ႇ + ဢၼ်းၵႅၼ်ႇ + ၸီးသျူဝ်ႇ + ယူဝ်းဝႃႇ + ၵျူးဢီႇ + ၵႅၼ်ရိယႃၵု + ပုၼ်းၸီႇ + ၵႅၼ်းၵျူႇ + သျူဝ်းၸီႇ + ၵႅၼ်းၼိၼ်ႇ + ၵႅၼ်းၵျူႇ + ၵႅၼ်းဢီႇ + ၸူဝ်းၵႅၼ်ႇ + ၵႅၼ်ရိယႃၵု + ၵႅမ်းပူဝ်ႇ + ၸူဝ်းၵျူႇ + ၸူဝ်းဢူဝ်ႇ + ၵႅၼ်းၼိၼ်ႇ + ၵႃးရူဝ်ၵု + ဢၼ်းတေႇ + ၵၢၼ်းၵီႇ + ၸူဝ်းဢီႇ + တႅၼ်းပုၵု + ပုၼ်ရိယႃၵု + ၵႃးတေႇ + ယႃႉၵုၼိၼ်း + ဢႅၼ်းဢူဝ်ႇ + ၼိၼ်းၸီႇ + ၵၼ်းၵႅၼ်ႇ + ႁူဝ်းၸီႇ + ၵႅၼ်းၶျူဝ်ႇ + ၵူဝ်းၵႅၼ်ႇ + သျူဝ်းၵႃႇ + သျူဝ်းၵႅၼ်ႇ + ပုၼ်းဢူဝ်ႇ + ၵူဝ်းၶျူဝ်ႇ + ပုၼ်းဢီႇ + ၵႅၼ်းၸီႇ + ၵူဝ်းဢၼ်ႇ + သျူဝ်းဢူဝ်ႇ + ဢီးၼိၼ်ႇ + သျူဝ်းဢၼ်ႇ + ၵႅၼ်းၵႅၼ်ႇ + ၵႃးၵႅၼ်ႇ + တူဝ်ၵုၸိ + ဢႅၼ်းၵျူဝ်ႇ + ဢူဝ်းၶျူဝ်ႇ + သျူဝ်းဝႃႇ + ပုၼ်းပူဝ်ႇ + ၵႅၼ်းဢူဝ်ႇ + ၵႅၼ်းၵူဝ်ႇ + သျူဝ်းၶျူႇ + ၵႃရိယႃၵု + ၵႅၼ်တူဝ်ၵု + ၵႅၼ်းၵူဝ်ႇ + ၵႅၼ်းမူႇ + ဢႅၼ်းၵႅၼ်ႇ + ၵူဝ်းၵူဝ်ၵု + သျူဝ်းႁေႇ + ၵႅၼ်တူဝ်ၵု + ပုၼ်းၶျူႇ + တႅၼ်းၸူႇ + ၵူဝ်ရိယႃၵု + ၵူဝ်းဝႃႇ + ၵႅၼ်းၶျူႇ + သျိတူဝ်ၵု + ၵႃးၵေႇ + ၵူဝ်းဢူဝ်ႇ + မေတူဝ်ၵု + ဢူဝ်းဢီႇ + သျူဝ်းၶျူဝ်ႇ + ဢီးၵျူဝ်ႇ + ၵႃးၵိသု + ပုၼ်းဢၼ်ႇ + ႁူဝ်တူဝ်ၵု + ၵျူဝ်တူဝ်ၵု + ၵူဝ်းသျူဝ်ႇ + ၶျူဝ်းရူဝ်ၵု + ၵၼ်းသျူဝ်ႇ + ပုၼ်းသျူဝ်ႇ + ဢူဝ်းၼိၼ်ႇ + ပုၼ်းမေႇ + ၶျူဝ်းၵျူဝ်ႇ + ဢၼ်းတူဝ်ၵု + မေးဢူဝ်ႇ + ပုၼ်းၵီႇ + ဢီးၶျူဝ်ႇ + တႆးဢီႇ + ၵျူဝ်းရူဝ်ၵု + တႅၼ်းပုၼ်ႇ + ၵူဝ်းၸီႇ + ဢီးရူဝ်ၵု + ၵႅၼ်းၵီႇ + တႅၼ်းသျူဝ်ႇ + ပုၼ်းရူဝ်ၵု + ၵေးၶျူဝ်ႇ + ၵႅၼ်းၼႃႉ + ၵၼ်းဢီႇ + သျူဝ်းႁူဝ်ႇ + ၵေးဢၼ်ႇ + ၸူဝ်းဢူဝ်ႇ + မေးရႄၵိ + မၼ်းၸီႇ + ၵၼ်းပုၼ်ႇ + ဢႅၼ်းပူဝ်ႇ + တႅၼ်းၼႃႉ + ၸူဝ်းၵျူဝ်ႇ + ၵႅၼ်းရူဝ်ၵု + ႁူဝ်းဢီႇ + သျူဝ်းတူဝ်ၵု + ၵျူဝ်းႁူဝ်ႇ + ၵႅၼ်းပုၼ်ႇ + ၵၼ်းပူဝ်ႇ + ဢႅၼ်းၵျူဝ်ႇ + ၵၼ်းဢႅၼ်ႇ + ႁူဝ်းရႄၵိ + မေးဝႃႇ + ဢၼ်းဢီႇ + တႅၼ်းမေႇ + ၵၼ်းသေႇ + ၵျူဝ်းဝႃႇ + ပုၼ်းၵႃႇ + ပုၼ်းသေႇ + တႅၼ်းပူဝ်ႇ + ၵူဝ်းၵႃႇ + ၵႃးဢီႇ + ဢၼ်းသေႇ + မၼ်းဢႅၼ်ႇ + ပုၼ်းၵျူႇ + ၵႅၼ်းၸီႇ + ၵေးဢူဝ်ႇ + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + + ၾႃႇဝႃႇတိၼ်ႇ + ဢေႃးတီႇပႄႇႁႅတ်ႉ + ၶူဝ်ႇရၢတ်ႉ + တီးရ် + မေႃႇတတ်ႉ + သျႃးရိဝႃႇ + မႄးႁႃႇ + ဢပၢၼ်ႇ + ဢႃႇၸႃႇ + တေႇ + ပႃႇမၢၼ်ႇ + ဢႅတ်ႉၾႅၼ်ႇ + + + ၾႃႇဝႃႇတိၼ်ႇ + ဢေႃးတီႇပႄႇႁႅတ်ႉ + ၶူဝ်ႇရၢတ်ႉ + တီးရ် + မေႃႇတတ်ႉ + သျႃးရိဝႃႇ + မႄးႁႃႇ + ဢပၢၼ်ႇ + ဢႃႇၸႃႇ + တေႇ + ပႃႇမၢၼ်ႇ + ဢႅတ်ႉၾႅၼ်ႇ + + + + + ၾႃႇဝႃႇတိၼ်ႇ + ဢေႃးတီႇပႄႇႁႅတ်ႉ + ၶူဝ်ႇရၢတ်ႉ + တီးရ် + မေႃႇတတ်ႉ + သျႃးရိဝႃႇ + မႄးႁႃႇ + ဢပၢၼ်ႇ + ဢႃႇၸႃႇ + တေႇ + ပႃႇမၢၼ်ႇ + ဢႅတ်ႉၾႅၼ်ႇ + + + ၾႃႇဝႃႇတိၼ်ႇ + ဢေႃးတီႇပႄႇႁႅတ်ႉ + ၶူဝ်ႇရၢတ်ႉ + တီးရ် + မေႃႇတတ်ႉ + သျႃးရိဝႃႇ + မႄးႁႃႇ + ဢပၢၼ်ႇ + ဢႃႇၸႃႇ + တေႇ + ပႃႇမၢၼ်ႇ + ဢႅတ်ႉၾႅၼ်ႇ + + + + + + ပီပႃႇသျႃး + + + ပီပႃႇသျႃး + + + ပီပႃႇသျႃး + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + ပီဢွၼ်တၢင်းထၢႆႇဝၢၼ်း + ထၢႆႇဝၢၼ်း + + + ပဢတ. ထၢႆႇဝၢၼ်း + ထၢႆႇဝၢၼ်း + + + ပဢတ. ထၢႆႇဝၢၼ်း + ထၢႆႇဝၢၼ်း + + + + + + G y MMMM d - EEEE + + + + + G y MMMM d + + + + + G y MMM d + + + + + G y-MM-dd + + + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + {1} ၶၢဝ်းယၢမ်း {0} + + + + + {1} {0} + + + + + {1} {0} + + + + d - E + G y-MM-dd - E + G y MMM d - E + MM-dd - E + MMM d - E + GGGGG y-MM-dd - E + G y MMM d - E + + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – GGGGG y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – G y MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + MM-dd - E – MM-dd - E + MM-dd - E – MM-dd - E + + + MMM d - E – MMM d - E + MMM d - E – MMM d - E + + + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + GGGGG y-MM-dd - E – y-MM-dd - E + + + G y MMM d - E – MMM d - E + G y MMM d - E – MMM d - E + G y MMM d - E – y MMM d - E + + + + + + + + ပၢၼ် + + + ပၢၼ် + + + ပၢၼ် + + + ပီ + ပီၵၢႆ + ပီၼႆႉ + ပီၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ပီ + + + {0} ပီ ပူၼ်ႉမႃး + + + + ပီ + ပီၵၢႆ + ပီၼႆႉ + ပီၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ပီ + + + {0} ပီ ပူၼ်ႉမႃး + + + + ပီ + ပီၵၢႆ + ပီၼႆႉ + ပီၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ပီ + + + {0} ပီ ပူၼ်ႉမႃး + + + + သၢမ်လိူၼ်ႁွပ်ႈ + သၢမ်လိူၼ်ႁွပ်ႈ လိုၼ်းသုတ်း + သၢမ်လိူၼ်ႁွမ်ႈၼႆႉ + သၢမ်လိူၼ်ႁွပ်ႈၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} သၢမ်လိူၼ်ႁွပ်ႈ + + + {0} သၢမ်လိူၼ်ႁွပ်ႈ ပူၼ်ႉမႃး + + + + သၢမ်လိူၼ်ႁွပ်ႈ + သလႁ. လိုၼ်းသုတ်း + သလႁ. ၼႆႉ + သလႁ. ၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} သလႁ. + + + {0} သလႁ. ပူၼ်ႉမႃး + + + + သၢမ်လိူၼ်ႁွပ်ႈ + သလႁ. လိုၼ်းသုတ်း + သၢမ်လိူၼ်ႁွပ်ႈၼႆႉ + သလႁ. ၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} သလႁ. + + + {0} သလႁ. ပူၼ်ႉမႃး + + + + လိူၼ် + လိူၼ်ပူၼ်ႉမႃး + လိူၼ်ၼႆႉ + လိူၼ်ၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} လိူၼ် + + + {0} လိူၼ်ပူၼ်ႉမႃး + + + + လိူၼ် + လိူၼ်ပူၼ်ႉမႃး + လိူၼ်ၼႆႉ + လိူၼ်ၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} လိူၼ် + + + {0} လိူၼ်ပူၼ်ႉမႃး + + + + လိူၼ် + လိူၼ်ပူၼ်ႉမႃး + လိူၼ်ၼႆႉ + လိူၼ်ၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} လိူၼ် + + + {0} လိူၼ်ပူၼ်ႉမႃး + + + + ဝူင်ႈ + ဝူင်ႈပူၼ်ႉမႃး + ဝူင်ႈၼႆႉ + ဝူင်ႈၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝူင်ႈ + + + {0} ဝူင်ႈပူၼ်ႉမႃး + + ဝူင်ႈ {0} + + + ဝူင်ႈ + ဝူင်ႈပူၼ်ႉမႃး + ဝူင်ႈၼႆႉ + ဝူင်ႈၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝူင်ႈ + + + {0} ဝူင်ႈပူၼ်မႃး + + ဝူင်ႈ {0} + + + ဝူင်ႈ + ဝူင်ႈပူၼ်ႉမႃး + ဝူင်ႈၼႆႉ + ဝူင်ႈၼႃႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝူင်ႈ + + + {0} ဝူင်ႈပူၼ်မႃး + + ဝူင်ႈ {0} + + + ဝူင်ႈၶွင်လိူၼ် + + + ဝူင်ႈၶွင်လိူၼ် + + + ဝူင်ႈၶွင်လိူၼ် + + + ဝၼ်း + မိူဝ်ႈဝႃး + မိူဝ်ႈၼႆႉ + မိူဝ်ႈၽုၵ်ႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်း + + + {0} ဝၼ်းပူၼ်ႉမႃး + + + + ဝၼ်း + မိူဝ်ႈဝႃး + မိူဝ်ႈၼႆႉ + မိူဝ်ႈၽုၵ်ႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်း + + + {0} ဝၼ်းပူၼ်ႉမႃး + + + + ဝၼ်း + မိူဝ်ႈဝႃး + မိူဝ်ႈၼႆႉ + မိူဝ်ႈၽုၵ်ႈ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်း + + + {0} ဝၼ်းပူၼ်ႉမႃး + + + + ဝၼ်းၶွင်ပီ + + + ဝၼ်းၶွင်ပီ + + + ဝၼ်းၶွင်ပီ + + + ဝၼ်းၶွင်ဝူင်ႈ + + + ဝၼ်းၶွင်ဝူင်ႈ + + + ဝၼ်းၶွင်ဝူင်ႈ + + + ဝၼ်းၼႂ်းဝူင်ႈၶွင်လိူၼ် + + + ဝၼ်းၼႂ်းဝူင်ႈၶွင်လိူၼ် + + + ဝၼ်းၼႂ်းဝူင်ႈၶွင်လိူၼ် + + + ဝၼ်းဢႃးတိတ်ႉပူၼ်ႉမႃး + ဝၼ်းဢႃးတိတ်ႉၼႆႉ + ဝၼ်းဢႃးတိတ်ႉတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းဢႃးတိတ်ႉ + + + {0} ဝၼ်းဢႃးတိတ်ႉပူၼ်ႉမႃး + + + + ဝၼ်းဢႃးတိတ်ႉပူၼ်ႉမႃး + ဝၼ်းဢႃးတိတ်ႉၼႆႉ + ဝၼ်းဢႃးတိတ်ႉတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းဢႃးတိတ်ႉ + + + {0} ဝၼ်းဢႃးတိတ်ႉပူၼ်ႉမႃး + + + + ဝၼ်းဢႃးတိတ်ႉပူၼ်ႉမႃး + ဝၼ်းဢႃးတိတ်ႉၼႆႉ + ဝၼ်းဢႃးတိတ်ႉတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းဢႃးတိတ်ႉ + + + {0} ဝၼ်းဢႃးတိတ်ႉပူၼ်ႉမႃး + + + + ဝၼ်းၸၼ်ပူၼ်ႉမႃး + ဝၼ်းၸၼ်ၼႆႉ + ဝၼ်းၸၼ်တေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းၸၼ် + + + {0} ဝၼ်းၸၼ်ပူၼ်ႉမႃး + + + + ဝၼ်းၸၼ်ပူၼ်ႉမႃး + ဝၼ်းၸၼ်ၼႆႉ + ဝၼ်းၸၼ်တေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းၸၼ် + + + {0} ဝၼ်းၸၼ်ပူၼ်ႉမႃး + + + + ဝၼ်းၸၼ်ပူၼ်ႉမႃး + ဝၼ်းၸၼ်ၼႆႉ + ဝၼ်းၸၼ်တေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းၸၼ် + + + {0} ဝၼ်းၸၼ်ပူၼ်ႉမႃး + + + + ဝၼ်းဢင်းၵၢၼ်းပူၼ်ႉမႃး + ဝၼ်းဢင်းၵၢၼ်းၼႆႉ + ဝၼ်းဢင်းၵၢၼ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းဢင်းၵၢၼ်း + + + {0} ဝၼ်းဢင်းၵၢၼ်းပူၼ်ႉမႃး + + + + ဝၼ်းဢင်းၵၢၼ်းပူၼ်ႉမႃး + ဝၼ်းဢင်းၵၢၼ်းၼႆႉ + ဝၼ်းဢင်းၵၢၼ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းဢင်းၵၢၼ်း + + + {0} ဝၼ်းဢင်းၵၢၼ်းပူၼ်ႉမႃး + + + + ဝၼ်းဢင်းၵၢၼ်းပူၼ်ႉမႃး + ဝၼ်းဢင်းၵၢၼ်းၼႆႉ + ဝၼ်းဢင်းၵၢၼ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းဢင်းၵၢၼ်း + + + {0} ဝၼ်းဢင်းၵၢၼ်းပူၼ်ႉမႃး + + + + ဝၼ်းပုတ်ႉပူၼ်ႉမႃး + ဝၼ်းပုတ်ႉၼႆႉ + ဝၼ်းပုတ်ႉတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းပုတ်ႉ + + + {0} ဝၼ်းပုတ်ႉပူၼ်ႉမႃး + + + + ဝၼ်းပုတ်ႉပူၼ်ႉမႃး + ဝၼ်းပုတ်ႉၼႆႉ + ဝၼ်းပုတ်ႉတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းပုတ်ႉ + + + {0} ဝၼ်းပုတ်ႉပူၼ်ႉမႃး + + + + ဝၼ်းပုတ်ႉပူၼ်ႉမႃး + ဝၼ်းပုတ်ႉၼႆႉ + ဝၼ်းပုတ်ႉတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းပုတ်ႉ + + + {0} ဝၼ်းပုတ်ႉပူၼ်ႉမႃး + + + + ဝၼ်းၽတ်းပူၼ်ႉမႃး + ဝၼ်းၽတ်းၼႆႉ + ဝၼ်းၽတ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းၽတ်း + + + {0} ဝၼ်းၽတ်းပူၼ်ႉမႃး + + + + ဝၼ်းၽတ်းပူၼ်ႉမႃး + ဝၼ်းၽတ်းၼႆႉ + ဝၼ်းၽတ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းၽတ်း + + + {0} ဝၼ်းၽတ်းပူၼ်ႉမႃး + + + + ဝၼ်းၽတ်းပူၼ်ႉမႃး + ဝၼ်းၽတ်းၼႆႉ + ဝၼ်းၽတ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းၽတ်း + + + {0} ဝၼ်းၽတ်းပူၼ်ႉမႃး + + + + ဝၼ်းသုၵ်းပူၼ်ႉမႃး + ဝၼ်းသုၵ်းၼႆႉ + ဝၼ်းသုၵ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းသုၵ်း + + + {0} ဝၼ်းသုၵ်းပူၼ်ႉမႃး + + + + ဝၼ်းသုၵ်းပူၼ်ႉမႃး + ဝၼ်းသုၵ်းၼႆႉ + ဝၼ်းသုၵ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းသုၵ်း + + + {0} ဝၼ်းသုၵ်းပူၼ်ႉမႃး + + + + ဝၼ်းသုၵ်းပူၼ်ႉမႃး + ဝၼ်းသုၵ်းၼႆႉ + ဝၼ်းသုၵ်းတေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းသုၵ်း + + + {0} ဝၼ်းသုၵ်းပူၼ်ႉမႃး + + + + ဝၼ်းသဝ်ပူၼ်ႉမႃး + ဝၼ်းသဝ်ၼႆႉ + ဝၼ်းသဝ်တေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းသဝ် + + + {0} ဝၼ်းသဝ်ပူၼ်ႉမႃး + + + + ဝၼ်းသဝ်ပူၼ်ႉမႃး + ဝၼ်းသဝ်ၼႆႉ + ဝၼ်းသဝ်တေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းသဝ် + + + {0} ဝၼ်းသဝ်ပူၼ်ႉမႃး + + + + ဝၼ်းသဝ်ပူၼ်ႉမႃး + ဝၼ်းသဝ်ၼႆႉ + ဝၼ်းသဝ်တေမႃး + + ၼႂ်းၶၢဝ်းတၢင်း {0} ဝၼ်းသဝ် + + + {0} ဝၼ်းသဝ်ပူၼ်ႉမႃး + + + + ၶၢဝ်းယၢမ်းဝၼ်း + + + ၶၢဝ်းယၢမ်းဝၼ်း + + + ၶၢဝ်းယၢမ်းဝၼ်း + + + မူင်း + ၸူဝ်ႈမူင်းၼႆႉ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ၸူဝ်ႈမူင်း + + + {0} ၸူဝ်ႈမူင်းပူၼ်ႉမႃး + + + + မူင်း + ၸူဝ်ႈမူင်းၼႆႉ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ၸူဝ်ႈမူင်း + + + {0} ၸူဝ်ႈမူင်းပူၼ်ႉမႃး + + + + မူင်း + ၸူဝ်ႈမူင်းၼႆႉ + + ၼႂ်းၶၢဝ်းတၢင်း {0} ၸူဝ်ႈမူင်း + + + {0} ၸူဝ်ႈမူင်းပူၼ်ႉမႃး + + + + မိၼိတ်ႉ + မိၼိတ်ႉ + + ၼႂ်းၶၢဝ်းတၢင်း {0} မိၼိတ်ႉ + + + {0} မိၼိတ်ႉပူၼ်ႉမႃး + + + + မိၼိတ်ႉ + မိၼိတ်ႉ + + ၼႂ်းၶၢဝ်းတၢင်း {0} မိၼိတ်ႉ + + + {0} မိၼိတ်ႉပူၼ်ႉမႃး + + + + မိၼိတ်ႉ + မိၼိတ်ႉ + + ၼႂ်းၶၢဝ်းတၢင်း {0} မိၼိတ်ႉ + + + {0} မိၼိတ်ႉပူၼ်ႉမႃး + + + + သႅၵ်ႉၵၢၼ်ႉ + ယၢမ်းလဵဝ် + + ၼႂ်းၶၢဝ်းတၢင်း {0} ၸႅၵ်ႉၵၢၼ်ႉ + + + {0} ၸႅၵ်ၵၢၼ်ႉပူၼ်ႉမႃး + + + + သႅၵ်ႉၵၢၼ်ႉ + ယၢမ်းလဵဝ် + + ၼႂ်းၶၢဝ်းတၢင်း {0} ၸႅၵ်ႉၵၢၼ်ႉ + + + {0} ၸႅၵ်ၵၢၼ်ႉပူၼ်ႉမႃး + + + + သႅၵ်ႉၵၢၼ်ႉ + ယၢမ်းလဵဝ် + + ၼႂ်းၶၢဝ်းတၢင်း {0} ၸႅၵ်ႉၵၢၼ်ႉ + + + {0} ၸႅၵ်ၵၢၼ်ႉပူၼ်ႉမႃး + + + + ၸူၼ်ႇၶၢဝ်းယၢမ်း + + + ၸူၼ်ႇ + + + ၸူၼ်ႇ + + + + ၶၢဝ်းယၢမ်း {0} + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း {0} + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း {0} + + + ၶၢဝ်းယၢမ်းလုမ်ႈၾႃႉ + + + + ဢမ်ႇႁူႉ ဢွင်ႈတီႈ + + + ဢႅၼ်ႇတူဝ်ႇရႃႇ + + + တူႇပၢႆး + + + ၵႃႇပူး + + + ဢႅၼ်ႇထီႇၵႂႃႇ + + + ဢႅၼ်ႇၵုၺ်ႇလႃႇ + + + တီႇရႃႇၼႃႇ + + + ယႄႇရႄႇဝၼ်ႇ + + + လူႇဢၼ်ႇတႃႇ + + + တႃႈ ရူဝ်ႇထႄႇရႃႇ + + + ပၢမ်းမႃႇ + + + တႃႈ ထရူဝ်း + + + တႃႈ သျူဝ်းဝႃႇ + + + တႃႈ မေႃသၼ်ႇ + + + တေးဝိတ်ႉ + + + တႃႈ ဝေႃႉသ်တွၵ်ႉ + + + တႃႈ ၶေႇသီႇ + + + တႃႈ တူႇမွၼ်ႉ တဝီႇလ် + + + တႃႈ မႅၵ်ႉမူႇတူဝ်ႇ + + + ရီႇယူဝ်ၵႃလႄႇၵူဝ်ႇ + + + မႅၼ်ႇတူဝ်ႇၸႃႇ + + + သႅၼ်းႁွၼ်ႇ + + + ဢူသဝၢႆးဢႃႇ + + + လႃႇရီႇယူဝ်ႇႁႃႇ + + + သႅၼ်းလူးဝိတ်ႉ + + + ၶႃႇတႃႇမႃႇၵႃႇ + + + သႃႇလ်တႃႇ + + + ႁူႁုၺ်း + + + တူႇၵူဝ်ႇမၢၼ်ႈ + + + ၶူဝ်ႇတူဝ်ႇပႃႇ + + + ပူၺ်းၼူဝ်ႇဢၢႆးရႅတ်ႉ + + + ပႃးၵူဝ်းပႃးၵူဝ်း + + + ဝီႇယႅၼ်ႇၼႃႇ + + + ၽိူတ်ႉ + + + ဢိဝ်းၵလႃး + + + တႃႇဝိၼ်ႇ + + + ဢတႄလဵတ်ႉ + + + ပရူၵ်ႉၵႅၼ်းႁေးလ် + + + မႄးလ်ပူၼ်း + + + ႁူဝ်ပၢတ်ႉ + + + လိၼ်ႇတီႇမႅၼ်ႇ + + + သိတ်ႇတၼီႇ + + + ပရိတ်ႉသပႅၼ်ႇ + + + မႅၵ်ႉၶႂႃရီႇ + + + ၵုၼ်လွတ်ႉႁၢဝ်း + + + ဢႃႇရူးပႃး + + + မႃႇရီႇႁၢမ်ႇ + + + ပႃၵူႇ + + + သႃႇရႃႇယေႇဝူဝ်ႇ + + + ပႃးပေႇတူတ်ႈ + + + ၻႃႇၵႃႇ + + + ပရတ်ႈသႄးလ် + + + ဢူဝ်ႇၵႃႇတူဝ်ႇၵူဝ်ႇ + + + သူဝ်ႇၾီႇယႃႇ + + + ပႃႇႁဵၼ်း + + + ပူၸုမ်ပူရႃႇ + + + ပူဝ်ႇတူဝ်ႇ-ၼူဝ်ႇဝူဝ်ႇ + + + သဵင်ႉပၢတ်ႉထႄးလႄးမီႇ + + + ပႃႇမိဝ်းတႃး + + + ပရူႇၼၢႆး + + + လႃႉပႃႇ + + + ၶရႃးလႅၼ်းတႅၵ်ႉ + + + ဢီရူၼႄပႄႇ + + + ရီႇယူဝ်ႇပရၼ်ႇၵူဝ်ႇ + + + ပွတ်ႈတူဝ်းဝႄႇႁူဝ်ႇ + + + ပူဝ်ႇဢႃႇဝီႇသတႃႇ + + + မၼၢဝ်းသ် + + + ၶူယႃးပႃႇ + + + သၼ်ႇတႃႇရႅမ်ႇ + + + ၶႅမ်ႇပူဝ်ႇၵရႅၼ်ႇတီႇ + + + ပႄႇလႅမ်း + + + ဢႃႇရႃႇၵႂႃႇဢီႇၼႃႇ + + + သၢဝ်ပၢဝ်းလူဝ်ႇ + + + ပႁီးယႃႇ + + + ၾူတ်ႉတလႄၸႃႇ + + + မႃးသေးဢူဝ်ႇ + + + ရႅတ်ႉသီႇၾီႇ + + + ၾႃႇၼႅၼ်ႇတူဝ်ႇ တႄႇၼူဝ်ႇရွၼ်ႇႁႃႇ + + + ၼၢတ်ႉသ်သေႃ + + + ထိမ်းၽူး + + + ၵႃႇပူဝ်ႇရူဝ်ႇၼႄႇ + + + မိၼ်ႉသ်ၶ် + + + ပႄႇလိတ်ႈ + + + တေႃးသၼ်ႇ + + + ဝၢႆႉႁွတ်ႉ + + + ဢီႇၼူးဝိၵ်ႉ + + + ဝႅၼ်ႇၵူဝ်ႇဝႃႇ + + + ၾူတ်ႉၼႄႇလ်သၼ်ႇ + + + တေႃးသၼ်ႇၶရိၵ်ႉ + + + ၶရႅတ်ႉသတၼ်ႇ + + + ဢႅတ်ႉမွၼ်ႇတွၼ်ႇ + + + သဝိတ်ႉၶႃးရႅၼ်ႉ + + + ၶႅမ်းပရိတ်ႉပေး + + + ရီႇၵျိၼ်ႇၼႃႇ + + + ဝိၼ်းၼီႇပႅၵ်ႉ + + + ရႅတ်ႉသူဝ်ႇလုတ်ႉ + + + ရၼ်ၵိၼ်းဢိၼ်းလႅတ်ႉ + + + ဢႃႇတီႇၵူဝ်ႇၵၼ်ႇ + + + တူဝ်ႇရွၼ်ႇတူဝ်ႇ + + + ဢီႇၶႃးလူးဝိတ်ႉ + + + မွၼ်ႉတွၼ်ႇ + + + ႁႄႇလီႇၾႅၵ်ႉ + + + ၵုတ်ႉသ်ပေး + + + ၵလဵတ်ႉသ်ပေး + + + ပလၼ်ႇ-သႅပ်ႉပလုၼ်ႇ + + + သဵင်ႉၵျွၼ်ႇ + + + မူႇၵုၼ် ၵူဝ်ႇၵူဝ်းသ် + + + ၶိၼ်သျႃးသႃႇ + + + လူႇပုမ်ႇပႃႇသျီႇ + + + ပင်ၵီႈ + + + ပရႃၸဝီးလ် + + + ၸူႇရိတ်ႉ + + + ဢႃႇပီႇၸၢၼ်ႇ + + + ရႃရူဝ်ထွင်းၵႃႇ + + + ၵုၼ်ဢီႇသတႃႇ + + + ၵူဝ်ႇႁႆၵေး + + + ပုၼ်းတႃႉဢရႅၼ်ႇၼတ်ႉသ် + + + သႅၼ်ႇတီႇယႃႇၵူဝ်ႇ + + + တူဝ်ႇဢႃႇလႃႇ + + + ဢူႇရုမ်ၶီႇ + + + သျၢင်ႉႁၢႆး + + + ပူဝ်ႇၵူဝ်ႇတႃႇ + + + ၵေႃးသတႃႇရိၵႃႇ + + + ႁႃႇဝႃးၼႃး + + + ၶဵပ်ႉဝႄႇတီႇ + + + ၵူးရႃႇသၢဝ်ႇ + + + မူႇၵုၼ် ၶရိတ်ႉသမၢတ်ႉ + + + ၼိၵူဝ်ႇသျႃး + + + ၾႃႇမႃႇၵူးသတႃႇ + + + ပရၢၵ်ႉ + + + ပူႇသိင်ႇၵႅၼ်ႇ + + + ပႃႇလိၼ်ႇ + + + ၵျီႇပူးတီႇ + + + ၵူဝ်ႇပႅၼ်ႇႁေႇၵႅၼ်ႇ + + + တူဝ်ႇမီႇၼိၵ + + + သႅၼ်ႇတူဝ်ႇ တူဝ်ႇမိၼ်ႇၵူဝ်ႇ + + + ဢႄးလ်ၸီႇယႃႇ + + + ၵုၼ်ၵႃလႃပၵူဝ်ႉ + + + ၵူဝ်ႇယႃႇၶိဝ်း + + + တႃႇလိၼ်ႇ + + + ၶၢႆႇရူဝ်ႇ + + + ဢႄးလ်ဢၢႆႈယုၼ်း + + + ဢတ်ႉသ်မႃႇရႃႇ + + + ၶႅၼ်ႇၼႃႇရီႇ + + + သူးတ + + + မတ်ႉတရိတ်ႉ + + + ဢႅတ်ႉတိတ်ႉသ်ဢႃႇပႃႇပႃႇ + + + ႁႄႇလ်သိင်းၵီႇ + + + ၾီႇၵျီႇ + + + သတႅၼ်းလီႇ + + + ၶျူၵ်ႉ + + + ပူၼ်းပေႇ + + + ၵွတ်ႉသ်ရေး + + + ၾႃႇရူဝ်ႇ + + + ၽႄးရိတ်ႉသ် + + + လီပရႄႇဝီးလ် + + + + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢိင်းၵလဵတ်ႈ + + လၼ်ႇတၼ်ႇ + + + ၵရႄႇၼႃႇတႃႇ + + + တပီႇလီႇသီႇ + + + ၶႃယႅၼ်ႈ + + + ၵႂၢၼ်းသီ + + + ဢၵ်ႉၵရႃႇ + + + ၵျီႇပရေႃးတႃး + + + ထူႇလႄႇ + + + ၼုၵ်ႉ + + + ဢိတ်ႉတူဝ်ၵူဝ်တူဝ်မိတ်ႉ + + + တႅၼ်းမၢၵ်ႈသျၼ်ႇ + + + ပၼ်ႇၸူႇလ် + + + ၶူဝ်ႇၼႃႇၵရီႇ + + + ၵႂႃးတီႇလုပ်ႈ + + + မႃႇလႃႇပူဝ်ႇ + + + ဢေႇတိၼ်ႇ + + + ၵျေႃႇၵျႃႇ ပွတ်းၸၢၼ်း + + + ၵႂႃႇတမႃႇလႃႇ + + + ၵႂၢမ်ႇ + + + ပိတ်ႈသၢဝ်ႇ + + + ၵၢႆႇယႃးၼႃႇ + + + ႁွင်းၵွင်း + + + တေႇၵူႇသီႇၵႃႇပႃႇ + + + ၸႃႇၵရႅပ်ႉ + + + ၽူတ်ႉဢူဝ်ပရိၼ်ႉၸ် + + + ပူႇတႃႇပႅတ်ႉ + + + ၵျႃႇၵႃႇတႃႇ + + + ပွၼ်းတီႇယႃႇၼၵ်ႉ + + + မႃႇၵႃႇသႃႇ + + + ၵျႃႉယပူႇရ + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢၢႆးရိတ်ႉ + + တၢပ်ႇလိၼ်ႇ + + + ယေႇရုသလႅမ်ႇ + + + ၵုၼ်မႅၼ်း + + + ၵူဝ်ႇၵႃႇတႃႇ + + + ၵုၼ်ၶျႃးၵူဝ်ႉသ် + + + ပႅၵ်ႉတႅၵ်ႉ + + + တႁႃႇရၢၼ်ႇ + + + ရီႇၵျႃႇဝိၵ်ႉ + + + ရူမ်း + + + ၵျႃႇသီႇ + + + ၵျႃႇမေႇၵႃႇ + + + ဢမ်မၢၼ်ႈ + + + တူဝ်ႇၵျူဝ်ႇ + + + ၼၢႆႇရူဝ်ႇပီႇ + + + ပိတ်ႉသၵႅၵ်ႉ + + + ၽၼူမ်းပဵၼ် + + + ၵုၼ်ၶႅၼ်းတွၼ်ႇ + + + ၶိရိတ်ႉတိမႃႇတီႇ + + + တႃႇရႃႇဝႃႇ + + + ၶူဝ်ႇမူဝ်ႇရူတ်ႈ + + + သဵင်ႉၶိတ်ႈ + + + ၽျွင်းယၢင်း + + + သူဝ်းလ် + + + ၶူႇဝဵတ်ႈ + + + ၶေးမႅၼ်း + + + ဢႅၵ်ႉတၢဝ်ႉ + + + ဢေႃႇရႄႇလ် + + + ဢႃႇတီးရၢဝ်း + + + ဢႅၵ်ႉတူဝ်ႇပီႇ + + + ၶူတ်ႉသတၼ်ႇၼေႇ + + + ၶုၺ်ႇၸီးလူဝ်ႇတႃႇ + + + ဢႄးလ်မႃႇတီႇ + + + ဝဵင်းၸၼ် + + + ပႄႇရုတ်ႉ + + + သဵင်ႉလူႉသျႃႇ + + + ဝႃႇတူႇၸ် + + + ၵူဝ်ႇလမ်ႇပူဝ်ႇ + + + မွၼ်ႇရူဝ်ႇဝီႇယႃႇ + + + မႃႇသႄႇရူႇ + + + ဝီးလ်ၼီးယႅတ်ႉသ် + + + လၢၵ်ႈၸိမ်ႇပၢၵ်ႈ + + + ရီႇၵႃႇ + + + ထရီႇပူဝ်ႇလီႇ + + + ၶႃႇသႃႇပလၼ်ႇၵႃႇ + + + မူဝ်ႇၼႃႉၶူဝ်ႇ + + + ၶိသိၼေႃႇ + + + ပူဝ်ႇၵူဝ်ႇရီႇၵႃႇ + + + မႃႇရိၵူတ်ႉ + + + ဢႅၼ်ႇတၼႃႇၼႃႇရီႇဝူဝ်ႇ + + + ၶႂႃးၵျလၢႆး + + + မၵျူးရူဝ်ႇ + + + သၵူပ်ႉပီႇယႃႇ + + + ပႃႇမႃႇၵူဝ်ႇ + + + တႃႈၵုင်ႈ + + + ၶူဝ်ဝေတေး + + + ဢူလၼ်ပႃတႃ + + + မႃႇၵၢဝ်ႈ + + + သၢႆပၼ်ႇ + + + မႃးတိၼ်ႇၼိၵ်ႈ + + + ၼူဝ်ႇဢႅၵ်ႉၸွတ်ႉ + + + မွၼ်ႇသႄးရႅတ်ႉ + + + မေႃးတႃႇ + + + မေႃးရီႇသႃႇ + + + မေႃႇတိပ်ႈ + + + ပလႅၼ်ႇတၢႆႇ + + + တီႇႁူဝ်ႇၼႃႇ + + + ဢႄ​ရမူဝ်သီးလူဝ်ႇ + + + သီႇယူဝ်ႇတတ်ႉ ၸူဝ်ႇရႅတ်ႉ + + + မႃႇၸတ်ႇလၼ်း + + + ၶျီႇဝႃႇဝႃႇ + + + ပႃႇႁီးယႃး တႄႇ ပၼ်ႇတႄႇရႅတ်ႉ + + + ဢူဝ်ႇၸီႇၼႃႇၵႃႇ + + + မွၼ်ႇတႄႇရီႇ + + + ဝဵင်းလူင်မႅၵ်ႇသီႇၵူဝ်ႇ + + + မႃႇတႃႇမေႃးရူဝ်ႉသ် + + + မႄႇရီႇတႃႇ + + + ၵႅၼ်ႇၵူၼ်ႇ + + + ၵႂႃႇလႃႇလုမ်းပူႈ + + + ၵူႇၶျိင်း + + + မႃႇပူႇတူဝ်ႇ + + + ဝိၼ်းႁွၵ်ႉ + + + ၼူမေးယႃႇ + + + ၼီးယႃးမေႇ + + + ၵုၼ်ၼေႃႇၾုၵ်ႉ + + + လႃႇၵွတ်ႉသ် + + + မၼႃးၵႂႃႇ + + + ဢႅမ်ႇသတႃႇတမ်ႇ + + + ဢွတ်ႉသလူဝ်ႇ + + + ၵၢတ်ႈမၢၼ်ႈတူႇ + + + ၼၢဝ်ရူး + + + ၼီးဝႄႇ + + + မူႇၵုၼ် ၶျႅတ်ႉထမ်ႇ + + + ဢွၵ်ႉလႅၼ်ႇ + + + မတ်ႉသၵႅတ်ႉ + + + ပႃႈၼႃးမႃး + + + လိမႃႇ + + + တႁီႇတီႇ + + + မႃၶေးသႅတ်ႉသ် + + + ၵမ်ႇပီႇယႃႇ + + + ပွတ်ႉမွတ်ႉသ်ပီႇ + + + ပူးၵိၼ်ဝႄႇလ် + + + မၼီႇလႃႇ + + + ၵႃႇရႃႇၶျီႇ + + + ဝေႃးသေႃး + + + သဵင်ႉပီႇယႃႇ + + + ၽိတ်ႉၶႅၼ်ႇ + + + ပေႃႇတူဝ်ႇရီးၵူဝ်း + + + ၵႃႇၸႃႇ + + + ႁႄႇပရွၼ်ႇ + + + ဢႃႇၸူဝ်ႇရႅတ်ႉ + + + မႃႇတီႇရႃႇ + + + လိတ်ႉသ်ပွၼ်ႇ + + + ပႃႇလၢဝ်း + + + ဢႃးသုၼ်းသီႇဢွၼ်ႇ + + + ၶႃႇတႃႇ + + + ရေႇၼီႇယၼ်ႇ + + + ပူႇၶႃႇရႅတ်ႉ + + + ပႄႇလ်ၵရဵတ်ႉ + + + ၵလိၼ်းဢိၼ်းၵရတ်ႉ + + + မွတ်ႉသ်ၵူဝ်ႇ + + + ဝူဝ်ႇၵူဝ်ႇၵရၢတ်ႉ + + + သႃႇရႃႇတၢပ်ႈ + + + ဢႅတ်ႉသထရႃႇၶၢၼ်ႇ + + + ဢူလီယႃၼူဝ်ႇသ်ၶ် + + + ၶီးႁွပ်ႇၾ် + + + သႃႇမႃႇရႃႇ + + + ယေႇၵႃႇတႄႇရိၼ်ႇပၢၵ်ႉ + + + ဢူမ်းသ်ၶ် + + + ၼူဝ်ႇဝူဝ်ႇသီႇပၢတ်ႉသ်ၶ် + + + ပႃႇၼေႃး + + + တွမ်းသ်ၶ် + + + ၼူဝ်ဝူဝ်ၵုတ်ႉၸ်ၼႅတ်ႉသ်ၶ် + + + ၶရတ်ႉၼူဝ်ႇယႃႇသ်ၶ် + + + ဢိရၶုတ်ႉသ်ၶ် + + + ၶျိတ်ႉတႃႇ + + + ယၵုတ်ႉသ်ၶ် + + + ဝလႃႇတီႇဝူဝ်ႇသတွၵ်ႉ + + + ၶၼ်ႇတီႇၵႃႇ + + + သႃႇၶႃႇလိၼ်ႇ + + + ယူးဢိတ်ႉသ်ၼႄႇရႃႇ + + + မႃႇၵႃႇတၢၼ်ႇ + + + သရႅတ်ႉၼႄၵူဝ်ႇလိမ်ႇသ်ၶ် + + + ၵမ်းၶျၢတ်ႉၵႃႇ + + + ဢႃႇၼႃႇတီႇယႃႇ + + + ၵိၵႃႇလီႇ + + + ရီႇယၢတ်ႉ + + + ၵႂႃးတႄႇလ်ၶႅၼ်ႇၼႄးလ် + + + မႁေႇ + + + ၶႃးတုမ်း + + + သတွၵ်ႉႁွမ်း + + + သိင်ႇၵႃႇပူဝ်ႇ + + + သဵင်ႉႁႄးလႄးၼႃႇ + + + လူႇပလီႇယႃႇၼႃႇ + + + လွင်းယီးယႃးပဵၼ်း + + + ပရႃႇတိတ်ႉသလႃႇဝႃႇ + + + ၾရီးတၢဝ်း + + + သၼ်းမႃႇရီႇၼေႃႇ + + + တၢၵ်ႇၵႃႇ + + + မူဝ်ၵႃတီးသျူး + + + ပႃႇရႃႇမႃႇရီႇပူဝ်ႇ + + + ယူးပႃး + + + သူၼ်ႇတူဝ်ႇမေး + + + ဢႄႇသႃႇဝႃႇတေႃႇ + + + လူဝ်းဝႃးပရိၼ်ႉသ်ၶႂႃႇတႃး + + + တမ်ႇမတ်ႉသၵတ်ႉ + + + ပႃပႃၼႄႇ + + + ၵရႅၼ်းထိူၵ်ႉ + + + ဢႅၼ်ႇၸႃႇမႅၼ်ႇၼႃႇ + + + မူႇၵုၼ်ၶိူဝ်ႇၵူႇလႅၼ်ႇ + + + ​လူဝ်ႇမႄႇ + + + ၵုင်းထဵပ်ႈ + + + တူႇသျႅၼ်ႇပႄႇ + + + ၾႃးၵဝ်ႇၾူဝ်ႇ + + + တီႇလီႇ + + + ဢႅတ်ႉသ်ၵႃႇပတ်ႉ + + + တူးၼိတ်ႉသ် + + + ထွင်းၵႃႇတႃႇပူႇ + + + ဢိတ်ႉသတၼ်ႇပူး + + + တႃႈႁိူဝ်းသပဵၼ်ႇ + + + ၾူၼႃၾူးတီႇ + + + ထၢႆးပႄႉ + + + တႃႇဢႅတ်ႉသႃႇလမ်ႇ + + + ၶိပ်ႉၾ် + + + သိမ်ႇၾႃႇရူဝ်ႇပူဝ်ႇ + + + ၵမ်ႇပႃႇလႃႇ + + + မိတ်ႉဝေး + + + ဝဵၵ်ႉ + + + ဢတၵ်ႉ + + + ၼူမ်း + + + ဢႅၼ်ႇၶျူဝ်ႇရဵတ်ႉ + + + ယႃႇၵုတတ်ႉ + + + သိတ်ႉၵႃႇ + + + ၸူႇၼူဝ်ႇ + + + မႅတ်ႉလၶႅတ်ႉလႃႇ + + + လွတ်ႉသ်ဢႅၼ်းၵျႄးလႄႉသ် + + + ပွႆးသီႇ + + + ၽီးၼိၵ်ႉ + + + တႅၼ်ႇဝႃႇ + + + ပႄႇယူဝ်ႇလႃႇ၊ တႃႇၵူဝ်ႇတႃႇႁွင်ႇ + + + ၼိဝ်းသႄႇလမ်ႇ၊ တႃႇၵူဝ်ႇတႃႇႁွင်ႇ + + + ပွတ်းၵၢင်၊ တႃႇၵူဝ်ႇတႃႇႁွင်ႇ + + + ၶျီႇၵႃႇၵူဝ်ႇ + + + မႄၼွမ်းမၼီႇ + + + ဝိၼ်းသႅၼ်ႉ၊ ဢိၼ်းတီးယႃးၼႃး + + + ပီႇတႃႇသ်ပၢၵ်ႉ၊ ဢိၼ်းတီးယႃးၼႃး + + + တႄးလ်သီးတီး၊ ဢိၼ်းတီးယႃးၼႃး + + + ၼွၵ်ႉသ်၊ ဢိၼ်းတီးယႃးၼႃး + + + ဝီႇၼႃႇမႅၵ်ႉ၊ ဢိၼ်းတီးယႃးၼႃး + + + မရႅၼ်းၵူဝ်ႇ၊ ဢိၼ်းတီးယႃးၼႃး + + + ဢိၼ်းတီးယႃးၼႃးပူဝ်ႇလိတ်ႉသ် + + + လူးဝိတ်ႉဝီးလ် + + + ဝီးဝီႇ၊ ဢိၼ်းတီးယႃးၼႃး + + + မွၼ်ႇတီႇသႄႇလူဝ်ႇ၊ ၶႅၼ်ႇတၢၵ်ႇၵီႇ + + + တီးတရွႆႉ + + + ၼိဝ်းယွၵ်ႉ + + + မွၼ်ႇတီႇဝီးတႄးဢူဝ်ႇ + + + သႃႇမႃႇၶႅၼ်ႇ + + + တၢတ်ႉသၵႅၼ်ႇ + + + ဝႃႇတီႇၵၼ်ႇ + + + သဵင်ႉဝိၼ်ႇသႅၼ်ႇ + + + ၶႃႇရႃႇၵႅတ်ႉသ် + + + တူဝ်ႇတူဝ်ႇလႃႇ + + + သဵင်ႉထေႃးမတ်ႉသ် + + + ႁူဝ်ၶျီမိၼ်း + + + ဢီႇၾႃးတႄႇ + + + ဝႃးလိတ်ႈ လႄႈ ၾူႇတူးၼႃး + + + ဢႃပီယႃႇ + + + ဢေႇတႅၼ်ႇ + + + မႃႇယူတ်ႈ + + + ၵျူဝ်ႇႁၼ်ႇၼႅတ်ႉသ်ပၢၵ်ႉ + + + လူႇသႃႇၵႃႇ + + + ႁႃႇရႃႇရႄႇ + + + + ၶၢဝ်းယၢမ်း ဢေႇၵႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢေႇၵႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢေႇၵႃႇ + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၾၵၢၼ်ႇၼီႇသတၢၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၾရိၵ ပွတ်းၵၢင် + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၾရိၵ ပွတ်းဢွၵ်ႇ + + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇၾရိၵၸၢၼ်း + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၾရိၵ ပွတ်းတူၵ်း + + + + + ၶၢဝ်းယၢမ်း ဢလႅတ်ႉသၵႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢလႅတ်ႉသၵႃႇ + ၶၢဝ်းယၢမ်းၵၢင်ဝၼ်း ဢလႅတ်ႉသၵႃႇ + + + + + ၶၢဝ်းယၢမ်း ဢႄးလ်မႃႇတီႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႄးလ်မႃႇတီႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢႄးလ်မႃႇတီႇ + + + + + ၶၢဝ်းယၢမ်း ဢမၸွၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢမၸွၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢမၸွၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ပွတ်းၵၢင် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပွတ်းၵၢင် + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ပွတ်းၵၢင် + + + + + ၶၢဝ်းယၢမ်း ပွတ်းဢွၵ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပွတ်းဢွၵ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ပွတ်းဢွၵ်ႇ + + + + + ၶၢဝ်းယၢမ်း သၼ်လွႆ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း သၼ်လွႆ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း သၼ်လွႆ + + + + + ၶၢဝ်းယၢမ်း ပၸိၾိၵ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပၸိၾိၵ်ႉ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ပၸိၾိၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၼႃႇတီႇယႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇၼႃႇတီႇယႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢႃႇၼႃႇတီႇယႃႇ + + + + + ၶၢဝ်းယၢမ်း သႃႇမူဝ်းဝႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း သႃႇမူဝ်းဝႃႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း သႃႇမူဝ်းဝႃႇ + + + + + ၶၢဝ်းယၢမ်း ဢႅၵ်ႉတၢဝ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႅၵ်ႉတၢဝ်ႉ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢႅၵ်ႉတၢဝ်ႉ + + + + + ၶၢဝ်းယၢမ်း ဢႅၵ်ႉတူဝ်ႇပီႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႅၵ်ႉတူဝ်ႇပီႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢႅၵ်ႉတူဝ်ႇပီႇ + + + + + ၶၢဝ်းယၢမ်း ဢႃႇရၢပ်ႈ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇရၢပ်ႈ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢႃႇရၢပ်ႈ + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၵျႅၼ်ႇတီးၼႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇၵျႅၼ်ႇတီးၼႃး + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢႃႇၵျႅၼ်ႇတီးၼႃး + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၵျႅၼ်ႇတီးၼႃး ပွတ်းတူၵ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇၵျႅၼ်ႇတီးၼႃး ပွတ်းတူၵ်း + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢႃႇၵျႅၼ်ႇတီးၼႃး ပွတ်းတူၵ်း + + + + + ၶၢဝ်းယၢမ်း ဢႃႇမေးၼီးယႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇမေးၼီးယႃး + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢႃႇမေးၼီးယႃး + + + + + ၶၢဝ်းယၢမ်း ဢႅတ်ႉလႅၼ်းတိၵ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႅတ်ႉလႅၼ်းတိၵ်ႉ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢႅတ်ႉလႅၼ်းတိၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ဢေႃႉသထရေးလီးယႃး ပွတ်းၵၢင် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢေႃႉသထရေးလီးယႃး + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢေႃႉသထရေးလီးယႃး + + + + + ၶၢဝ်းယၢမ်း ပွတ်းတူၵ်း တွၼ်ႈၵၢင် ဢေႃႉသထရေးလီးယႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပွတ်းတူၵ်း တွၼ်ႈၵၢင် ဢေႃႉသထရေးလီးယႃး + ၶၢဝ်းယၢမ်း ပွတ်းတူၵ်း တွၼ်ႈၵၢင် ၶၢဝ်းမႆႈ ဢေႃႉသထရေးလီးယႃး + + + + + ၶၢဝ်းယၢမ်း ပွတ်းဢွၵ်ႇ ဢေႃႉသထရေးလီးယႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပွတ်းဢွၵ်ႇ ဢေႃႉသထရေးလီးယႃး + ၶၢဝ်းယၢမ်း ပွတ်းဢွၵ်ႇ ၵၢင်ဝၼ်း ဢေႃႉသထရေးလီးယႃး + + + + + ၶၢဝ်းယၢမ်း ပွတ်းတူၵ်း ဢေႃႉသထရေးလီးယႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပွတ်းတူၵ်း ဢေႃႉသထရေးလီးယႃး + ၶၢဝ်းယၢမ်း ပွတ်းတူၵ်း ၵၢင်ဝၼ်း ဢေႃႉသထရေးလီးယႃး + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၸႃႇပၢႆႇၸၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇၸႃႇပၢႆႇၸၼ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢႃႇၸႃႇပၢႆႇၸၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ဢႃႇၸူဝ်ႇရႅတ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢႃႇၸူဝ်ႇရႅတ်ႉ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢႃႇၸူဝ်ႇရႅတ်ႉ + + + + + ၶၢဝ်းယၢမ်း ပင်းၵလႃးတဵတ်ႈ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပင်းၵလႃးတဵတ်ႈ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ပင်းၵလႃးတဵတ်ႈ + + + + + ၶၢဝ်းယၢမ်း ၽူႇတၢၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ပူဝ်ႇလီးပီးယႃး + + + + + ၶၢဝ်းယၢမ်း ပရႃႇၸီးလီးယႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပရႃႇၸီးလီးယႃး + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ပရႃႇၸီးလီးယႃး + + + + + ၶၢဝ်းယၢမ်း ပရူႇၼၢႆး + + + + + ၶၢဝ်းယၢမ်း ၶဵပ်ႉဝႄႇတီႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶဵပ်ႉဝႄႇတီႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၶဵပ်ႉဝႄႇတီႇ + + + + + ၶၢဝ်းယၢမ်း ၶေႇသီႇ + + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶျမ်ႇမူဝ်ႇရူဝ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၶျႅတ်ႉထမ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶျႅတ်ႉထမ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၶျႅတ်ႉထမ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၶျီႇလီႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶျီႇလီႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၶျီႇလီႇ + + + + + ၶၢဝ်းယၢမ်း ၶႄႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶႄႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၶႄႇ + + + + + ၶၢဝ်းယၢမ်း ၵုၼ်ၶရိတ်ႉသမၢတ်ႉ + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ်ၵူဝ်ႇၵူဝ်းသ် + + + + + ၶၢဝ်းယၢမ်း ၵူဝ်ႇလမ်ႇပီႇယႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵူဝ်ႇလမ်ႇပီႇယႃႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵူဝ်ႇလမ်ႇပီႇယႃႇ + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ်ၶုၵ်ႈ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း မူႇၵုၼ်ၶုၵ်ႈ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ မူႇၵုၼ်ၶုၵ်ႈ + + + + + ၶၢဝ်းယၢမ်း ၵူးပႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵူးပႃး + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵူးပႃး + + + + + ၶၢဝ်းယၢမ်း တေးဝိတ်ႉ + + + + + ၶၢဝ်းယၢမ်း တူႇမွၼ်ႉ တဝီႇလ် + + + + + ၶၢဝ်းယၢမ်း တီႇမေႃးလႅတ်ႉသ်တႄး + + + + + ၶၢဝ်းယၢမ်း ၵုၼ်ဢီႇသတႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵုၼ်ဢီႇသတႃႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵုၼ်ဢီႇသတႃႇ + + + + + ၶၢဝ်းယၢမ်း ဢေႇၵႂႃႇတေႃႇ + + + + + ၶၢဝ်းယၢမ်း ယူးရူပ်ႉ ပွတ်းၵၢင် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ယူးရူပ်ႉ ပွတ်းၵၢင် + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ယူးရူပ်ႉ ပွတ်းၵၢင် + + + + + ၶၢဝ်းယၢမ်း ယူးရူပ်ႉ ပွတ်းဢွၵ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ယူးရူပ်ႉ ပွတ်းဢွၵ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ယူးရူပ်ႉ ပွတ်းဢွၵ်ႇ + + + + + ၶၢဝ်းယၢမ်း ယူးရူပ်ႉ ပွတ်းဢွၵ်ႇ ဢၼ်ၵႆတိူဝ်း + + + + + ၶၢဝ်းယၢမ်း ယူးရူပ်ႉ ပွတ်းတူၵ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ယူးရူပ်ႉ ပွတ်းတူၵ်း + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ယူးရူပ်ႉ ပွတ်းတူၵ်း + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ် ၾွၵ်ႉလႅၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း မူႇၵုၼ် ၾွၵ်ႉလႅၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း မူႇၵုၼ် ၾွၵ်ႉလႅၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၾီႇၵျီႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၾီႇၵျီႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၾီႇၵျီႇ + + + + + ၶၢဝ်းယၢမ်း ၵုၺ်ႇယႃႇၼႃႇ ၶွင် ၾရၢင်ႇသဵတ်ႈ + + + + + ၶၢဝ်းယၢမ်း ၾရၢင်ႇသဵတ်ႈ ပွတ်းၸၢၼ်း လႄႈ ဢႅၼ်ႇတၢၵ်ႈတီးၵႃႈ + + + + + ၶၢဝ်းယၢမ်း ၵႃႇလႃႇပၵူဝ်ႉသ် + + + + + ၶၢဝ်းယၢမ်း ၵမ်ႇပီႇယႃႇ + + + + + ၶၢဝ်းယၢမ်း ၵျေႃႇၵျႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵျေႃႇၵျႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၵျေႃႇၵျႃႇ + + + + + ၶၢဝ်းယၢမ်း ၵိလ်ပႅတ်ႉ + + + + + ၶၢဝ်းယၢမ်း ၽတ်ႉၽဵင်ႇ ၵရိၼ်းဝိတ်ႉ + + + + + ၶၢဝ်းယၢမ်း ၵရိၼ်းလႅၼ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵရိၼ်းလႅၼ်း + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၵရိၼ်းလႅၼ်း + + + + + ၶၢဝ်းယၢမ်း ၵရိၼ်းလႅၼ်း ပွတ်းဢွၵ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵရိၼ်းလႅၼ်း ပွတ်းဢွၵ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵရိၼ်းလႅၼ်း ပွတ်းဢွၵ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၵရိၼ်းလႅၼ်း ပွတ်းတူၵ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵရိၼ်းလႅၼ်း ပွတ်းတူၵ်း + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵရိၼ်းလႅၼ်း ပွတ်းတူၵ်း + + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵႂၢမ်ႇ + + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢၢဝ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၵၢႆႇယႃးၼႃႇ + + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ႁႃႇဝၢႆးဢီး-ဢလူးသျၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ႁႃႇဝၢႆးဢီး-ဢလူးသျၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ႁႃႇဝၢႆးဢီး-ဢလူးသျၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ႁႃႇဝၢႆးဢီး-ဢလူးသျၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ႁွင်းၵွင်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ႁွင်းၵွင်း + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ႁွင်းၵွင်း + + + + + ၶၢဝ်းယၢမ်း ၶူဝ်ဝေတေး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶူဝ်ဝေတေး + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၶူဝ်ဝေတေး + + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢိၼ်းတီးယႃး + + + + + ၶၢဝ်းယၢမ်း သမုၵ်ႉတရႃႇဢိၼ်းတီးယႃး + + + + + ၶၢဝ်းယၢမ်း ဢိၼ်ႇတူဝ်ႇၶႄႇ + + + + + ၶၢဝ်းယၢမ်း ဢိၼ်ႇတူဝ်ႇၼီးသျႃး ပွတ်းၵၢင် + + + + + ၶၢဝ်းယၢမ်း ဢိၼ်ႇတူဝ်ႇၼီးသျႃး ပွတ်းဢွၵ်ႇ + + + + + ၶၢဝ်းယၢမ်း ဢိၼ်ႇတူဝ်ႇၼီးသျႃး ပွတ်းတူၵ်း + + + + + ၶၢဝ်းယၢမ်း ဢီႇရၢၼ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢီႇရၢၼ်း + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢီႇရၢၼ်း + + + + + ၶၢဝ်းယၢမ်း ဢိရၶုတ်ႉသ်ၶ် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢိရၶုတ်ႉသ်ၶ် + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢိရၶုတ်ႉသ်ၶ် + + + + + ၶၢဝ်းယၢမ်း ဢိတ်ႇသရေး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢိတ်ႇသရေး + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢိတ်ႇသရေး + + + + + ၶၢဝ်းယၢမ်း ၵျႃႇပၢၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵျႃႇပၢၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵျႃႇပၢၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၵမ်ႇၶျတ်ႉၵႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵမ်ႇၶျတ်ႉၵႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၵမ်ႇၶျတ်ႉၵႃႇ + + + + + ၶၢဝ်းယၢမ်း ၵႃႇၸၢၵ်ႈသတၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၵႃႇၸၢၵ်ႈသတၼ်ႇ ပွတ်းဢွၵ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၵႃႇၸၢၵ်ႈသတၼ်ႇ ပွတ်းတူၵ်း + + + + + ၶၢဝ်းယၢမ်း ၵၢဝ်းလီ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵၢဝ်းလီ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵၢဝ်းလီ + + + + + ၶၢဝ်းယၢမ်း ၵွတ်ႉသ်ရေး + + + + + ၶၢဝ်းယၢမ်း ၶရတ်ႉၼူဝ်ႇယႃႇသ်ၶ် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶရတ်ႉၼူဝ်ႇယႃႇသ်ၶ် + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၶရတ်ႉၼူဝ်ႇယႃႇသ်ၶ် + + + + + ၶၢဝ်းယၢမ်း ၵႃႇၵိတ်ႈသတၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း လင်းၵႃ + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ်လၢႆး + + + + + ၶၢဝ်းယၢမ်း လွတ်ႉႁၢဝ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း လွတ်ႉႁၢဝ်း + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း လွတ်ႉႁၢဝ်း + + + + + ၶၢဝ်းယၢမ်း မႃႇၵၢဝ်ႈ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း မႃႇၵၢဝ်ႈ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ မႃႇၵၢဝ်ႈ + + + + + ၶၢဝ်းယၢမ်း မႃႇၵႃႇတၢၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း မႃႇၵႃႇတၢၼ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ မႃႇၵႃႇတၢၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း မလေးသျႃး + + + + + ၶၢဝ်းယၢမ်း မေႃႇတိပ်ႈ + + + + + ၶၢဝ်းယၢမ်း မႃၶေးသႅတ်ႉသ် + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ်မႃးသျႄႇ + + + + + ၶၢဝ်းယၢမ်း မေႃးရီႇသႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း မေႃးရီႇသႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ မေႃးရီႇသႃႇ + + + + + ၶၢဝ်းယၢမ်း မေႃသၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း မႅၵ်ႇသီႇၵူဝ်ႇ ပၸိၾိၵ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း မႅၵ်ႇသီႇၵူဝ်ႇ ပၸိၾိၵ်ႉ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း မႅၵ်ႇသီႇၵူဝ်ႇ ပၸိၾိၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ဢူလၼ်ပႃတႃ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢူလၼ်ပႃတႃ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢူလၼ်ပႃတႃ + + + + + ၶၢဝ်းယၢမ်း မွတ်ႉသ်ၵူဝ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း မွတ်ႉသ်ၵူဝ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ မွတ်ႉသ်ၵူဝ်ႇ + + + + + ၶၢဝ်းယၢမ်း မျၢၼ်ႇမႃႇ + + + MMT + + + + + ၶၢဝ်းယၢမ်း ၼၢဝ်ရူး + + + + + ၶၢဝ်းယၢမ်း ၼေႇပေႃး + + + + + ၶၢဝ်းယၢမ်း ၼိဝ်းၶႄႇလီႇတူဝ်းၼီးယႃး + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၼိဝ်းၶႄႇလီႇတူဝ်းၼီးယႃး + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၼိဝ်းၶႄႇလီႇတူဝ်းၼီးယႃး + + + + + ၶၢဝ်းယၢမ်း ၼိဝ်းၸီႇလႅၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၼိဝ်းၸီႇလႅၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၼိဝ်းၸီႇလႅၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၼိဝ်းၾွမ်ႇလႅၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၼိဝ်းၾွမ်ႇလႅၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၼိဝ်းၾွမ်ႇလႅၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၼီးဝႄႇ + + + + + ၶၢဝ်းယၢမ်း ၵုၼ်ၼေႃႇၾုၵ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၵုၼ်ၼေႃႇၾုၵ်ႉ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၵုၼ်ၼေႃႇၾုၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ၾႃႇၼႅၼ်ႇတူဝ်ႇ တႄႇ တီႇၼူဝ်ႇရွၼ်ႇႁႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၾႃႇၼႅၼ်ႇတူဝ်ႇ တႄႇ တီႇၼူဝ်ႇရွၼ်ႇႁႃႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ၾႃႇၼႅၼ်ႇတူဝ်ႇ တႄႇ တီႇၼူဝ်ႇရွၼ်ႇႁႃႇ + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ်မႃႇရီႇယႃႇၼႃႇ ပွတ်းႁွင်ႇ + + + + + ၶၢဝ်းယၢမ်း ၼူဝ်ႇဝူဝ်ႇသီႇပၢတ်ႉသ်ၶ် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၼူဝ်ႇဝူဝ်ႇသီႇပၢတ်ႉသ်ၶ် + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၼူဝ်ႇဝူဝ်ႇသီႇပၢတ်ႉသ်ၶ် + + + + + ၶၢဝ်းယၢမ်း ဢူမ်းသ်ၶ် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢူမ်းသ်ၶ် + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢူမ်းသ်ၶ် + + + + + ၶၢဝ်းယၢမ်း ပႃႇၵိတ်ႈသတၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပႃႇၵိတ်ႈသတၼ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ပႃႇၵိတ်ႈသတၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ပႃႇလၢဝ်း + + + + + ၶၢဝ်းယၢမ်း ပႃးပႂႃႇၼိဝ်းၵီးၼီး + + + + + ၶၢဝ်းယၢမ်း ပႃႇရႃႇၵူၺ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပႃႇရႃႇၵူၺ်း + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ပႃႇရႃႇၵူၺ်း + + + + + ၶၢဝ်းယၢမ်း ပေႇရူႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ပေႇရူႉ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ပေႇရူႉ + + + + + ၶၢဝ်းယၢမ်း ၾီလိပ်ႈပိၼ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၾီလိပ်ႈပိၼ်း + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၾီလိပ်ႈပိၼ်း + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ်ၽီးၼိၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း သဵင်ႉပီးယႃး လႄႈ မိၵ်ႈၵွႆႇလွၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း သဵင်ႉပီးယႃး လႄႈ မိၵ်ႈၵွႆႇလွၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း သဵင်ႉပီးယႃး လႄႈ မိၵ်ႈၵွႆႇလွၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၽိတ်ႉၶႅၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ပူၼ်းပေႇ + + + + + ၶၢဝ်းယၢမ်း ၵၢဝ်းလီႁွင်ႇ + + + + + ၶၢဝ်းယၢမ်း ၶုၺ်ႇၸီးလူဝ်ႇတႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ၶုၺ်ႇၸီးလူဝ်ႇတႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ၶုၺ်ႇၸီးလူဝ်ႇတႃႇ + + + + + ၶၢဝ်းယၢမ်း ရေႇၼီႇယၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ရူဝ်ႇထႄႇရႃႇ + + + + + ၶၢဝ်းယၢမ်း သႃႇၶႃႇလိၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း သႃႇၶႃႇလိၼ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ သႃႇၶႃႇလိၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း သႃႇမႃႇရႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း သႃႇမႃႇရႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ သႃႇမႃႇရႃႇ + + + + + ၶၢဝ်းယၢမ်း သႃႇမူဝ်းဝႃႇ ၶွ​င် ဢမႄႇရိၵၢၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း သႃႇမူဝ်းဝႃႇ ၶွ​င် ဢမႄႇရိၵၢၼ်ႇ + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း သႃႇမူဝ်းဝႃႇ ၶွ​င် ဢမႄႇရိၵၢၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း သေးသျႄႇ + + + + + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း သိင်ႇၵႃႇပူဝ်ႇ + + + + + ၶၢဝ်းယၢမ်း မူႇၵုၼ်သေႃႇလေႃႇမၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ၵျေႃႇၵျႃႇ ပွတ်းၸၢၼ်း + + + + + ၶၢဝ်းယၢမ်း သျူးရီးၼႃႇမႄႇ + + + + + ၶၢဝ်းယၢမ်း သၢႆးဢူဝ်ႇဝႃႇ + + + + + ၶၢဝ်းယၢမ်း တႁီႇတီႇ + + + + + ၶၢဝ်းယၢမ်း ထၢႆႇဝၢၼ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ထၢႆႇဝၢၼ်း + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ထၢႆႇဝၢၼ်း + + + + + ၶၢဝ်းယၢမ်း တႃႇၵျီႇၵီႇသတၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ထူဝ်းၵေႇလၢဝ်ႇ + + + + + ၶၢဝ်းယၢမ်း ထွင်းၵႃႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ထွင်းၵႃႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ထွင်းၵႃႇ + + + + + ၶၢဝ်းယၢမ်း ၶျူၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း တၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း တၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ တၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ထူးဝႃႇလူႇ + + + + + ၶၢဝ်းယၢမ်း ဢုရုၵူၺ်း + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢုရုၵူၺ်း + ၶၢဝ်းယၢမ်း ၵၢင်ဝၼ်း ဢုရုၵူၺ်း + + + + + ၶၢဝ်းယၢမ်း ဢူႇၸပႄႉၵိတ်ႇသတၼ်ႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဢူႇၸပႄႉၵိတ်ႇသတၼ်ႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဢူႇၸပႄႉၵိတ်ႇသတၼ်ႇ + + + + + ၶၢဝ်းယၢမ်း ဝႅၼ်ႇၼူးဝႃႇထူႇ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဝႅၼ်ႇၼူးဝႃႇထူႇ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဝႅၼ်ႇၼူးဝႃႇထူႇ + + + + + ၶၢဝ်းယၢမ်း ဝႄႇၼေႇၸွႆးလႃး + + + + + ၶၢဝ်းယၢမ်း ဝလႃႇတီႇဝူဝ်ႇသတွၵ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဝလႃႇတီႇဝူဝ်ႇသတွၵ်ႉ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဝလႃႇတီႇဝူဝ်ႇသတွၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ဝူဝ်ႇၵူဝ်ႇၵရၢတ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ဝူဝ်ႇၵူဝ်ႇၵရၢတ်ႉ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ဝူဝ်ႇၵူဝ်ႇၵရၢတ်ႉ + + + + + ၶၢဝ်းယၢမ်း ဝေႃႉသ်တွၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ၵုၼ်ဝဵၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ဝႃးလိတ်ႈ လႄႈ ၾူႇတူးၼႃး + + + + + ၶၢဝ်းယၢမ်း ယၵုတ်ႉသ်ၶ် + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ယၵုတ်ႉသ်ၶ် + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ယၵုတ်ႉသ်ၶ် + + + + + ၶၢဝ်းယၢမ်း ယေႇၵႃႇတႄႇရိၼ်ႇပၢၵ်ႉ + လၵ်းၸဵင် ၶၢဝ်းယၢမ်း ယေႇၵႃႇတႄႇရိၼ်ႇပၢၵ်ႉ + ၶၢဝ်းယၢမ်း ၶၢဝ်းမႆႈ ယေႇၵႃႇတႄႇရိၼ်ႇပၢၵ်ႉ + + + + + ၶၢဝ်းယၢမ်း ယူးၵွၼ်ႇ + + + + + + + + + 0 ႁဵင် + 0 မိုၼ်ႇ + 0 သႅၼ် + 0 လၢၼ်ႉ + 00 လၢၼ်ႉ + 000 လၢၼ်ႉ + 0 ႁဵင်လၢၼ်ႉ + 0 မိုၼ်ႇလၢၼ်ႉ + 0 သႅၼ်လၢၼ်ႉ + 0 လၢၼ်ႉလၢၼ်ႉ + 00 လၢၼ်ႉလၢၼ်ႉ + 000 လၢၼ်ႉလၢၼ်ႉ + + + + + + ပေႇသႄႇတႃႇဢႅၼ်ႇတူဝ်ႇရႃႇ + ပေႇသႄႇတႃႇဢႅၼ်ႇတူဝ်ႇရႃႇ + + + တီႇရမ်ႇမိူင်းႁူမ်ႈတုမ် ၸဝ်ႈၾႃႉ ဢႃႇရၢပ်ႈ + တီႇရမ်ႇမိူင်းႁူမ်ႈတုမ် ၸဝ်ႈၾႃႉ ဢႃႇရၢပ်ႈ + + + ဢႃႇၾၵၢၼ်ႇၼီႇဢႃႇၾၵၢၼ်ႇ (1927–2002) + ဢႃႇၾၵၢၼ်ႇၼီႇဢႃႇၾၵၢၼ်ႇ (1927–2002) + + + ဢႃႇၾၵၢၼ်ႇၼီႇဢႃႇၾၵၢၼ်ႇ + ဢႃႇၾၵၢၼ်ႇၼီႇဢႃႇၾၵၢၼ်ႇ + + + လႅၵ်ႈဢႃႇပႃးၼီးယႃး (1946–1965) + လႅၵ်ႈဢႃႇပႃးၼီးယႃး (1946–1965) + + + လႅၵ်ႈဢႃႇပႃးၼီးယႃး + လႅၵ်ႈဢႃႇပႃးၼီးယႃး + + + တရၢမ်ႇဢႃႇမေးၼီးယႃး + တရၢမ်ႇဢႃႇမေးၼီးယႃး + + + ၵဵဝ်းတႃႇၼႄႇတႃႇလႅၼ်ႇ ဢၼ်ထေးလ်လိသ် + ၵဵဝ်းတႃႇၼႄႇတႃႇလႅၼ်ႇ ဢၼ်ထေးလ်လိသ် + + + ၶႂၼ်ႇၸႃႇဢႅၼ်ႇၵူဝ်ႇလႃႇ + ၶႂၼ်ႇၸႃႇဢႅၼ်ႇၵူဝ်ႇလႃႇ + + + ၶႂၼ်ႇၸႃႇဢႅၼ်ႇၵူဝ်ႇလႃႇ (1977–1991) + ၶႂၼ်ႇၸႃႇဢႅၼ်ႇၵူဝ်ႇလႃႇ (1977–1991) + + + ၶႂၼ်ႇၸႃႇမႂ်ႇဢႅၼ်ႇၵူဝ်ႇလႃႇ (1990–2000) + ၶႂၼ်ႇၸႃႇမႂ်ႇဢႅၼ်ႇၵူဝ်ႇလႃႇ (1990–2000) + + + ၶႂၼ်ႇၸႃႇဢႅၼ်ႇၵူဝ်ႇလႃႇ ဢၼ်ၶိုၼ်းမူၼ်ႉမႄးဝႆႉ (1995–1999) + ၶႂၼ်ႇၸႃႇဢႅၼ်ႇၵူဝ်ႇလႃႇ ဢၼ်ၶိုၼ်းမူၼ်ႉမႄးဝႆႉ (1995–1999) + + + ဢေႃႉသထရႄႇလ်ဢႃႇၵျႅၼ်ႇတီးၼႃး + ဢေႃႉသထရႄႇလ်ဢႃႇၵျႅၼ်ႇတီးၼႃး + + + ပေႇသူဝ်ႇလေးဢႃႇၵျႅၼ်ႇတီးၼႃး (1970–1983) + ပေႇသူဝ်ႇလေးဢႃႇၵျႅၼ်ႇတီးၼႃး (1970–1983) + + + ပေႇသူဝ်ႇဢႃႇၵျႅၼ်ႇတီးၼႃး (1881–1970) + ပေႇသူဝ်ႇဢႃႇၵျႅၼ်ႇတီးၼႃး (1881–1970) + + + ပေႇသူဝ်ႇဢႃႇၵျႅၼ်ႇတီးၼႃး (1983–1985) + ပေႇသူဝ်ႇဢႃႇၵျႅၼ်ႇတီးၼႃး (1983–1985) + + + ပေႇသူဝ်ႇဢႃႇၵျႅၼ်ႇတီးၼႃး + ပေႇသူဝ်ႇဢႃႇၵျႅၼ်ႇတီးၼႃး + + + သျီႇလင်ႇဢေႃးသထရီးယႃး + သျီႇလင်ႇဢေႃးသထရီးယႃး + + + တေႃႇလႃႇဢေႃႉသထရေးလီးယႃး + တေႃႇလႃႇဢေႃႉသထရေးလီးယႃး + + + ၽလေႃးရိၼ်ႇဢႃႇရူးပႃး + ၽလေႃးရိၼ်ႇဢႃႇရူးပႃး + + + မၼတ်ႉဢႃႇၸႃႇပၢႆႇၸၼ်ႇ (1993–2006) + မၼတ်ႉဢႃႇၸႃႇပၢႆႇၸၼ်ႇ (1993–2006) + + + မၼတ်ႉဢႃႇၸႃႇပၢႆႇၸၼ်ႇ + မၼတ်ႉဢႃႇၸႃႇပၢႆႇၸၼ်ႇ + + + တီႇၼႃႇပေႃးသၼီးယႃး လႄႈ ႁႃႇၸီႇၵူဝ်းဝီးၼႃး (1992–1994) + တီႇၼႃႇပေႃးသၼီးယႃး လႄႈ ႁႃႇၸီႇၵူဝ်းဝီးၼႃး (1992–1994) + + + မၢၵ်ႉၶ်ပေႃးသၼီးယႃး လႄႈ ႁႃႇၸီႇၵူဝ်းဝီးၼႃး ဢၼ်လႅၵ်ႈလႆႈ + မၢၵ်ႉၶ်ပေႃးသၼီးယႃး လႄႈ ႁႃႇၸီႇၵူဝ်းဝီးၼႃး ဢၼ်လႅၵ်ႈလႆႈ + + + တီႇၼႃႇမႂ်ႇပေႃးသၼီးယႃး လႄႈ ႁႃႇၸီႇၵူဝ်းဝီးၼႃး (1994–1997) + တီႇၼႃႇမႂ်ႇပေႃးသၼီးယႃး လႄႈ ႁႃႇၸီႇၵူဝ်းဝီးၼႃး (1994–1997) + + + တေႃႇလႃႇပႃးပေႇတူတ်ႈ + တေႃႇလႃႇပႃးပေႇတူတ်ႈ + + + တႃႇၵႃႇပင်းၵလႃးတဵတ်ႈ + တႃႇၵႃႇပင်းၵလႃးတဵတ်ႈ + + + ၾရၼ်ႉပႄႇၵျီႇယမ်ႇ (ဢၼ်လႅၵ်ႈလႆႈ) + ၾရၼ်ႉပႄႇၵျီႇယမ်ႇ (ဢၼ်လႅၵ်ႈလႆႈ) + + + ၾရၼ်ႉပႄႇၵျီႇယမ်ႇ + ၾရၼ်ႉပႄႇၵျီႇယမ်ႇ + + + ၾရၼ်ႉပႄႇၵျီႇယမ်ႇ (ၵၢၼ်ငိုၼ်းတွင်း) + ၾရၼ်ႉပႄႇၵျီႇယမ်ႇ (ၵၢၼ်ငိုၼ်းတွင်း) + + + လႅပ်ႉၾ်ၶႅင်ပူႇၵႃႇရီႇယႃႇ + လႅပ်ႉၾ်ၶႅင်ပူႇၵႃႇရီႇယႃႇ + + + လႅပ်ႉၾ်သူဝ်ႇသျႄႇလိတ်ႉပူႇၵႃႇရီႇယႃႇ + လႅပ်ႉၾ်သူဝ်ႇသျႄႇလိတ်ႉပူႇၵႃႇရီႇယႃႇ + + + လႅပ်ႉၾ်ပူႇၵႃႇရီႇယႃႇ + လႅပ်ႉၾ်ပူႇၵႃႇရီႇယႃႇ + + + လႅပ်ႉၾ်ပူႇၵႃႇရီႇယႃႇ (1879–1952) + လႅပ်ႉၾ်ပူႇၵႃႇရီႇယႃႇ (1879–1952) + + + တီႇၼႃႇပႃႇရဵၼ်း + တီႇၼႃႇပႃႇရဵၼ်း + + + ၾရၼ်ႉပူႇရုၼ်းတီႇ + ၾရၼ်ႉပူႇရုၼ်းတီႇ + + + တေႃႇလႃႇပႃႇမိဝ်းတႃး + တေႃႇလႃႇပႃႇမိဝ်းတႃး + + + တေႃႇလႃႇပရူႇၼၢႆး + တေႃႇလႃႇပရူႇၼၢႆး + + + ပူဝ်ႇလီႇဝီႇယႃႇၼူဝ်ႇပူဝ်ႇလီးပီးယႃး + ပူဝ်ႇလီႇဝီႇယႃႇၼူဝ်ႇပူဝ်ႇလီးပီးယႃး + + + ပူဝ်ႇလီႇဝီႇယႃႇၼူဝ်ႇပူဝ်ႇလီးပီးယႃး (1863–1963) + ပူဝ်ႇလီႇဝီႇယႃႇၼူဝ်ႇပူဝ်ႇလီးပီးယႃး (1863–1963) + + + ပေႇသူဝ်ႇပူဝ်ႇလီးပီးယႃး + ပေႇသူဝ်ႇပူဝ်ႇလီးပီးယႃး + + + ဢႅမ်ႇဝီႇတေႃးပူဝ်ႇလီးပီးယႃး + ဢႅမ်ႇဝီႇတေႃးပူဝ်ႇလီးပီးယႃး + + + ၶရူႇၸႄရူဝ်ႇမႂ်ႇပရႃႇၸီး (1967–1986) + ၶရူႇၸႄရူဝ်ႇမႂ်ႇပရႃႇၸီး (1967–1986) + + + ၶရူႇၸႃတူဝ်ႇပရႃႇၸီး (1986–1989) + ၶရူႇၸႃတူဝ်ႇပရႃႇၸီး (1986–1989) + + + ၶရူႇၸႄရူဝ်ႇပရႃႇၸီး (1990–1993) + ၶရူႇၸႄရူဝ်ႇပရႃႇၸီး (1990–1993) + + + ရီးဢႄႇလ်ပရႃႇၸီး + ရီးဢႄႇလ်ပရႃႇၸီး + + + ၶရူႇၸႃတူဝ်ႇမႂ်ႇပရႃႇၸီး (1989–1990) + ၶရူႇၸႃတူဝ်ႇမႂ်ႇပရႃႇၸီး (1989–1990) + + + ၶရူႇၸႄရူဝ်ႇပရႃႇၸီး (1993–1994) + ၶရူႇၸႄရူဝ်ႇပရႃႇၸီး (1993–1994) + + + ၶရူႇၸႄရူဝ်ႇပရႃႇၸီး (1942–1967) + ၶရူႇၸႄရူဝ်ႇပရႃႇၸီး (1942–1967) + + + တေႃႇလႃႇပႃႇႁႃးမႃး + တေႃႇလႃႇပႃႇႁႃးမႃး + + + ဢိၼ်ၵူးလ်ထရမ်ႇၽူႇတၢၼ်ႇ + ဢိၼ်ၵူးလ်ထရမ်ႇၽူႇတၢၼ်ႇ + + + ၵျၢပ်ႈမၢၼ်ႈ + ၵျၢပ်ႈမၢၼ်ႈ + + + ပူႇလႃႇပွတ်ႉသဝႃႇၼႃႇ + ပူႇလႃႇပွတ်ႉသဝႃႇၼႃႇ + + + ရူႇပႄႇပႄႇလႃႇရုတ်ႈ (1994–1999) + ရူႇပႄႇပႄႇလႃႇရုတ်ႈ (1994–1999) + + + ရူႇပႄႇပႄႇလႃႇရုတ်ႈ + ရူႇပႄႇပႄႇလႃႇရုတ်ႈ + + + ရူႇပႄႇပႄႇလႃႇရုတ်ႈ (2000–2016) + ရူႇပႄႇပႄႇလႃႇရုတ်ႈ (2000–2016) + + + တေႃႇလႃႇပႄႇလိတ်ႈ + တေႃႇလႃႇပႄႇလိတ်ႈ + + + တေႃႇလႃႇၶႅၼ်ႇၼေႇတႃႇ + တေႃႇလႃႇၶႅၼ်ႇၼေႇတႃႇ + + + ၾရၼ်ႉၶွင်ႇၵူဝ်ႇ + ၾရၼ်ႉၶွင်ႇၵူဝ်ႇ + + + ယူႇရူဝ်ႇ WIR + ယူႇရူဝ်ႇ WIR + + + ၾရၼ်ႉသဝိတ်ႈၸႃႇလႅၼ်ႇ + ၾရၼ်ႉသဝိတ်ႈၸႃႇလႅၼ်ႇ + + + ၾရၼ်ႉ WIR + ၾရၼ်ႉ WIR + + + ဢႅတ်ႉသၵူႇတူဝ်ႇၶျီႇလီႇ + ဢႅတ်ႉသၵူႇတူဝ်ႇၶျီႇလီႇ + + + ယူႇၼီႉၶွင်ဢၶွင်ႉၶျီႇလီႇ + ယူႇၼီႉၶွင်ဢၶွင်ႉၶျီႇလီႇ + + + ပေႇသူဝ်ႇၶျီႇလီႇ + ပေႇသူဝ်ႇၶျီႇလီႇ + + + ယွၼ်ႇၶႄႇ (ၼွၵ်ႈၽၢင်ႇပၢင်ႇလၢႆႇ) + ယွၼ်ႇၶႄႇ (ၼွၵ်ႈၽၢင်ႇပၢင်ႇလၢႆႇ) + + + တေႃႇလႃႇယေးငိုၼ်းၵူၼ်းမိူင်းၶႄႇ + တေႃႇလႃႇယေးငိုၼ်းၵူၼ်းမိူင်းၶႄႇ + + + ယွၼ်ႇၶႄႇ + ယွၼ်ႇၶႄႇ + + + ပေႇသူဝ်ႇၵူဝ်ႇလမ်ႇပီႇယႃႇ + ပေႇသူဝ်ႇၵူဝ်ႇလမ်ႇပီႇယႃႇ + + + ယူႇၼိတ်ႉၵႃႈၶၼ်တႄႉတႄႉၵူဝ်ႇလမ်ႇပီႇယႃႇ + ယူႇၼိတ်ႉၵႃႈၶၼ်တႄႉတႄႉၵူဝ်ႇလမ်ႇပီႇယႃႇ + + + ၵူဝ်ႇလူၼ်ႇၵေႃးသတႃႇရိၵႃႇ + ၵူဝ်ႇလူၼ်ႇၵေႃးသတႃႇရိၵႃႇ + + + တီႇၼႃႇသႃးပီးယႃး (2002–2006) + တီႇၼႃႇသႃးပီးယႃး (2002–2006) + + + ၵူဝ်ႇရူႇၼႃႇၶႅင်ၶျႅၵ်ႈ + ၵူဝ်ႇရူႇၼႃႇၶႅင်ၶျႅၵ်ႈ + + + ပေႇသူဝ်ႇၵူးပႃး ဢၼ်လႅၵ်ႈလႆႈ + ပေႇသူဝ်ႇၵူးပႃး ဢၼ်လႅၵ်ႈလႆႈ + + + ပေႇသူဝ်ႇၵူးပႃး + ပေႇသူဝ်ႇၵူးပႃး + + + ဢိသ်ၵူႇတူဝ်ႇၶဵပ်ႉဝႄႇတီႇ + ဢိသ်ၵူႇတူဝ်ႇၶဵပ်ႉဝႄႇတီႇ + + + ပွၼ်းသၢႆႉပရႅတ်ႈ + ပွၼ်းသၢႆႉပရႅတ်ႈ + + + ၵူဝ်ႇရူႇၼႃႇၶျႅၵ်ႈ + ၵူဝ်ႇရူႇၼႃႇၶျႅၵ်ႈ + + + မၢၵ်ႉၶ်ၵျႃႇမၼ်ႇပွတ်းဢွၵ်ႇ + မၢၵ်ႉၶ်ၵျႃႇမၼ်ႇပွတ်းဢွၵ်ႇ + + + မၢၵ်ႉၶ်ၵျႃႇမၼ်ႇ + မၢၵ်ႉၶ်ၵျႃႇမၼ်ႇ + + + ၾရၼ်ႉၵျီႇပူးတီႇ + ၾရၼ်ႉၵျီႇပူးတီႇ + + + ၶရူၼ်းတႅၼ်းမၢၵ်ႈ + ၶရူၼ်းတႅၼ်းမၢၵ်ႈ + + + ပေႇသူဝ်ႇတူဝ်ႇမီႇၼီႇၵၼ်ႇ + ပေႇသူဝ်ႇတူဝ်ႇမီႇၼီႇၵၼ်ႇ + + + တီႇၼႃႇဢႄးၵျီးရီးယႃး + တီႇၼႃႇဢႄးၵျီးရီးယႃး + + + သုၶရေႇဢေႇၵႂႃႇတေႃႇ + သုၶရေႇဢေႇၵႂႃႇတေႃႇ + + + ယူးၼိတ်ႉၵႃႈၶၼ်ဢေႇၵႂႃႇတေႃႇ ဢၼ်ဢမ်ႇလႅၵ်ႈလၢႆႈ + ယူးၼိတ်ႉၵႃႈၶၼ်ဢေႇၵႂႃႇတေႃႇ ဢၼ်ဢမ်ႇလႅၵ်ႈလၢႆႈ + + + ၶရူၼ်းဢႄႇသတူဝ်းၼီးယႃး + ၶရူၼ်းဢႄႇသတူဝ်းၼီးယႃး + + + ပွၼ်းဢီးၵျိပ်ႈ + ပွၼ်းဢီးၵျိပ်ႈ + + + ၼၢၵ်ႉၾႃႉဢႄႇရီႇထရီးယႃး + ၼၢၵ်ႉၾႃႉဢႄႇရီႇထရီးယႃး + + + ပေႇသႄႇတႃႇသပဵၼ်ႇ (ဢၶွင်ႉ) + ပေႇသႄႇတႃႇသပဵၼ်ႇ (ဢၶွင်ႉ) + + + ပေႇသႄႇတႃႇသပဵၼ်ႇ (ဢၶွင်ႉဢၼ်လႅၵ်ႈလႆႈ) + ပေႇသႄႇတႃႇသပဵၼ်ႇ (ဢၶွင်ႉဢၼ်လႅၵ်ႈလႆႈ) + + + ပေႇသႄႇတႃႇသပဵၼ်ႇ + ပေႇသႄႇတႃႇသပဵၼ်ႇ + + + ပႄးရ်ဢီႇတီႇယူဝ်းပီးယႃး + ပႄးရ်ဢီႇတီႇယူဝ်းပီးယႃး + + + ယူႇရူဝ်ႇ + ယူႇရူဝ်ႇ + + + မႃႇၶႃႇၾိၼ်ႇလႅၼ်ႇ + မႃႇၶႃႇၾိၼ်ႇလႅၼ်ႇ + + + တေႃႇလႃႇၾီႇၵျီႇ + တေႃႇလႃႇၾီႇၵျီႇ + + + ပွၼ်းမူႇၵုၼ်ၾွၵ်ႉလႅၼ်ႇ + ပွၼ်းမူႇၵုၼ်ၾွၵ်ႉလႅၼ်ႇ + + + ၾရၼ်ႉၾရၢင်ႇသဵတ်ႈ + ၾရၼ်ႉၾရၢင်ႇသဵတ်ႈ + + + ပွၼ်းဢိင်းၵလဵတ်ႈ + ပွၼ်းဢိင်းၵလဵတ်ႈ + + + ၵူႇပုၼ်ႇလႃႇရိတ်ႉၵျေႃႇၵျႃႇ + ၵူႇပုၼ်ႇလႃႇရိတ်ႉၵျေႃႇၵျႃႇ + + + လႃႇရီႇၵျေႃႇၵျႃႇ + လႃႇရီႇၵျေႃႇၵျႃႇ + + + သေႇတီႇၵႃႇၼႃႇ (1979–2007) + သေႇတီႇၵႃႇၼႃႇ (1979–2007) + + + သေႇတီႇၵႃႇၼႃႇ + သေႇတီႇၵႃႇၼႃႇ + + + ပွၼ်း ၵျီႇပရေႃးတႃး + ပွၼ်း ၵျီႇပရေႃးတႃး + + + တႃႇလႃႇသီႇၵမ်ႇပီးယႃး + တႃႇလႃႇသီႇၵမ်ႇပီးယႃး + + + ၾရၼ်ႉၵီးၼီး + ၾရၼ်ႉၵီးၼီး + + + သီႇလီႇၵီးၼီး + သီႇလီႇၵီးၼီး + + + ဢႅၵ်ႉဝႄႇလႄႇဢီႇၵူၺ်ႇတေႃႇရီႇယႃႇၵီးၼီး + ဢႅၵ်ႉဝႄႇလႄႇဢီႇၵူၺ်ႇတေႃႇရီႇယႃႇၵီးၼီး + + + တရၢၵ်ႉမႃႇၵရိတ်ႈ + တရၢၵ်ႉမႃႇၵရိတ်ႈ + + + ၶႅတ်ႉၸႄးလ်ၵႂႃႇတမႃႇလႃႇ + ၶႅတ်ႉၸႄးလ်ၵႂႃႇတမႃႇလႃႇ + + + ဢႅတ်ႉၵူႇတူဝ်ႇၵီးၼီးပေႃးတူႉၵၢဝ်ႇ + ဢႅတ်ႉၵူႇတူဝ်ႇၵီးၼီးပေႃးတူႉၵၢဝ်ႇ + + + ပေႇသူဝ်ႇၵီးၼီး-ပိတ်ႈသၢဝ်ႇ + ပေႇသူဝ်ႇၵီးၼီး-ပိတ်ႈသၢဝ်ႇ + + + တေႃႇလႃႇၵၢႆႇယႃးၼႃႇ + တေႃႇလႃႇၵၢႆႇယႃးၼႃႇ + + + တေႃႇလႃႇႁွင်းၵွင်း + တေႃႇလႃႇႁွင်းၵွင်း + + + လႅမ်းပီႇရႃႇႁွၼ်ႇတူးရႅတ်ႈ + လႅမ်းပီႇရႃႇႁွၼ်ႇတူးရႅတ်ႈ + + + တီႇၼႃႇၶရူဝ်ႇဢေးသျႃး + တီႇၼႃႇၶရူဝ်ႇဢေးသျႃး + + + ၵူႇၼႃႇၶရူဝ်ႇဢေးသျႃး + ၵူႇၼႃႇၶရူဝ်ႇဢေးသျႃး + + + ၵုတ်ႉထ်ႁေးတီႇ + ၵုတ်ႉထ်ႁေးတီႇ + + + ၾူဝ်ႇရိၼ်ႇႁၢင်ႇၵေႇရီႇ + ၾူဝ်ႇရိၼ်ႇႁၢင်ႇၵေႇရီႇ + + + ရူႇပီးယႃးဢိၼ်ႇတူဝ်ႇၼီးသျႃး + ရူႇပီးယႃးဢိၼ်ႇတူဝ်ႇၼီးသျႃး + + + ပွၼ်းဢၢႆႇယႃႇလႅၼ်ႇ + ပွၼ်းဢၢႆႇယႃႇလႅၼ်ႇ + + + ပွၼ်းဢိတ်ႇသရေး + ပွၼ်းဢိတ်ႇသရေး + + + သျႅၵ်ႈၵႄႇလ်ဢိတ်ႇသရေး (1980–1985) + သျႅၵ်ႈၵႄႇလ်ဢိတ်ႇသရေး (1980–1985) + + + သျႅၵ်ႈၵႄႇလ်မႂ်ႇဢိတ်ႇသရေး + သျႅၵ်ႈၵႄႇလ်မႂ်ႇဢိတ်ႇသရေး + + + ရူႇပီးဢိၼ်းတီးယႃး + ရူႇပီးဢိၼ်းတီးယႃး + + + တီႇၼႃႇဢီႇရၢၵ်ႈ + တီႇၼႃႇဢီႇရၢၵ်ႈ + + + ရီဢႄလ်ဢီႇရၢၼ်း + ရီဢႄလ်ဢီႇရၢၼ်း + + + ၶရူဝ်ႇၼႃႇဢၢႆးသလႅၼ်ႇ (1918–1981) + ၶရူဝ်ႇၼႃႇဢၢႆးသလႅၼ်ႇ (1918–1981) + + + ၶရူဝ်ႇၼႃႇဢၢႆးသလႅၼ်ႇ + ၶရူဝ်ႇၼႃႇဢၢႆးသလႅၼ်ႇ + + + လီႇရႃႇဢီႇတႃႇလီႇ + လီႇရႃႇဢီႇတႃႇလီႇ + + + တေႃႇလႃႇၵျႃႇမေႇၵႃႇ + တေႃႇလႃႇၵျႃႇမေႇၵႃႇ + + + တီႇၼႃႇၵျေႃႇတၼ်ႇ + တီႇၼႃႇၵျေႃႇတၼ်ႇ + + + ယႅၼ်းၵျႃႇပၢၼ်ႇ + ယႅၼ်းၵျႃႇပၢၼ်ႇ + + + သျီႇလိင်ႇၶႅၼ်ႇၺႃႇ + သျီႇလိင်ႇၶႅၼ်ႇၺႃႇ + + + သွမ်ႇၵႃႇၵိတ်ႈသတၼ်ႇ + သွမ်ႇၵႃႇၵိတ်ႈသတၼ်ႇ + + + ရိဢႄလ်ၵမ်ႇပေႃးတီးယႃး + ရိဢႄလ်ၵမ်ႇပေႃးတီးယႃး + + + ၽရၼ်ႉၶူဝ်ႇမူဝ်ႇရူတ်ႈ + ၽရၼ်ႉၶူဝ်ႇမူဝ်ႇရူတ်ႈ + + + ဝွၼ်ႇၵၢဝ်းလီႁွင်ႇ + ဝွၼ်ႇၵၢဝ်းလီႁွင်ႇ + + + ဝွၼ်ႇၵၢဝ်းလီၸၢၼ်း (1953–1962) + ဝွၼ်ႇၵၢဝ်းလီၸၢၼ်း (1953–1962) + + + ဝွၼ်ႇၵၢဝ်းလီၸၢၼ်း (1945–1953) + ဝွၼ်ႇၵၢဝ်းလီၸၢၼ်း (1945–1953) + + + ဝွၼ်ႇၵၢဝ်းလီၸၢၼ်း + ဝွၼ်ႇၵၢဝ်းလီၸၢၼ်း + + + တီႇၼႃႇၶူႇဝဵတ်ႈ + တီႇၼႃႇၶူႇဝဵတ်ႈ + + + တေႃႇလႃႇမူႇၵုၼ်ၶေးမႅၼ်း + တေႃႇလႃႇမူႇၵုၼ်ၶေးမႅၼ်း + + + ထႅင်ၵႄႇၵႃႇၸၢၵ်ႈသတၼ်ႇ + ထႅင်ၵႄႇၵႃႇၸၢၵ်ႈသတၼ်ႇ + + + ၵိပ်ႇလၢဝ်း + ၵိပ်ႇလၢဝ်း + + + ပွၼ်းလႄႇပႃႇၼွၼ်ႇ + ပွၼ်းလႄႇပႃႇၼွၼ်ႇ + + + ရူႇပီးသီႇရိလင်းၵႃ + ရူႇပီးသီႇရိလင်းၵႃ + + + တေႃႇလႃႇလၢႆႇပေးရီးယႃး + တေႃႇလႃႇလၢႆႇပေးရီးယႃး + + + လူဝ်ႇတီႇလႄႇသူဝ်းတူဝ်ႇ + လူဝ်ႇတီႇလႄႇသူဝ်းတူဝ်ႇ + + + လိတတ်ႉသ်လီႉတူႇဝေးၼီးယႃး + လိတတ်ႉသ်လီႉတူႇဝေးၼီးယႃး + + + တႄႇလူဝ်ႇၼတ်ႉလီႉတူႇဝေးၼီးယႃး + တႄႇလူဝ်ႇၼတ်ႉလီႉတူႇဝေးၼီးယႃး + + + ၾရၼ်ႉလၢၵ်ႈၸိမ်ႇပၢၵ်ႈ ဢၼ်လႅၵ်ႈလႆႈ + ၾရၼ်ႉလၢၵ်ႈၸိမ်ႇပၢၵ်ႈ ဢၼ်လႅၵ်ႈလႆႈ + + + ၾရၼ်ႉလၢၵ်ႈၸိမ်ႇပၢၵ်ႈ + ၾရၼ်ႉလၢၵ်ႈၸိမ်ႇပၢၵ်ႈ + + + ၾရၼ်ႉၵၢၼ်ငိုၼ်းတွင်း လၢၵ်ႈၸိမ်ႇပၢၵ်ႈ + ၾရၼ်ႉၵၢၼ်ငိုၼ်းတွင်း လၢၵ်ႈၸိမ်ႇပၢၵ်ႈ + + + လတ်ႉသ်လၢတ်ႈဝီႇယႃႇ + လတ်ႉသ်လၢတ်ႈဝီႇယႃႇ + + + ရူႇပႄႇလၢတ်ႉဝီႇယႃႇ + ရူႇပႄႇလၢတ်ႉဝီႇယႃႇ + + + တီႇၼႃႇလိပ်ႉပျႃး + တီႇၼႃႇလိပ်ႉပျႃး + + + တီႇရမ်ႇမေႃႇရူဝ်ႇၵူဝ်ႇ + တီႇရမ်ႇမေႃႇရူဝ်ႇၵူဝ်ႇ + + + ၾရၼ်ႉမေႃႇရူဝ်ႇၵူဝ်ႇ + ၾရၼ်ႉမေႃႇရူဝ်ႇၵူဝ်ႇ + + + ၾရၼ်ႉမူဝ်ႇၼႃႉၶူဝ်ႇ + ၾရၼ်ႉမူဝ်ႇၼႃႉၶူဝ်ႇ + + + ၶူႇပွၼ်ႇမေႃႇတူဝ်းဝႃး + ၶူႇပွၼ်ႇမေႃႇတူဝ်းဝႃး + + + လဵဝ်းမေႃႇတူဝ်းဝႃး + လဵဝ်းမေႃႇတူဝ်းဝႃး + + + ဢႃႇရီႇယႃႇရီႇမၢတ်ႈတႃႇၵၢတ်ႈသၵႃႇ + ဢႃႇရီႇယႃႇရီႇမၢတ်ႈတႃႇၵၢတ်ႈသၵႃႇ + + + ၾရၼ်ႉမၢတ်ႈတႃႇၵၢတ်ႈသၵႃႇ + ၾရၼ်ႉမၢတ်ႈတႃႇၵၢတ်ႈသၵႃႇ + + + တႅၼ်ႇၼႃႇမႄႇၶေႇတူဝ်းၼီးယႃးႁွင်ႇ + တႅၼ်ႇၼႃႇမႄႇၶေႇတူဝ်းၼီးယႃးႁွင်ႇ + + + တႅၼ်ႇၼႃႇမႄႇၶေႇတူဝ်းၼီးယႃးႁွင်ႇ (1992–1993) + တႅၼ်ႇၼႃႇမႄႇၶေႇတူဝ်းၼီးယႃးႁွင်ႇ (1992–1993) + + + ၾရၼ်ႉမႃႇလီႇ + ၾရၼ်ႉမႃႇလီႇ + + + ၵျၢပ်ႈမျၢၼ်ႇမႃႇ + ၵျၢပ်ႈမျၢၼ်ႇမႃႇ + + + တူႉၵရိၵ်ႉမူင်ႇၵူဝ်းလီးယႃး + တူႉၵရိၵ်ႉမူင်ႇၵူဝ်းလီးယႃး + + + ပႃႇတႃႇၵႃႇမႃႇၵၢဝ်ႈ + ပႃႇတႃႇၵႃႇမႃႇၵၢဝ်ႈ + + + ဢူးၵီႇယႃႇမေႃႇရီႇတေးၼီးယႃး (1973–2017) + ဢူးၵီႇယႃႇမေႃႇရီႇတေးၼီးယႃး (1973–2017) + + + ဢူးၵီႇယႃႇမေႃႇရီႇတေးၼီးယႃး + ဢူးၵီႇယႃႇမေႃႇရီႇတေးၼီးယႃး + + + လီႇရႃႇမေႃးတႃႇ + လီႇရႃႇမေႃးတႃႇ + + + ပွၼ်းမေႃးတႃႇ + ပွၼ်းမေႃးတႃႇ + + + ရူႇပီးမေႃးရီႇသႃႇ + ရူႇပီးမေႃးရီႇသႃႇ + + + ရူႇၾီႇယႃႇမေႃႇတိပ်ႈ (1947–1981) + ရူႇၾီႇယႃႇမေႃႇတိပ်ႈ (1947–1981) + + + ရူႇၾီႇယႃႇမေႃႇတိပ်ႈ + ရူႇၾီႇယႃႇမေႃႇတိပ်ႈ + + + ၶႂႃႇၶျႃႇမႃႇလႃႇဝီႇ + ၶႂႃႇၶျႃႇမႃႇလႃႇဝီႇ + + + ပေႇသူဝ်ႇမႅၵ်ႇသီႇၵူဝ်ႇ + ပေႇသူဝ်ႇမႅၵ်ႇသီႇၵူဝ်ႇ + + + ပေႇသူဝ်ႇငိုၼ်းမႅၵ်ႇသီႇၵူဝ်ႇ (1861–1992) + ပေႇသူဝ်ႇငိုၼ်းမႅၵ်ႇသီႇၵူဝ်ႇ (1861–1992) + + + ယူႇၼိတ်ႉလူင်းတိုၼ်းမႅၵ်ႇသီႇၵူဝ်ႇ + ယူႇၼိတ်ႉလူင်းတိုၼ်းမႅၵ်ႇသီႇၵူဝ်ႇ + + + ရိင်းၵိတ်ႉမလေးသျႃး + ရိင်းၵိတ်ႉမလေးသျႃး + + + ဢႅတ်ႉသၵူတူဝ်ႇမူဝ်ႇၸမ်းပိၵ်ႈ + ဢႅတ်ႉသၵူတူဝ်ႇမူဝ်ႇၸမ်းပိၵ်ႈ + + + မႅတ်ႉတိၵ်ႉၵႄႇလ်မူဝ်ႇၸမ်းပိၵ်ႈ (1980–2006) + မႅတ်ႉတိၵ်ႉၵႄႇလ်မူဝ်ႇၸမ်းပိၵ်ႈ (1980–2006) + + + မႅတ်ႉတိၵ်ႉၵႄႇလ်မူဝ်ႇၸမ်းပိၵ်ႈ + မႅတ်ႉတိၵ်ႉၵႄႇလ်မူဝ်ႇၸမ်းပိၵ်ႈ + + + တေႃႇလႃႇၼႃႇမီးပီးယႃး + တေႃႇလႃႇၼႃႇမီးပီးယႃး + + + ၼေးရႃႇၼၢႆႇၵျီးရီးယႃး + ၼေးရႃႇၼၢႆႇၵျီးရီးယႃး + + + ၵေႃႇတူဝ်ႇပႃႇၼီႇၵႃႇရႃႇၵႂႃႇ (1988–1991) + ၵေႃႇတူဝ်ႇပႃႇၼီႇၵႃႇရႃႇၵႂႃႇ (1988–1991) + + + ၵေႃႇတူဝ်ႇပႃႇၼီႇၵႃႇရႃႇၵႂႃႇ + ၵေႃႇတူဝ်ႇပႃႇၼီႇၵႃႇရႃႇၵႂႃႇ + + + ၵိလ်တႃႇတၢတ်ႉၶျ် + ၵိလ်တႃႇတၢတ်ႉၶျ် + + + ၶရူၼ်းၼေႃႇဝူၺ်း + ၶရူၼ်းၼေႃႇဝူၺ်း + + + ရူႇပီးၼေႇပေႃး + ရူႇပီးၼေႇပေႃး + + + တေႃႇလႃႇၼိဝ်းၸီႇလႅၼ်ႇ + တေႃႇလႃႇၼိဝ်းၸီႇလႅၼ်ႇ + + + ရီဢႄလ်ဢူဝ်ႇမၢၼ်ႇ + ရီဢႄလ်ဢူဝ်ႇမၢၼ်ႇ + + + ပႄးလ်ပူဝ်ႇဢႃႇပႃႈၼႃးမႃး + ပႄးလ်ပူဝ်ႇဢႃႇပႃႈၼႃးမႃး + + + ဢိၼ်ႇတီႇပေႇရူႉ + ဢိၼ်ႇတီႇပေႇရူႉ + + + သူဝ်းလ်ပေႇရူႉ + သူဝ်းလ်ပေႇရူႉ + + + သူဝ်းလ်ပေႇရူႉ (1863–1965) + သူဝ်းလ်ပေႇရူႉ (1863–1965) + + + ၶိၼႃႇပႃးပႂႃႇၼိဝ်းၵီးၼီး + ၶိၼႃႇပႃးပႂႃႇၼိဝ်းၵီးၼီး + + + ပေႇသူဝ်ႇၾီလိပ်ႈပိၼ်း + ပေႇသူဝ်ႇၾီလိပ်ႈပိၼ်း + + + ရူႇပီးပႃႇၵိတ်ႈသတၼ်ႇ + ရူႇပီးပႃႇၵိတ်ႈသတၼ်ႇ + + + ၸလူဝ်ႇတီႇပူဝ်ႇလႅၼ်ႇ + ၸလူဝ်ႇတီႇပူဝ်ႇလႅၼ်ႇ + + + ၸလူဝ်ႇတီႇပူဝ်ႇလႅၼ်ႇ (1950–1995) + ၸလူဝ်ႇတီႇပူဝ်ႇလႅၼ်ႇ (1950–1995) + + + ဢိသ်ၵူႇတူဝ်ႇ တိူဝ်ႇၵီႇ + ဢိသ်ၵူႇတူဝ်ႇ တိူဝ်ႇၵီႇ + + + ၵႂႃႇရႃႇၼီပႃႇရႃႇၵူၺ်း + ၵႂႃႇရႃႇၼီပႃႇရႃႇၵူၺ်း + + + ရီယႄႇလ်ၶႃႇတႃႇ + ရီယႄႇလ်ၶႃႇတႃႇ + + + တေႃႇလႃႇရူဝ်ႇတႄႇသီႇယႅၼ်ႇ + တေႃႇလႃႇရူဝ်ႇတႄႇသီႇယႅၼ်ႇ + + + လဵဝ်းရူဝ်ႇမေးၼီးယႃး (1952–2006) + လဵဝ်းရူဝ်ႇမေးၼီးယႃး (1952–2006) + + + လဵဝ်းရူဝ်ႇမေးၼီးယႃး + လဵဝ်းရူဝ်ႇမေးၼီးယႃး + + + တီႇၼႃႇ သႃးပီးယႃး + တီႇၼႃႇ သႃးပီးယႃး + + + ရူႇပႄႇရတ်ႈသျႃး + ရူႇပႄႇရတ်ႈသျႃး + + + ရူႇပႄႇရတ်ႈသျႃး (1991–1998) + ရူႇပႄႇရတ်ႈသျႃး (1991–1998) + + + ၾရၼ်ႉရဝၢၼ်းတႃႇ + ၾရၼ်ႉရဝၢၼ်းတႃႇ + + + ရီယႄႇလ်သေႃႇတီႇ + ရီယႄႇလ်သေႃႇတီႇ + + + တေႃႇလႃႇမူႇၵုၼ်သေႃႇလေႃႇမၼ်ႇ + တေႃႇလႃႇမူႇၵုၼ်သေႃႇလေႃႇမၼ်ႇ + + + ရူႇပီးသေးသျႄႇ + ရူႇပီးသေးသျႄႇ + + + တီႇၼႃႇသူႇတၼ်ႇ (1992–2007) + တီႇၼႃႇသူႇတၼ်ႇ (1992–2007) + + + ပွၼ်းသူႇတၼ်ႇ + ပွၼ်းသူႇတၼ်ႇ + + + ပွၼ်းသူႇတၼ်ႇ (1957–1998) + ပွၼ်းသူႇတၼ်ႇ (1957–1998) + + + ၶရူဝ်ႇၼႃႇသုၺ်ႇတိၼ်ႇ + ၶရူဝ်ႇၼႃႇသုၺ်ႇတိၼ်ႇ + + + တေႃႇလႃႇသိင်ႇၵႃႇပူဝ်ႇ + တေႃႇလႃႇသိင်ႇၵႃႇပူဝ်ႇ + + + ပွၼ်းသဵင်ႉႁႄးလႄးၼႃႇ + ပွၼ်းသဵင်ႉႁႄးလႄးၼႃႇ + + + တူဝ်ႇလႃႇ သလူဝ်ႇဝေးၼီးယႃး + တူဝ်ႇလႃႇ သလူဝ်ႇဝေးၼီးယႃး + + + ၶူဝ်ႇရူႇၼႃႇသလူဝ်ႇဝႃးၵီးယႃး + ၶူဝ်ႇရူႇၼႃႇသလူဝ်ႇဝႃးၵီးယႃး + + + လီႇယူၼ်ႇသီႇဢႄႇရႃႇလီႇယူၼ်ႇ + လီႇယူၼ်ႇသီႇဢႄႇရႃႇလီႇယူၼ်ႇ + + + လီႇယူၼ်ႇသီႇဢႄႇရႃႇလီႇယူၼ်ႇ (1964–2022) + လီႇယူၼ်ႇသီႇဢႄႇရႃႇလီႇယူၼ်ႇ (1964–2022) + + + သျီႇလိင်ႇသူဝ်ႇမႃးလီးယႃး + သျီႇလိင်ႇသူဝ်ႇမႃးလီးယႃး + + + တေႃႇလႃသျူးရီးၼႃႇမႄႇ + တေႃႇလႃသျူးရီးၼႃႇမႄႇ + + + ၵိလ်တႃႇသျူးရီးၼႃႇမႄႇ + ၵိလ်တႃႇသျူးရီးၼႃႇမႄႇ + + + ပွၼ်းသူႇတၼ်ႇၸၢၼ်း + ပွၼ်းသူႇတၼ်ႇၸၢၼ်း + + + တူဝ်ပရႃႇ သူၼ်ႇတူဝ်ႇမေး လႄႈ ပရိၼ်ႇသီႇပေႇ (1997–2017) + တူဝ်ပရႃႇ သူၼ်ႇတူဝ်ႇမေး လႄႈ ပရိၼ်ႇသီႇပေႇ (1997–2017) + + + တူဝ်ႇပရႃႇသူၼ်ႇတူဝ်ႇမေး လႄႈ ပရိၼ်ႇသီႇပေႇ + တူဝ်ႇပရႃႇသူၼ်ႇတူဝ်ႇမေး လႄႈ ပရိၼ်ႇသီႇပေႇ + + + ရူႇပႄႇသူဝ်ႇဝီႇယႅတ်ႉ + ရူႇပႄႇသူဝ်ႇဝီႇယႅတ်ႉ + + + ၵူဝ်ႇလူၼ်ႇဢႄႇသႃႇဝႃႇတေႃႇ + ၵူဝ်ႇလူၼ်ႇဢႄႇသႃႇဝႃႇတေႃႇ + + + ပွၼ်းသီးရီးယႃး + ပွၼ်းသီးရီးယႃး + + + လီႇလႅၼ်ႇၵျႅၼ်ႇၼီႇဢႅတ်ႇသ်ဝႃႇတီးၼီႇ + လီႇလႅၼ်ႇၵျႅၼ်ႇၼီႇဢႅတ်ႇသ်ဝႃႇတီးၼီႇ + + + ဝၢတ်ႇထႆး + ဝၢတ်ႇထႆး + + + ရူႇပႄႇတႃႇၵျီႇၵီႇသတၼ်ႇ + ရူႇပႄႇတႃႇၵျီႇၵီႇသတၼ်ႇ + + + သူဝ်ႇမူဝ်ႇၼီႇတႃႇၵျီႇၵီႇသတၼ်ႇ + သူဝ်ႇမူဝ်ႇၼီႇတႃႇၵျီႇၵီႇသတၼ်ႇ + + + မၼတ်ႉတၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ (1993–2009) + မၼတ်ႉတၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ (1993–2009) + + + မၼတ်ႉတၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ + မၼတ်ႉတၢၵ်ႈမႅၼ်ႇၼီႇသတၼ်ႇ + + + တီႇၼႃႇတူႇၼီးသျႃး + တီႇၼႃႇတူႇၼီးသျႃး + + + ပႃဢင်ၵႃႉထွင်းၵႃႇ + ပႃဢင်ၵႃႉထွင်းၵႃႇ + + + ဢႅတ်ႉၵူႇတူဝ်ႇတီႇမေႃး + ဢႅတ်ႉၵူႇတူဝ်ႇတီႇမေႃး + + + လီႇရႃႇတိူဝ်ႇၵီႇ (1922–2005) + လီႇရႃႇတိူဝ်ႇၵီႇ (1922–2005) + + + လီႇရႃႇတိူဝ်ႇၵီႇ + လီႇရႃႇတိူဝ်ႇၵီႇ + + + တေႃႇလႃႇထရီႇၼီႇတၢတ်ႈ လႄႈ ထူဝ်ႇပေးၵူဝ်ႇ + တေႃႇလႃႇထရီႇၼီႇတၢတ်ႈ လႄႈ ထူဝ်ႇပေးၵူဝ်ႇ + + + တေႃႇလႃႇထၢႆႇဝၢၼ်းမႂ်ႇ + တေႃႇလႃႇထၢႆႇဝၢၼ်းမႂ်ႇ + + + သျီႇလိင်ႇထၼ်ႇၸၼ်းၼီးယႃး + သျီႇလိင်ႇထၼ်ႇၸၼ်းၼီးယႃး + + + ႁရီႇဝၼီႇယႃႇယူႇၶရဵၼ်း + ႁရီႇဝၼီႇယႃႇယူႇၶရဵၼ်း + + + ၶႃႇပူဝ်ႇဝႅၼ်ႇၼႅတ်ႉယူႇၶရဵၼ်း + ၶႃႇပူဝ်ႇဝႅၼ်ႇၼႅတ်ႉယူႇၶရဵၼ်း + + + သျီႇလိင်ႇယူႇၵၼ်ႇတႃႇ (2966–1987) + သျီႇလိင်ႇယူႇၵၼ်ႇတႃႇ (2966–1987) + + + သျီႇလိင်ႇယူႇၵၼ်ႇတႃႇ + သျီႇလိင်ႇယူႇၵၼ်ႇတႃႇ + + + တေႃႇလႃႇဢမႄႇရိၵၢၼ်ႇ + တေႃႇလႃႇဢမႄႇရိၵၢၼ်ႇ + + + တေႃႇလႃႇဢမႄႇရိၵၢၼ်ႇ (ထႅင်ႈဝၼ်းၼိုင်ႈ) + တေႃႇလႃႇဢမႄႇရိၵၢၼ်ႇ (ထႅင်ႈဝၼ်းၼိုင်ႈ) + + + တေႃႇလႃႇဢမႄႇရိၵၢၼ်ႇ (ဝၼ်းလဵဝ်ၵၼ်) + တေႃႇလႃႇဢမႄႇရိၵၢၼ်ႇ (ဝၼ်းလဵဝ်ၵၼ်) + + + ပေႇသူဝ်ဢုရုၵူၺ်း(ယူႇၼိတ်ႉဢၼ်ၼႄဝႆႉ) + ပေႇသူဝ်ဢုရုၵူၺ်း(ယူႇၼိတ်ႉဢၼ်ၼႄဝႆႉ) + + + ပေႇသူဝ်ႇဢုရုၵူၺ်း (1975–1993) + ပေႇသူဝ်ႇဢုရုၵူၺ်း (1975–1993) + + + ပေႇသူဝ်ဢုရုၵူၺ်း + ပေႇသူဝ်ဢုရုၵူၺ်း + + + ယူႇၼိတ်ႉဢၼ်ၼႄဝႆႉ ငိုၼ်းလိူၼ်ဢုရုၵူၺ်း + ယူႇၼိတ်ႉဢၼ်ၼႄဝႆႉ ငိုၼ်းလိူၼ်ဢုရုၵူၺ်း + + + သွမ်ႇဢူႇၸပႄႉၵိတ်ႇသတၼ်ႇ + သွမ်ႇဢူႇၸပႄႉၵိတ်ႇသတၼ်ႇ + + + ပူဝ်ႇလီႇဝႃႇဝႄႇၼေႇၸွႆးလႃး (1871–2008) + ပူဝ်ႇလီႇဝႃႇဝႄႇၼေႇၸွႆးလႃး (1871–2008) + + + ပူဝ်ႇလီႇဝႃႇသူဝ်ႇပႃႇရႃႇၼူဝ်ႇ + ပူဝ်ႇလီႇဝႃႇသူဝ်ႇပႃႇရႃႇၼူဝ်ႇ + + + Venezuelan Bolívar (2008–2018) + Venezuelan Bolívar (2008–2018) + + + ပူဝ်ႇလီႇဝႃႇဝႄႇၼေႇၸွႆးလႃး + ပူဝ်ႇလီႇဝႃႇဝႄႇၼေႇၸွႆးလႃး + + + တွင်ႇဝႅတ်ႉၼမ်း + တွင်ႇဝႅတ်ႉၼမ်း + + + တွင်ႇဝႅတ်ႉၼမ်း (1978–1985) + တွင်ႇဝႅတ်ႉၼမ်း (1978–1985) + + + ဝႃႇထူႇဝႅၼ်ႇၼူးဝႃႇထူႇ + ဝႃႇထူႇဝႅၼ်ႇၼူးဝႃႇထူႇ + + + တႃလႃႉသႃႇမူဝ်းဝႃႇ + တႃလႃႉသႃႇမူဝ်းဝႃႇ + + + ၾရၼ်ႉၸီႇဢႅပ်ႉဢေႇ ဢႃႇၾရိၵ ပွတ်းၵၢင် + ၾရၼ်ႉၸီႇဢႅပ်ႉဢေႇ ဢႃႇၾရိၵ ပွတ်းၵၢင် + + + ငိုၼ်း + ငိုၼ်း + + + ၶမ်း + ၶမ်း + + + ယူႇၼိတ်ႉၶွမ်းပူဝ်းသိတ်ႉယူးရူပ်ႉ + ယူႇၼိတ်ႉၶွမ်းပူဝ်းသိတ်ႉယူးရူပ်ႉ + + + ယူႇၼိတ်ႉၵၢၼ်ငိုၼ်းတွင်းယူးရူပ်ႉ + ယူႇၼိတ်ႉၵၢၼ်ငိုၼ်းတွင်းယူးရူပ်ႉ + + + ယူႇၼိတ်ႉဢၶွင်ႉယူးရူပ်ႉ (XBC) + ယူႇၼိတ်ႉဢၶွင်ႉယူးရူပ်ႉ (XBC) + + + ယူႇၼိတ်ႉဢၶွင်ႉယူးရူပ်ႉ (XBD) + ယူႇၼိတ်ႉဢၶွင်ႉယူးရူပ်ႉ (XBD) + + + တေႃႇလႃႇၶႃႇရိပ်ႈပီႇယၼ်ႇပွတ်းဢွၵ်ႇ + တေႃႇလႃႇၶႃႇရိပ်ႈပီႇယၼ်ႇပွတ်းဢွၵ်ႇ + + + ၵဵဝ်းတႃႇၶႃႇရိပ်ႈပီႇယၼ်ႇ + ၵဵဝ်းတႃႇၶႃႇရိပ်ႈပီႇယၼ်ႇ + + + သုၼ်ႇထွၼ်ငိုၼ်းၶိုၵ်ႉတွၼ်း + သုၼ်ႇထွၼ်ငိုၼ်းၶိုၵ်ႉတွၼ်း + + + ယူႇၼိတ်ႉၵၢၼ်ငိုၼ်းတွင်းယူးရူပ်ႉ + ယူႇၼိတ်ႉၵၢၼ်ငိုၼ်းတွင်းယူးရူပ်ႉ + + + ၾရၼ်ႉၶမ်းၾရၢင်ႇသဵတ်ႈ + ၾရၼ်ႉၶမ်းၾရၢင်ႇသဵတ်ႈ + + + ၾရၼ်ႉ-UIC ၾရၢင်ႇသဵတ်ႈ + ၾရၼ်ႉ-UIC ၾရၢင်ႇသဵတ်ႈ + + + ၾရၼ်ႉ ၸီႇဢႅပ်ႉဢေႇ ဢႃႇၾရိၵ ပွတ်းတူၵ်း + ၾရၼ်ႉ ၸီႇဢႅပ်ႉဢေႇ ဢႃႇၾရိၵ ပွတ်းတူၵ်း + + + ပႄႇလတ်ႇတီႇယမ်ႇ + ပႄႇလတ်ႇတီႇယမ်ႇ + + + ၾရၼ်ႉၼိဝ်းၶႄႇလီႇတူဝ်းၼီးယႃး + ၾရၼ်ႉၼိဝ်းၶႄႇလီႇတူဝ်းၼီးယႃး + + + ပလတ်ႇတီႇၼမ်ႇ + ပလတ်ႇတီႇၼမ်ႇ + + + ငိုၼ်းၵွင်ၵၢင် RINET + ငိုၼ်းၵွင်ၵၢင် RINET + + + သုၶရေႇ + သုၶရေႇ + + + မၢႆငိုၼ်းတွင်းဢၼ်တိုၵ်ႉၸၢမ်းယူႇ + မၢႆငိုၼ်းတွင်းဢၼ်တိုၵ်ႉၸၢမ်းယူႇ + + + ယူႇၼိတ်ႉဢၶွင်ႉ ADB + ယူႇၼိတ်ႉဢၶွင်ႉ ADB + + + ငိုၼ်းဢၼ်ဢမ်ႇႁူႉၸိုဝ်ႈ + ငိုၼ်းဢၼ်ဢမ်ႇႁူႉၸိုဝ်ႈ + + + တီႇၼႃႇယႄႇမႅၼ်ႇ + တီႇၼႃႇယႄႇမႅၼ်ႇ + + + ရီဢႄလ်ယႄႇမႅၼ်ႇ + ရီဢႄလ်ယႄႇမႅၼ်ႇ + + + တီႇၼႃႇၶႅင် ယူႇၵူဝ်ႇသလႃးဝီးယႃး(1966–1990) + တီႇၼႃႇၶႅင် ယူႇၵူဝ်ႇသလႃးဝီးယႃး(1966–1990) + + + တီႇၼႃႇမႂ်ႇ ယူႇၵူဝ်ႇသလႃးဝီးယႃး (1994–2002) + တီႇၼႃႇမႂ်ႇ ယူႇၵူဝ်ႇသလႃးဝီးယႃး (1994–2002) + + + တီႇၼႃႇဢၼ်လႅၵ်ႈလႆႈ ယူႇၵူဝ်ႇသလႃးဝီးယႃး (1990–1992) + တီႇၼႃႇဢၼ်လႅၵ်ႈလႆႈ ယူႇၵူဝ်ႇသလႃးဝီးယႃး (1990–1992) + + + တီႇၼႃႇဢၼ်ၶိုၼ်းမႄးဝႆႉ ယူႇၵူဝ်ႇသလႃးဝီးယႃး (1992–1993) + တီႇၼႃႇဢၼ်ၶိုၼ်းမႄးဝႆႉ ယူႇၵူဝ်ႇသလႃးဝီးယႃး (1992–1993) + + + ရၼ်းဢႃႇၾရိၵၸၢၼ်း (ၵၢၼ်ငိုၼ်းတွင်း) + ရၼ်းဢႃႇၾရိၵၸၢၼ်း (ၵၢၼ်ငိုၼ်းတွင်း) + + + ရၼ်းဢႃႇၾရိၵၸၢၼ်း + ရၼ်းဢႃႇၾရိၵၸၢၼ်း + + + ၶႂႃႇၶျႃႇၸမ်းပီးယႃး (1968–2012) + ၶႂႃႇၶျႃႇၸမ်းပီးယႃး (1968–2012) + + + ၶႂႃႇၶျႃႇၸမ်းပီးယႃး + ၶႂႃႇၶျႃႇၸမ်းပီးယႃး + + + ၸၢႆႇရႄႇမႂ်ႇၸၢႆႇရႄႇယႅၼ်ႇ (1993–1998) + ၸၢႆႇရႄႇမႂ်ႇၸၢႆႇရႄႇယႅၼ်ႇ (1993–1998) + + + ၸၢႆႇရႄႇၸၢႆႇရႄႇယႅၼ်ႇ (1971–1993) + ၸၢႆႇရႄႇၸၢႆႇရႄႇယႅၼ်ႇ (1971–1993) + + + တေႃႇလႃႇၸိမ်ႇပႃႇပူၺ်ႇ (1980–2008) + တေႃႇလႃႇၸိမ်ႇပႃႇပူၺ်ႇ (1980–2008) + + + ၶမ်းၸိမ်ႇပႃႇပူၺ်ႇ + ၶမ်းၸိမ်ႇပႃႇပူၺ်ႇ + + + တေႃႇလႃႇၸိမ်ႇပႃႇပူၺ်ႇ (2009–2024) + တေႃႇလႃႇၸိမ်ႇပႃႇပူၺ်ႇ (2009–2024) + + + တေႃႇလႃႇၸိမ်ႇပႃႇပူၺ်ႇ (2008) + တေႃႇလႃႇၸိမ်ႇပႃႇပူၺ်ႇ (2008) + + + + {0} ဝၼ်း + ငွၵ်းၶႂႃ တီႈငွၵ်း ထိ {0} + + + + + + တႅတ်ႇသီႇ{0} + + + သႅၼ်ႇတီႇ{0} + + + မီႇလီႇ{0} + + + မၢႆႇၶရူဝ်ႇ{0} + + + ၼႃႇၼူဝ်ႇ{0} + + + ပီႇၵူဝ်ႇ{0} + + + ၾႅမ်ႇတူဝ်ႇ{0} + + + ဢႅတ်ႇတူဝ်ႇ{0} + + + ၸႅပ်ႇတူဝ်ႇ{0} + + + ယွၵ်ႇတူဝ်ႇ{0} + + + ရွၼ်ႇတူဝ်ႇ{0} + + + ၶွတ်ႉတူဝ်ႇ{0} + + + တႅၵ်ႇၵႃႇ{0} + + + ႁႅၵ်ႇတူဝ်ႇ{0} + + + ၵီႇလူဝ်ႇ{0} + + + မႅၵ်ႇၵႃႇ{0} + + + ၵိၵ်ႇၵႃႇ{0} + + + ထႄႇရႃႇ{0} + + + ပီႇတႃႇ{0} + + + ဢႅၵ်ႇၸႃႇ{0} + + + ၸႅတ်ႇတႃႇ{0} + + + ယူတ်ႇတႃႇ{0} + + + ရွၼ်ႇၼႃႇ{0} + + + ၶွတ်ႉတႃႇ{0} + + + ၵီႇပီႇ{0} + + + မႄႇပီႇ{0} + + + ၵိပ်ႉပီႇ{0} + + + ထႄႇပီ{0} + + + ပႄႇပီႇ{0} + + + ဢႅၵ်ႉသ်ပီႇ{0} + + + ၸႅပ်ႉပီႇ{0} + + + ယွပ်ႉပီႇ{0} + + + {0} တေႃႇ {1} + + + သီႇၸဵင်ႇၽဵင်ႇ{0} + + + ၶိဝ်းပိၵ်ႉ{0} + + + ႁႅင်း G + {0} ႁႅင်း G + + + မီႇတႃႇတေႃႇသႅၵ်ႉၵၢၼ်ႉသွင်ပုၼ်ႈ + {0} မီႇတႃႇတေႃႇသႅၵ်ႉၵၢၼ်ႉသွင်ပုၼ်ႈ + + + ႁွပ်ႈ + {0} ႁွပ်ႈ + + + ရေႇတီႇယၼ်ႇ + {0} ရေႇတီႇယၼ်ႇ + + + တီႇၵရီႇ + {0} တီႇၵရီႇ + + + ဢၢၵ်ႉမိၼိတ်ႉ + {0} ဢၢၵ်ႉမိၼိတ်ႉ + + + ဢၢၵ်ႉသႅၵ်ႉၵၢၼ်ႉ + {0} ဢၢၵ်ႉသႅၵ်ႉၵၢၼ်ႉ + + + သီႇၸဵင်ႇၽဵင်ႇၵီႇလူဝ်ႇမီႇတႃႇ + {0} သီႇၸဵင်ႇၽဵင်ႇၵီႇလူဝ်ႇမီႇတႃႇ + {0} တေႃႇ သီႇၸဵင်ႇၽဵင်ႇၵီႇလူဝ်ႇမီႇတႃႇ + + + ႁႅၵ်ႇတႃႇ + {0} ႁႅၵ်ႇတႃႇ + + + သီႇၸဵင်ႇၽဵင်ႇမီႇတႃႇ + {0} သီႇၸဵင်ႇၽဵင်ႇမီႇတႃႇ + {0} တေႃႇ သီႇၸဵင်ႇၽဵင်ႇမီႇတႃႇ + + + သီႇၸဵင်ႇၽဵင်ႇသႅၼ်ႇတီႇမီႇတႃႇ + {0} သီႇၸဵင်ႇၽဵင်ႇသႅၼ်ႇတီႇမီႇတႃႇ + {0} တေႃႇ သီႇၸဵင်ႇၽဵင်ႇသႅၼ်ႇတီႇမီႇတႃႇ + + + သီႇၸဵင်ႇၽဵင်ႇလၵ်း + {0} သီႇၸဵင်ႇၽဵင်ႇလၵ်း + {0} တေႃႇ သီႇၸဵင်ႇၽဵင်ႇလၵ်း + + + ဢေႇၵ + {0} ဢေႇၵ + + + သီႇၸဵင်ႇၽဵင်ႇဝၢႆႈ + {0} သီႇၸဵင်ႇၽဵင်ႇဝၢႆႈ + + + သီႇၸဵင်ႇၽဵင်ႇထတ်း + {0} သီႇၸဵင်ႇၽဵင်ႇထတ်း + + + သီႇၸဵင်ႇၽဵင်ႇၼိဝ်ႉ + {0} သီႇၸဵင်ႇၽဵင်ႇၼိဝ်ႉ + {0} တေႃႇ သီႇၸဵင်ႇၽဵင်ႇၼိဝ်ႉ + + + တူးၼမ်ႇ + {0} တူးၼမ်ႇ + + + ၵရၢတ်ႉ + {0} ၵရၢတ်ႉ + + + မီႇလီႇၵရမ်ႇ တေႃႇ တႅတ်ႇသီႇလီႇတႃႇ + {0} မီႇလီႇၵရမ်ႇ တေႃႇ တႅတ်ႇသီႇလီႇတႃႇ + + + မီႇလီႇမူဝ်း တေႃႇ လီႇတႃႇ + {0} မီႇလီႇမူဝ်း တေႃႇ လီႇတႃႇ + + + ဢၼ် + {0} ဢၼ် + + + တွၼ်ႈ + {0} တွၼ်ႈ + + + တွၼ်ႈတေႃႇလၢၼ်ႉတွၼ်ႈ + {0} တွၼ်ႈတေႃႇလၢၼ်ႉတွၼ်ႈ + + + ဝၢၵ်ႈ + {0} ဝၢၵ်ႈ + + + ပႃႇမီးလ် + {0} ပႃႇမီးလ် + + + ပႃႇမီးရိယႅတ်ႉ + {0} ပႃႇမီးရိယႅတ်ႉ + + + မူဝ်း + {0} မူဝ်း + + + ၵလူးၵူတ်ႉ + {0} ၵလူးၵူတ်ႉ + + + လီႇတႃႇ တေႃႇ ၵီႇလူဝ်ႇမီႇတႃႇ + {0} လီႇတႃႇ တေႃႇ ၵီႇလူဝ်ႇမီႇတႃႇ + + + လီႇတႃႇ တေႃႇ 100 ၵီႇလူဝ်ႇမီႇတႃႇ + {0} လီႇတႃႇ တေႃႇ 100 ၵီႇလူဝ်ႇမီႇတႃႇ + + + လၵ်းတေႃႇၵႃႇလၢၼ်ႇ + {0} လၵ်းတေႃႇၵႃႇလၢၼ်ႇ + + + လၵ်းတေႃႇၵႃႇလၢၼ်ႇဢိင်းၵလဵတ်ႈ + {0} လၵ်းတေႃႇၵႃႇလၢၼ်ႇဢိင်းၵလဵတ်ႈ + + + ပီႇတႃႇပၢႆႉ + {0} ပီႇတႃႇပၢႆႉ + + + ထႄႇရႃႇပၢႆႉ + {0} ထႄႇရႃႇပၢႆႉ + + + ထႄႇရႃႇပိတ်ႉ + {0} ထႄႇရႃႇပိတ်ႉ + + + ၵိၵ်ႇၵႃႇပၢႆႉ + {0} ၵိၵ်ႇၵႃႇပၢႆႉ + + + ၵိၵ်ႇၵႃႇပိတ်ႉ + {0} ၵိၵ်ႇၵႃႇပိတ်ႉ + + + မႅၵ်ႇၵႃႇပၢႆႉ + {0} မႅၵ်ႇၵႃႇပၢႆႉ + + + မႅၵ်ႇၵႃႇပိတ်ႉ + {0} မႅၵ်ႇၵႃႇပိတ်ႉ + + + ၵီႇလူဝ်ႇပၢႆႉ + {0} ၵီႇလူဝ်ႇပၢႆႉ + + + ၵီႇလူဝ်ႇပိတ်ႉ + {0} ၵီႇလူဝ်ႇပိတ်ႉ + + + ပၢႆႉ + {0} ပၢႆႉ + + + ပိတ်ႉ + {0} ပိတ်ႉ + + + ႁူဝ်ပၢၵ်ႇပီ + {0} ႁူဝ်ပၢၵ်ႇပီ + + + ႁူဝ်သိပ်းပီ + {0} ႁူဝ်သိပ်းပီ + + + ပီ + {0} ပီ + {0} တေႃႇပီ + + + သၢမ်လိူၼ်ႁွပ်ႈ + {0} သၢမ်လိူၼ်ႁွပ်ႈ + {0}/သၢမ်လိူၼ်ႁွပ်ႈ + + + လိူၼ် + {0} လိူၼ် + {0} တေႃႇလိူၼ် + + + ဝူင်ႈ + {0} ဝူင်ႈ + {0} တေႃႇဝူင်ႈ + + + ဝၼ်း + {0} ဝၼ်း + {0} တေႃႇဝၼ်း + + + မူင်း + {0} မူင်း + {0} တေႃႇမူင်း + + + မိၼိတ်ႉ + {0} မိၼိတ်ႉ + {0} တေႃႇမိၼိတ်ႉ + + + ၸႅၵ်ႉၵၢၼ်ႉ + {0} ၸႅၵ်ႉၵၢၼ်ႉ + {0}/ၸႅၵ်ႉ + + + မီႇလီႇၸႅၵ်ႉၵၢၼ်ႉ + {0} မီႇလီႇၸႅၵ်ႉၵၢၼ်ႉ + + + မၢႆႇၶရူဝ်ႇၸႅၵ်ႉၵၢၼ်ႉ + {0} မၢႆႇၶရူဝ်ႇၸႅၵ်ႉၵၢၼ်ႉ + + + ၼႃႇၼူဝ်ႇၸႅၵ်ႉၵၢၼ်ႉ + {0} ၼႃႇၼူဝ်ႇၸႅၵ်ႉၵၢၼ်ႉ + + + ဢႅမ်ႇပီႇယႃႇ + {0} ဢႅမ်ႇပီႇယႃႇ + + + မီႇလီႇဢႅမ်ႇပီႇယႃႇ + {0} မီႇလီႇဢႅမ်ႇပီႇယႃႇ + + + ဢူမ်း + {0} ဢူမ်း + + + ဝူဝ်ႉ + {0} ဝူဝ်ႉ + + + ၵီႇလူဝ်ႇၵႄႇလူဝ်ႇရီႇ + {0} ၵီႇလူဝ်ႇၵႄႇလူဝ်ႇရီႇ + + + ၵႄႇလူဝ်ႇရီႇ + {0} ၵႄႇလူဝ်ႇရီႇ + + + ၵီႇလူဝ်ႇၵျူဝ်း + {0} ၵီႇလူဝ်ႇၵျူဝ်း + + + ၵျူဝ်း + {0} ၵျူဝ်း + + + ၵီႇလူဝ်ႇဝတ်ႉ-ၸူဝ်ႈမူင်း + {0} ၵီႇလူဝ်ႇဝတ်ႉ-ၸူဝ်ႈမူင်း + + + ဢီႇလႅတ်ႇထရွၼ်ႇဝူဝ်ႉ + {0} ဢီႇလႅတ်ႇထရွၼ်ႇဝူဝ်ႉ + + + ယူႇၼိတ်ႉတၢင်းမႆးဢိင်းၵလဵတ်ႈ + {0} ယူႇၼိတ်ႉတၢင်းမႆးဢိင်းၵလဵတ်ႈ + + + ႁႅင်းမႆးယူႇဢႅတ်ႉသ် + {0} ႁႅင်းမႆးယူႇဢႅတ်ႉသ် + + + ႁႅင်းပွၼ်း + {0} ႁႅင်းပွၼ်း + + + ၼိဝ်ႇတၼ်ႇ + {0} ၼိဝ်ႇတၼ်ႇ + + + ၵီႇလူဝ်ႇဝတ်ႉ-ၸူဝ်ႈမူင်း တေႃႇ 100 ၵီႇလူဝ်ႇမီႇတႃႇ + {0} ၵီႇလူဝ်ႇဝတ်ႉ-ၸူဝ်ႈမူင်း တေႃႇ 100 ၵီႇလူဝ်ႇမီႇတႃႇ + + + ၵိၵ်ႇၵႃႇႁႅတ်ႉ + {0} ၵိၵ်ႇၵႃႇႁႅတ်ႉ + + + မႅၵ်ႇၵႃႇႁႅတ်ႉ + {0} မႅၵ်ႇၵႃႇႁႅတ်ႉ + + + ၵီႇလူဝ်ႇႁႅတ်ႉ + {0} ၵီႇလူဝ်ႇႁႅတ်ႉ + + + ႁႅတ်ႉ + {0} ႁႅတ်ႉ + + + ၵၢၼ်ပေႃႉလိၵ်ႈ ems + + + ၽိၵ်ႇသႄႇလ် + {0} ၽိၵ်ႇသႄႇလ် + + + မႅၵ်ႇၵႃႇၽိၵ်ႇသႄႇလ် + {0} မႅၵ်ႇၵႃႇၽိၵ်ႇသႄႇလ် + + + ၽိၵ်ႇသႄႇလ် တေႃႇ သႅၼ်ႇတီႇမီႇတႃႇ + {0} ၽိၵ်ႇသႄႇလ် တေႃႇ သႅၼ်ႇတီႇမီႇတႃႇ + + + ၽိၵ်ႇသႄႇလ် တေႃႇ ၼိဝ်ႉ + {0} ၽိၵ်ႇသႄႇလ် တေႃႇ ၼိဝ်ႉ + + + ထႅဝ်ၽိတ်ႇလုမ်ႈၾႃႉ + {0} ထႅဝ်ၽိတ်ႇလုမ်ႈၾႃႉ + + + ၵီႇလူဝ်ႇမီႇတႃႇ + {0} ၵီႇလူဝ်ႇမီႇတႃႇ + {0} တေႃႇၵီႇလူဝ်ႇမီႇတႃႇ + + + မီႇတႃႇ + {0} မီႇတႃႇ + {0} တေႃႇမီႇတႃႇ + + + တႅတ်ႇသီႇမီႇတႃႇ + {0} တႅတ်ႇသီႇမီႇတႃႇ + + + သႅၼ်ႇတီႇမီႇတႃႇ + {0} သႅၼ်ႇတီႇမီႇတႃႇ + {0} တေႃႇသႅၼ်ႇတီႇမီႇတႃႇ + + + မီႇလီႇမီႇတႃႇ + {0} မီႇလီႇမီႇတႃႇ + + + မၢႆႇၶရူဝ်ႇမီႇတႃႇ + {0} မၢႆႇၶရူဝ်ႇမီႇတႃႇ + + + ၼႃႇၼူဝ်ႇမီႇတႃႇ + {0} ၼႃႇၼူဝ်ႇမီႇတႃႇ + + + ပီႇၵူဝ်ႇမီႇတႃႇ + {0} ပီႇၵူဝ်ႇမီႇတႃႇ + + + လၵ်း + {0} လၵ်း + + + ဝၢႆႈ + {0} ဝၢႆႈ + + + ထတ်း + {0} ထတ်း + {0} တေႃႇထတ်း + + + ၼိဝ်ႉ + {0} ၼိဝ်ႉ + {0} တေႃႇၼိဝ်ႉ + + + ပႃႇသႅၵ်ႉ + {0} ပႃႇသႅၵ်ႉ + + + ပီလႅင်း + {0} ပီလႅင်း + + + ယူႇၼိတ်ႉ ပၢႆးလႅင်လၢဝ် + {0} ယူႇၼိတ်ႉ ပၢႆးလႅင်လၢဝ် + + + ၾႃႇလူင်ႇ + {0} ၾႃႇလူင်ႇ + + + ၾႃႇထွမ်ႇ + {0} ၾႃႇထွမ်ႇ + + + လၵ်းၼမ်ႉ + {0} လၵ်းၼမ်ႉ + + + လၵ်းသၵႅၼ်ႇတီႇၼေႇဝီႇယႅၼ်ႇ + {0} လၵ်းသၵႅၼ်ႇတီႇၼေႇဝီႇယႅၼ်ႇ + + + ၸုတ်း + {0} ၸုတ်း + + + ထႅဝ်ၽိတ်ႇလႅတ်ႇ + {0} ထႅဝ်ၽိတ်ႇလႅတ်ႇ + + + လၵ်ႉသ် + {0} လၵ်ႉသ် + + + ၶႅၼ်ႇတႄႇလႃႇ + {0} ၶႅၼ်ႇတႄႇလႃႇ + + + လူႇမႅၼ်ႇ + {0} လူႇမႅၼ်ႇ + + + လွင်ႈႁိူဝ်ႈလႅင်းလႅတ်ႇ + {0} လွင်ႈႁိူဝ်ႈလႅင်းလႅတ်ႇ + + + မႅတ်ႉထရိတ်ႉတၢၼ်ႇ + {0} မႅတ်ႉထရိတ်ႉ တၢၼ်ႇ + + + ၵီႇလူဝ်ႇၵရမ်ႇ + {0} ၵီႇလူဝ်ႇၵရမ်ႇ + {0} တေႃႇၵီႇလူဝ်ႇၵရမ်ႇ + + + ၵရမ်ႇ + {0} ၵရမ်ႇ + {0} တေႃႇၵရမ်ႇ + + + မီႇလီႇၵရမ်ႇ + {0} မီႇလီႇၵရမ်ႇ + + + မၢႆႇၶရူဝ်ႇၵရမ်ႇ + {0} မၢႆႇၶရူဝ်ႇၵရမ်ႇ + + + တၢၼ်ႇ + {0} တၢၼ်ႇ + + + သတူၼ်း + {0} သတူၼ်း + + + ပွၼ်း + {0} ပွၼ်း + {0} တေႃႇပွၼ်း + + + ဢွၼ်း + {0} ဢွၼ်း + {0} တေႃႇဢွၼ်း + + + ထရွႆႉဢွၼ်း + {0} ထရွႆႉဢွၼ်း + + + ၵရၢတ်ႈ + {0} ၵရၢတ်ႈ + + + တႄႇလ်တၢၼ်ႇ + {0} တႄႇလ်တၢၼ်ႇ + + + ၼႅၼ်ႈၼႃလုမ်ႈၾႃႉ + + + ၼႅၼ်ႈၼႃလႅတ်ႇ + {0} ၼႅၼ်ႈၼႃလႅတ်ႇ + + + မဵတ်ႉၽၼ်း + {0} မဵတ်ႉၽၼ်း + + + ၵိၵ်ႇၵႃႇဝတ်ႉ + {0} ၵိၵ်ႇၵႃႇဝတ်ႉ + + + မႅၵ်ႇၵႃႇဝတ်ႉ + {0} မႅၵ်ႇၵႃႇဝတ်ႉ + + + ၵီႇလူဝ်ႇဝတ်ႉ + {0} ၵီႇလူဝ်ႇဝတ်ႉ + + + ဝတ်ႉ + {0} ဝတ်ႉ + + + မီႇလီႇဝတ်ႉ + {0} မီႇလီႇဝတ်ႉ + + + ႁႅင်းမႃႉ + {0} ႁႅင်းမႃႉ + + + မီႇလီႇမီႇတႃႇမႃႇၵျူႇရီႇ + {0} မီႇလီႇမီႇတႃႇမႃႇၵျူႇရီႇ + + + မႃႇၵျူႇရီႇ + {0} မႃႇၵျူႇရီႇ + + + ပွၼ်းတေႃႇၼိဝ်ႉသွင်ပုၼ်ႈ + {0} ပွၼ်းတေႃႇၼိဝ်ႉသွင်ပုၼ်ႈ + + + ၼိဝ်ႉမႃႇၵျူႇရီႇ + {0} ၼိဝ်ႉမႃႇၵျူႇရီႇ + + + ပႃးရ် + {0} ပႃးရ် + + + မီႇလီႇပႃးရ် + {0} မီႇလီႇပႃးရ် + + + ႁႅင်းၼႅၼ်ႈလူမ်း + {0} ႁႅင်းၼႅၼ်ႈလူမ်း + + + ပၢတ်ႉသၵႄးလ် + {0} ပၢတ်ႉသၵႄးလ် + + + ႁႅၵ်ႇတူဝ်ႇပၢတ်ႉသၵႄးလ် + {0} ႁႅၵ်ႇတူဝ်ႇပၢတ်ႉသၵႄးလ်' + + + ၵီႇလူဝ်ႇပၢတ်ႉသၵႄးလ် + {0} ၵီႇလူဝ်ႇပၢတ်ႉသၵႄးလ် + + + မႅၵ်ႇၵႃႇပၢတ်ႉသၵႄးလ် + {0} မႅၵ်ႇၵႃႇပၢတ်ႉသၵႄးလ် + + + ၵီႇလူဝ်ႇမီႇတႃႇတေႃႇၸူဝ်ႈမူင်း + {0} ၵီႇလူဝ်ႇမီႇတႃႇတေႃႇၸူဝ်ႈမူင်း + + + မီႇတႃႇတေႃႇၸႅၵ်ႉၵၢၼ်ႉ + {0} မီႇတႃႇတေႃႇၸႅၵ်ႉၵၢၼ်ႉ + + + လၵ်းတေႃႇၸူဝ်ႈမူင်း + {0} လၵ်းတေႃႇၸူဝ်ႈမူင်း + + + ၼွတ်ႉ + {0} ၼွတ်ႉ + + + ပူဝ်ၾူတ်ႉ + ပူဝ်ၾူတ်ႉ {0} + + + တီႇၵရီႇသႄးသီးယႅတ်ႉ + {0} တီႇၵရီႇသႄးသီးယႅတ်ႉ + + + တီႇၵရီႇၾႃႇရႅၼ်ႇႁၢႆႉ + {0} တီႇၵရီႇၾႃႇရႅၼ်ႇႁၢႆႉ + + + ၶႄႇလ်ဝိၼ်ႇ + {0} ၶႄႇလ်ဝိၼ်ႇ + + + ႁႅင်းပွၼ်း-ထတ်း + {0} ႁႅင်းပွၼ်း-ထတ်း + + + ၼိဝ်ႇတၼ်ႇမီႇတႃႇ + {0} ၼိဝ်ႇတၼ်ႇမီႇတႃႇ + + + ၶိဝ်းပိၵ်ႉၵီႇလူဝ်ႇမီႇတႃႇ + {0} ၶိဝ်းပိၵ်ႉၵီႇလူဝ်ႇမီႇတႃႇ + + + ၶိဝ်းပိၵ်ႉမီႇတႃႇ + {0} ၶိဝ်းပိၵ်ႉမီႇတႃႇ + {0} တေႃႇ ၶိဝ်းပိၵ်ႉမီႇတႃႇ + + + ၶိဝ်းပိၵ်ႉသႅၼ်ႇတီႇမီႇတႃႇ + {0} ၶိဝ်းပိၵ်ႉသႅၼ်ႇတီႇမီႇတႃႇ + {0} တေႃႇ ၶိဝ်းပိၵ်ႉသႅၼ်ႇတီႇမီႇတႃႇ + + + လၵ်းၶိဝ်းပိၵ်ႉ + {0} လၵ်းၶိဝ်းပိၵ်ႉ + + + ဝၢႆႈၶိဝ်းပိၵ်ႉ + {0} ဝၢႆႈၶိဝ်းပိၵ်ႉ + + + ထတ်းၶိဝ်းပိၵ်ႉ + {0} ထတ်းၶိဝ်းပိၵ်ႉ + + + ၼိဝ်ႉၶိဝ်းပိၵ်ႉ + {0} ၼိဝ်ႉၶိဝ်းပိၵ်ႉ + + + မႅၵ်ႇၵႃႇလီႇတႃႇ + {0} မႅၵ်ႇၵႃႇလီႇတႃႇ + + + ႁႅၵ်ႇတူဝ်ႇလီႇတႃႇ + {0} ႁႅၵ်ႇတတူဝ်လီႇတႃႇ + + + လီႇတႃႇ + {0} လီႇတႃႇ + {0} တေႃႇလီႇတႃႇ + + + တႅတ်ႇသီႇလီႇတႃႇ + {0} တႅတ်ႇသီႇလီႇတႃႇ + + + သႅၼ်ႇတီႇလီႇတႃႇ + {0} သႅၼ်ႇတီႇလီႇတႃႇ + + + မီႇလီႇလီႇတႃႇ + {0} မီႇလီႇလီႇတႃႇ + + + ပၢႆးမႅတ်ႉထရိတ်ႉ + {0} ပၢႆးမႅတ်ႉထရိတ်ႉ + + + ၵွၵ်းမႅတ်ႉထရိတ်ႉ + {0} ၵွၵ်းမႅတ်ႉထရိတ်ႉ + + + ဢွၼ်းၼမ်ႉယၢင်ႇမႅတ်ႉထရိတ်ႉ + {0} ဢွၼ်းၼမ်ႉယၢင်ႇမႅတ်ႉထရိတ်ႉ + + + ထတ်းဢေႇၵ + {0} ထတ်းဢေႇၵ + + + ၶႂၢႆး + {0} ၶႂၢႆး + + + ၵႃႇလၢၼ်ႇ + {0} ၵႃႇလၢၼ်ႇ + {0} တေႃႇၵႃႇလၢၼ်ႇ + + + ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + {0} ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + {0} တေႃႇ ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + + + ၶွတ်ႉ + {0} ၶွတ်ႉ + + + ပၢႆး + {0} ပၢႆး + + + ပၢႆး ဢိင်းၵလဵတ်ႈ + {0}ပၢႆး ဢိင်းၵလဵတ်ႈ + + + ၵွၵ်း + {0} ၵွၵ်း + + + ၵွၵ်း ဢိင်းၵလဵတ်ႈ + {0} ၵွၵ်း ဢိင်းၵလဵတ်ႈ + + + ဢွၼ်းၼမ်ႉယၢင်ႇ + {0} ဢွၼ်းၼမ်ႉယၢင်ႇ + + + ဢွၼ်းၼမ်ႉယၢင်ႇ ဢိင်းၵလဵတ်ႈ + {0} ဢွၼ်းၼမ်ႉယၢင်ႇ ဢိင်းၵလဵတ်ႈ + + + ၸေႃႉၵိၼ်ၶဝ်ႈ + {0} ၸေႃႉၵိၼ်ၶဝ်ႈ + + + ၸေႃႉၼမ်ႉၼဵင်ႈ + {0} ၸေႃႉၼမ်ႉၼဵင်ႈ + + + ပႃႇရႄႇလ် + {0} ပႃႇရႄႇလ် + + + ၸေႃႉႁၢတ်ႈ + {0} ၸေႃႉႁၢတ်ႈ + + + ၸေႃႉႁၢတ်ႈ ဢိင်းၵလဵတ်ႈ + {0} ၸေႃႉႁၢတ်ႈ ဢိင်းၵလဵတ်ႈ + + + ယွတ်ႇ + {0} ယွတ်ႇ + + + တရမ်ႇ + {0} တရမ်ႇ + + + ၸိၵ်ႇၵႃႇ + {0} ၸိၵ်ႇၵႃႇ + + + ယွပ်း + {0} ယွပ်း + + + ၶွတ်ႉ ဢိင်းၵလဵတ်ႈ + {0} ၶွတ်ႉ ဢိင်းၵလဵတ်ႈ + + + သတီးရေႇတီႇယၼ်ႇ + {0} သတီးရေႇတီႇယၼ်ႇ + + + ၶႃႇတႄႇလ် + {0} ၶႃႇတႄႇလ် + + + ၶူဝ်ႇလွမ်ႇ + {0} ၶူဝ်ႇလွမ်ႇ + + + ၾႃႇရတ်ႉ + {0} ၾႃႇရတ်ႉ + + + ႁႅၼ်ႇရီႇ + {0} ႁႅၼ်ႇရီႇ + + + သီႇမႅၼ်း + {0} သီႇမႅၼ်း + + + ၵႄႇလူဝ်ႇရီႇ [ဢၢႆႇထီႇ] + {0} ၵႄႇလူဝ်ႇရီႇ [ဢၢႆႇထီႇ] + + + ယူႇၼိတ်ႉတၢင်းမႆးဢိင်းၵလဵတ်ႈ [ဢၢႆႇထီႇ] + {0} ယူႇၼိတ်ႉတၢင်းမႆးဢိင်းၵလဵတ်ႈ [ဢၢႆႇထီႇ] + + + ပႅၵ်ႉၶႄႇရႄႇလ် + {0} ပႅၵ်ႉၶႄႇရႄႇလ် + + + သီႇဝႅတ်ႉ + {0} သီႇဝႅတ်ႉ + + + ၵရေး + {0} ၵရေး + + + ၵီႇလူဝ်ႇၵရမ်ႇႁႅင်း + {0} ၵီႇလူဝ်ႇၵရမ်ႇႁႅင်း + + + ရွတ်ႉ + {0} ရွတ်ႉ + + + ၶျဵၼ်း + {0} ၶျဵၼ်း + + + တႅတ်ႉသလႃႇ + {0} တႅတ်ႉသလႃႇ + + + ဝႅပ်ႉပႃႇ + {0} ဝႅပ်ႉပႃႇ + + + ရႅၼ်ႇၵိၼ်ႇ + {0} ရႅၼ်ႇၵိၼ်ႇ + + + ၽၢၵ်ႇလိူၼ် + {0} ၽၢၵ်ႇလိူၼ် + + + သလၢၵ်ႉ + {0} သလၢၵ်ႉ + + + ဢၼ်မိူၼ်ၵၼ်တင်း ၵႅတ်ႉသ် + {0} ဢၼ်မိူၼ်ၵၼ်တင်း ၵႅတ်ႉသ် + + + ရိၼ်း [ၵပ.] + {0} ရိၼ်း [ၵပ.] + + + သုၼ်း [ၵပ.] + {0} သုၼ်း [ၵပ.] + + + သျၵ်ၵု [ၵပ.] + {0} သျၵ်ၵု [ၵပ.] + + + သျၵ်ၵု [ၶူဝ်း၊ ၵပ.] + {0} သျၵ်ၵု [ၶူဝ်း၊ ၵပ.] + + + ၵႅၼ်း [ၵပ.] + {0} ၵႅၼ်း [ၵပ.] + + + ၸူဝ်း [ၵပ.] + {0} ၸူဝ်း [ၵပ.] + + + ရီ [ၵပ.] + {0} ရီ [ၵပ.] + + + ပု [ၵပ.] + {0} ပု [ၵပ.] + + + သႄ [ၵပ.] + {0} သႄ [ၵပ.] + + + ၶျူဝ် [ၵပ.] + {0} ၶျူဝ် [ၵပ.] + + + ၵူဝ်ၸႃးၵျိ [ၵပ.] + {0} ၵူဝ်ၸႃးၵျိ [ၵပ.] + + + ဢူဝ်ၸႃးၵျိ [ၵပ.] + {0} ဢူဝ်ၸႃးၵျိ [ၵပ.] + + + ၵွပ်း [ၵပ.] + {0} ၵွပ်း [ၵပ.] + + + သျၵ်ၵု [ၼႅၼ်ႈၼႃ၊ ၵပ.] + {0} သျၵ်ၵု [ၼႅၼ်ႈၼႃ၊ ၵပ.] + + + သၢႆႉ [ၵပ.] + {0} သၢႆႉ [ၵပ.] + + + တူဝ်ႇ [ၵပ.] + {0} တူဝ်ႇ [ၵပ.] + + + ၵွၵ်ၵု [ၵပ.] + {0} ၵွၵ်ၵု [ၵပ.] + + + လႅင်း + {0} လႅင်း + + + ၾုၼ်ႉ [ၵပ.] + {0} ၾုၼ်ႉ [ၵပ.] + + + တွၼ်ႈတေႃႇႁဵင်လၢၼ်ႉ + {0} တွၼ်ႈတေႃႇႁဵင်လၢၼ်ႉ + + + ၶိုၼ်း + {0} ၶိုၼ်း + {0}/ၶိုၼ်း + + + သီႇမုင်ႈၼႃႈ + {0} တၢင်းဢွၵ်ႇ + {0} တၢင်းႁွင်ႇ + {0} တၢင်းၸၢၼ်း + {0} တၢင်းတူၵ်း + + + + + တႅတ်ႇသီႇ{0} + + + သႅၼ်ႇတီႇ{0} + + + မီႇလီႇ{0} + + + မၢႆႇၶရူဝ်ႇ{0} + + + ၼႃႇၼူဝ်ႇ{0} + + + ပီႇၵူဝ်ႇ{0} + + + ၾႅမ်ႇတူဝ်ႇ{0} + + + ဢႅတ်ႇတူဝ်ႇ{0} + + + ၸႅပ်ႇတူဝ်ႇ{0} + + + ယွၵ်ႇတူဝ်ႇ{0} + + + ရွၼ်ႇတူဝ်ႇ{0} + + + ၶွတ်ႉတူဝ်ႇ{0} + + + တႅၵ်ႇၵႃႇ{0} + + + ႁႅၵ်ႇတူဝ်ႇ{0} + + + ၵီႇလူဝ်ႇ{0} + + + မႅၵ်ႇၵႃႇ{0} + + + ၵိၵ်ႇၵႃႇ{0} + + + ထႄႇရႃႇ{0} + + + ပီႇတႃႇ{0} + + + ဢႅၵ်ႇၸႃႇ{0} + + + ၸႅတ်ႇတႃႇ{0} + + + ယူတ်ႇတႃႇ{0} + + + ရွၼ်ႇၼႃႇ{0} + + + ၶွတ်ႉတႃႇ{0} + + + ၵီႇပီႇ{0} + + + မႄႇပီႇ{0} + + + ၵိပ်ႉပီႇ{0} + + + ထႄႇပီ{0} + + + ပႄႇပီႇ{0} + + + ဢႅၵ်ႉသ်ပီႇ{0} + + + ၸႅပ်ႉပီႇ{0} + + + ယွပ်ႉပီႇ{0} + + + ႁႅင်း G + {0} ႁႅင်း G + + + မီႇတႃႇ/သႅၵ်ႉၵၢၼ်ႉ² + {0} မ./သႅၵ်ႉ.² + + + ႁွပ်ႈ + {0} ႁွပ်ႈ + + + ရေႇတီႇယၼ်ႇ + {0} ရေႇ + + + တီႇၵရီႇ + + + ဢၢၵ်ႉမိၼိတ်ႉ + + + ဢၢၵ်ႉသႅၵ်ႉၵၢၼ်ႉ + + + ၵမ.² + {0} ၵမ.² + {0}/ၵမ.² + + + ႁႅၵ်ႇတႃႇ + {0} ႁႅၵ်ႇတႃႇ + + + မ.² + {0} မ.² + {0}/မ.² + + + သမ.² + {0} သမ.² + {0}/သမ.² + + + လ.² + {0} လ.² + {0}/လ.² + + + ဢေႇၵ + {0} ဢေႇၵ + + + ဝ.² + {0} ဝ.² + + + ထ.² + {0} ထ.² + + + ၼ.² + {0} ၼ.² + {0}/ၼ.² + + + တူးၼမ်ႇ + {0} တူးၼမ်ႇ + + + ၵရၢတ်ႉ + {0} ၵရၢတ်ႉ + + + မၵ./တလ. + {0} မၵ./တလ. + + + မလမ./လ + {0} မလမ./လ + + + ဢၼ် + {0} ဢၼ် + + + တွၼ်ႈ + {0} တွၼ်ႈ + + + ဝၢၵ်ႈ + + + ပႃႇမီးလ် + + + ပႃႇမီးရိယႅတ်ႉ + + + မူဝ်း + {0} မူဝ်း + + + ၵလူးၵူတ်ႉ + {0} ၵလူးၵူတ်ႉ + + + လီႇတႃႇ/ၵမ. + {0} လ./ၵမ. + + + လ./100 ၵမ. + {0} လ./100 ၵမ. + + + လၵ်း/ၵႃႇလၢၼ်ႇ + {0} လၵ်း/ၵႃႇလၢၼ်ႇ + + + လၵ်း/ၵႃႇလၢၼ်ႇဢိင်ႈၵလဵတ်ႈ + {0} လၵ်းတေႃႇၵႃႇလၢၼ်ႇဢိင်းၵလဵတ်ႈ + + + ပၢႆႉ + {0} ပၢႆႉ + + + ပိတ်ႉ + {0} ပိတ်ႉ + + + ႁူဝ်ပၢၵ်ႇပီ + {0} ႁူဝ်ပၢၵ်ႇပီ + + + ႁူဝ်သိပ်းပီ + {0} ႁူဝ်သိပ်းပီ + + + ပီ + {0} ပီ + {0}/ပီ + + + သၢမ်လိူၼ်ႁွပ်ႈ + {0} သၢမ်လိူၼ်ႁွပ်ႈ + {0}/သၢမ်လိူၼ်ႁွပ်ႈ + + + လိူၼ် + {0} လိူၼ် + {0}/လိူၼ် + + + ဝူင်ႈ + {0} ဝူင်ႈ + {0}/ဝူင်ႈ + + + ဝၼ်း + {0} ဝၼ်း + {0}/ဝၼ်း + + + မူင်း + {0} မူင်း + {0}/မူင်း + + + မိၼိတ်ႉ + {0} မိၼိတ်ႉ + {0}/မိၼိတ်ႉ + + + ၸႅၵ်ႉၵၢၼ်ႉ + {0} ၸႅၵ်ႉ + {0}/ၸႅၵ်ႉ + + + မီႇလီႇၸႅၵ်ႉၵၢၼ်ႉ + {0} မီႇလီႇၸႅၵ်ႉ + + + မၢႆႇၶရူဝ်ႇၸႅၵ်ႉၵၢၼ်ႉ + {0} မၢႆႇၸႅၵ်ႉ + + + ၼႃႇၼူဝ်ႇၸႅၵ်ႉၵၢၼ်ႉ + {0} ၼႃႇၸႅၵ်ႉ + + + ဢႅမ်ႇပီႇယႃႇ + + + မီႇလီႇဢႅမ်ႇပီႇယႃႇ + + + ဢူမ်း + + + ဝူဝ်ႉ + + + ၵီႇလူဝ်ႇၵႄႇလူဝ်ႇရီႇ + {0} ၵီႇလူဝ်ႇၵႄႇလူဝ်ႇရီႇ + + + ၵႄႇလူဝ်ႇရီႇ + {0} ၵႄႇလူဝ်ႇရီႇ + + + ၵီႇလူဝ်ႇၵျူဝ်း + {0} ၵီႇလူဝ်ႇၵျူဝ်း + + + ၵျူဝ်း + {0} ၵျူဝ်း + + + ၵဝ.မူင်း + {0} ၵဝ.မူင်း + + + ဢီႇလႅတ်ႇထရွၼ်ႇဝူဝ်ႉ + + + ပီႇထီႇယူႇ + {0} ပီႇထီႇယူႇ + + + ႁႅင်းမႆးယူႇဢႅတ်ႉသ် + {0} ႁႅင်းမႆးယူႇဢႅတ်ႉသ် + + + ႁႅင်းပွၼ်း + + + ၼိဝ်ႇတၼ်ႇ + + + ၵီႇလူဝ်ႇဝတ်ႉမူင်း/100ၵမ. + {0} ၵီႇလူဝ်ႇဝတ်ႉမူင်း/100ၵမ. + + + ၵမ. + {0} ၵမ. + {0}/ၵမ. + + + မီႇတႃႇ + {0} မ. + {0}/မ. + + + တမ. + {0} တမ. + + + သမ. + {0} သမ. + {0}/သမ. + + + မမ. + {0} မမ. + + + မၢႆႇၶရူဝ်ႇမီႇတႃႇ + + + ၼမ. + {0} ၼမ. + + + ပမ. + {0} ပမ. + + + လၵ်း + {0} လၵ်း + + + ဝၢႆႈ + {0} ဝၢႆႈ + + + ထတ်း + {0} ထတ်း + {0}/ထတ်း + + + ၼိဝ်ႉ + {0} ၼိဝ်ႉ + {0}/ၼိဝ်ႉ + + + ပႃႇသႅၵ်ႉ + {0} ပႃႇသႅၵ်ႉ + + + ပီလႅင်း + {0} ပီလႅင်း + + + ယူႇၼိတ်ႉ ပၢႆးလႅင်လၢဝ် + {0} ယူႇၼိတ်ႉ ပၢႆးလႅင်လၢဝ် + + + ၾႃႇလူင်ႇ + {0} ၾႃႇလူင်ႇ + + + ၾႃႇထွမ်ႇ + {0} ၾႃႇထွမ်ႇ + + + လၵ်းၼမ်ႉ + {0} လၵ်းၼမ်ႉ + + + လၵ်းသၵႅၼ်ႇတီႇၼေႇဝီႇယႅၼ်ႇ + + + ၸုတ်း + {0} ၸုတ်း + + + ထႅဝ်ၽိတ်ႇလႅတ်ႇ + + + လၵ်ႉသ် + + + ၶႅၼ်ႇတႄႇလႃႇ + + + လူႇမႅၼ်ႇ + + + လွင်ႈႁိူဝ်ႈလႅင်းလႅတ်ႇ + + + တ. + {0} တ. + + + ၵၵ. + {0} ၵၵ. + {0}/ၵၵ. + + + ၵရမ်ႇ + {0} ၵ. + {0}/ၵ. + + + မၵ. + {0} မၵ. + + + μၵ. + {0} μၵ. + + + တၢၼ်ႇ + {0} တၢၼ်ႇ + + + သတူၼ်း + {0} သတ. + + + ပွၼ်း + {0} ပွၼ်း + {0}/ပွၼ်း + + + ဢွၼ်း + {0} ဢွၼ်း + {0} တေႃႇဢွၼ်း + + + ထရွႆႉဢွၼ်း + {0} ဢထရ. + + + ၵရၢတ်ႈ + {0} ၵရၢတ်ႈ + + + တႄႇလ်တၢၼ်ႇ + + + ၼႅၼ်ႈၼႃလုမ်ႈၾႃႉ + + + ၼႅၼ်ႈၼႃလႅတ်ႇ + + + မဵတ်ႉၽၼ်း + {0} မဵတ်ႉၽၼ်း + + + ၵိၵ်ႇၵႃႇဝတ်ႉ + {0} ၵိၵ်ႇၵႃႇဝတ်ႉ + + + မႅၵ်ႇၵႃႇဝတ်ႉ + {0} မႅၵ်ႇၵႃႇဝတ်ႉ + + + ၵီႇလူဝ်ႇဝတ်ႉ + {0} ၵီႇလူဝ်ႇဝတ်ႉ + + + ဝတ်ႉ + {0} ဝတ်ႉ + + + မီႇလီႇဝတ်ႉ + {0} မီႇလီႇဝတ်ႉ + + + ႁႅင်းမႃႉ + {0} ႁႅင်းမႃႉ + + + မမ. မႃႇၵျူႇရီႇ + {0} မမ. မႃႇၵျူႇရီႇ + + + မႃႇၵျူႇရီႇ + {0} မႃႇၵျူႇရီႇ + + + ၼိဝ်ႉမႃႇၵျူႇရီႇ + {0} ၼိဝ်ႉမႃႇၵျူႇရီႇ + + + ပႃးရ် + {0} ပႃးရ် + + + မီႇလီႇပႃးရ် + {0} မီႇလီႇပႃးရ် + + + ႁႅင်းၼႅၼ်ႈလူမ်း + {0} ႁႅင်းၼႅၼ်ႈလူမ်း + + + ပၢတ်ႉသၵႄးလ် + + + ၵမ./ၸူဝ်ႈမူင်း + {0} ၵမ./မူင်း + + + မီႇတႃႇ/ၸႅၵ်ႉ + {0} မ./ၸႅၵ်ႉ + + + လၵ်း/မူင်း + {0} လ./မူင်း + + + ၼွတ်ႉ + {0} ၼွတ်ႉ + + + ပူဝ်ၾူတ်ႉ + ပူဝ်ၾူတ်ႉ {0} + + + တီႇၵရီႇသႄးသီးယႅတ်ႉ + + + တီႇၵရီႇၾႃႇရႅၼ်ႇႁၢႆႉ + + + ၵမ.³ + {0} ၵမ.³ + + + မ.³ + {0} မ.³ + {0}/မ.³ + + + သမ.³ + {0} သမ.³ + {0}/သမ.³ + + + လ.³ + {0} လ.³ + + + ဝ.³ + {0} ဝ.³ + + + ထ.³ + {0} ထ.³ + + + ၼ.³ + {0} ၼ.³ + + + မႅၵ်ႇၵႃႇလီႇတႃႇ + {0} မႅၵ်ႇၵႃႇလီႇတႃႇ + + + ႁလ. + {0} ႁလ. + + + လီႇတႃႇ + {0} လ. + {0}/လ. + + + တလ. + {0} တလ. + + + သလ. + {0} သလ. + + + မလ. + {0} မလ. + + + ပၢႆးမႅတ်ႉထရိတ်ႉ + {0} ပၢႆးမႅတ်ႉထရိတ်ႉ + + + ၵွၵ်းမႅတ်ႉထရိတ်ႉ + {0} ၵွၵ်းမႅတ်ႉထရိတ်ႉ + + + ဢွၼ်းၼမ်ႉယၢင်ႇမႅတ်ႉထရိတ်ႉ + {0} ဢွၼ်းၼမ်ႉယၢင်ႇမႅတ်ႉထရိတ်ႉ + + + ထတ်းဢေႇၵ + {0} ထတ်းဢေႇၵ + + + ၶႂၢႆး + {0} ၶႂၢႆး + + + ၵႃႇလၢၼ်ႇ + {0} ၵႃႇလၢၼ်ႇ + {0}/ၵႃႇလၢၼ်ႇ + + + ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + {0} ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + {0}/ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + + + ၶွတ်ႉ + {0} ၶွတ်ႉ + + + ပၢႆး + {0} ပၢႆး + + + ပၢႆး ဢိင်းၵလဵတ်ႈ + {0} ပၢႆး ဢိင်းၵလဵတ်ႈ + + + ၵွၵ်း + {0} ၵွၵ်း + + + ၵွၵ်း ဢိင်းၵလဵတ်ႈ + {0} ၵွၵ်း ဢိင်းၵလဵတ်ႈ + + + ဢွၼ်းၼမ်ႉယၢင်ႇ + {0} ဢွၼ်းၼမ်ႉယၢင်ႇ + + + ၸေႃႉၵိၼ်ၶဝ်ႈ + {0} ၸေႃႉၵိၼ်ၶဝ်ႈ + + + ၸေႃႉၼမ်ႉၼဵင်ႈ + {0} ၸေႃႉၼမ်ႉၼဵင်ႈ + + + ပႃႇရႄႇလ် + {0} ပႃႇရႄႇလ် + + + ၸေႃႉႁၢတ်ႈ + {0} ၸေႃႉႁၢတ်ႈ + + + ၸေႃႉႁၢတ်ႈ ဢိင်းၵလဵတ်ႈ + {0} ၸေႃႉႁၢတ်ႈ ဢိင်းၵလဵတ်ႈ + + + ယွတ်ႇ + {0} ယွတ်ႇ + + + တရမ်ႇ + {0} တရမ်ႇ + + + ၸိၵ်ႇၵႃႇ + {0} ၸိၵ်ႇၵႃႇ + + + ယွပ်း + {0} ယွပ်း + + + ၶွတ်ႉ ဢိင်းၵလဵတ်ႈ + {0} ၶွတ်ႉ ဢိင်းၵလဵတ်ႈ + + + ၶႃႇတႄႇလ် + + + ၶူဝ်ႇလွမ်ႇ + + + ၾႃႇရတ်ႉ + + + ႁႅၼ်ႇရီႇ + + + သီႇမႅၼ်း + + + ၵႄႇလူဝ်ႇရီႇ [ဢၢႆႇထီႇ] + {0} ၵႄႇလူဝ်ႇရီႇ [ဢၢႆႇထီႇ] + + + ပီႇထီႇယူႇ-ဢၢႆႇထီႇ + {0} ပီႇထီႇယူႇ-ဢၢႆႇထီႇ + + + ပႅၵ်ႉၶႄႇရႄႇလ် + {0} Bq + + + သီႇဝႅတ်ႉ + + + ၵရေး + {0} ၵရေး + + + ၵီႇလူဝ်ႇၵရမ်ႇႁႅင်း + {0} ၵီႇလူဝ်ႇၵရမ်ႇႁႅင်း + + + ရွတ်ႉ + {0} ရွတ်ႉ + + + ၶျဵၼ်း + {0} ၶျဵၼ်း + + + တႅတ်ႉသလႃႇ + + + ဝႅပ်ႉပႃႇ + + + ၽၢၵ်ႇလိူၼ် + {0} ၽၢၵ်ႇလိူၼ် + + + သလၢၵ်ႉ + {0} သလၢၵ်ႉ + + + ဢၼ်မိူၼ်ၵၼ်တင်း ၵႅတ်ႉသ် + {0} gas-equiv + + + ရိၼ်း [ၵပ.] + {0} ရိၼ်း [ၵပ.] + + + သုၼ်း [ၵပ.] + {0} သုၼ်း [ၵပ.] + + + သျၵ်ၵု [ၵပ.] + {0} သျၵ်ၵု [ၵပ.] + + + သျၵ်ၵု [ၶူဝ်း၊ ၵပ.] + {0} သျၵ်ၵု [ၶူဝ်း၊ ၵပ.] + + + ၵႅၼ်း [ၵပ.] + {0} ၵႅၼ်း [ၵပ.] + + + ၸူဝ်း [ၵပ.] + {0} ၸူဝ်း [ၵပ.] + + + ရီ [ၵပ.] + {0} ရီ [ၵပ.] + + + ပု [ၵပ.] + {0} ပု [ၵပ.] + + + သႄ [ၵပ.] + {0} သႄ [ၵပ.] + + + ၶျူဝ် [ၵပ.] + {0} ၶျူဝ် [ၵပ.] + + + ၵူဝ်ၸႃးၵျိ [ၵပ.] + {0} ၵူဝ်ၸႃးၵျိ [ၵပ.] + + + ဢူဝ်ၸႃးၵျိ [ၵပ.] + {0} ဢူဝ်ၸႃးၵျိ [ၵပ.] + + + ၵွပ်း [ၵပ.] + {0} ၵွပ်း [ၵပ.] + + + သျၵ်ၵု [ၼႅၼ်ႈၼႃ၊ ၵပ.] + {0} သျၵ်ၵု [ၼႅၼ်ႈၼႃ၊ ၵပ.] + + + သၢႆႉ [ၵပ.] + {0} သၢႆႉ [ၵပ.] + + + တူဝ်ႇ [ၵပ.] + {0} တူဝ်ႇ [ၵပ.] + + + ၵွၵ်ၵု [ၵပ.] + {0} ၵွၵ်ၵု [ၵပ.] + + + လႅင်း + {0} လႅင်း + + + ၾုၼ်ႉ [ၵပ.] + {0} ၾုၼ်ႉ [ၵပ.] + + + တွၼ်ႈ/ႁဵင်လၢၼ်ႉ + {0} တတႁလ. + + + ၶိုၼ်း + {0} ၶိုၼ်း + {0}/ၶိုၼ်း + + + မုင်ႈၼႃႈ + {0} ဢ + {0} ႁ + {0} ၸ + {0} တ + + + + + တႅတ်ႇသီႇ{0} + + + သႅၼ်ႇတီႇ{0} + + + မီႇလီႇ{0} + + + မၢႆႇၶရူဝ်ႇ{0} + + + ၼႃႇၼူဝ်ႇ{0} + + + ပီႇၵူဝ်ႇ{0} + + + ၾႅမ်ႇတူဝ်ႇ{0} + + + ဢႅတ်ႇတူဝ်ႇ{0} + + + ၸႅပ်ႇတူဝ်ႇ{0} + + + ယွၵ်ႇတူဝ်ႇ{0} + + + ရွၼ်ႇတူဝ်ႇ{0} + + + ၶွတ်ႉတူဝ်ႇ{0} + + + တႅၵ်ႇၵႃႇ{0} + + + ႁႅၵ်ႇတူဝ်ႇ{0} + + + ၵီႇလူဝ်ႇ{0} + + + မႅၵ်ႇၵႃႇ{0} + + + ၵိၵ်ႇၵႃႇ{0} + + + ထႄႇရႃႇ{0} + + + ပီႇတႃႇ{0} + + + ဢႅၵ်ႇၸႃႇ{0} + + + ၸႅတ်ႇတႃႇ{0} + + + ယူတ်ႇတႃႇ{0} + + + ရွၼ်ႇၼႃႇ{0} + + + ၶွတ်ႉတႃႇ{0} + + + ၵီႇပီႇ{0} + + + မႄႇပီႇ{0} + + + ၵိပ်ႉပီႇ{0} + + + ထႄႇပီ{0} + + + ပႄႇပီႇ{0} + + + ဢႅၵ်ႉသ်ပီႇ{0} + + + ၸႅပ်ႉပီႇ{0} + + + ယွပ်ႉပီႇ{0} + + + ႁႅင်း G + {0} ႁႅင်း G + + + မ./သႅၵ်ႉ.² + {0} မ./သႅၵ်ႉ.² + + + ႁွပ်ႈ + {0}ႁွပ်ႈ + + + ရေႇတီႇယၼ်ႇ + {0}ရေႇ + + + တီႇၵရီႇ + + + ဢၢၵ်ႉမိၼိတ်ႉ + + + ဢၢၵ်ႉသႅၵ်ႉၵၢၼ်ႉ + + + ၵမ.² + {0}ၵမ.² + {0}/ၵမ.² + + + ႁႅၵ်ႇတႃႇ + {0}ႁႅၵ်ႇတႃႇ + + + မ.² + {0}မ.² + {0}/မ.² + + + သမ.² + {0}သမ.² + {0}/သမ.² + + + လ.² + {0}လ.² + {0}/လ.² + + + ဢေႇၵ + {0}ဢေႇၵ + + + ဝ.² + {0}ဝ.² + + + ထ.² + {0}ထ.² + + + ၼ.² + {0}ၼ.² + {0}/ၼ.² + + + တူးၼမ်ႇ + {0}တူးၼမ်ႇ + + + ၵရၢတ်ႉ + {0}ၵရၢတ်ႉ + + + မၵ./တလ. + {0}မၵ./တလ. + + + မလမ./လ + {0}မလမ./လ + + + ဢၼ် + {0}ဢၼ် + + + တွၼ်ႈ + {0}တွၼ်ႈ + + + ဝၢၵ်ႈ + + + ပႃႇမီးလ် + + + ပႃႇမီးရိယႅတ်ႉ + + + မူဝ်း + {0}မူဝ်း + + + ၵလူးၵူတ်ႉ + {0} ၵလူးၵူတ်ႉ + + + လ./ၵမ. + {0}လ./ၵမ. + + + လ./100ၵမ. + {0} လ./100ၵမ. + + + mpg + {0}mpg + + + လၵ်း/ၵႃႇလၢၼ်ႇဢိင်ႈၵလဵတ်ႈ + {0} လၵ်းတေႃႇၵႃႇလၢၼ်ႇဢိင်းၵလဵတ်ႈ + + + {0}TB + + + {0}GB + + + {0}Gb + + + {0}MB + + + {0}Mb + + + {0}kB + + + {0}kb + + + ပၢႆႉ + {0}ပၢႆႉ + + + ပိတ်ႉ + {0}ပိတ်ႉ + + + ႁူဝ်ပၢၵ်ႇပီ + {0} ႁူဝ်ပၢၵ်ႇပီ + + + ႁူဝ်သိပ်းပီ + {0} ႁူဝ်သိပ်းပီ + + + ပီ + {0}ပီ + {0}/ပီ + + + သၢမ်လိူၼ်ႁွပ်ႈ + {0}သၢမ်လိူၼ်ႁွပ်ႈ + {0}/သၢမ်လိူၼ်ႁွပ်ႈ + + + လိူၼ် + {0}လိူၼ် + {0}/လိူၼ် + + + ဝူင်ႈ + {0}ဝူင်ႈ + {0}/ဝူင်ႈ + + + ဝၼ်း + {0}ဝၼ်း + {0}/ဝၼ်း + + + မူင်း + {0}မူင်း + {0}/မူင်း + + + မိၼိတ်ႉ + {0}မိၼိတ်ႉ + {0}/မိၼိတ်ႉ + + + ၸႅၵ်ႉ + {0}ၸႅၵ်ႉ + {0}/ၸႅၵ်ႉၵၢၼ်ႉ + + + မီႇလီႇၸႅၵ်ႉ + {0}မီႇလီႇၸႅၵ်ႉ + + + မၢႆႇၶရူဝ်ႇၸႅၵ်ႉ + {0}မၢႆႇၸႅၵ်ႉ + + + ၼႃႇၼူဝ်ႇၸႅၵ်ႉ + {0}ၼႃႇၸႅၵ်ႉ + + + ဢႅမ်ႇပီႇယႃႇ + {0}A + + + မီႇလီႇဢႅမ်ႇပီႇယႃႇ + {0}mA + + + ဢူမ်း + {0}Ω + + + ဝူဝ်ႉ + {0}V + + + ၵီႇလူဝ်ႇၵႄႇလူဝ်ႇရီႇ + {0}kcal + + + ၵႄႇလူဝ်ႇရီႇ + {0}ၵႄႇလူဝ်ႇရီႇ + + + ၵီႇလူဝ်ႇၵျူဝ်း + {0}ၵီႇလူဝ်ႇၵျူဝ်း + + + ၵျူဝ်း + {0}ၵျူဝ်း + + + ၵဝ.မူင်း + {0}ၵဝ.မူင်း + + + {0}eV + + + ပီႇထီႇယူႇ + {0} ပီႇထီႇယူႇ + + + ႁႅင်းမႆးယူႇဢႅတ်ႉသ် + {0}ႁႅင်းမႆးယူႇဢႅတ်ႉသ် + + + ၼိဝ်ႇတၼ်ႇ + + + ၵီႇလူဝ်ႇဝတ်ႉမူင်း/100ၵမ. + {0} ၵီႇလူဝ်ႇဝတ်ႉမူင်း/100ၵမ. + + + {0}GHz + + + {0}MHz + + + {0}kHz + + + {0}Hz + + + ၵမ. + {0} ၵမ. + {0}/ၵမ. + + + မီႇတႃႇ + {0}မ. + {0}/မ + + + တမ. + {0}တမ. + + + သမ. + {0}သမ. + {0}/သမ. + + + မမ. + {0}မမ. + + + မၢႆႇၶရူဝ်ႇမီႇတႃႇ + + + ၼမ. + {0}ၼမ. + + + ပမ. + {0}ပမ. + + + လၵ်း + {0}လၵ်း + + + ဝၢႆႈ + {0}ဝၢႆႈ + + + ထတ်း + {0}′ + {0}/ထတ်း + + + ၼိဝ်ႉ + {0}″ + {0}/ၼိဝ်ႉ + + + ပႃႇသႅၵ်ႉ + {0}ပႃႇသႅၵ်ႉ + + + ပီလႅင်း + {0}ပီလႅင်း + + + ယူႇၼိတ်ႉ ပၢႆးလႅင်လၢဝ် + {0}au + + + ၾႃႇလူင်ႇ + {0}ၾႃႇလူင်ႇ + + + ၾႃႇထွမ်ႇ + {0}ၾႃႇထွမ်ႇ + + + လၵ်းၼမ်ႉ + {0}လၵ်းၼမ်ႉ + + + ၸုတ်း + {0}ၸုတ်း + + + ထႅဝ်ၽိတ်ႇလႅတ်ႇ + + + လၵ်ႉသ် + + + ၶႅၼ်ႇတႄႇလႃႇ + + + လူႇမႅၼ်ႇ + + + လွင်ႈႁိူဝ်ႈလႅင်းလႅတ်ႇ + + + တ. + {0} တ. + + + ၵၵ. + {0} ၵၵ. + {0}/ၵၵ. + + + ၵရမ်ႇ + {0}ၵ. + {0}/ၵ. + + + မၵ. + {0}မၵ. + + + μၵ. + {0}μၵ. + + + တၢၼ်ႇ + {0} တၢၼ်ႇ + + + သတူၼ်း + {0}သတ. + + + ပွၼ်း + {0}ပွၼ်း + {0}/ပွၼ်း + + + ဢွၼ်း + {0}ဢွၼ်း + {0}/ဢွၼ်း + + + ဢထရ. + {0}ဢထရ. + + + ၵရၢတ်ႈ + {0}ၵရၢတ်ႈ + + + {0}Da + + + မဵတ်ႉၽၼ်း + {0}မဵတ်ႉၽၼ်း + + + ၵိၵ်ႇၵႃႇဝတ်ႉ + {0}GW + + + မႅၵ်ႇၵႃႇဝတ်ႉ + {0}MW + + + ၵီႇလူဝ်ႇဝတ်ႉ + {0}kW + + + ဝတ်ႉ + {0}ဝတ်ႉ + + + မီႇလီႇဝတ်ႉ + {0}mW + + + ႁႅင်းမႃႉ + {0}ႁႅင်းမႃႉ + + + မမ. မႃႇၵျူႇရီႇ + {0}မမ. မႃႇၵျူႇရီႇ + + + မႃႇၵျူႇရီႇ + {0} မႃႇၵျူႇရီႇ + + + ၼိဝ်ႉမႃႇၵျူႇရီႇ + {0}ၼိဝ်ႉမႃႇၵျူႇရီႇ + + + ပႃးရ် + {0}ပႃးရ် + + + မီႇလီႇပႃးရ် + {0}မီႇလီႇပႃးရ် + + + ႁႅင်းၼႅၼ်ႈလူမ်း + {0}ႁႅင်းၼႅၼ်ႈလူမ်း + + + ပၢတ်ႉသၵႄးလ် + {0}Pa + + + {0}hPa + + + {0}kPa + + + {0}MPa + + + ၵမ./မူင်း + {0} ၵမ./မူင်း + + + မ./ၸႅၵ်ႉ + {0} မ./ၸႅၵ်ႉ + + + လ./မူင်း + {0} လ./မူင်း + + + ၼွတ်ႉ + {0} ၼွတ်ႉ + + + ပူဝ်ၾူတ်ႉ + ပူဝ်ၾူတ်ႉ {0} + + + တီႇၵရီႇသႄးသီးယႅတ်ႉ + + + တီႇၵရီႇၾႃႇရႅၼ်ႇႁၢႆႉ + {0}° + + + {0}K + + + ၵမ.³ + {0}ၵမ.³ + + + မ.³ + {0}မ.³ + {0}/မ.³ + + + သမ.³ + {0}သမ.³ + {0}/သမ.³ + + + လ.³ + {0}လ.³ + + + ဝ.³ + {0}ဝ.³ + + + ထ.³ + {0}ထ.³ + + + ၼ.³ + {0}ၼ.³ + + + မႅၵ်ႇၵႃႇလီႇတႃႇ + {0}မႅၵ်ႇၵႃႇလီႇတႃႇ + + + ႁလ. + {0} ႁလ. + + + လီႇတႃႇ + {0}လ. + {0}/လ. + + + တလ. + {0}တလ. + + + သလ. + {0}သလ. + + + မလ. + {0}မလ. + + + ပၢႆးမႅတ်ႉထရိတ်ႉ + {0}ပၢႆးမႅတ်ႉထရိတ်ႉ + + + ၵွၵ်းမႅတ်ႉထရိတ်ႉ + {0}ၵွၵ်းမႅတ်ႉထရိတ်ႉ + + + ဢွၼ်းၼမ်ႉယၢင်ႇမႅတ်ႉထရိတ်ႉ + {0} ဢွၼ်းၼမ်ႉယၢင်ႇမႅတ်ႉထရိတ်ႉ + + + ထတ်းဢေႇၵ + {0}ထတ်းဢေႇၵ + + + ၶႂၢႆး + {0}ၶႂၢႆး + + + ၵႃႇလၢၼ်ႇ + {0}ၵႃႇလၢၼ်ႇ + {0}/ၵႃႇလၢၼ်ႇ + + + ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + {0}ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + {0}/ၵႃႇလၢၼ်ႇ ဢိင်းၵလဵတ်ႈ + + + ၶွတ်ႉ + {0}ၶွတ်ႉ + + + ပၢႆး + {0}ပၢႆး + + + ပၢႆး ဢိင်းၵလဵတ်ႈ + {0}ပၢႆး ဢိင်းၵလဵတ်ႈ + + + ၵွၵ်း + {0}ၵွၵ်း + + + ၵွၵ်း ဢိင်းၵလဵတ်ႈ + {0}ၵွၵ်း ဢိင်းၵလဵတ်ႈ + + + ဢွၼ်းၼမ်ႉယၢင်ႇ + {0}ဢွၼ်းၼမ်ႉယၢင်ႇ + + + ၸေႃႉၵိၼ်ၶဝ်ႈ + {0}ၸေႃႉၵိၼ်ၶဝ်ႈ + + + ၸေႃႉၼမ်ႉၼဵင်ႈ + {0}ၸေႃႉၼမ်ႉၼဵင်ႈ + + + ပႃႇရႄႇလ် + {0}ပႃႇရႄႇလ် + + + ၸေႃႉႁၢတ်ႈ + {0}ၸေႃႉႁၢတ်ႈ + + + ၸေႃႉႁၢတ်ႈ ဢိင်းၵလဵတ်ႈ + {0} ၸေႃႉႁၢတ်ႈ ဢိင်းၵလဵတ်ႈ + + + ယွတ်ႇ + {0}ယွတ်ႇ + + + တရမ်ႇ + {0}တရမ်ႇ + + + ၸိၵ်ႇၵႃႇ + {0}ၸိၵ်ႇၵႃႇ + + + ယွပ်း + {0}ယွပ်း + + + ၶွတ်ႉ ဢိင်းၵလဵတ်ႈ + {0}ၶွတ်ႉ ဢိင်းၵလဵတ်ႈ + + + ၶႃႇတႄႇလ် + + + ၶူဝ်ႇလွမ်ႇ + + + ၾႃႇရတ်ႉ + + + ႁႅၼ်ႇရီႇ + + + သီႇမႅၼ်း + + + ၵႄႇလူဝ်ႇရီႇ [ဢၢႆႇထီႇ] + {0}ၵႄႇလူဝ်ႇရီႇ [ဢၢႆႇထီႇ] + + + ပီႇထီႇယူႇ-ဢၢႆႇထီႇ + {0}ပီႇထီႇယူႇ-ဢၢႆႇထီႇ + + + ပႅၵ်ႉၶႄႇရႄႇလ် + {0} Bq + + + သီႇဝႅတ်ႉ + + + ၵရေး + {0} ၵရေး + + + ၵီႇလူဝ်ႇၵရမ်ႇႁႅင်း + {0}ၵီႇလူဝ်ႇၵရမ်ႇႁႅင်း + + + ရွတ်ႉ + {0}ရွတ်ႉ + + + ၶျဵၼ်း + {0}ၶျဵၼ်း + + + တႅတ်ႉသလႃႇ + + + ဝႅပ်ႉပႃႇ + + + ၽၢၵ်ႇလိူၼ် + {0} ၽၢၵ်ႇလိူၼ် + + + သလၢၵ်ႉ + {0}သလၢၵ်ႉ + + + ဢၼ်မိူၼ်ၵၼ်တင်း ၵႅတ်ႉသ် + {0}gas-equiv + + + ရိၼ်း [ၵပ.] + {0}ရိၼ်း [ၵပ.] + + + သုၼ်း [ၵပ.] + {0}သုၼ်း [ၵပ.] + + + သျၵ်ၵု [ၵပ.] + {0}သျၵ်ၵု [ၵပ.] + + + သျၵ်ၵု [ၶူဝ်း၊ ၵပ.] + {0}သျၵ်ၵု [ၶူဝ်း၊ ၵပ.] + + + ၵႅၼ်း [ၵပ.] + {0}ၵႅၼ်း [ၵပ.] + + + ၸူဝ်း [ၵပ.] + {0}ၸူဝ်း [ၵပ.] + + + ရီ [ၵပ.] + {0}ရီ [ၵပ.] + + + ပု [ၵပ.] + {0}ပု [ၵပ.] + + + သႄ [ၵပ.] + {0}သႄ [ၵပ.] + + + ၶျူဝ် [ၵပ.] + {0}ၶျူဝ် [ၵပ.] + + + ၵူဝ်ၸႃးၵျိ [ၵပ.] + {0}ၵူဝ်ၸႃးၵျိ [ၵပ.] + + + ဢူဝ်ၸႃးၵျိ [ၵပ.] + {0} ဢူဝ်ၸႃးၵျိ [ၵပ.] + + + ၵွပ်း [ၵပ.] + {0} ၵွပ်း [ၵပ.] + + + သျၵ်ၵု [ၼႅၼ်ႈၼႃ၊ ၵပ.] + {0} သျၵ်ၵု [ၼႅၼ်ႈၼႃ၊ ၵပ.] + + + သၢႆႉ [ၵပ.] + {0} သၢႆႉ [ၵပ.] + + + တူဝ်ႇ [ၵပ.] + {0} တူဝ်ႇ [ၵပ.] + + + ၵွၵ်ၵု [ၵပ.] + {0} ၵွၵ်ၵု [ၵပ.] + + + လႅင်း + {0} လႅင်း + + + ၾုၼ်ႉ [ၵပ.] + {0}ၾုၼ်ႉ [ၵပ.] + + + တတႁလ. + {0}တတႁလ. + + + ၶိုၼ်း + {0} ၶိုၼ်း + {0}/ၶိုၼ်း + + + မုင်ႈၼႃႈ + {0}ဢ + {0}ႁ + {0}ၸ + {0}တ + + + + + + {0}၊ {1} + {0}၊ {1} + {0} လႄႈ {1} + {0} လႄႈ {1} + + + {0}၊ {1} + {0}၊ {1} + {0}၊ ႁိုဝ် {1} + {0} ႁိုဝ် {1} + + + {0}၊ {1} + {0}၊ {1} + {0}၊ ႁိုဝ် {1} + {0} ႁိုဝ် {1} + + + {0}၊ {1} + {0}၊ {1} + {0}၊ ႁိုဝ် {1} + {0} ႁိုဝ် {1} + + + {0}၊ {1} + {0}၊ {1} + {0} လႄႈ {1} + {0} လႄႈ {1} + + + {0}၊ {1} + {0}၊ {1} + {0} လႄႈ {1} + {0} လႄႈ {1} + + + {0}၊ {1} + {0}၊ {1} + {0} လႄႈ {1} + {0} လႄႈ {1} + + + {0}၊ {1} + {0}၊ {1} + {0} လႄႈ {1} + {0} လႄႈ {1} + + + {0}၊ {1} + {0}၊ {1} + {0} လႄႈ {1} + {0} လႄႈ {1} + + + + {0} - တင်းမူတ်း + {0} - လွင်ႈငမ်ႇမႅၼ်ႈ + {0} - လွမ်ႉႁွပ်ႈ + {0} - မႄႇၶႂၢၵ်ႈ + {0} မုင်ႈသၢႆႉ + {0} မုင်ႈၶႂႃ + {0} — ၵိုၵ်းပိုၼ်း + {0} — တိတေႃႉ + {0} — တၢင်ႇၸိူဝ်း + သၶရိပ်ႉ — {0} + {0} ႁွႆးမင်ႈ + တူဝ်ႁွႆႈ {0} + တူဝ်တၢင်ႇ {0} + လွင်ႈတူင်ႉၼိုင် + သၶရိပ်ႉဢႃႇၾရိၵၢၼ်ႇ + သၶရိပ်ႉဢမႄႇရိၵၢၼ်ႇ + သတ်း + သတ်း ႁိုဝ် သၽႃႇဝ + ပိုၼ်ၵၢင်ႇ + တူဝ်ၶိင်း + ၸၼ်ႁၢင်ႈတိူၵ်ႈ + လိၵ်ႈတႃမွတ်ႇ + ႁူင်းၵေႃႇသၢင်ႈ + ပူးလႅတ်ႉ ႁိုဝ် လၢဝ် + တူဝ်မႄႈလိၵ်ႈၵၢဝ်းလီ + တူဝ်မၢႆငိုၼ်း + ၶိတ်ႇၵၢင် ႁိုဝ် တူဝ်ၵွင်ႉသၢၼ် + တူဝ်ၼပ်ႉ + တိင်းပႅတ်ႉ + တူဝ်မၢႆၵႃႇလႃး + ပိုၼ်ၸီႉလူင်း + ပိုၼ်ၸီႉၶိုၼ်ႈၸီႉလူင်း + သၶရိပ်ႉ ၸၢဝ်းဢေးသျႃးပွတ်းဢွၵ်ႇ + ဢီႇမူဝ်းၵျိ + သၶရိပ်ႉယူးရူပ်ႉ + ယိင်း + ၸွမ်ပိဝ် + ၸွမ်ပိဝ် + တၢင်းၵိၼ်တၢင်းယႅမ်ႉ + ပိူင်တမ်း + ပိူင်တမ်း လႄႈ လွၵ်းပဝ်ႇ + ပိူင်ပႅၵ်ႇတူဝ်တဵမ် + ၽၢင်ႁၢင်ႈၵျေႃႇမႅတ်ႇထရီႇ + ပိူင်ပႅၵ်ႇၶိုင်ႈတူဝ် + တူဝ်မႄႈလိၵ်ႈႁၢၼ်ႉ + ငိူၼ်ႈငဝ်ႈႁၢၼ်ႉ + ႁၢၼ်ႉၸႃႉ + ႁၢၼ်ႉၸိုဝ်ႉ (ပၢၼ်မႂ်ႇ) + ႁၢၼ်ႉၸိုဝ်ႉ (ပၢၼ်ၵဝ်ႇ) + ႁူဝ်ၸႂ် + သၶရိပ်ႉၵိုၵ်းပိုၼ်း + ဢၵ်ႉၶရႃႇၸိူဝ်းပဵၼ်တူဝ်တႅၼ်း ပၢႆးဝူၼ်ႉ + ၶႃႉၼႃႉၵျႃႇပၢၼ်ႇ + ၶၢၼ်းပုၼ် + ၶၢၼ်းၵျိ + ၼဵၼ်ၼဵၵ်း + ပိုၼ်ဝၢႆႇသၢႆႉ + ပိုၼ်ဝၢႆႇသၢႆႉဝၢႆႇၶႂႃ + တူဝ်မၢႆမိူၼ်တူဝ်လိၵ်ႈ + ၸႂ်ႉတိုဝ်းဢၼ်မၵ်းၶၼ်ႈ + ၸၢႆး + တူဝ်မၢႆပၢႆးၼပ်ႉ + တူဝ်လိၵ်ႈပွတ်းဢွၵ်ႇတွၼ်ႈၵၢင် + တိတေႃႉ + သၶရိပ်ႉပၢၼ်မႂ်ႇ + တူဝ်ၵမ်ႉ + တူဝ်မၢႆၽဵင်း + သၽႃႇဝ + ဢမ်ႇၶႅၼ်ႈပဝ်ႇ + မၢႆၼပ်ႉ + ၶူဝ်းၶွင် + တၢင်ႇၸိူဝ်း + ဢၼ်ၵွင်ႉၵၼ်ဝႆႉ + ၵူၼ်း + ဢၵ်ႉၶရႃႇ ပၢႆးသဵင် + ၵရပ်ႉၼႄႁၢင်ႈ + ဢွင်ႈတီႈ + တူၼ်ႈမႆႉ + တူဝ်တႅပ်းၶေႃႈၵႂၢမ်း + ပိုၼ်ဝၢႆႇၶႂႃ + တီႈမၢႆတွင်း ႁိုဝ် တူဝ်မၢႆ + ပိူင်ပႅၵ်ႇဢွၼ်ႇ + ႁၢင်ႈၼႃႈယုမ်ႉ + ႁၢင်ႈၼႃႈယုမ်ႉ ႁိုဝ် ၵူၼ်း + သၶရိပ်ႉ ၸၢဝ်းဢေးသျႃးပွတ်းၸၢၼ်း + သၶရိပ်ႉ ၸၢဝ်းဢေးသျႃးၸဵင်ႇၸၢၼ်းဝၼ်းဢွၵ်ႇ + ၶႅၼ်ႈပဝ်ႇ + ၵၢၼ်လဵၼ်ႈႁႅင်း + တူဝ်မၢႆ + တူဝ်မၢႆ ပၢႆးထႅၵ်ႉၼိၵ်ႉ + မၢႆတူၼ်းသဵင် + ဢွၵ်ႇတၢင်း + ဢွၵ်ႇတၢင်း ႁိုဝ် ဢွင်ႈတီႈ + ပိုၼ်ဝၢႆႇၼိူဝ် + ပိူင်ပႅၵ်ႇ + မႄႈၵပ်းငဝ်ႈၸမူဝ်ႇ + သၢႆငၢႆၾႃႉၽူၼ် + သၶရိပ်ႉ ၸၢဝ်းဢေးသျႃးပွတ်းတူၵ်း + လွၵ်းပဝ်ႇ + + + ၵိူင်း + သႅၼ်းတူဝ်လိၵ်ႈ ႁႂ်းႁၼ်လီ + ၸိူၼ်း + တၢင်းၵႂၢင်ႈ + တၢင်းၼႃ + လဵၼ်ႈႁၢင် + ၶေႃႈသပ်းလႅင်းၶႅပ်းႁၢင်ႈ + လိၵ်ႈ + လွင်ႈသႂ်ႇႁူဝ်ၶေႃႈ + ၵၢၼ်ၼႄ + ႁၢင်ႈပူဝ်ႇသ်တႃႇ + ၸိူၼ်းလင် + တင်ႈသိုဝ်ႈ + ၸိူၼ်းဝႆႉ + တိူဝ်းၸိူၼ်း + ဢၼ်သတ်ႉဝႆႉႁႅင်း + ဢၼ်တိူဝ်းသတ်ႉဝႆႉႁႅင်း + သတ်ႉဝႆႉ + သတ်ႉဝႆႉၶိုင်ႈၼိုင်ႈ + ပၵတိ + ယၢၼ်ဝႆႉၶိုင်ႈၼိုင်ႈ + ယၢၼ်ဝႆႉ + တိူဝ်းယၢၼ်ဝႆႉ + ယၢၼ်ဝႆႉႁႅင်း + မၢင် + တိူဝ်းသဝ်ႈ + သဝ်ႈ + သဝ်ႈၶိုင်ႈၼိုင်ႈ + ပပ်ႉ + ပိူင်ၵဝ်ႇ + ပၢၼ်ၵၢင် + ၼႃၶိုင်ႈၼိုင်ႈ + ၼႃ + ၼႃႁႅင်း + လမ် + လမ်ႁႅင်း + ၵၢၼ်လေႃးထွၼ်ထႅဝ်တင်ႈ + လွင်ႈႁၢင်ႇ တူဝ်လိၵ်ႈယႂ်ႇ + တၢင်းတိူၵ်ႈ ၵၢၼ်သွၼ်ႉ + လေႃးထွၼ်ၽႃႇၸဵင်ႇ + တူဝ်ၼပ်ႉ ဢၼ်မီးၼိူဝ်ထႅဝ် + ႁၢင်ႈတူဝ်လိၵ်ႈမိူဝ်ႈၵွၼ်ႇ + တူဝ်ၶပ်ႉမၢႆ + တူဝ်ၼပ်ႉပုၼ်ႈတေႃႇ + တူဝ်လိၵ်ႈလူင် သႅၼ်းလဵၵ်ႉ + တူဝ်ၼပ်ႉဢၼ်ပဵၼ်လွၵ်းသဵၼ်ႈ + သုၼ်ထႅဝ်ၵိူင်း + + + und shn + + ၸႅၼ်ႇတေႇယႃႇ + + + ဢၢႆႇရိၼ်း + ဢႅတ်ႉလႃႇ + + + မေႇရီႇသူး + ႁေးမိသျ် + ဝတ်ႉသၼ်ႇ + + + မိတ်ႇသတႃႇ + ပႃႇထရမ်ႇ ဝီလ်ပႃႇၾူတ်ႉ + ပႃတီႇ + ႁႅၼ်ႇၼရီႇ ရေႃးပၢတ်ႉ + ∅∅∅ + ဝုတ်ႉသ်တႃႇ + ∅∅∅ + ၵျူႇၼီႇယႃႇ + မေႃယႃ + + + သိၼ်းပၢတ်ႉ + + + ၶေးတႃႇ + မူးလႃႇ + + + ၸၸီးလီႇယႃႇ + ႁေးမိသျ် + သတူႇပႃႇ + + + ၶူးမေႃယႃ + ဢေႇတႃႇ ၶူဝ်ႇၼီႇလီႇယႃႇ + ၼီးဢႄႇလ် + သီႇသႃႇ မႃႇတိၼ်ႇ + ဝွၼ်း + ပရူဝ်ႇလ် + ၵွၼ်ႇၸႃႇလႅတ်ႉ တူဝ်ႇမိၼ်ႇၵူဝ် + ၵျူႇၼီႇယႃႇ + မေႃယႃ + + diff --git a/make/data/cldr/common/main/si.xml b/make/data/cldr/common/main/si.xml index 6c2531cf14c..0c89e58b884 100644 --- a/make/data/cldr/common/main/si.xml +++ b/make/data/cldr/common/main/si.xml @@ -45,6 +45,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ අසර්බයිජාන් අසීරී බාෂ්කිර් + බලුචි බැලිනීස් බසා බෙලරුසියානු @@ -235,6 +236,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ බාෆියා කොලොග්නියන් කුර්දි + කුර්දි + කුර්මන්ජි කුමික් කොමි කෝනීසියානු @@ -631,6 +634,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ චීනය කොළොම්බියාව ක්ලීපර්ටන් දූපත + සාර්ක් කොස්ටරිකාව කියුබාව කේප් වර්ඩ් @@ -861,47 +865,87 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ වේල්සය - දින දර්ශනය + දින දසුන මුදල් ආකෘති පෙළගැස්ම විනිමය - පැය චක්‍රය + ඉමොජි ඉදිරිපත් කිරීම + පැය චක්‍රය (12 එදිරිව 24) පේළි කඩන විලාසය + වචන තුළ රේඛා බිඳීම් මිනුම් ක්‍රමය ඉලක්කම් + කෙටි යෙදු. පසු වාක්‍ය බිඳීම - බොදු දින දර්ශනය - චීන දින දර්ශනය - කොප්ටික් දින දර්ශනය - ඩැන්ගී දින දර්ශනය - ඉතියෝපියානු දින දර්ශනය - ඉතියෝපික් ඇමේට් ඇලම් දින දර්ශනය - ග්‍රෙගරියානු දින දර්ශනය - හීබෲ දින දර්ශනය - හිජ්රි දින දර්ශනය - හිජ්රි දින දර්ශනය (වගුව, සිවිල් වීර කාව්‍යය) - හිජ්රි දින දර්ශනය (උම් අල් කුරා) - අඑස්ඔ-8601 දින දර්ශනය - ජපන් දින දර්ශනය - පර්සියානු දින දර්ශනය - මින්ගා දින දර්ශනය + බෞද්ධ දින දසුන + බෞද්ධ + චීන දින දසුන + චීන + කොප්ටික් දින දසුන + කොප්ටික් + ඩැන්ගී දින දසුන + ඩැන්ගී + ඉතියෝපියානු දින දසුන + ඉතියෝපියානු + ඉතියෝපියානු ඇමෙට් ඇලෙම් දින දසුන + ඉතියෝපියානු ඇමෙට් ඇලෙම් + ග්‍රෙගරියානු දින දසුන + ග්‍රෙගරියානු + හීබෲ දින දසුන + හීබෲ + හිජ්රි දින දසුන + හිජ්රි + හිජ්රි දින දසුන (වගුව, සිවිල් වීර කාව්‍යය) + හිජ්රි දින දසුන (වගුව, සිවිල් වීර කාව්‍යය) + හිජ්රි දින දසුන (උම් අල් කුරා) + හිජ්රි (උම් අල් කුරා) + අයිඑස්ඕ-8601 දින දසුන + ජපන් දින දසුන + ජපන් + පර්සියානු දින දසුන + පර්සියානු + මින්ගා දින දසුන + මින්ගා ගිණුම්කරණ මුදල් ආකෘති + ගිණුම්කරණය සම්මත මුදල් ආකෘති - ශබ්දකෝෂ පෙළගැස්ම - යුනිකේත පෙරනිමි පෙළගැස්ම + සම්මත + අකාරාදිය පෙළගැස්ම + අකාරාදිය + පෙරනිමි යුනිකේත පෙළගැස්ම + පෙරනිමි යුනිකේත සාමාන්‍ය සෙවීම + සෙවීම සම්මත පෙළගැස්ම - පැය 12 ක්‍රමය - පැය 12 ක්‍රමය + සම්මත + පෙරනිමිය + ඉමොජි + පෙළ + පැය 12 ක්‍රමය (0–11) + 12 (0–11) + පැය 12 ක්‍රමය (1–12) + 12 (1–12) පැය 24 ක්‍රමය - පැය 24 ක්‍රමය + 24 (0–23) + පැය 24 ක්‍රමය (1–24) + 24 (1–24) ලිහිල් කඩන විලාසය + ලිහිල් සාමාන්‍ය පේළි කඩන විලාසය + සාමාන්‍ය තද පේළි කඩන විලාසය + දැඩි + සියල්ල බිඳ දමන්න + සියල්ල තබා ගන්න + සාමාන්‍ය + වාක්‍ය ඛණ්ඩ තුළ තබා ගන්න මෙට්‍රික් ක්‍රමය + මෙට්‍රික් රාජකීය මිනුම් ක්‍රමය + එරා එජ මිනුම් ක්‍රමය + එජ ඉන්දු අරාබි ඉලක්කම් වැඩි කළ ඉන්දු අරාබි ඉලක්කම් ඇමරිකානු සංඛ්‍යාංකන @@ -942,6 +986,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ තායි ඉලක්කම් ටිබෙට ඉලක්කම් වායි ඉලක්කම් + ක්‍රියාවිරහිතයි + ක්‍රියාත්මකයි මෙට්රික් @@ -987,7 +1033,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - GGGGG y-MM-dd + G y-MM-dd @@ -1028,12 +1074,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h E B h:mm E B h:mm:ss d E + E a h a h a h.mm a h.mm.ss + v a h M-d M-d, E MMM d E @@ -1116,62 +1165,90 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ජන - පෙබ - මාර්තු - අප්‍රේල් - මැයි - ජූනි - ජූලි - අගෝ - සැප් - ඔක් - නොවැ - දෙසැ + දුරුතු + නවම් + මැදින් + බක් + වෙසක් + පොසොන් + ඇසළ + නිකිණි + බිනර + වප් + ඉල් + උඳුවප් + + + දු + + මැ + + වෙ + පො + + නි + බි + + + - ජනවාරි - පෙබරවාරි - මාර්තු - අප්‍රේල් - මැයි - ජූනි - ජූලි - අගෝස්තු - සැප්තැම්බර් - ඔක්තෝබර් - නොවැම්බර් - දෙසැම්බර් + දුරුතු + නවම් + මැදින් + බක් + වෙසක් + පොසොන් + ඇසළ + නිකිණි + බිනර + වප් + ඉල් + උඳුවප් - ජන - පෙබ - මාර් - අප්‍රේල් - මැයි - ජූනි - ජූලි - අගෝ - සැප් - ඔක් - නොවැ - දෙසැ + දුරුතු + නවම් + මැදින් + බක් + වෙසක් + පොසොන් + ඇසළ + නිකිණි + බිනර + වප් + ඉල් + උඳුවප් - - පෙ - මා - - මැ - ජූ - ජූ - - සැ - - නෙ - දෙ + දු + + මැ + + වෙ + පො + + නි + බි + + + + + + දුරුතු + නවම් + මැදින් + බක් + වෙසක් + පොසොන් + ඇසළ + නිකිණි + බිනර + වප් + ඉල් + උඳුවප් @@ -1327,6 +1404,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} දින {0} + + {1} දින {0} + @@ -1335,6 +1415,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} දින {0} + + {1} දින {0} + @@ -1343,6 +1426,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1351,9 +1437,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + + B h + B h:mm + B h:mm:ss + E B h + E B h:mm + E B h:mm:ss d E + E a h E a h.mm E HH.mm E a h.mm.ss @@ -1363,10 +1459,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH.mm a h.mm.ss HH.mm.ss - h.mm.ss a v - HH.mm.ss v - h.mm a v - HH.mm v + v a h:mm:ss + v HH.mm.ss + v a h.mm + v HH.mm + v a h + v HH'h' M-d M-d, E MMM d E @@ -1758,7 +1856,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - මිනිත්තුව + විනාඩිය මෙම මිනිත්තුව මිනිත්තු {0}කින් @@ -1770,7 +1868,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - මිනි. + විනා. + + + විනා. තත්පරය @@ -1798,6 +1899,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ +HH.mm;-HH.mm ග්‍රිමවේ{0} ග්‍රිමවේ + ග්‍රිමවේ+? {0} වේලාව {0} දිවාආලෝක වේලාව {0} සම්මත වේලාව @@ -2154,6 +2256,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ඊස්ටර් + + කොයිහයික් + පුන්ටා ඇරිනාස් @@ -2419,9 +2524,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ නොම් පෙන් - එන්ඩර්බරි - - කැන්ටන් @@ -3091,9 +3193,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - බටහිර අප්‍රිකානු වේලාව - බටහිර අප්‍රිකානු සම්මත වේලාව - බටහිර අප්‍රිකානු ග්‍රීෂ්ම කාලය + බටහිර අප්‍රිකානු වේලාව @@ -3443,6 +3543,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ගයනා වේලාව + + + හවායි-අලෙයුතියාන් සම්මත වේලාව + + හවායි-අලෙයුතියාන් වේලාව @@ -4021,7 +4126,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4573,6 +4677,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ නැගෙනහිර කැරිබියානු ඩොලර් + + කැරිබියානු ගිල්ඩර් + කැරිබියානු ගිල්ඩර් + කැරිබියානු ගිල්ඩර්ස් + සිෆ්එ ෆ්රෑන්ක් බිසීඊඑඔ සිෆ්එ @@ -4597,6 +4706,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ සැම්බියානු ක්වාචා + + සිම්බාබ්වේ රත්තරන් + සිම්බාබ්වේ රත්තරන් + සිම්බාබ්වේ රත්තරන් + {0}+ @@ -4604,7 +4718,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} පොතක් ඇත. එය කියවීමි. පොත් {0}ක් ඇත. ඒවා කියවීමි. - {0} වන හැරවුම දකුණට + {0} වෙනි දකුණට යන්න. @@ -4774,7 +4888,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ අයිතම - + + කොටස + කොටස {0} + කොටස {0} + + මිලියනයට කොටස් මිලියනයට කොටස් {0} මිලියනයට කොටස් {0} @@ -4792,6 +4911,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} පර්මැරියඩ් {0} පර්මැරියඩ් + + ග්ලූකෝස් + ග්ලූකෝස් {0} + ග්ලූකෝස් {0} + කිලෝ මීටරයට ලීටරය කිලෝ මීටරයට ලීටරය {0} @@ -5238,6 +5362,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ රසදිය මිලිමීටර {0} රසදිය මිලිමීටර {0} + + රසදිය + රසදිය {0} + රසදිය {0} + වර්ග අඟලකට රාත්තල් වර්ග අඟලකට රාත්තල් {0} @@ -5399,6 +5528,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ මෙට්‍රික් කෝප්ප {0} මෙට්‍රික් කෝප්ප {0} + + මෙට්‍රික් තරල අවුන්ස + මෙට්‍රික් තරල අවුන්ස {0} + මෙට්‍රික් තරල අවුන්ස {0} + අක්කර-අඩි {0} අක්කර-අඩි {0} @@ -5480,21 +5614,83 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ඉම්පීරියල් නැළිය ඉම්පීරියල් නැළි {0} + + ස්ටරේඩියන + ස්ටරේඩියන {0} + ස්ටරේඩියන {0} + + + කැටල් + කැටල් {0} + කැටල් {0} + + + කූලෝම්බ් + කූලෝම්බ් {0} + කූලෝම්බ් {0} + + + ෆැරඩ + ෆැරඩ {0} + ෆැරඩ {0} + + + හෙන්රි + හෙන්රි {0} + හෙන්රි {0} + + + සීමන් + සීමන් {0} + සීමන් {0} + + + කැලරි [IT] + කැලරි [IT] {0} + කැලරි [IT] {0} + + + බෙකරල් + බෙකරල් {0} + බෙකරල් {0} + + + සීවර්ට් + සීවර්ට් {0} + සීවර්ට් {0} + + + අළු + අළු {0} + අළු {0} + + + කිලෝග්‍රෑම්-බලය + කිලෝග්‍රෑම්-බලය {0} + කිලෝග්‍රෑම්-බලය {0} + + + ටෙස්ලා + ටෙස්ලා {0} + ටෙස්ලා {0} + + + වේබර + වේබරය {0} + වේබරය {0} + - ආලෝකය {0} ආලෝකය ආලෝකය {0} - + බිලියනයකට කොටස් බිලියනයකට කොටස් {0} බිලියනයකට කොටස් {0} - රාත්‍රිය {0} රාත්‍රිය රාත්‍රිය {0} - {0}/රාත්‍රිය කාර්ඩිනල් දිශාව @@ -5702,7 +5898,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} අයිතමයක් අයිතම {0}ක් - + + කොටස + කොටස {0} + කොටස {0} + + කොටස්/මිලියනය {0} මිලිකො {0} මිලිකො @@ -5718,6 +5919,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} මවුල {0} මවුල + + ග්ලූකෝ + ග්ලූකෝ {0} + ග්ලූකෝ {0} + ලීටරය/කිමී ලී/කිමී {0} @@ -6229,6 +6435,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ර මිමී {0} ර මිමී {0} + + + ර {0} + ර {0} + වඅරා වඅරා {0} @@ -6402,6 +6613,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ මෙකෝ {0} මෙකෝ {0} + + මෙට්‍රි තර අවු. + මෙට්‍රි තර අවු. {0} + මෙට්‍රි තර අවු. {0} + අක්කර-අඩි අක්-අඩි {0} @@ -6499,12 +6715,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ඉම්පීරියල් නැළි {0} ඉම්පීරියල් නැළි {0} + + ස්ට + ස්ට {0} + ස්ට {0} + + + කැට + කැට {0} + කැට {0} + + + කූ + කූ {0} + කූ {0} + + + ෆැ + ෆැ {0} + ෆැ {0} + + + හෙ + හෙ {0} + හෙ {0} + + + සී + සී {0} + සී {0} + + + කැල [IT] + කැල [IT] {0} + කැල [IT] {0} + + + බෙක + බෙක {0} + බෙක {0} + + + සීව + සීව {0} + සීව {0} + + + අළු + අළු {0} + අළු {0} + + + කිග්‍රෑබ + කිග්‍රෑබ {0} + කිග්‍රෑබ {0} + + + ටෙ + ටෙ {0} + ටෙ {0} + + + වේබ + වේබ {0} + වේබ {0} + ආලෝකය ආලෝකය {0} ආලෝකය {0} - + කොටස්/බිලියනය බිකො {0} බිකො {0} @@ -6608,7 +6889,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}වඅඟ² {0}/වඅඟ² - + + කොටස + කොටස {0} + කොටස {0} + + මිලිකො @@ -6617,6 +6903,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + ග්ලූ + ග්ලූ {0} + ග්ලූ {0} + ලී/කිමී100 {0} ලී/කිමී100 {0} @@ -6744,6 +7035,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ඇ {0} ඇ {0} + + + ර {0} + ර {0} + " ර ර {0}" @@ -6753,10 +7049,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ මි.බා. {0} මි.බා. {0} - - {0} hPa - {0} hPa - මී/තත් @@ -6785,24 +7077,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ අල්³ + + මෙ ත අ. + මෙ ත අ. {0} + මෙ ත අ. {0} + ඉම්පී. අතුරුපස හැඳි - - ආලෝකය - ආලෝකය {0} - ආලෝකය {0} + + ස්ට + ස්ට {0} + ස්ට {0} - + + කැට + කැට {0} + කැට {0} + + + කූ + කූ {0} + කූ {0} + + + ෆැ + ෆැ {0} + ෆැ {0} + + + හෙ + හෙ {0} + හෙ {0} + + + සී + සී {0} + සී {0} + + + කැ [IT] + කැ [IT] {0} + කැ [IT] {0} + + + බෙක + බෙක {0} + බෙක {0} + + + සීව + සීව {0} + සීව {0} + + + අළු + අළු {0} + අළු {0} + + + කිග්‍රෑබ + කිග්‍රෑබ {0} + කිග්‍රෑබ {0} + + + ටෙ + ටෙ {0} + ටෙ {0} + + + වේබ + වේබ {0} + වේබ {0} + + බිකො - බිකො {0} - බිකො {0} - - - රාත්‍රිය - රාත්‍රිය {0} - රාත්‍රිය {0} - {0}/රාත්‍රිය diff --git a/make/data/cldr/common/main/sk.xml b/make/data/cldr/common/main/sk.xml index 735603fd65d..45331d5c8ae 100644 --- a/make/data/cldr/common/main/sk.xml +++ b/make/data/cldr/common/main/sk.xml @@ -288,6 +288,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kolínčina kurdčina + kurdčina + kurmandži kumyčtina kutenajčina komijčina @@ -749,6 +751,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Čína Kolumbia Clipperton + Sark Kostarika Kuba Kapverdy @@ -995,33 +998,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ číselné radenie sila radenia mena + prezentácia emodži hodinový cyklus (12 vs 24) štýl koncov riadka + zlom riadka v slovách merná sústava čísla + veta po skrat. časové pásmo variant miestneho nastavenia súkromné použitie - buddhistický kalendár + budhistický kalendár + budhistický čínsky kalendár + čínsky koptský kalendár + koptský kórejský kalendár + kórejský etiópsky kalendár + etiópsky etiópsky kalendár Amete Alem + etiópsky Amete Alem gregoriánsky kalendár + gregoriánsky židovský kalendár + židovský Indický národný kalendár kalendár podľa hidžry + podľa hidžry kalendár podľa hidžry (občiansky) + podľa hidžry (občiansky) kalendár podľa hidžry (Umm al-Qura) + podľa hidžry (Umm al-Qura) kalendár ISO 8601 japonský kalendár + japonský perzský kalendár + perzský čínsky republikánsky kalendár + čínsky republikánsky účtovný formát meny + účtovný štandardný formát meny + štandardný Radiť symboly Pri radení ignorovať symboly Normálne radenie akcentov @@ -1031,22 +1053,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Najprv radiť veľké písmená Pri radení nerozlišovať veľké a malé písmená Pri radení rozlišovať veľké a malé písmená - tradičné čínske zoradenie – Big5 predchádzajúce zoradenie, kompatibilita + kompatibilita slovníkové zoradenie + slovníkové predvolené zoradenie unicode + predvolené, unicode európske zoradenie - zjednodušené čínske zoradenie – GB2312 lexikografické zoradenie + lexikografické fonetické zoradenie + fonetické zoradenie pchin-jin + pchin-jin všeobecné vyhľadávanie + vyhľadávanie Hľadať podľa počiatočnej spoluhlásky písma Hangul štandardné zoradenie + štandardné zoradenie podľa ťahov + podľa ťahov tradičné poradie zoradenia + tradičné zoradenie podľa znakov radikál + podľa znakov radikál zoradenie zhuyin + zhuyin Radiť bez normalizácie Radenie podľa normalizovaného kódovania Unicode Radiť číslice jednotlivo @@ -1059,18 +1091,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ celá šírka polovičná šírka Číslice + predvolené + emodži + text 12-hodinový cyklus (0 – 11) + 12 (0 – 11) 12-hodinový cyklus (1 – 12) + 12 (1 – 12) 24-hodinový cyklus (0 – 23) + 24 (0 – 23) 24-hodinový cyklus (1 – 24) + 24 (1 – 24) voľný štýl koncov riadka + voľný bežný štýl koncov riadka + bežný presný štýl koncov riadka + presný + zalomiť všetko + ponechať všetko + bežné + ponechať vo frázach americká transliterácia BGN medzinárodná transliterácia GEGN metrická sústava + metrická britská merná sústava + britská americká merná sústava + americká arabsko-indické číslice rozšírené arabsko-indické číslice arménske číslice @@ -1115,6 +1164,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tibetské číslice Tradičné číslovky vaiské číslice + vypnuté + zapnuté metrický @@ -1154,9 +1205,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1281,12 +1329,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d. M. y G E d. M. y G d. M. y G - h a H h:mm a H:mm h:mm:ss a H:mm:ss + h a, v + HH 'h', v M. d. M. E d. M. @@ -1724,7 +1773,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d. M. y G E d. M. y G d. M. y G - h a H h:mm a H:mm @@ -1811,7 +1859,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d. M. y – E d. M. y G - h a – h a h – h a @@ -1836,7 +1883,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm – H:mm v - h a – h a v h – h a v @@ -2636,11 +2682,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ časové pásmo {0} - - HST - HST - HDT - Honolulu @@ -2657,18 +2698,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kábul - - Tirana - Jerevan Šówa - - Córdoba - Viedeň @@ -2690,24 +2725,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Brunej - - Eirunepé - - - Cuiabá - - - Santarém - - - Belém - - - São Paulo - - - Maceió - Kokosové ostrovy @@ -2723,9 +2740,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Šanghaj - - Bogotá - Kostarika @@ -2741,9 +2755,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Praha - - Büsingen - Berlín @@ -2854,9 +2865,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Phnom Pénh - - Enderbury - Komory @@ -2932,9 +2940,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Maldivy - - Mazatlán - Bahia Banderas @@ -2944,9 +2949,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kučing - - Nouméa - Káthmandu @@ -3019,9 +3021,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Rijád - - Mahé - Chartúm @@ -3052,15 +3051,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Damask - - N’Djamena - Kergueleny - - Lomé - Dušanbe @@ -3126,9 +3119,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - západoafrický čas - západoafrický štandardný čas - západoafrický letný čas + západoafrický čas @@ -3521,6 +3512,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ guyanský čas + + + havajsko-aleutský štandardný čas + + havajsko-aleutský čas @@ -4158,10 +4154,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -6163,6 +6160,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ východokaribského dolára východokaribských dolárov + + karibský gulden + karibský gulden + karibské guldeny + karibského guldena + karibských guldenov + Cg + SDR @@ -6338,6 +6343,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ zimbabwianskeho dolára (1980 – 2008) zimbabwianskych dolárov (1980 – 2008) + + zimbabwiansky zlatý + zimbabwiansky zlatý + zimbabwianske zlaté + zimbabwianskeho zlatého + zimbabwianskych zlatých + zimbabwiansky dolár (2009) zimbabwiansky dolár (2009) @@ -7087,7 +7099,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} položkami {0} položkách - + + častice + {0} častica + {0} častice + {0} častice + {0} častíc + + feminine milióntiny {0} milióntina @@ -7227,6 +7246,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} molmi {0} moloch + + glukózy + inanimate litre na kilometer @@ -9426,6 +9448,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetrami ortuťového stĺpca {0} milimetroch ortuťového stĺpca + + ortute + libry sily na štvorcový palec {0} libra sily na štvorcový palec @@ -10178,6 +10203,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metrickými hrnčekmi {0} metrických hrnčekoch + + metrické tekuté unce + {0} metrická tekutá unca + {0} metrické tekuté unce + {0} metrickej tekutej unce + {0} metrických tekutých uncí + akrové stopy {0} akrová stopa @@ -10299,7 +10331,70 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} britského kvartu {0} britských kvartov - + + steradiány + {0} steradián + {0} steradiány + {0} steradiánu + {0} steradiánov + + + kataly + {0} katal + {0} kataly + {0} katalu + {0} katalov + + + coulomby + {0} coulomb + {0} coulomby + {0} coulombu + {0} coulombov + + + farady + {0} farad + {0} farady + {0} faradu + {0} faradov + + + henry + {0} henry + {0} henry + {0} henry + {0} henry + + + siemensy + {0} siemens + {0} siemensy + {0} siemensu + {0} siemensov + + + kalória [IT] + {0} kalória [IT] + {0} kalórie [IT] + {0} kalórie [IT] + {0} kalórií [IT] + + + kilopondy + {0} kilopond + {0} kilopondy + {0} kilopondu + {0} kilopondov + + + webery + {0} weber + {0} webery + {0} weberu + {0} weberov + + feminine častice na miliardu {0} častica na miliardu @@ -10329,7 +10424,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - noci {0} noc {0} noc noci @@ -10354,7 +10448,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} nocí {0} nocami {0} nociach - {0}/noc @@ -10429,6 +10522,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + l/km {0} l/km @@ -10711,6 +10807,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mc + + fl oz m + {0} fl oz m + {0} fl oz m + {0} fl oz m + {0} fl oz m + gal {0} gal @@ -10778,6 +10881,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt Imp {0} qt Imp + + cal-IT + + + kp + {0} kp + {0} kp + {0} kp + {0} kp + noci {0} noc @@ -10808,6 +10921,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ac + + Glc + l/100 km @@ -10838,13 +10954,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} d. {0}/d. - - kWh/100 km - {0} kWh/100 km - {0} kWh/100 km - {0} kWh/100 km - {0} kWh/100 km - bod @@ -10866,13 +10975,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mb {0} mb - - noci - {0} noc - {0} noci - {0} noci - {0} nocí - {0}/noc + + fl oz m + {0} fl oz m + {0} fl oz m + {0} fl oz m + {0} fl oz m + + + cal-IT + + + kp + {0} kp + {0} kp + {0} kp + {0} kp diff --git a/make/data/cldr/common/main/sl.xml b/make/data/cldr/common/main/sl.xml index 9dfffbeee15..29a34200ee1 100644 --- a/make/data/cldr/common/main/sl.xml +++ b/make/data/cldr/common/main/sl.xml @@ -282,6 +282,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafia kölnsko narečje kurdščina + kurdščina + kurmanščina kumiščina kutenajščina komijščina @@ -759,7 +761,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Avstrija Avstralija Aruba - Ålandski otoki + Alandski otoki Azerbajdžan Bosna in Hercegovina Barbados @@ -770,7 +772,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bahrajn Burundi Benin - Saint Barthélemy + Sveti Bartolomej Bermudi Brunej Bolivija @@ -798,6 +800,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kitajska Kolumbija Otok Clipperton + Sark Kostarika Kuba Zelenortski otoki @@ -842,12 +845,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Grenlandija Gambija Gvineja - Guadeloupe + Gvadelup Ekvatorialna Gvineja Grčija Južna Georgia in Južni Sandwichevi otoki Gvatemala - Guam + Gvam Gvineja Bissau Gvajana Posebno upravno območje Ljudske republike Kitajske Hongkong @@ -878,15 +881,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kambodža Kiribati Komori - Saint Kitts in Nevis + Sveti Krištof in Nevis Severna Koreja Južna Koreja Kuvajt - Kajmanski otoki + Kajmanji otoki Kazahstan Laos Libanon - Saint Lucia + Sveta Lucija Lihtenštajn Šrilanka Liberija @@ -899,21 +902,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Monako Moldavija Črna gora - Saint Martin + Francoski Sveti Martin Madagaskar Marshallovi otoki Severna Makedonija Mali Mjanmar (Burma) Mongolija - Posebno upravno območje Ljudske republike Kitajske Macao - Macao + Posebno upravno območje Kitajske Makav + Makav Severni Marianski otoki Martinik Mavretanija Montserrat Malta - Mauritius + Mavricij Maldivi Malavi Mehika @@ -940,13 +943,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Filipini Pakistan Poljska - Saint Pierre in Miquelon + Sveta Peter in Mihael Pitcairn Portoriko Palestinsko ozemlje Palestina Portugalska - Palau + Palav Paragvaj Katar Ostala oceanija @@ -971,9 +974,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Somalija Surinam Južni Sudan - Sao Tome in Principe + Sveti Tomaž in Princ Salvador - Sint Maarten + Nizozemski Sveti Martin Sirija Esvatini Svazi @@ -984,7 +987,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Togo Tajska Tadžikistan - Tokelau + Tokelav Timor-Leste Vzhodni Timor Turkmenistan @@ -1006,7 +1009,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Urugvaj Uzbekistan Vatikan - Saint Vincent in Grenadine + Sveti Vincencij in Grenadine Venezuela Britanski Deviški otoki Ameriški Deviški otoki @@ -1076,35 +1079,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Številsko razvrščanje Moč razvrščanja valuta + Prikaz emodžija urni prikaz (12 ali 24) Slog preloma vrstic + Prelomi vrstic znotraj besed merski sistem številke + Konec stavka po okrajšavi Časovni pas Različica območnih nastavitev Zasebna-uporaba budistični koledar + budistični kitajski koledar + kitajski koptski koledar + koptski stari korejski koledar + stari korejski etiopski koledar + etiopski etiopsko ametsko alemski koledar + etiopsko ametsko alemski gregorijanski koledar + gregorijanski hebrejski koledar + hebrejski indijanski koledar islamski koledar + islamski islamski civilni koledar + islamski civilni islamski koledar ( Saudova Arabija, opazovalni) islamski koledar (tabelarni, astronomska epoha) islamski koledar Umm al-Qura + islamski (Umm al-Qura) koledar ISO-8601 japonski koledar + japonski perzijski koledar + perzijski koledar Minguo + Minguo oblika zapisa valute v računovodstvu + računovodska standardna oblika zapisa valute + standardna Razvrščanje simbolov Razvrščanje s prezrtjem simbolov Navadno razvrščanje naglasov @@ -1114,23 +1136,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Razvrščanje velikih črk najprej Razvrščanje ne glede na velike/male črke Razvrščanje ob upoštevanju velikih/malih črk - razvrščanje po sistemu tradicionalne kitajščine - Big5 prej uporabljeno razvrščanje za združljivost + združljivostno slovarsko razvrščanje - Privzeto razvrščanje Unicode + slovarsko + privzeto razvrščanje Unicode + privzeto Unicode razvrščanje čustvenčkov evropska pravila razvrščanja - razvrščanje po sistemu poenostavljene kitajščine - GB2312 razvrščanje po sistemu telefonskega imenika + po sistemu telefonskega imenika fonetično razvrščanje + fonetično razvrščanje po sistemu pinjin + po sistemu pinjin Splošno iskanje + splošno Iskanje po začetnem soglasniku hangul - Standardno razvrščanje + standardno razvrščanje + standardno razvrščanje po zaporedju pisanja pismenk + po zaporedju pisanja pismenk razvrščanje po tradicionalnem sistemu + po tradicionalnem sistemu razvrščanje po radikalih in potezah + po radikalih in potezah razvrščanje po pismenkah zhuyin + po pismenkah zhuyin Razvrščanje brez normaliziranja Normalizirano razvrščanje Unicode Ločeno razvrščanje številk @@ -1143,18 +1175,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Polna širina Polovična širina Številsko + privzeto + emodži + besedilo 12-urni sistem (0–11) + 12 (0–11) 12-urni sistem (1–12) + 12 (1–12) 24-urni sistem (0–23) + 24 (0–23) 24-urni sistem (1–24) + 24 (1–24) Prosti slog preloma vrstic + Prosti slog Običajni slog preloma vrstic + Običajni slog Strogi slog preloma vrstic + Strogi slog + prelomi vse + obdrži vse + običajno + obdrži v frazah BGN UNGEGN metrični sistem + metrični imperialni merski sistem + ZK merski sistem Združenih držav + ZDA števke ahom arabskoindijske števke razširjene arabskoindijske števke @@ -1232,6 +1281,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tradicionalne številke števke vai Warang Citi števke + Izklopljeno + Vklopljeno metrični @@ -1250,11 +1301,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [A B C Č Ć D Đ E F G H I J K L M N O P Q R S Š T U V W X Y Z Ž] [, . % ‰ + − 0 1 2 3 4 5 6 7 8 9] [\- ‑ – , ; \: ! ? . … ' "„‟ « » ( ) \[ \] \{ \} @ *] + [{<>\\|/#\&}] [\: ∶] - [££ ₤] [₹ {Rs}₨] @@ -1321,6 +1372,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'ob' {0} + + {1} 'ob' {0} + @@ -1329,6 +1383,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'ob' {0} + + {1} 'ob' {0} + @@ -1337,6 +1394,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1345,11 +1405,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + + E, h B E, h:mm B E, h:mm:ss B E, d. + E, h a E, h:mm a E, HH:mm E, h:mm:ss a @@ -1357,10 +1422,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ y G M/y G d. M. y GGGGG + E, d. M. y G MMM y G d. MMM y G E, d. MMM y G - h a h:mm a h:mm:ss a d. M. @@ -1654,7 +1719,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ jut. dop. pop. - zveč. + več. noč @@ -1715,7 +1780,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - d. M. yy + d. M. y yyMMd @@ -1750,6 +1815,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'ob' {0} + + {1} 'ob' {0} + @@ -1758,6 +1826,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'ob' {0} + + {1} 'ob' {0} + @@ -1771,7 +1842,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d. + E, h B E, d. + E, h a E, h:mm a E, HH:mm E, h:mm:ss a @@ -1779,11 +1852,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ y G MMM y G d. M. y GGGGG + E, d. M. y G MMM y G d. MMM y G E, d. MMM y G - h a - HH'h' h:mm a h:mm:ss a h:mm:ss a v @@ -1832,16 +1904,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MM. y–MM. y GGGGG - d. MM. y–d. MM. y GGGGG - d. MM. y GGGGG–d. MM. y GGGGG - d. MM. y–d. MM. y GGGGG - d. MM. y–d. MM. y GGGGG + d.–d. M. y GGGGG + d. M. y GGGGG–d. M. y GGGGG + d. M. y–d. M. y GGGGG + d. M. y–d. M. y GGGGG - E, d. MM. y–E, d. MM. y GGGGG - E, d. MM. y GGGGG–E, d. MM. y GGGGG - E, d. MM. y–E, d. MM. y GGGGG - E, d. MM. y–E, d. MM. y GGGGG + E, d. M. y–E, d. M. y GGGGG + E, d. M. y GGGGG–E, d. M. y GGGGG + E, d. M. y–E, d. M. y GGGGG + E, d. M. y–E, d. M. y GGGGG MMM y G–MMM y G @@ -1862,7 +1934,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a–h a - h–h a H–H @@ -1885,10 +1956,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm–H:mm v H:mm–H:mm v - - h a – h a v - h–h a v - H–H v @@ -1919,7 +1986,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ M. y–M. y - d. M. y–d. M. y + d.–d. M. y d. M.–d. M. y d. M. y–d. M. y @@ -1938,7 +2005,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d. MMM y–d. MMM y - E, d. MMM–E, d. MMM y + E, d.–E, d. MMM y E, d. MMM–E, d. MMM y E, d. MMM y–E, d. MMM y @@ -2546,9 +2613,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ +HH.mm;-HH.mm GMT {0} - {0} čas - {0} poletni čas - {0} standardni čas + GMT +? + {0} (lokalni čas) + {0} (poletni čas) + {0} (standardni čas) Honolulu @@ -2569,9 +2637,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Angvila - - Tirana - Erevan @@ -2742,7 +2807,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Biškek - Enderbury + Kanton Komori @@ -2970,9 +3035,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Zahodnoafriški čas - Zahodnoafriški standardni čas - Zahodnoafriški poletni čas + Zahodnoafriški čas @@ -3329,6 +3392,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Gvajanski čas + + + Havajski aleutski standardni čas + + Havajski aleutski čas @@ -3755,6 +3823,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Čas: Otok Chuuk + + + Turški čas + Turški standardni čas + Turški poletni čas + + Turkmenistanski čas @@ -3868,11 +3943,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 000 tisoč 0 milijon 0 milijona - 0 milijone + 0 milijoni 0 milijonov 00 milijon 00 milijona - 00 milijoni + 00 milijona 00 milijonov 000 milijon 000 milijona @@ -3944,9 +4019,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -5373,8 +5450,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ venezuelskih bolivarjev - vientnamski dong - vientnamski dong + vietnamski dong + vietnamski dong vietnamska donga vietnamski dongi vietnamskih dongov @@ -5426,6 +5503,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ vzhodnokaribskih dolarjev XCD + + karibski gulden + karibski gulden + karibska guldna + karibski guldni + karibskih guldnov + posebne pravice črpanja @@ -5516,6 +5600,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ zimbabvejski dolar + + zimbabvejsko zlato + zimbabvejsko zlato + zimbabvejska zlata + zimbabvejska zlata + zimbabvejsko zlato + zimbabvejski dolar (2009) @@ -5652,7 +5743,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kvadratni {0} kvadratne {0} kvadratno {0} - kvadratnem {0} + kvadratni {0} kvadratni {0} kvadratni {0} kvadratnemu {0} @@ -5689,7 +5780,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kvadratnih {0} kvadratnimi {0} kvadratnih {0} - kvadratne {0} + kvadratni {0} kvadratne {0} kvadratnim {0} kvadratnih {0} @@ -6246,7 +6337,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} elementi {0} elementih - + + deli + {0} del + {0} dela + {0} deli + {0} delov + + masculine delci na milijon {0} delec na milijon @@ -6384,6 +6482,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} moli {0} molih + + glukoze + {0} glukoze + {0} glukoze + {0} glukoze + {0} glukoze + masculine litri na kilometer @@ -7576,8 +7681,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine - {0} emov - {0} emov + {0} em + {0} em {0} emu {0} ema {0} emom @@ -8033,7 +8138,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - točke {0} točka {0} točko {0} točki @@ -8559,6 +8663,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetri živega srebra {0} milimetrih živega srebra + + živega srebra + {0} živega srebra + {0} živega srebra + {0} živega srebra + {0} živega srebra + funti na kvadratni palec {0} funt na kvadratni palec @@ -9258,7 +9369,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine metrične pinte {0} metrična pinta - {0} metrična pinta + {0} metrično pinto {0} metrični pinti {0} metrične pinte {0} metrično pinto @@ -9310,6 +9421,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metričnimi skodelicami {0} metričnih skodelicah + + metrične tekočinske unče + {0} metrična tekočinska unča + {0} metrični tekočinski unči + {0} metrične tekočinske unče + {0} metričnih tekočinskih unč + aker-čevelj {0} aker-čevelj @@ -9409,9 +9527,99 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. kvarti {0} imp. kvartov + + steradiani + {0} steradian + {0} steradiana + {0} steradiani + {0} steradianov + + + katali + {0} katal + {0} katala + {0} katali + {0} katalov + + + kuloni + {0} kulon + {0} kulona + {0} kuloni + {0} kulonov + + + faradi + {0} farad + {0} farada + {0} faradi + {0} faradov + + + henri + {0} henri + {0} henrija + {0} henriji + {0} henrijev + + + simens + {0} simens + {0} simensa + {0} simensi + {0} simensov + + + mednarodne kalorije + {0} mednarodna kalorija + {0} mednarodni kaloriji + {0} mednarodne kalorije + {0} mednarodnih kalorij + + + bekereli + {0} bekerel + {0} bekerela + {0} bekereli + {0} bekerelov + + + sivert + {0} sivert + {0} siverta + {0} siverti + {0} sivertov + + + grej + {0} grej + {0} greja + {0} greji + {0} grejev + + + kilopondi + {0} kilopond + {0} kiloponda + {0} kilopondi + {0} kilopondov + + + tesla + {0} tesla + {0} tesli + {0} tesle + {0} tesel + + + veber + {0} veber + {0} vebra + {0} vebri + {0} vebrov + feminine - svetloba {0} svetloba {0} svetlobo {0} svetlobi @@ -9437,7 +9645,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} svetlobami {0} svetlobah - + masculine delci na milijardo {0} delec na milijardo @@ -9467,7 +9675,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - noči {0} noč {0} noč {0} noči @@ -9560,6 +9767,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} elementi {0} elementov + + del + {0} del + {0} dela + {0} deli + {0} delov + odstotek {0} % @@ -9580,6 +9794,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ‱ {0} ‱ + + Glc + l/km {0} l/km @@ -9686,7 +9903,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ J - {0} emov + {0} em {0} ema {0} emi {0} emov @@ -9839,6 +10056,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} m. skod. {0} m. skod. + + m. fl. oz. + {0} m. fl. oz. + {0} m. fl. oz. + {0} m. fl. oz. + {0} m. fl. oz. + bušel @@ -9938,6 +10162,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. qt {0} imp. qt + + cal-IT + + + kp + {0} kp + {0} kp + {0} kp + {0} kp + svetloba {0} svetloba @@ -9965,9 +10199,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dunum + + del + {0} del + {0} dela + {0} deli + {0} delov + % + + Glc + {0} bajt {0} bajta @@ -10010,7 +10254,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} s - {0} emov + {0} em {0} ema {0} emi {0} emov @@ -10039,6 +10283,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} m. sk. {0} m. sk. + + m. fl. oz. + {0} m. fl. oz. + {0} m. fl. oz. + {0} m. fl. oz. + {0} m. fl. oz. + des. žl. {0} des. žl. @@ -10053,20 +10304,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. des. žl. {0} imp. des. žl. - - svetloba - {0} svetloba - {0} svetlobi - {0} svetlobe - {0} svetlob + + cal-IT + + + kp + {0} kp + {0} kp + {0} kp + {0} kp - noči {0} n {0} n {0} n {0} n - {0}/noč diff --git a/make/data/cldr/common/main/smn.xml b/make/data/cldr/common/main/smn.xml index 4127fb6e100..39c4c67aa5d 100644 --- a/make/data/cldr/common/main/smn.xml +++ b/make/data/cldr/common/main/smn.xml @@ -1245,6 +1245,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ {0} {1} diff --git a/make/data/cldr/common/main/so.xml b/make/data/cldr/common/main/so.xml index 487a3476f90..dd8d382e5f8 100644 --- a/make/data/cldr/common/main/so.xml +++ b/make/data/cldr/common/main/so.xml @@ -40,6 +40,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic U dhashay Aymar Asarbayjan Bashkir + Baluchi U dhashay Baline Basaa Beleruusiyaan @@ -223,6 +224,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bafia Kologniyaan Kurdishka + Kurdish + Kurmanji Kumyk Komi Kornish @@ -723,6 +726,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Shiinaha Koloombiya Jasiiradda Kilibarton + Sark Costa Rica Kuuba Jasiiradda Kayb Faarde @@ -1003,58 +1007,96 @@ CLDR data files are interpreted according to the LDML specification (http://unic Habka Lacagta Kala Soocidda Dalabka Lacagta + Soo bandhiga Imoji Wareegga Saacadda (12 ilaa 24) Habka Jebinta Xariiqda + Bar Dhamaadyada Khadadka ee gudaha Erayada Nidaamka Cabbiraadda Tirooyinka + Bar Dhamaadka Jumlada Kadib Xarfo Soo Gaabinta Habeentiriska Buudhist + Qof Buddhi ah Habeetiriska Shiinaha + Shinees Habeentiriska Koptiga + Coptic Habeetiriska Dangi + Dangi Habeentiriska Itoobiya + Ethiopic Taariikhda Itoobiya ee Amete Alem + Ethiopic Amete Alem Habeetiriska Geregoriyaan + Gregorian Habeentiriska yuhuudda + Hebrew Habeentiris Qarameedka Hindiya Habeentiriska islaamka + Taariikhda Islaamiga Taariikhda Islaamiga (shax ahaan, waayo madaniyeed) + Taariikhda Islaamiga (shax ahaan, taariikh madaniyeed jaan go’an) Habeentiriska Islaamka (Sacuudiga, aragtida) Taariikhda Islaamiga (shax ahaan, waayo xiddigeed) + Taariikh Islaamiyeed (shax ahaan, waayo xiddigeed) Taariikhda Islaamiga(Umm al-Qura) + Taariikhda Islaamiga (Umm al-Qura) Habeentiriska ISO-8601 Habeentiriska jabbaanka + Jabaniis Habeentiriska Baarshiyaanka + U dhashay Faariis Habeentiriska Minguwo + Minguo Habka Xisaabinta Lacagta + Xisaabaadka Habka Heerka Lacagta - Isku hagaajinta Shiineeskii Hore - Big5 + Heerka Iswaafajinta Isku hajintii hore Isku hagaajinta Qaamuuska Lambar Sireedka Caalamiga ee Kala Soocidda Dalabka + Lambar Sireedka Caalamiga ee Asaliga ah Isku hagaajinta Emojiga Xeerarka Dalabka Yurub - Isku hagaajinta Farta shiineeska Isku hagaajinta foonbuuga Isku hagaajinta Pinyin Raadinta Guud + Raadi Raadinta Shibanaha Hangul Amarka Kala Soocidda Caadiga ah + Caadiga Isku hagaajinta Farta Isku hagaajin Fareedkii Hore Isku hagaajinta Farta Radical-Stroke Isku hagaajinta Farta Zhuyin + Asaliga + Imoji + Qoraal 12 Saac ee Nidaamka Saacadda (0–12) + 12 (0–11) 12 Saac ee Nidaamka Saacadda (1–12) + 12 (1–12) 24 Saac ee Nidaamka Saacadda (0–23) + 24 (0–23) 24 Saac ee Nidaamka Saacadda (1–24) + 24 (1–24) Habka Jabinta Xariiqda Dabacsan + Dabacsan Habka Jabinta Xariiqda Caadiga ah + Caadi ah Habka Jabinta Xariiqda Adag + Adag + Jebi dhamaan + Heyso dhamaan + Caadi ah + Weedho ahaan ku heyso Nidaamka Metric + Cabbir Nidaamka Cabbirka Imperial-ka + UK Nidaamka Cabbirka ee US + Mareykanka Godadka Ahom Gdadka Carabi-Hindiya Tirooyinka Dheeraadka ah ee Godadka Carabi-Hindiya @@ -1134,6 +1176,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Godadka Vai Godadka Warang Citi Godadka Wancho + Dami + Daar Metrik @@ -1422,11 +1466,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} + + {1} 'ee' {0} + {1} {0} + + {1} 'ee' {0} + @@ -1446,7 +1496,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic y G + M/y G M/d/y GGGGG + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -1727,16 +1779,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic d - - - GH - GD - - - GH - GD - - @@ -1816,6 +1858,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ee' {0} + + {1} 'ee' {0} + @@ -1824,6 +1869,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ee' {0} + + {1} 'ee' {0} + @@ -1832,6 +1880,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ee' {0} + + {1}, {0} + @@ -1840,10 +1891,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + y G + M/y G M/d/y GGGGG + E, M/d/y G MMM y G MMM d, y G E, MMM d, y G @@ -2146,6 +2202,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + M/y G + E, M/d/y G + h B – h B @@ -2247,7 +2307,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Snd Sannadkii la soo dhaafay Sannadkan Sannadka xiga @@ -2371,13 +2430,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic maalinta sannadka - mlnta sndka + maalinta sndka + + + maalinta sndka maalinta toddobaadka - mlnta tdbdka + maalinta tdbdka + + + maalinta tdbdka maalinta-toddobaadka bisha @@ -2960,9 +3025,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Douaala - - Shanghaay - Kosta Riika @@ -3107,9 +3169,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyaana - - Hoong Koong - Tegusigalba @@ -3180,9 +3239,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Benom Ben - Enderburi - - Kantoon @@ -3194,12 +3250,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic St. Kitis - - Boyongyang - - - Soul - Kuweyt @@ -3284,12 +3334,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bamaako - - Hofud - - - Makow - Seyban @@ -3590,9 +3634,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Boort of Isbayn - - Teybey - Daresalaam @@ -3763,9 +3804,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Galbeedka Afrika - Waqtiga Caadiga Ah ee Galbeedka Afrika - Waqtiga Xagaaga ee Galbeedka Afrika + Waqtiga Galbeedka Afrika @@ -3826,9 +3865,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Abiya - Waqtiga Caadiga Ah ee Abiya - Waqtiga Dharaarta ee Abiya + Wakhtiga Samoa + Waqtiga Caadiga Ah ee Samoa + Waqtiga Dharaarta ee Samoa @@ -3948,7 +3987,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Buruney Daarusalaam + Wakhtiga Brunei @@ -3960,7 +3999,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Jamoro + Wakhtiga Caadiga ah ee Chamorro @@ -4003,9 +4042,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Kuuk Aylaanis - Waqtiga Caadiga Ah ee Kuuk Aylaanis - Waqtiga Nus Xagaaga ah ee Kuuk Aylaanis + Wakhtiga Jasiiradaha Cook + Waqtiga Caadiga Ah ee Jasiiradaha Cook + Waqtiga Caadiga Ah ee Jasiiradaha Cook @@ -4017,7 +4056,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Dafis + Wakhtiga Davis @@ -4027,7 +4066,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Iist Timoor + Wakhtiga Timor-Leste @@ -4143,6 +4182,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Waqtiga Guyaana + + + Waqtiga Caadiga Ah ee Hawaay-Alutiyaan + + + HAST + + Waqtiga Hawaay-Alutiyaan @@ -4181,7 +4228,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Indoshiina + Wakhtiga Indochina @@ -4471,7 +4518,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Bonabe + Wakhtiga Pohnpei @@ -4512,9 +4559,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Samoa - Waqtiga Caadiga Ah ee Samoa - Waqtiga Dharaarta ee Samoa + Wakhtiga American Samoa + Waqtiga Caadiga Ah ee American Samoa + Waqtiga Dharaarta ee American Samoa @@ -4554,8 +4601,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waqtiga Teybey - Waqtiga Caadiga Ah ee Teybey + Waqtiga Taiwan + Waqtiga Caadiga Ah ee Taiwan Waqtiga Dharaarta ee Teybey @@ -4874,7 +4921,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -5792,6 +5838,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic doolarka Iist Kaaribyan doolarada Iist Kaaribyan + + Caribbean guilder + Galdarada karabiyaan + Galdarayaasha karabiyaan + Faranka CFA Galbeedka Afrika faranka CFA Galbeedka Afrika @@ -5820,6 +5871,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kawaja Sambiya Kawajada Sambiya + + Dahabka Zimbabwe + Dahabka Zimbabwe + Dahabka Zimbabwe + {0} maalin @@ -6027,7 +6083,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} shay {0} shayo - + + qeybo + {0} qeyb + {0} qeybo + + qeyb milyankiiba {0} qeyb milyankiiba {0} qeyb milyankiiba @@ -6044,6 +6105,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} bermiraad {0} bermiraad + + ee kulukoos + {0} ee kulukoos + {0} ee kulukoos + litar kiilomitirkiiba litar kiilomitirkiiba @@ -6370,12 +6436,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} unuga xidigiska - furlongs {0} furlong {0} furlongs - fathoms {0} fathom {0} fathoms @@ -6402,12 +6466,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} laks - candela {0} candela {0} candela - lumen {0} lumen {0} lumen @@ -6447,7 +6509,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} tan - dhagaxo {0} dhagax {0} dhagaxo @@ -6521,6 +6582,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} milimitir maarkuri {0} milimitir maarkuri + + ee merkuriga + {0} ee merkuri + {0} ee merkuri + rodol halkii inji ee Isku weer ah {0} rodol halkii inji ee Isku weer ah @@ -6682,6 +6748,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic metrik koob {0} merik koob + + wiqaayadaha cabbirka dareeraha + {0} wiqaayada cabbirka dareeraha + {0} mwiqaayadaha cabbirka dareeraha + akre-fiit {0} akre-fiit @@ -6745,20 +6816,77 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} dram {0} dram - - nal - {0} nal - {0} nal + + steradians + {0} steradian + {0} steradians - + + katals + {0} katal + {0} katals + + + coulombs + {0} coulomb + {0} coulombs + + + farads + {0} farad + {0} farads + + + henrys + {0} henry + {0} henrys + + + siemens + {0} siemens + {0} siemens + + + kalooriyo [IT] + {0} kaloori [IT] + {0} kalooriyo [IT] + + + becquerels + {0} becquerel + {0} becquerels + + + sieverts + {0} sievert + {0} sieverts + + + grays + {0} gray + {0} grays + + + kilograms-force + {0} kilogram-force + {0} kilograms-force + + + teslas + {0} tesla + {0} teslas + + + webers + {0} weber + {0} webers + + qeybaha bilyankiiba {0} qeybaha bilyankiiba {0} qeybaha bilyankiiba - habeeno - {0} habeen - {0} habeeno {0} halkii habeen @@ -6844,7 +6972,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} shay {0} shay - + + qeyb + {0} qeyb + {0} qeyb + + qeyb/milyankiiba @@ -6861,6 +6994,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mool {0} mool + + Glc + litar/km @@ -7178,6 +7314,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mmHg {0} mmHg + + ee Hg + {0} ee Hg + {0} ee Hg + ha {0} ha @@ -7321,12 +7462,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic dareere dram + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Wb + {0} Wb + nal {0} nal {0} nal - + qeybaha/bilyan {0} qb {0} qb @@ -7357,7 +7521,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}shay {0}shay - + + qeyb + {0} qeyb + {0} qeyb + + ppm {0}ppm {0}ppm# @@ -7365,6 +7534,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic % + + Glc + L/100km {0}L/100km @@ -7470,7 +7642,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}cd - lumen {0}lm {0}lm @@ -7496,6 +7667,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mmHg {0}mmHg + + ee Hg + {0} ee Hg + {0} ee Hg + {0}psi {0}psi @@ -7562,21 +7738,37 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}qt-Imp. {0}qt-Imp. + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + cal-IT + + + {0} Bq + {0} Bq + + + {0} Wb + {0} Wb + - nal {0}nal {0}nal - + qb {0}qb {0}qb - habeeno {0}habeen {0}habeeno - {0}/habeen {0}B diff --git a/make/data/cldr/common/main/sq.xml b/make/data/cldr/common/main/sq.xml index b812532db36..2696ea472bc 100644 --- a/make/data/cldr/common/main/sq.xml +++ b/make/data/cldr/common/main/sq.xml @@ -44,6 +44,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ azerbajxhanisht azerisht bashkirisht + balukisht balinezisht basaisht bjellorusisht @@ -230,6 +231,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafianisht këlnisht kurdisht + kurdisht + kurmanjisht kumikisht komisht kornisht @@ -243,7 +246,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ lezgianisht gandaisht limburgisht - ligurianisht + ligurisht lilluetisht lakotisht lombardisht @@ -545,7 +548,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - + @@ -747,6 +750,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kinë Kolumbi Ishulli Klipërton + Sark Kosta-Rikë Kubë Kepi i Gjelbër @@ -981,58 +985,96 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Formati valutor Radhitja Valuta + Prezantimi i emoji-ve Cikli orar (12 - 24) Stili i gjerësisë së rreshtave + Ndarja e rreshtit brenda fjalëve Sistemi i njësive matëse Numrat/shifrat + Ndërprerja e fjalisë pas shkurtimit kalendar budist + budist kalendar kinez + kinez kalendar koptik + koptik kalendar dangi + dangi kalendari etiopik + etiopik kalendar etiopik amete-alem + etiopik amete-alem kalendar gregorian + gregorian kalendar hebraik + hebraik Kalendari Kombëtar Indian kalendar islam + islam kalendar islam (tabelor, epoka civile) + islam (tabelor, epoka civile) kalendar islamik (Arabi Saudite, shikim) kalendar islam (tabelor, epoka astronomike) + islam (tabelor, epoka astronomike) kalendar islam (um al-qura) + islam (um al-qura) kalendar ISO-8601 kalendar japonez + japonez kalendar persian + persian kalendar minguo + minguo format valutor llogaritës + llogaritës format valutor standard - Radhitje e kinezishtes tradicionale - Big5 + standard Radhitja e mëparshme, për pajtueshmëri Radhitje fjalori radhitje unikode e parazgjedhur + unikode e parazgjedhur Radhitje Emoji Rregulla evropiane radhitjeje - Radhitje e kinezishtes së thjeshtësuar - GB2312 Radhitje libri telefonik Radhitje pinini kërkim i përgjithshëm + kërkim kërkim sipas bashkëtingëllores fillestare hangul radhitje standarde + standarde radhitje me vijëzim radhitje tradicionale radhitje me vijëzim radikal radhitje zhujin + e parazgjedhur + emoji + mesazh me tekst sistem 12-orësh (0 - 11) + 12-orësh (0 - 11) sistem 12-orësh (1 - 12) + 12-orësh (0 - 12) sistem 24-orësh (0 - 23) + 24-orësh (0 - 23) sistem 24-orësh (1 - 24) + 24-orësh (0 - 24) stil i gjerësisë së rreshtave - i larguar + i larguar stil i gjerësisë së rreshtave - normal + normal stil i gjerësisë së rreshtave - i ngushtuar + i ngushtuar + ndarje kudo + jo ndarje + ndarje normale + jo ndarje e frazave sistem metrik + metrik sistem imperial (britanik) i njësive matëse + britanik sistem amerikan i njësive matëse + amerikan shifra ahom shifra indo-arabe shifra indo-arabe të zgjatura @@ -1115,6 +1157,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ shifra vai shifra varang citi shifra vanço + joaktive + aktive metrik @@ -1123,7 +1167,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Gjuha: {0} - Skripti: {0} + Shkrimi: {0} Rajoni: {0} @@ -1133,13 +1177,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [A B C Ç D {DH} E Ë F G {GJ} H I J K L {LL} M N {NJ} O P Q R {RR} S {SH} T {TH} U V X {XH} Y Z {ZH}] [  \- ‑ , % ‰ + 0 1 2 3 4 5 6 7 8 9] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” « » ( ) \[ \] § @ * / \& # ′ ″ ~] + [\- ‑ , \: . ' “” « » /] - - « - » - - - @@ -1176,6 +1215,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'në' {0} + + {1}, 'ora' {0} + @@ -1184,6 +1226,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'në' {0} + + {1}, 'ora' {0} + @@ -1196,21 +1241,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E, h B E, h:mm B E, h:mm:ss B E, d + E, h a E, h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + M.y G d.M.y GGGGG + E, d.M.y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a + h a, v + HH, v d.M E, d.M dd.MM @@ -1232,11 +1282,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -1282,7 +1330,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM y – E, d MMM y G - h a – h a h – h a @@ -1296,7 +1343,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm – h:mm a v - h a – h a v h – h a v @@ -1596,23 +1642,28 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E, h B E, d + E, h a E, h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss y G + M.y G d.M.y GGGG + E, d.M.y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a, v HH:mm:ss, v h:mm a, v HH:mm, v + h a, v + HH, v d.M E, d.M d.M @@ -1639,11 +1690,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -1689,7 +1738,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM y – E, d MMM y G - h a – h a h – h a @@ -1872,6 +1920,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + M.y G + E, d.M.y G M.y G d.M.y G E, d.M.y G @@ -1917,6 +1967,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} tremujorë më parë + + tmj. + muaj muajin e kaluar @@ -2389,6 +2442,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pashkë + + Koihaiku + Punta-Arenas @@ -2599,7 +2655,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pnom-Pen - Enderbur + Ishulli i Kantonit Kiritimat @@ -3035,9 +3091,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Ora e Afrikës Perëndimore - Ora standarde e Afrikës Perëndimore - Ora verore e Afrikës Perëndimore + Ora e Afrikës Perëndimore @@ -3425,6 +3479,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ora e Guajanës + + + Ora standarde e Ishujve Hauai-Aleutian + + Ora e Ishujve Hauai-Aleutian @@ -4032,9 +4091,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -4956,6 +5017,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dollarë të Karaibeve Lindore XCD + + gilder karaibian + gilder karaibian + gilderë karaibianë + ANG + Franga e Bregut të Fildishtë frangë e Bregut të Fildishtë @@ -4983,11 +5050,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ZAR - Kuaça e Zambikut - kuaçë zambiku - kuaça zambiku + Kuaça e Zambisë + kuaçë zambie + kuaça zambie ZMW + + Ari i Zimbabves + ar i Zimbabves + arë të Zimbabves + ≈{0} @@ -5215,7 +5287,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimol për litër {0} milimolë për litër - + + pjesë + {0} pjesë + {0} pjesë + + pjesë për milion {0} pjesë për milion {0} pjesë për milion @@ -5240,6 +5317,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mol {0} molë + + glukoze + litra për kilometër {0} litër për kilometër @@ -5716,6 +5796,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetër mërkuri {0} milimetra mërkuri + + mërkuri + paund për inç në katror {0} paund për inç në katror @@ -5889,6 +5972,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} kupë metrike {0} kupa metrike + + onsë të lëngshëm metrikë + {0} fl oz m. + {0} onsë të lëngshëm metrikë + këmbë-akër {0} këmbë-akër @@ -5981,17 +6069,81 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} çerek imperial {0} çerekë imperialë - + + steradianë + {0} steradian + {0} steradianë + + + katalë + {0} katal + {0} katalë + + + coulomb + {0} coulomb + {0} coulomb + + + faradë + {0} farad + {0} faradë + + + henry + {0} henry + {0} henry + + + siemens + {0} siemens + {0} siemens + + + kalori [IT] + {0} kalori [IT] + {0} kalori [IT] + + + bekuerelë + {0} bekuerel + {0} bekuerelë + + + sievertë + {0} sievert + {0} sievertë + + + grej + {0} grej + {0} grej + + + kilogram-forcë + {0} kilogram-forcë + {0} kilogram-forcë + + + tesla + {0} tesla + {0} tesla + + + veberë + {0} veber + {0} veberë + + + dritë + {0} dritë + {0} dritë + + pjesë për miliard {0} pjesë për miliard {0} pjesë për miliard - - net - {0} natë - {0} net - {0}/natë - drejtimi kardinal {0} Lindje @@ -6038,6 +6190,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} njësi {0} njësi + + pjesë + {0} pjesë + {0} pjesë + + + pjesë/milion + + + Glc + mi/gal {0} mi/gal @@ -6253,6 +6416,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} pisk {0} pinch + + cal-IT + + + dritë + {0} dritë + {0} dritë + + + pjesë/miliard + net {0} natë @@ -6283,10 +6457,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ akër + + pjesë + {0} pjesë + {0} pjesë + + + pjesë/milion + {0} mol {0} molë + + Glc + mpg {0} mpg @@ -6409,11 +6594,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} pisk {0} piska - - net - {0} natë - {0} net - {0}/natë + + cal-IT + + + dritë + {0} dritë + {0} dritë + + + pjesë/miliard diff --git a/make/data/cldr/common/main/sr.xml b/make/data/cldr/common/main/sr.xml index 19e590d21fa..7586e6ca2db 100644 --- a/make/data/cldr/common/main/sr.xml +++ b/make/data/cldr/common/main/sr.xml @@ -154,7 +154,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ средњеенглески есперанто шпански - шпански (Европа) + латиноамерички шпански + европски шпански + мексички шпански естонски баскијски евондо @@ -169,6 +171,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ фарски фон француски + канадски француски + швајцарски француски кајунски француски средњефранцуски старофранцуски @@ -281,6 +285,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ бафија келнски курдски + курдски + курманџи кумички кутенај коми @@ -417,7 +423,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ паштунски пашто португалски - португалски (Португал) + бразилски португалски + европски португалски кечуа киче раџастански @@ -808,6 +815,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Кина Колумбија Острво Клипертон + Сарк Костарика Куба Зеленортска Острва @@ -1081,34 +1089,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ нумеричко сортирање сортирање према јачини валута + презентација емоџија приказивање времена (12- или 24-часовно) стил прелома реда + преломи редова унутар речи систем мерних јединица бројеви + Прелом реченице после скраћенице Временска зона Варијанта локалитета Приватна употреба будистички календар + будистички кинески календар + кинески коптски календар + коптски данги календар + данги етиопски календар + етиопски етиопски амет алем календар + етиопски амет алем грегоријански календар + грегоријански хебрејски календар + хебрејски Индијски национални календар исламски календар + исламски исламски цивилни календар + исламски цивилни исламски астрономски календар + исламски астрономски исламски календар (Umm al-Qura) + исламски (Umm al-Qura) ISO-8601 календар јапански календар + јапански персијски календар + персијски календар Републике Кине + мингуо рачуноводствени формат валуте + рачуноводство стандардни формат валуте + стандардно Сортирај симболе Сортирање уз игнорисање симбола Сортирај акценте нормално @@ -1118,22 +1146,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Сортирај прво велика слова Сортирај без обзира на велика и мала слова Сортирај мала и велика слова - традиционално кинеско сортирање претходни редослед сортирања, због компатибилности + компатибилност редослед сортирања у речнику + речник подразумевани Unicode редослед сортирања + подразумевани Unicode европска правила редоследа - поједностављено кинеско сортирање сортирање као телефонски именик + телефонски именик фонетски редослед сортирања + фонетски пинјин сортирање + пинјин претрага опште намене + претрага Претрага према хангул почетном сугласнику стандардни редослед сортирања + стандардни сортирање по броју потеза + потези традиционално сортирање + традиционално редослед сортирања радикалних потеза + радикални потези жујин + жујин Сортирај без нормализације Сортирај Unicode нормализовано Сортирај цифре појединачно @@ -1146,18 +1184,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ пуна ширина пола ширине Нумеричка + подразумевано + емоџи + текст 12-часовни систем (0-11) + 12 (0–11) 12-часовни систем (1-12) + 12 (1–12) 24-часовни систем (0-23) + 24 (0–23) 24-часовни систем (1-24) + 24 (1–24) размакнути стил прелома реда + размакнути нормални стил прелома реда + нормални строги стил прелома реда + строги + прелом свега + задржи све + нормално + задржи у фразама БГН (BGN) УНГЕГН (BGN) - метрички + метрички систем + метрички империјални - амерички + УК + амерички систем + САД арапско-индијске цифре продужене арапско-индијске цифре јерменски бројеви @@ -1202,6 +1257,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ тибетанске цифре Традиционални бројеви ваи цифре + Укључено + Искључено метрички @@ -1222,9 +1279,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -1339,13 +1393,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E hh:mm a E hh:mm:ss a y. G + M. y. G d.M.y. GGGGG + G dd. MM. y, E MMM y. G d. MMM y. G E, d. MMM y. G - h a hh:mm a hh:mm:ss a + HH 'č'. v d.M. E, d.M. MM-dd @@ -1372,7 +1428,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} – {1} h a – h a - h–h a h:mm a – h:mm a @@ -1573,22 +1628,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ увече ноћу - - поноћ - подне - ујутру - по подне - увече - ноћу - - - поноћ - подне - ујутру - по подне - увече - ноћу - @@ -1697,11 +1736,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM y. G d. MMM y. G E, d. MMM y. G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH 'h' v d. M. E, d. M. dd.MM. @@ -1733,7 +1772,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} – {1} h a – h a - h–h a h:mm a – h:mm a @@ -1747,7 +1785,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M–M @@ -1907,6 +1944,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ АХ + + + M. y. G + G dd. MM. y, E + + @@ -3038,6 +3081,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ускршње острво + + Којајке + Пунта Аренас @@ -3303,9 +3349,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пном Пен - Ендербери - - Кантон @@ -3982,9 +4025,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Западно-афричко време - Западно-афричко стандардно време - Западно-афричко летње време + Западно-афричко време @@ -4385,6 +4426,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Гвајана време + + + Хавајско-алеутско стандардно време + + Хавајско-алеутско време @@ -4835,6 +4881,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Чуук време + + + Турска време + Турска стандардно време + Турска летње рачунање времена + + Туркменистан време @@ -5002,9 +5055,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -6703,6 +6758,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ источнокарипскa доларa источнокарипскиx доларa + + карипски гулден + карипски гулден + карипски гулден + карипски гулден + Посебна цртаћа права посебно цртаће право @@ -6847,6 +6908,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ зимбабвејска долара (1980–2008) зимбабвејских долара (1980–2008) + + зимбабвеанско злато + зимбабвеанско злато + зимбабвеанско злато + зимбабвеанско злато + Зимбабвеански долар (2009) зимбабвејски долар (2009) @@ -7318,7 +7385,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ставки {0} ставки - + + делови + {0} део + {0} дела + {0} делова + + feminine честица на милион {0} честица на милион @@ -7383,6 +7456,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мола {0} мола + + глукозе + {0} глукозе + {0} глукозе + {0} глукозе + inanimate литри по километру @@ -8353,7 +8432,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - типографске тачке {0} типографска тачка {0} типографску тачку {0} типографске тачке @@ -8674,6 +8752,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} милиметара живиног стуба {0} милиметара живиног стуба + + живе + {0} живе + {0} живе + {0} живе + фунте по квадратном инчу {0} фунта по квадратном инчу @@ -8843,7 +8927,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Бофор Бофор {0} - Б {0} + B {0} Бофор {0} @@ -9108,6 +9192,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метричких шоља {0} метричких шоља + + течне унце + {0} течна унца + {0} течне унце + {0} течних унци + акер стопе {0} акер стопа @@ -9204,9 +9294,83 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} империјске четвртине {0} империјских четвртина + + стерадианси + + + катали + {0} катал + {0} катала + {0} катала + + + кулони + {0} кулон + {0} кулона + {0} кулона + + + фаради + {0} фарад + {0} фарада + {0} фарада + + + хенрији + {0} хенри + {0} хенрија + {0} хенрија + + + сименси + {0} сименс + {0} сименса + {0} сименса + + + калорије [IT] + {0} калорија [IT] + {0} калорије [IT] + {0} калорија [IT] + + + бекерели + {0} бекерел + {0} бекерела + {0} бекерела + + + сиверти + {0} сиверт + {0} сиверта + {0} сиверта + + + греји + {0} греј + {0} греја + {0} грејева + + + килопонд + {0} килопонд + {0} килопонда + {0} килопонда + + + тесле + {0} тесла + {0} тесле + {0} тесла + + + вебери + {0} вебер + {0} вебера + {0} вебера + neuter - светло {0} светло {0} светло {0} светла @@ -9220,7 +9384,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} светала {0} светала - + inanimate делови на милијарду {0} део на милијарду @@ -9238,7 +9402,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - ноћ {0} ноћ {0} ноћ {0} ноћи @@ -9251,14 +9414,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ноћи {0} ноћи {0} ноћи - {0}/ноћ страна света - {0} E - {0} N - {0} S - {0} W @@ -9301,12 +9459,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ставке {0} ставки + + део + {0} део + {0} дела + {0} делова + проценат промил + + Glc + L/100 km {0} L/100 km @@ -9511,9 +9678,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bf - Б {0} - Б {0} - Б {0} + B {0} + B {0} + B {0} степени Фаренхајта @@ -9585,13 +9752,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} прстохвата {0} прстохвата + + cal [IT] + светло {0} светло {0} светла {0} светала - + делови/милијарда @@ -9610,9 +9780,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + део + {0} део + {0} дела + {0} делова + % + + Glc + L/100km {0} L/100km @@ -9712,6 +9891,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} кс {0} кс + + B {0} + B {0} + B {0} + l @@ -9743,18 +9927,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} qt Imp {0} qt Imp - - светло - {0} светло - {0} светла - {0} светала - - - ноћ - {0} ноћ - {0} ноћи - {0} ноћи - {0}/ноћ + + cal [IT] {0}E diff --git a/make/data/cldr/common/main/sr_Cyrl_BA.xml b/make/data/cldr/common/main/sr_Cyrl_BA.xml index d112a24c27f..c84ba99659a 100644 --- a/make/data/cldr/common/main/sr_Cyrl_BA.xml +++ b/make/data/cldr/common/main/sr_Cyrl_BA.xml @@ -602,9 +602,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Западно-афричко вријеме - Западно-афричко стандардно вријеме - Западно-афричко љетње вријеме + Западно-афричко вријеме @@ -949,6 +947,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гвајана вријеме + + + Хавајско-алеутско стандардно вријеме + + Хавајско-алеутско вријеме @@ -1595,7 +1598,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} свјетала {0} свјетала - + дијелови на милијарду {0} дио на милијарду {0} дио на милијарду @@ -1627,18 +1630,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} грана {0} гранова - - B {0} - B {0} - Б {0} - свјетло {0} свјетло {0} свјетла {0} свјетала - + дијелови/милијарда @@ -1670,9 +1668,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bft - B {0} - B {0} - B {0} {0}/gal Imp @@ -1702,7 +1697,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} свјетла {0} свјетала - + дијелови/милијарда diff --git a/make/data/cldr/common/main/sr_Cyrl_ME.xml b/make/data/cldr/common/main/sr_Cyrl_ME.xml index 058e55d769d..3d1a4984a81 100644 --- a/make/data/cldr/common/main/sr_Cyrl_ME.xml +++ b/make/data/cldr/common/main/sr_Cyrl_ME.xml @@ -129,11 +129,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic - MMMM: W. 'недеља' - MMMM: W. 'недеља' + W. 'сједмица' 'у' MMMM + W. 'сједмица' 'у' MMMM W. 'сједмица' 'у' MMMM - w. 'недеља' 'у' Y. - w. 'недеља' 'у' Y. + w. 'сједмица' 'у' Y. + w. 'сједмица' 'у' Y. w. 'сједмица' 'у' Y. diff --git a/make/data/cldr/common/main/sr_Latn.xml b/make/data/cldr/common/main/sr_Latn.xml index edbc0fa8ae9..54655b62fdd 100644 --- a/make/data/cldr/common/main/sr_Latn.xml +++ b/make/data/cldr/common/main/sr_Latn.xml @@ -153,7 +153,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic srednjeengleski esperanto španski - španski (Evropa) + latinoamerički španski + evropski španski + meksički španski estonski baskijski evondo @@ -168,6 +170,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic farski fon francuski + kanadski francuski + švajcarski francuski kajunski francuski srednjefrancuski starofrancuski @@ -280,6 +284,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic bafija kelnski kurdski + kurdski + kurmandži kumički kutenaj komi @@ -416,7 +422,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic paštunski pašto portugalski - portugalski (Portugal) + brazilski portugalski + evropski portugalski kečua kiče radžastanski @@ -807,6 +814,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kina Kolumbija Ostrvo Kliperton + Sark Kostarika Kuba Zelenortska Ostrva @@ -1080,34 +1088,54 @@ CLDR data files are interpreted according to the LDML specification (http://unic numeričko sortiranje sortiranje prema jačini valuta + prezentacija emodžija prikazivanje vremena (12- ili 24-časovno) stil preloma reda + prelomi redova unutar reči sistem mernih jedinica brojevi + Prelom rečenice posle skraćenice Vremenska zona Varijanta lokaliteta Privatna upotreba budistički kalendar + budistički kineski kalendar + kineski koptski kalendar + koptski dangi kalendar + dangi etiopski kalendar + etiopski etiopski amet alem kalendar + etiopski amet alem gregorijanski kalendar + gregorijanski hebrejski kalendar + hebrejski Indijski nacionalni kalendar islamski kalendar + islamski islamski civilni kalendar + islamski civilni islamski astronomski kalendar + islamski astronomski islamski kalendar (Umm al-Qura) + islamski (Umm al-Qura) ISO-8601 kalendar japanski kalendar + japanski persijski kalendar + persijski kalendar Republike Kine + minguo računovodstveni format valute + računovodstvo standardni format valute + standardno Sortiraj simbole Sortiranje uz ignorisanje simbola Sortiraj akcente normalno @@ -1117,22 +1145,32 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sortiraj prvo velika slova Sortiraj bez obzira na velika i mala slova Sortiraj mala i velika slova - tradicionalno kinesko sortiranje prethodni redosled sortiranja, zbog kompatibilnosti + kompatibilnost redosled sortiranja u rečniku + rečnik podrazumevani Unicode redosled sortiranja + podrazumevani Unicode evropska pravila redosleda - pojednostavljeno kinesko sortiranje sortiranje kao telefonski imenik + telefonski imenik fonetski redosled sortiranja + fonetski pinjin sortiranje + pinjin pretraga opšte namene + pretraga Pretraga prema hangul početnom suglasniku standardni redosled sortiranja + standardni sortiranje po broju poteza + potezi tradicionalno sortiranje + tradicionalno redosled sortiranja radikalnih poteza + radikalni potezi žujin + žujin Sortiraj bez normalizacije Sortiraj Unicode normalizovano Sortiraj cifre pojedinačno @@ -1145,18 +1183,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic puna širina pola širine Numerička + podrazumevano + emodži + tekst 12-časovni sistem (0-11) + 12 (0–11) 12-časovni sistem (1-12) + 12 (1–12) 24-časovni sistem (0-23) + 24 (0–23) 24-časovni sistem (1-24) + 24 (1–24) razmaknuti stil preloma reda + razmaknuti normalni stil preloma reda + normalni strogi stil preloma reda + strogi + prelom svega + zadrži sve + normalno + zadrži u frazama BGN (BGN) UNGEGN (BGN) - metrički + metrički sistem + metrički imperijalni - američki + UK + američki sistem + SAD arapsko-indijske cifre produžene arapsko-indijske cifre jermenski brojevi @@ -1201,6 +1256,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic tibetanske cifre Tradicionalni brojevi vai cifre + Uključeno + Isključeno metrički @@ -1222,9 +1279,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -1339,13 +1393,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic E hh:mm a E hh:mm:ss a y. G + M. y. G d.M.y. GGGGG + G dd. MM. y, E MMM y. G d. MMM y. G E, d. MMM y. G - h a hh:mm a hh:mm:ss a + HH 'č'. v d.M. E, d.M. MM-dd @@ -1372,7 +1428,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} – {1} h a – h a - h–h a h:mm a – h:mm a @@ -1573,22 +1628,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic uveče noću - - ponoć - podne - ujutru - po podne - uveče - noću - - - ponoć - podne - ujutru - po podne - uveče - noću - @@ -1697,11 +1736,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM y. G d. MMM y. G E, d. MMM y. G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH 'h' v d. M. E, d. M. dd.MM. @@ -1733,7 +1772,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} – {1} h a – h a - h–h a h:mm a – h:mm a @@ -1747,7 +1785,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic h a – h a v - h–h a v M–M @@ -1907,6 +1944,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic AH + + + M. y. G + G dd. MM. y, E + + @@ -3038,6 +3081,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Uskršnje ostrvo + + Kojajke + Punta Arenas @@ -3303,9 +3349,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Pnom Pen - Enderberi - - Kanton @@ -3982,9 +4025,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Zapadno-afričko vreme - Zapadno-afričko standardno vreme - Zapadno-afričko letnje vreme + Zapadno-afričko vreme @@ -4385,6 +4426,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gvajana vreme + + + Havajsko-aleutsko standardno vreme + + Havajsko-aleutsko vreme @@ -4835,6 +4881,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Čuuk vreme + + + Turska vreme + Turska standardno vreme + Turska letnje računanje vremena + + Turkmenistan vreme @@ -5002,9 +5055,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) @@ -6703,6 +6758,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic istočnokaripska dolara istočnokaripskix dolara + + karipski gulden + karipski gulden + karipski gulden + karipski gulden + Posebna crtaća prava posebno crtaće pravo @@ -6847,6 +6908,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic zimbabvejska dolara (1980–2008) zimbabvejskih dolara (1980–2008) + + zimbabveansko zlato + zimbabveansko zlato + zimbabveansko zlato + zimbabveansko zlato + Zimbabveanski dolar (2009) zimbabvejski dolar (2009) @@ -7216,7 +7283,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} stavki {0} stavki - + + delovi + {0} deo + {0} dela + {0} delova + + feminine čestica na milion {0} čestica na milion @@ -7272,6 +7345,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mola {0} mola + + glukoze + {0} glukoze + {0} glukoze + {0} glukoze + inanimate litri po kilometru @@ -7806,15 +7885,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic inanimate kilovat-sati na 100 kilometara {0} kilovat-sat na 100 kilometara - {0} kilovat-sat na 100 kilometara {0} kilovat-sata na 100 kilometara {0} kilovat-satom na 100 kilometara {0} kilovat-sata na 100 kilometara - {0} kilovat-sata na 100 kilometara {0} kilovat-sata na 100 kilometara {0} kilovat-sata na 100 kilometara {0} kilovat-sati na 100 kilometara - {0} kilovat-sati na 100 kilometara {0} kilovat-sati na 100 kilometara {0} kilovat-sati na 100 kilometara @@ -8110,7 +8186,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic feminine - tipografske tačke {0} tipografska tačka {0} tipografsku tačku {0} tipografske tačke @@ -8398,6 +8473,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} milimetara živinog stuba {0} milimetara živinog stuba + + žive + {0} žive + {0} žive + {0} žive + funte po kvadratnom inču {0} funta po kvadratnom inču @@ -8772,6 +8853,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} metričkih šolja {0} metričkih šolja + + tečne unce + {0} tečna unca + {0} tečne unce + {0} tečnih unci + aker stope {0} aker stopa @@ -8868,61 +8955,114 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} imperijske četvrtine {0} imperijskih četvrtina + + steradiansi + + + katali + {0} katal + {0} katala + {0} katala + + + kuloni + {0} kulon + {0} kulona + {0} kulona + + + faradi + {0} farad + {0} farada + {0} farada + + + henriji + {0} henri + {0} henrija + {0} henrija + + + simensi + {0} simens + {0} simensa + {0} simensa + + + kalorije [IT] + {0} kalorija [IT] + {0} kalorije [IT] + {0} kalorija [IT] + + + bekereli + {0} bekerel + {0} bekerela + {0} bekerela + + + siverti + {0} sivert + {0} siverta + {0} siverta + + + greji + {0} grej + {0} greja + {0} grejeva + + + kilopond + {0} kilopond + {0} kiloponda + {0} kiloponda + + + tesle + {0} tesla + {0} tesle + {0} tesla + + + veberi + {0} veber + {0} vebera + {0} vebera + neuter - svetlo - {0} svetlo - {0} svetlo {0} svetla {0} svetlom - {0} svetla - {0} svetla {0} svetla {0} svetla - {0} svetala - {0} svetala {0} svetala {0} svetala - + inanimate delovi na milijardu {0} deo na milijardu - {0} deo na milijardu {0} dela na milijardu {0} delom na milijardu {0} dela na milijardu - {0} dela na milijardu {0} dela na milijardu {0} dela na milijardu {0} delova na milijardu - {0} delova na milijardu {0} delova na milijardu {0} delova na milijardu feminine - noć - {0} noć - {0} noć {0} noći {0} noći - {0} noći - {0} noći {0} noći {0} noći - {0} noći - {0} noći {0} noći {0} noći - {0}/noć strana sveta - {0} E - {0} N - {0} S - {0} W @@ -8965,12 +9105,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} stavke {0} stavki + + deo + {0} deo + {0} dela + {0} delova + procenat promil + + Glc + L/100 km {0} L/100 km @@ -9249,13 +9398,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} prstohvata {0} prstohvata + + cal [IT] + svetlo {0} svetlo {0} svetla {0} svetala - + delovi/milijarda @@ -9274,9 +9426,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + deo + {0} deo + {0} dela + {0} delova + % + + Glc + L/100km {0} L/100km @@ -9376,6 +9537,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ks {0} ks + + B {0} + B {0} + B {0} + l @@ -9407,18 +9573,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} qt Imp {0} qt Imp - - svetlo - {0} svetlo - {0} svetla - {0} svetala - - - noć - {0} noć - {0} noći - {0} noći - {0}/noć + + cal [IT] {0}E diff --git a/make/data/cldr/common/main/sr_Latn_BA.xml b/make/data/cldr/common/main/sr_Latn_BA.xml index 80475ab0366..9605eb3aaba 100644 --- a/make/data/cldr/common/main/sr_Latn_BA.xml +++ b/make/data/cldr/common/main/sr_Latn_BA.xml @@ -602,9 +602,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Zapadno-afričko vrijeme - Zapadno-afričko standardno vrijeme - Zapadno-afričko ljetnje vrijeme + Zapadno-afričko vrijeme @@ -949,6 +947,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gvajana vrijeme + + + Havajsko-aleutsko standardno vrijeme + + Havajsko-aleutsko vrijeme @@ -1595,7 +1598,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} svjetala {0} svjetala - + dijelovi na milijardu {0} dio na milijardu {0} dio na milijardu @@ -1627,18 +1630,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} grana {0} granova - - B {0} - B {0} - B {0} - svjetlo {0} svjetlo {0} svjetla {0} svjetala - + dijelovi/milijarda @@ -1670,9 +1668,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bft - B {0} - B {0} - B {0} {0}/gal Imp @@ -1702,7 +1697,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} svjetla {0} svjetala - + dijelovi/milijarda diff --git a/make/data/cldr/common/main/sr_Latn_ME.xml b/make/data/cldr/common/main/sr_Latn_ME.xml index 7ee454af022..b70f80cd6b1 100644 --- a/make/data/cldr/common/main/sr_Latn_ME.xml +++ b/make/data/cldr/common/main/sr_Latn_ME.xml @@ -129,11 +129,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic - MMMM: W. 'nedelja' - MMMM: W. 'nedelja' + W. 'sjedmica' 'u' MMMM + W. 'sjedmica' 'u' MMMM W. 'sjedmica' 'u' MMMM - w. 'nedelja' 'u' Y. - w. 'nedelja' 'u' Y. + w. 'sjedmica' 'u' Y. + w. 'sjedmica' 'u' Y. w. 'sjedmica' 'u' Y. diff --git a/make/data/cldr/common/main/st.xml b/make/data/cldr/common/main/st.xml index 108fdb84ffe..acf154963ee 100644 --- a/make/data/cldr/common/main/st.xml +++ b/make/data/cldr/common/main/st.xml @@ -23,7 +23,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Se-bosnia Se-catalia Se-czech - Se-welsh + Sewelsh Se-dutch Se-jeremane Se-greek @@ -137,7 +137,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Phe Kol - Ube + Hlb Mme Mot Jan diff --git a/make/data/cldr/common/main/su.xml b/make/data/cldr/common/main/su.xml index f59f6ad3b9c..c1048b99a3e 100644 --- a/make/data/cldr/common/main/su.xml +++ b/make/data/cldr/common/main/su.xml @@ -346,7 +346,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM y G d MMM y G E, d MMM y G - h a h.mm a HH.mm h.mm.ss a @@ -384,9 +383,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic taun ieu taun payun - - tn. - triwulan diff --git a/make/data/cldr/common/main/suz.xml b/make/data/cldr/common/main/suz.xml new file mode 100644 index 00000000000..dff7c0d267d --- /dev/null +++ b/make/data/cldr/common/main/suz.xml @@ -0,0 +1,19 @@ + + + + + + + + + + [अ आ इ उ ए ओ {क्} {ख्} {ग्} {च्} {छ्} {ज्} {ट्} {ठ्} {ड्} {त्} {थ्} {द्} {न्} {प्} {फ्} ब {ब्} {म्} {य्} {र्} {ल्} {व्} {श्} {स्} {ह्} ्] + [] + [० १ २ ३ ४ ५ ६ ७ ८ ९] + [, \: ! ? । “”] + + diff --git a/make/data/cldr/common/main/suz_Deva.xml b/make/data/cldr/common/main/suz_Deva.xml new file mode 100644 index 00000000000..97ecbfca916 --- /dev/null +++ b/make/data/cldr/common/main/suz_Deva.xml @@ -0,0 +1,14 @@ + + + + + + + + + tidszon - kinesiska i big5-sorteringsordning - kinesiska i gb2312-sorteringsordning kinesiska i pinyin-sorteringsordning kinesiska i strecksorteringsordning + + {0}… + …{0} + {0}…{1} + - + - Q1 - Q2 - Q3 - Q4 + K1 + K2 + K3 + K4 + + + + EEEE d MMMM y + + + + + d MMMM y + + + + + d MMM y + + + + + d.M.y + + + + + + + HH.mm.ss zzzz + + + + + H.mm.ss z + + + + + H.mm.ss + + + + + H.mm + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + h.mm B h.mm.ss B @@ -48,6 +115,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic E HH.mm E h.mm.ss a E HH.mm.ss + M.y G + d.M.y G + E d.M.y G + H h.mm a HH.mm h.mm.ss a @@ -61,10 +132,85 @@ CLDR data files are interpreted according to the LDML specification (http://unic d.M dd.MM mm.ss + L.y + d.M.y + E d.M.y + M.y + + + h.mm B–h.mm B + h.mm–h.mm B + h.mm–h.mm B + + + d.M.y–d.M.y GGGGG + d.M.y GGGGG–d.M.y GGGGG + d.M.y–d.M.y GGGGG + d.M.y–d.M.y GGGGG + + + E d.M.y–E d.M.y GGGGG + E d.M.y GGGGG–E d.M.y GGGGG + E d.M.y–E d.M.y GGGGG + E d.M.y–E d.M.y GGGGG + + + h.mm a–h.mm a + h.mm–h.mm a + h.mm–h.mm a + + + H.mm–H.mm + HH.mm–HH.mm + + + h.mm a–h.mm a v + h.mm–h.mm a v + h.mm–h.mm a v + + + HH.mm–HH.mm v + HH.mm–HH.mm v + + + d–d.M + d.M–d.M + + + E d.M–E d.M + E d.M–E d.M + + + MMM–MMM y + MMMM y–MMMM y + + + d–d.M.y + d.M–d.M.y + d.M.y–d.M.y + + + E d.M.y–E d.M.y + E d.M.y–E d.M.y + E d.M.y–E d.M.y + + + + + förra året + i år + nästa år + + + förra året + i år + nästa år + + diff --git a/make/data/cldr/common/main/sw.xml b/make/data/cldr/common/main/sw.xml index 26779a6c82c..11473266ce7 100644 --- a/make/data/cldr/common/main/sw.xml +++ b/make/data/cldr/common/main/sw.xml @@ -49,6 +49,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiazerbaijani Kiazeri Kibashkiri + Kibaluchi Kibali Kibasaa Kibamun @@ -59,14 +60,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kibena Kibafut Kibulgaria - Kiharyanvi + Kiharyanvi Kibalochi cha Magharibi Kibhojpuri Kibislama Kibini Kikom Kisiksika - Kianii + Kianii Kibambara Kibengali Kitibeti @@ -128,9 +129,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiekajuk Kigiriki Kiingereza - Kiingereza (Canada) Kiingereza (Uingereza) - Kiingereza (UK) Kiesperanto Kihispania Kihispania (Amerika ya Latini) @@ -147,7 +146,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kifaroe Kifon Kifaransa - Kifaransa (Canada) Kifaransa cha Kajuni Kifaransa cha Kale Kifrisia cha Kaskazini @@ -244,11 +242,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kibafia Kicologne Kikurdi + Kikurdi + Kikurmanji Kumyk Kikomi Kikorni Kikwakʼwala - Kikuvi + Kikuvi Kikyrgyz Kilatini Kiladino @@ -258,10 +258,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kilezighian Kiganda Limburgish - Kiliguria + Kiliguria Kilillooet Kilakota - Kilongobardi + Kilongobardi Kilingala Kilaosi Kimongo @@ -368,7 +368,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kireno (Ulaya) Kikechua Kʼicheʼ - Kirajasthani + Kirajasthani Kirapanui Kirarotonga Kirohingya @@ -428,7 +428,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiswahili Shikomor Lugha ya Syriac - Kisilesia + Kisilesia Kitamili Kitutchone cha Kusini Kitelugu @@ -469,9 +469,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kiuzbeki Kivai Kivenda - Kivenisi + Kivenisi Kivietinamu - Kimakhuwa + Kimakhuwa Kivolapuk Kivunjo Kiwaloon @@ -483,7 +483,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kichina cha Wu Kikalmyk Kixhosa - Kikangri + Kikangri Kisoga Kiyao Kiyangben @@ -493,7 +493,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Kinheengatu Kikantoni Kichina, Kikantoni - Kizhuang + Kizhuang Kiberber Sanifu cha Moroko Kichina Kichina sanifu @@ -534,7 +534,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - @@ -640,7 +639,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Belize Kanada Visiwa vya Cocos (Keeling) - Jamhuri ya Kidemokrasia ya Kongo + Kongo - Kinshasa Kongo (DRC) Jamhuri ya Afrika ya Kati Kongo - Brazzaville @@ -654,6 +653,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Uchina Kolombia Kisiwa cha Clipperton + Sark Kostarika Kuba Cape Verde @@ -718,7 +718,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Israeli Kisiwa cha Man India - Eneo la Uingereza katika Bahari Hindi + Eneo la Uingereza katika Bahari Hindi Iraki Iran Aisilandi @@ -854,7 +854,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Visiwa Vidogo vya Nje vya Marekani Umoja wa Mataifa Marekani - US Uruguay Uzibekistani Mji wa Vatican @@ -893,33 +892,52 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Upangaji kwa Nambari Nguvu ya Upangaji Sarafu + Uwasilishaji wa Emoji Kipindi cha saa (12 au 24) Mtindo wa Kukata Mstari + Nafasi kati ya mistari kwa maneno Mfumo wa Vipimo Nambari + Nafasi ya Sentensi Baada ya Ufupisho Saa za Eneo Lahaja za Lugha Matumizi ya Kibinafsi Kalenda ya Kibuddha + Kibudha Kalenda ya Kichina + Uchina Kalenda ya Koptiki + Kikhufti Kalenda ya Dangi + Dangi Kalenda ya Kiethiopia + Kiethiopia Kalenda ya Kiethiopia ya Amete Alem + Amete Alem ya Ethiopia Kalenda ya Kigregori + Kigregori Kalenda ya Kiebrania + Kiebrania Kalenda ya Taifa ya India - Kalenda ya Hijra - Kalenda ya Hijra (inayoanza usiku wa manane) - Kalenda ya Hijra (Umm ul-Qura) + Kalenda ya Hijra + Hijra + Kalenda ya Hijra (inayoanza usiku wa manane) + Hijra (inayotegemea hesabu) + Kalenda ya Hijra (Umm ul-Qura) + Hijra (Umm al-Qura) Kalenda ya ISO-8601 Kalenda ya Kijapani + Kijapani Kalenda ya Kiajemi + Kiajemi Kalenda ya Jamhuri ya Uchina + Kiminguo Mpangilio wa Kihasibu wa Sarafu + Uhasibu Mpangilio wa Kawaida wa Sarafu + Kawaida Panga Alama Panga Alama za Kupuuza Panga Viinitoni kwa Kawaida @@ -929,16 +947,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Panga Herufi kubwa Kwanza Panga Isiyoathiriwa na Herufi Panga kwa Inayoathiriwa na Herufi - Mpangilio wa Kichina cha Jadi - Big5 Mpangilio wa Kamusi Mpangilio Chaguo-Msingi wa Unicode - Mpangilio wa Kichina Rahisi - GB2312 + Chaguomsingi ya Unicode Mpangilio wa Orodha za Nambari za Simu Utaratibu wa Kupanga Fonetiki Mpangilio wa Kipinyin Utafutaji wa Kijumla + Utafutaji Tafuta kwa Konsonanti Halisi ya Hangul Mpangilio wa Kawaida + Kawaida Mpangilio wa Mikwaju Mpangilio wa Kawaida Mpangilio wa Mikwaju ya Shina @@ -954,18 +973,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Upana kamili Nusu upana Ya Nambari + Chaguomsingi + Emoji + Maandiko Kipindi cha saa 12 (0–11) + 12 (0–11) Kipindi cha saa 12 (1–12) + 12 (1–12) Kipindi cha saa 24 (0–23) + 24 (0–23) Kipindi cha saa 24 (1–24) + 24 (1–24) Mtindo Pana wa Kukata Mstari + Usio kaza Mtindo wa Kawaida wa Kukata Mstari + Kawaida Mtindo Finyu wa Kukata Mstari + Usio legevu + Katisha yote + Dumisha yote + Kawaida + Weka katika vifungu Mtindo wa kunukuu wa US BGN Mtindo wa kunukuu wa UN GEGN Mfumo wa Metriki + Metriki Mfumo wa Vipimo wa Uingereza + Uingereza Mfumo wa Vipimo wa Marekani + Marekani Nambari za Kiarabu/Kihindi Nambari za Kiarabu/Kihindi Zilizopanuliwa Nambari za Kiarmenia @@ -1013,6 +1049,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Nambari za Kitibeti Tarakimu za Jadi Nambari za Kivai + Imezimwa + Imewashwa Mfumo wa Mita @@ -1030,9 +1068,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [c q x] [A B {CH} D E F G H I J K L M N O P R S T U V W Y Z] [\- ‑ , ; \: ! ? . ' " ( ) \[ \] \{ \}] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1074,6 +1109,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1} 'saa' {0} + @@ -1082,6 +1120,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1} 'saa' {0} + @@ -1090,6 +1131,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}, {0} + + {1}, {0} + @@ -1104,11 +1148,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + M/y G d/M/y GGGGG + E, d/M/y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a d-M @@ -1487,11 +1532,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + G MM-y d/M/y GGGGG + E, d/M/y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1559,7 +1605,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM y – E, d MMM y G - h a – h a h – h a @@ -1584,7 +1629,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h a v @@ -1916,9 +1960,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saa za Majira ya Joto za Ayalandi - - Enderbury - Kostanay @@ -1968,9 +2009,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Saa za Afrika Magharibi - Saa za Wastani za Afrika Magharibi - Saa za Majira ya joto za Afrika Magharibi + Saa za Afrika Magharibi @@ -2327,6 +2366,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Saa za Guyana + + + Saa za Wastani za Hawaii-Aleutian + + Saa za Hawaii-Aleutian @@ -2903,30 +2947,30 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ¤ elfu0 - ¤ elfu0 - ¤ elfu00;¤elfu -00 - ¤ elfu00;¤elfu -00 - ¤ laki000;¤laki -000 - ¤ laki000;¤laki -000 - ¤ 0M;¤-0M + ¤ elfu 0;¤ elfu -0 + ¤ elfu 0;¤ elfu -0 + ¤ elfu 00;¤ elfu -00 + ¤ elfu 00;¤ elfu -00 + ¤ elfu 000;¤ elfu -000 + ¤ elfu 000;¤ elfu -000 + ¤ 0M;¤ -0M ¤ 0M - ¤ 00M;¤M-00M - ¤ 00M;¤-00M - ¤ 000M;¤Milioni-000 + ¤ 00M;¤ -00M + ¤ 00M + ¤ 000M;¤ -000M ¤ 000M - ¤ 0B;¤-0B - ¤ 0B;¤-0B - ¤ 00B;¤-00B - ¤ 00B;¤-00B - ¤ 000B;¤-000B - ¤ 000B;¤-000B - ¤ 0T;¤-0T + ¤ 0B;¤ -0B + ¤ 0B;¤ -0B + ¤ 00B;¤ -00B + ¤ 00B;¤ -00B + ¤ 000B;¤ -000B + ¤ 000B;¤ -000B + ¤ 0T;¤ -0T ¤ 0T - ¤ 00T;¤-00T + ¤ 00T;¤ -00T ¤ 00T - ¤ 000T;¤-000T - ¤ 000T;¤-000T + ¤ 000T;¤ -000T + ¤ 000T {0} {1} @@ -3745,6 +3789,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dola ya Karibi Mashariki dola za Karibi Mashariki + + Guilder ya Karibe + Guilder ya Karibe + Guilder ya Karibe + Faranga ya Afrika Magharibi CFA faranga ya Afrika Magharibi CFA @@ -3781,6 +3830,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Dola ya Zimbabwe + + Dhahabu ya Zimbabwe + Dhahabu ya Zimbabwe + Dhahabu ya Zimbabwe + {0}+ @@ -3863,7 +3917,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milimoli {0} kwa kila lita milimoli {0} kwa kila lita - + + vipande + kipande {0} + vipande {0} + + sehemu {0} kwa kila milioni sehemu {0} kwa kila milioni @@ -3875,6 +3934,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ permyriadi {0} permyriadi {0} + + ya glukosi + {0} ya glukosi + {0} ya glukosi + lita {0} kwa kilomita 100 lita {0} kwa kilomita 100 @@ -4072,6 +4136,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milimita {0} ya zebaki milimita {0} za zebaki + + ya zebaki + {0} ya zebaki + {0} ya zebaki + pauni {0} kwa kila inchi mraba pauni {0} kwa kila inchi mraba @@ -4228,20 +4297,77 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kwati {0} ya Uingereza kwati {0} za Uingereza - - mwanga - mwanga {0} - mianga {0} + + steradian + steradian {0} + steradian {0} - + + katal + katal {0} + katal {0} + + + coulomb + coulomb {0} + coulomb {0} + + + farad + farad {0} + farad {0} + + + henry + henry {0} + henry {0} + + + siemens + siemens {0} + siemens {0} + + + calorie [IT] + calorie [IT] {0} + calorie [IT] {0} + + + bekereli + bekereli {0} + bekereli {0} + + + sievert + sievert {0} + sievert {0} + + + grei + grei {0} + grei {0} + + + kilogramu za kani + kilogramu za kani {0} + kilogramu za kani {0} + + + tesla + tesla {0} + tesla {0} + + + weber + weber {0} + weber {0} + + sehemu kwa kila bilioni sehemu {0} kwa kila bilioni sehemu {0} kwa kila bilioni - usiku - usiku {0} - usiku {0} {0} kila usiku @@ -4433,7 +4559,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kipengee {0} vipengee {0} - + + kipande + kipande {0} + kipande {0} + + sehemu kwa kila milioni ppm {0} ppm {0} @@ -4456,6 +4587,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ moli {0} moli {0} + + Glc + Glc {0} + Glc {0} + lita kwa kila kilomita lita {0} kwa kilomita @@ -4971,6 +5107,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmHg {0} mmHg {0} + + {0} ya Hg + {0} za Hg + pauni kwa kila inchi mraba psi {0} @@ -5213,12 +5353,65 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ qt Imp. {0} qt Imp. {0} + + sr {0} + sr {0} + + + kat {0} + kat {0} + + + C {0} + C {0} + + + F {0} + F {0} + + + H {0} + H {0} + + + S {0} + S {0} + + + cal-IT + cal-IT {0} + cal-IT {0} + + + Bq {0} + Bq {0} + + + Sv {0} + Sv {0} + + + Gy {0} + Gy {0} + + + kgf {0} + kgf {0} + + + T {0} + T {0} + + + Wb {0} + Wb {0} + mwanga mwanga {0} mianga {0} - + sehemu kwa bilioni @@ -5268,9 +5461,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmol {0}/L mmol {0}/L - + + kipande + kipande {0} + kipande {0} + + ppm + + Glc + Glc {0} + Glc {0} + L/100km {0} L/100km {0} @@ -5343,6 +5546,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Wati {0} Wati {0} + + Hg {0} + {0} za Hg + {0} inHg {0} inHg @@ -5358,20 +5565,62 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ °C - - mwanga - mwanga {0} - mianga {0} + + sr {0} + sr {0} - + + kat {0} + kat {0} + + + C {0} + C {0} + + + F {0} + F {0} + + + H {0} + H {0} + + + S {0} + S {0} + + + cal-IT + cal-IT {0} + cal-IT {0} + + + Bq {0} + Bq {0} + + + Sv {0} + Sv {0} + + + Gy {0} + Gy {0} + + + kgf {0} + kgf {0} + + + T{0} + T{0} + + + Wb{0} + Wb{0} + + sehemu kwa kila bilioni - - usiku - usiku {0} - usiku {0} - {0}/usiku - diff --git a/make/data/cldr/common/main/sw_KE.xml b/make/data/cldr/common/main/sw_KE.xml index 5ab87eb56a6..54b133ee29f 100644 --- a/make/data/cldr/common/main/sw_KE.xml +++ b/make/data/cldr/common/main/sw_KE.xml @@ -42,7 +42,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kiingereza cha Australia Kiingereza cha Kanada Kiingereza cha Uingereza - Kiingereza cha Uingereza Kiingereza cha Marekani Kiingereza cha Marekani) Kihispania cha Amerika Kusini @@ -221,7 +220,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bhutani Belarusi Visiwa vya Kokos (Keeling) - Kongo - Kinshasa Kepuvede Kurakao Keuta na Melilla @@ -505,13 +503,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Saa za Afghanistani - - - Saa za Afrika Magharibi - Saa za Wastani za Afrika Magharibi - Saa za Majira ya Joto za Afrika Magharibi - - Saa za Amazon @@ -989,29 +980,55 @@ CLDR data files are interpreted according to the LDML specification (http://unic - #,##0.00;(#,##0.00) + #,##0.00 - ¤ M0;¤-M0 + ¤ elfu 0 + ¤ elfu 0 + ¤ elfu 0 + ¤ elfu 0 + ¤ elfu 00 + ¤ elfu 00 + ¤ elfu 00 + ¤ elfu 00 + ¤ elfu 000 + ¤ elfu 000 + ¤ elfu 000 + ¤ elfu 000 + ¤ M0 + ¤ M0 ¤ M0 - ¤ M00;¤M-M00 - ¤ M00;¤-M00 - ¤ M000;¤M-000 + ¤ M00 + ¤ M00 + ¤ M00 + ¤ M00 + ¤ M000 + ¤ M000 ¤ M000 - ¤ B0;¤-B0 - ¤ B0;¤-B0 - ¤ B00;¤-B00 - ¤ B00;¤-B00 - ¤ B000;¤-B000 - ¤ B000;¤-B000 - ¤ T0;¤-T0 + ¤ B0 + ¤ B0 + ¤ B0 + ¤ B0 + ¤ B00 + ¤ B00 + ¤ B00 + ¤ B00 + ¤ B000 + ¤ B000 + ¤ B000 + ¤ B000 + ¤ T0 + ¤ T0 ¤ T0 - ¤ T00;¤-T00 + ¤ T00 + ¤ T00 ¤ T00 - ¤ T000;¤-T000 - ¤ T000;¤-T000 + ¤ T000 + ¤ T000 + ¤ T000 + ¤ T000 diff --git a/make/data/cldr/common/main/syr.xml b/make/data/cldr/common/main/syr.xml index de89e87770a..e91005bc79f 100644 --- a/make/data/cldr/common/main/syr.xml +++ b/make/data/cldr/common/main/syr.xml @@ -34,7 +34,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܦܪܣܝܬ ܦܘܠܐܗܝܬ ܦܝܢܠܢܕܝܬ - ܦܝܠܝܦܝܢܝܬ + ܦܝܠܝܦܝܢܝܬ ܦܘܢܝܬ ܦܪܢܣܝܬ ܓܐܝܬ @@ -42,12 +42,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܓܘܓܐܪܝܬ ܥܒܪܐܝܬ ܗܢܕܝܐ + ܗܢܕܝܐ (ܪܗܘܡܝܐ) ܐܪܡܢܝܬ - ܐܢܕܘܢܝܬ + ܐܢܕܘܢܝܬ ܐܝܛܠܝܬ - ܝܦܢܝܐ + ܝܦܢܝܐ ܓܘܪܓܝܐܝܬ - ܟܘܪܐܝܬ + ܟܘܪܝܐܝܬ ܩܘܪܕܝܬ ܠܬܝܢܝܬ ܓܢܕܝܬ @@ -68,18 +69,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܣܘܝܕܐܝܬ ܣܘܐܗܝܠܐܝܬ ܣܘܪܝܝܐ - ܬܝܠܢܕܐܝܬ + ܬܝܠܢܕܐܝܬ ܬܘܪܟܝܬ ܐܘܟܪܐܝܢܐܝܬ ܠܫܢܐ ܠܐ ܝܕܝܥܐ ܐܘܪܕܘܝܬ ܒܝܬܢܐܡܐܝܬ ܝܕܝܬܝܬ - ܨܝܢܝܬ - ܨܝܢܝܬ (ܡܐܢܕܘܪܝܐ) - ܨܝܢܝܬ (ܦܫܝܛܐ) - ܨܝܢܝܬ (ܡܐܢܕܘܪܝܐ ܦܫܝܛܐ) - ܨܝܢܐܝܬ + ܨܝܢܐܝܬ + ܨܝܢܐܝܬ ܦܫܝܛܐ + ܨܝܢܐܝܬ ܝܘܒܠܝܐ @@ -87,58 +86,60 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + - - + + + + - + - - + + - - + + - ܬܐܒܝܠ + ܥܠܡܐ ܐܦܪܝܩܐ ܐܡܪܝܟܐ ܓܪܒܝܝܬܐ ܐܡܪܝܟܐ ܬܝܡܢܝܬܐ ܐܘܩܝܢܘܣܝܐ - ܐܦܪܝܩܐ ܡܥܪܒܝܬܐ + ܡܥܪܒ ܐܦܪܝܩܐ ܐܡܪܝܟܐ ܡܨܥܝܬܐ - ܐܦܪܝܩܐ ܡܕܢܚܝܬܐ - ܐܦܪܝܩܐ ܓܪܒܝܝܬܐ - ܐܦܪܝܩܐ ܡܨܥܝܬܐ - ܐܦܪܝܩܐ ܬܝܡܢܝܬܐ + ܡܕܢܚ ܐܦܪܝܩܐ + ܓܪܒܐ ܐܦܪܝܩܐ + ܡܨܥܬ ܐܦܪܝܩܐ + ܬܝܡܢ ܐܦܪܝܩܐ ܐܡܪ̈ܝܟܐ - ܓܪܒܝܐ ܐܡܪܝܟܐ - ܟܐܪܝܒܝܢ - ܐܣܝܐ ܡܕܢܚܝܬܐ - ܐܣܝܐ ܬܝܡܢܝܬܐ + ܓܪܒܐ ܐܡܪܝܟܐ + ܟܐܪܝܒܐ + ܡܕܢܚ ܐܣܝܐ + ܬܝܡܢ ܐܣܝܐ ܬܝܡܢ ܡܕܢܚ ܐܣܝܐ - ܐܘܪܘܦܐ ܬܝܡܢܝܬܐ + ܬܝܡܢ ܐܘܪܘܦܐ ܐܘܣܛܪܐܠܐܣܝܐ ܡܝܠܐܢܝܣܝܐ ܡܝܟܪܘܢܝܙܝܐ ܦܘܠܢܝܣܝܐ ܐܣܝܐ - ܐܣܝܐ ܡܨܥܝܬܐ - ܐܣܝܐ ܡܥܪܒܝܬܐ + ܡܨܥܬ ܐܣܝܐ + ܡܥܪܒ ܐܣܝܐ ܐܘܪܘܦܐ - ܐܘܪܘܦܐ ܡܕܢܚܝܬܐ - ܐܘܪܘܦܐ ܓܪܒܝܝܬܐ - ܐܘܪܘܦܐ ܡܥܪܒ݂ܝܬܐ - ܐܦܪܝܩܐ ܨܚܪܐ ܬܝܡܢܝܬܐ + ܡܕܢܚ ܐܘܪܘܦܐ + ܓܪܒܐ ܐܘܪܘܦܐ + ܡܥܪܒ ܐܘܪܘܦܐ + ܐܦܪܝܩܐ ܬܝܡܢ ܨܚܪܐ ܐܡܪܝܟܐ ܠܬܝܢܝܬܐ - ܓܙܪܬܐ ܕܐܣܝܢܫܘܢ + ܓܙܪܬܐ ܕܣܘܠܩܐ ܐܢܕܘܪܐ - ܐܡܝܪ̈ܘܬܐ ܡܚܝܕ̈ܬܐ ܥܪ̈ܒܝܐ + ܐܡܝܪ̈ܘܬܐ ܥܪ̈ܒܝܬܐ ܡܚܝ̈ܕܬܐ ܐܦܓܐܢܣܬܐܢ ܐܢܬܝܓܘܐ ܘܒܐܪܒܘܕܐ ܐܢܓܘܝܠܐ @@ -147,11 +148,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܐܢܓܘܠܐ ܐܢܬܪܬܝܟܐ ܐܪܓܢܬܝܢܐ - ܣܡܘܐ ܐܡܝܖ̈ܟܝܐ + ܣܡܘܐ ܐܡܪܝܟܝܬܐ ܐܘܣܛܪܝܐ ܐܘܣܬܪܠܝܐ ܐܪܘܒܐ - ܓܙܝܖ̈ܐ ܕܐܠܐܢܕ + ܓܙܪ̈ܬܐ ܕܐܠܐܢܕ ܐܙܪܒܝܓܐܢ ܒܘܣܢܐ ܘܗܪܬܣܓܘܒܝܢܐ ܒܪܒܐܕܘܣ @@ -162,11 +163,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܒܚܪܝܢ ܒܘܪܘܢܕܝ ܒܢܝܢ - ܡܪܬܝ ܒܪ ܬܘܠܡܝ - ܒܪܡܘܕܐ + ܡܪܝ ܒܪ ܬܘܠܡܝ + ܒܝܪܡܘܕܐ ܒܪܘܢܐܝ ܒܘܠܝܒܝܐ - ܟܐܪܝܒܝܢ ܕܢܝܬܝܪܠܐܢܕܣ + ܟܐܪܝܒܐ ܕܢܝܬܝܪܠܐܢܕܣ ܒܪܐܙܝܠ ܒܗܐܡܣ ܒܘܬܐܢ @@ -175,7 +176,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܒܠܐܪܘܣ ܒܠܝܙ ܟܢܕܐ - ܓܙܝܖ̈ܐ ܕܟܘܟܘܣ + ܓܙܪ̈ܬܐ ܕܟܘܟܘܣ ܟܘܢܓܘ - ܟܝܢܫܐܣܐ ܩܘܛܢܝܘܬܐ ܕܝܡܘܩܪܛܝܬܐ ܕܟܘܢܓܘ ܩܘܛܢܝܘܬܐ ܕܐܦܪܝܩܐ ܡܨܥܝܬܐ @@ -184,14 +185,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܣܘܝܣܪܐ ܩܘܛ ܕܝܒܘܐܪ ܣܘܦܐ ܕܓܪܡܦܝܠܐ - ܓܙܪܬܐ ܟܘܟ + ܓܙܪ̈ܬܐ ܟܘܟ ܬܫܝܠܝ ܟܐܡܪܘܢ ܨܝܢ ܟܘܠܘܡܒܝܐ - ܓܙܪܬܐ ܕܟܠܝܦܝܪܬܘܢ - ܟܘܣܬܐ ܪܝܩܐ - ܟܘܒܐ + ܓܙܪܬܐ ܕܟܠܝܦܝܪܬܘܢ + ܣܐܪܟ + ܟܘܣܬܐ ܪܝܟܐ + ܩܘܒܐ ܟܐܦ ܒܝܪܕܝ (ܪܝܫܐ ܝܘܪܩܐ) ܟܘܪܐܟܘ ܓܙܪܬܐ ܕܟܪܝܣܬܡܣ @@ -199,7 +201,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܬܫܝܟܝܐ ܬܫܝܟ ܐܠܡܢܝܐ - ܕܐܝܓܘ ܓܪܣܝܐ + ܕܝܐܓܘ ܓܐܪܣܝܐ ܓܝܒܘܛܝ ܕܐܢܡܐܪܩ ܕܘܡܝܢܝܩܐ @@ -217,10 +219,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܩܠܝܡܐ ܕܐܘܪܘ ܦܝܢܠܢܕ ܦܝܓܝ - ܓܙܪܬܐ ܕܦܠܟܠܢܕ - ܓܙܪܬܐ ܕܡܠܒܢܐܣ - ܐܬܪܘܬܐ ܦܕܪܠܝܐ ܕܡܝܩܪܘܢܝܣܝܐ - ܓܙܝܖ̈ܐ ܕܦܪܘ + ܓܙܪ̈ܬܐ ܕܦܠܟܠܢܕ + ܓܙܪ̈ܬܐ ܕܡܠܒܢܐܣ + ܐܬܪ̈ܘܬܐ ܦܕܪܠܝܐ ܕܡܝܩܪܘܢܝܣܝܐ + ܓܙܪ̈ܬܐ ܕܦܪܘ ܦܪܢܣܐ ܓܒܘܢ ܡܠܟܘܬܐ ܡܚܝܕܬܐ @@ -236,42 +238,43 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܓܘܐܕܘܠܘܦܐܝ ܓܝܢܝܐ ܫܘܝܬܐ ܝܘܢ - ܓܙܝܖ̈ܐ ܕܓܘܪܓܝܐ ܘܣܐܢܕܘܝܟ ܬܝܡܢܝ̈ܐ + ܓܙܪ̈ܬܐ ܕܓܘܪܓܝܐ ܘܣܐܢܕܘܝܟ ܬܝܡܢܝ̈ܐ ܓܘܐܬܝܡܐܠܐ ܓܘܐܡ ܓܝܢܝܐ ܒܝܣܐܘ ܓܘܝܐܢܐ ܗܘܢܓ ܟܘܢܓ - ܓܙܝܪ̈ܐ ܕܗܪܕ ܘܡܟܕܘܢܠܕ + ܓܙܪ̈ܬܐ ܕܗܪܕ ܘܡܟܕܘܢܠܕ ܗܘܢܕܘܪܣ ܩܪܘܐܛܝܐ ܗܐܝܬܝ ܡܓܪ - ܓܙܝܖ̈ܐ ܕܟܐܢܪܝ + ܓܙܝܪ̈ܐ ܕܟܐܢܪܝ ܐܝܢܕܘܢܝܣܝܐ ܐܝܪܠܢܕ ܐܝܣܪܐܝܠ ܓܙܪܬܐ ܕܡܐܢ ܗܢܕܘ - ܩܠܝܡܐ ܕܒܪܝܛܢܝܐ ܓܘ ܐܘܩܝܢܘܣ ܗܢܕܘܝܐ + ܐܬܪܐ ܕܐܘܩܝܢܘܣ ܗܢܕܘܝܐ ܕܒܪܝܛܢܝܐ + ܓܙܪ̈ܬܐ ܕܟܐܓܘܣ ܥܝܪܩ ܐܝܪܐܢ ܐܝܣܠܢܕ ܐܝܛܠܝܐ ܓܝܪܙܝ ܓܡܝܟܐ - ܐܘܪܕܘܢ + ܝܘܪܕܢܢ ܝܦܢ - ܩܝܢܝܐ + ܟܝܢܝܐ ܩܝܪܓܝܙܣܬܐܢ ܟܡܒܘܕܝܐ ܟܝܪܝܒܬܝ ܓܙܪܬܐ ܕܩܡܪ ܣܐܢܬ ܟܝܬܣ ܘܢܝܒܝܣ - ܟܘܪܝܐ ܕܓܪܒܝܐ - ܟܘܪܝܐ ܕܬܝܡܢܝܐ + ܟܘܪܝܐ ܓܪܒܝܝܬܐ + ܟܘܪܝܐ ܬܝܡܢܝܬܐ ܟܘܝܬ - ܓܙܝܖ̈ܐ ܕܟܐܝܡܐܢ + ܓܙܪ̈ܬܐ ܕܟܐܝܡܐܢ ܟܙܩܣܬܐܢ ܠܐܘܣ ܠܒܢܢ @@ -290,13 +293,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡܘܢܛܝܢܝܓܪܘ ܣܐܢܬ ܡܐܪܬܝܢ ܡܕܓܣܩܪ - ܓܙܪܬܐ ܡܐܪܫܐܠ + ܓܙܪ̈ܬܐ ܡܐܪܫܐܠ ܓܪܒܝ ܡܩܕܘܢܝܐ ܡܐܠܝ ܡܝܐܢܡܐܪ (ܒܘܪܡܐ) - ܡܘܢܓܘܠܝܐ - ܡܐܟܐܘ - ܓܙܝܖ̈ܐ ܕܡܪܝܢܐ ܓܪܒܝܐ + ܡܘܓܠܝܐ + ܐܬܪܐ ܡܕܒܪܢܝܐ ܦܪܝܫܐ ܕܡܐܟܐܘ + ܓܙܪ̈ܬܐ ܕܡܪܝܢܐ ܓܪ̈ܒܝܝܬܐ ܡܐܪܬܝܢܝܩ ܡܘܪܝܛܢܝܐ ܡܘܢܣܝܪܐܬ @@ -308,30 +311,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡܠܝܙܝܐ ܡܘܙܡܒܝܩ ܢܡܝܒܝܐ - ܢܝܘ ܟܠܝܕܘܢܝܐ + ܢܝܘ ܟܠܝܕܘܢܝܐ ܢܝܓܪ - ܓܙܪܬܐ ܕܢܘܪܦܠܟ + ܓܙܪܬܐ ܕܢܘܪܦܘܠܟ ܢܝܓܝܪܝܐ ܢܝܟܪܐܓܘܐ ܗܘܠܢܕܐ ܢܘܪܒܝܓ ܢܝܦܐܠ ܢܐܘܪܘ - ܢܘܥ + ܢܝܘܐܝ ܢܝܘ ܙܝܠܢܕ - ܐܬܝܐܐܪܐܘ ܢܝܘ ܙܝܠܢܕ + ܐܘܬܝܐܪܘܐ ܢܝܘ ܙܝܠܢܕ ܥܘܡܐܢ ܦܢܡܐ ܦܝܪܘ - ܦܘܠܝܢܝܣܝܐ ܦܪܢܣܝܐ + ܦܘܠܝܢܝܣܝܐ ܦܪܢܣܝܬܐ ܦܐܦܘܐ ܓܝܢܝܐ ܚܕܬܐ ܦܝܠܝܦܝܢܝܐ ܦܐܟܣܬܐܢ ܦܘܠܢܕ - ܣܐܢܬ ܦܝܥܪ ܘܡܩܘܠܘܢ - ܓܙܝܪ̈ܐ ܕܦܝܬܟܐܝܪܢ + ܡܪܝ ܦܛܪܘܣ ܘܡܝܩܝܠܘܢ + ܓܙܝܪ̈ܬܐ ܕܦܝܬܟܐܪܢ ܦܘܐܪܛܘ ܪܝܩܘ - ܐܬܖ̈ܘܬܐ ܕܦܠܣܛܝܢ + ܐܬܪ̈ܘܬܐ ܕܦܠܣܛܝܢ ܦܠܣܛܝܢ ܦܘܪܛܘܓܠ ܦܠܐܘ @@ -365,16 +368,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܣܘܪܝܐ ܐܣܘܐܛܝܢܝ ܣܘܐܙܝܠܢܕ - ܬܪܝܣܬܢ ܕܟܘܢܗܐ - ܓܙܝܖ̈ܐ ܕܬܘܪܟܣ ܘܟܐܝܟܘܣ + ܬܪܝܣܬܢ ܕܟܘܢܗܐ + ܓܙܝܪ̈ܐ ܕܬܘܪܟܣ ܘܟܐܝܟܘܣ ܬܫܐܕ - ܩܠܝܡ̈ܐ ܕܦܪܢܣܐ ܬܝܡܢܝܬܐ + ܐܬܪ̈ܘܬܐ ܬܝܡܢܝ̈ܬܐ ܕܦܪܢܣܐ ܬܘܓܘ ܬܐܝܠܢܕ ܬܐܓܝܟܣܬܐܢ - ܬܘܟܝܠܐܘ - ܬܝܡܘܪ-ܠܣܬܝ - ܬܝܡܘܪ ܡܕܢܚܐ + ܬܘܟܝܠܐܘ + ܡܕܢܚ ܬܝܡܘܪ ܬܘܪܟܡܢܣܬܐܢ ܬܘܢܣ ܬܘܢܓܐ @@ -385,7 +387,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܛܢܙܢܝܐ ܐܘܩܪܐܝܢܐ ܐܘܓܢܕܐ - ܓܙܝܪ̈ܐ ܪ̈ܚܝܩܐ ܕܐܘܚܕ̈ܢܐ ܡܚܝܕ̈ܐ + ܓܙܪ̈ܬܐ ܒܪ̈ܝܬܐ ܕܐܘܚܕ̈ܢܐ ܡܚܝܕ̈ܐ ܐܡ̈ܘܬܐ ܡܚܝ̈ܕܬܐ ܐܘܚܕ̈ܢܐ ܡܚܝܕ̈ܐ ܐܘܪܘܓܘܐܝ @@ -393,11 +395,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡܕܝܢܬܐ ܕܘܛܝܩܢ ܣܐܢܬ ܒܝܢܣܝܢܬ ܘܓܪܝܢܐܕܝܢܐܣ ܒܢܙܘܝܠܐ - ܓܙܖ̈ܝܐ ܒܬܘ̈ܠܐ ܕܒܪܝܛܢܝܐ - ܓܙܖ̈ܝܐ ܒܬܘ̈ܠܐ ܕܐܡܝܪܟܐ + ܓܙܪ̈ܬܐ ܕܒܬܘ̈ܠܐ ܕܒܪܝܛܢܝܐ + ܓܙܪ̈ܬܐ ܕܒܬܘ̈ܠܐ ܕܐܡܪܝܟܐ ܒܝܬܢܐܡ ܒܐܢܘܐܛܘ - ܘܝܠܝܣ ܘܦܘܬܘܢܐ + ܘܐܠܝܣ ܘܦܘܬܘܢܐ ܣܡܘܐ ܩܘܣܘܒܘ ܝܡܢ @@ -405,7 +407,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܬܝܡܢ ܐܦܪܝܩܐ ܙܐܡܒܝܐ ܙܝܡܒܐܒܘܝ - ܩܠܝܡܐ ܠܐ ܝܕܝܥܐ + ܐܬܪܐ ܠܐ ܝܕܝܥܐ ܣܘܪܓܕܐ @@ -423,10 +425,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܣܘܪܓܕܐ ܕܢܓܝ ܣܘܪܓܕܐ ܟܘܫܝܐ ܣܘܪܓܕܐ ܓܪܝܓܘܪܝܐ + ܓܪܝܓܘܪܝܐ ܣܘܪܓܕܐ ܝܗܘܕܝܐ ܣܘܪܓܕܐ ܐܘܡܬܢܝܐ ܗܢܕܘܝܐ - ܣܘܪܓܕܐ ܡܫܠܡܢܝܐ - ܣܘܪܓܕܐ ܡܫܠܡܢܝܐ ܡܕܝܢܝܐ + ܣܘܪܓܕܐ ܡܫܠܡܢܐ + ܣܘܪܓܕܐ ܡܫܠܡܢܐ + ܣܘܪܓܕܐ ܡܫܠܡܢܐ ܡܕܝܢܝܐ + ܣܘܪܓܕܐ ܡܫܠܡܢܐ ܡܕܝܢܝܐ ܣܘܪܓܕܐ ISO-8601 ܣܘܪܓܕܐ ܝܦܢܝܐ ܣܘܪܓܕܐ ܦܪܣܝܐ @@ -451,14 +456,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡܢܝ̈ܢܐ ܕܝܘܢܝ̈ܐ ܡܢܝ̈ܢܐ ܕܝܗܘܕܝ̈ܐ ܡܢܝ̈ܢܐ ܕܝܦܢܝ̈ܐ - ܡܢܝ̈ܢܐ ܡܥܪܒܝܐ + ܡܢܝ̈ܢܐ ܡܥܪ̈ܒܝܐ ܡܢܝ̈ܢܐ ܕܡܘܢܓܘܠܢܝ̈ܐ ܡܢܝ̈ܢܐ ܪܗܘܡܝܐ ܛܟܣܐ ܡܝܬܪܝܐ ܛܟܣܐ ܒܪܝܛܢܝܐ - ܛܟܣܐ ܐܡܝܪܟܐ + ܛܟܣܐ ܐܡܪܝܟܝܐ ܠܫܢܐ:‌ {0} @@ -474,9 +479,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic [݀ ݃ ݄ ݇ ݈ ݉ ݊ ݁ ݅ ݂ ݆ ܑ ܰ ܱ ܲ ܳ ܴ ܵ ܶ ܷ ܸ ܹ ܺ ܻ ܼ ܽ ܾ ܿ ܃ ܄ ܅ ܆ ܇ ܈ ܉ ܁ ܂ ܀ ܊ ܋ ܌ ܍ ܐ ܒ ܓܔ ܖ ܕ ܗ ܘ ܙ ܚ ܛܜ ܝ ܞ ܟ ܠ ܡ ܢ ܣܤ ܥ ܦܧ ܨ ܩ ܪ ܫ ܬ] [܏\u200C\u200D ܭ ܮ ܯ ݍ ݎ ݏ] - [ܐ ܒ ܓ ܖ ܕ ܗ ܘ ܙ ܚ ܛ ܝ ܟ ܠ ܡ ܢ ܣ ܥ ܦ ܨ ܩ ܪ ܫ ܬ] - [\u061C\u200E \- ‑ , ٫ ٬ . % ٪ ‰ ؉ + 0٠ 1١ 2٢ 3٣ 4٤ 5٥ 6٦ 7٧ 8٨ 9٩] - [\- ‐‑ – — ، ؛ \: ܃ ܄ ܅ ܆ ܇ ܈ ! ؟ ܉ . … ܁ ܂ ܀ '‘’ "“” « » ( ) \[ \] ܊ ܋ ܌ ܍] + [ܐ ܒ ܓ ܖ ܕ ܗ ܘ ܙ ܚ ܛ ܝ ܟ ܠ ܡ ܢ ܣ ܥ ܦ ܨ ܩ ܪ ܫ ܬ] + [\u061C\u200E \- ‑ , ٫ ٬ . % ٪ ‰ ؉ + 0٠ 1١ 2٢ 3٣ 4٤ 5٥ 6٦ 7٧ 8٨ 9٩] + [\- ‐‑ – — ، ؛ \: ܃ ܄ ܅ ܆ ܇ ܈ ! ؟ ܉ . … ܁ ܂ ܀ '‘’ "“” « » ( ) \[ \] ܊ ܋ ܌ ܍] ؟ [\: ∶] @@ -748,8 +753,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܐ ܢ ܐ - ܬ - ܚ + ܚ + ܬ ܐ ܐ ܬ @@ -793,6 +798,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + ܏ܪ ܐ + ܏ܪ ܒ + ܏ܪ ܓ + ܏ܪ ܕ + ܪܘܒܥܐ ܩܕܡܝܐ ܪܘܒܥܐ ܬܪܝܢܐ @@ -800,6 +811,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܪܘܒܥܐ ܪܒܝܥܝܐ + + + ܏ܪ ܐ + ܏ܪ ܒ + ܏ܪ ܓ + ܏ܪ ܕ + + @@ -912,6 +931,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM y G d ܒMMM y G EEEE، d ܒMMM y G + v HH܏ܫܥ dd/MM EEEE، dd/MM d ܒMMM @@ -1027,6 +1047,42 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + + ܡܘܚܪܡ + ܨܦܪ + ܪܒܝܥ ܩܕܡܝܐ + ܪܒܝܥ ܬܪܝܢܐ + ܓܘܡܕܐ ܩܕܡܝܐ + ܓܘܡܕܐ ܬܪܝܢܐ + ܪܓܒ + ܫܥܒܐܢ + ܪܡܨܐܢ + ܫܘܐܠ + ܕܘܠܩܥܕܗ + ܕܘܠܚܓܗ + + + + + ܡܘܚܪܡ + ܨܦܪ + ܪܒܝܥ ܩܕܡܝܐ + ܪܒܝܥ ܬܪܝܢܐ + ܓܘܡܕܐ ܩܕܡܝܐ + ܓܘܡܕܐ ܬܪܝܢܐ + ܪܓܒ + ܫܥܒܐܢ + ܪܡܨܐܢ + ܫܘܐܠ + ܕܘܠܩܥܕܗ + ܕܘܠܚܓܗ + + + + @@ -1036,7 +1092,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܫܢܬܐ ܐܫܬܩܕܝ ܗܕܐ ܫܢܬܐ - ܫܢܬܐ ܐܚܪܬܐ + ܫܢܬܐ ܕܐܬܝܐ ܒܚܕܐ ܫܢܬܐ ܒ{0} ܫܢܝ̈ܐ @@ -1046,6 +1102,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡ̣ܢ ܩܕܡ {0} ܫܢܝ̈ܐ + + ܏ܫܢ + ܏ܫܬܩܕ + ܗܕ ܏ܫܢ + ܏ܫܢ ܕܐܬܝܐ + + + ܏ܫܢ + ܏ܫܬܩܕ + ܗܕ ܏ܫܢ + ܏ܫܢ ܕܐܬܝܐ + ܪܘܒܥܐ ܕܫܢܬܐ ܪܘܒܥܐ ܕܥܒܪ @@ -1060,9 +1128,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡ̣ܢ ܩܕܡ {0} ܪ̈ܘܒܥܐ + + ܪܒܘܥ ܏ܫܢ + + + ܪܒܘܥ ܏ܫܢ + ܝܪܚܐ - ܝܪܚܐ ܕܕܥܒܪ + ܝܪܚܐ ܐܚܪܝܐ ܗܢܐ ܝܪܚܐ ܝܪܚܐ ܕܐܬܐ @@ -1075,15 +1149,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic + ܏ܝܪܚ + ܏ܝܪܚ ܏ܐܚܪ + ܗܢ ܏ܝܪܚ + ܏ܝܪܚ ܕܐܬܐ ܡ̣ܢ ܩܕܡ ܚܕ ܝܪܚܐ ܡ̣ܢ ܩܕܡ {0} ܝܖ̈ܚܐ + + ܏ܝܪܚ + ܏ܝܪܚ ܏ܐܚܪ + ܗܢ ܏ܝܪܚ + ܏ܝܪܚ ܕܐܬܐ + ܫܒܘܥܐ - ܫܒܘܥܐ ܕܕܥܒܪ - ܗܕܐ ܫܒܘܥܐ + ܫܒܘܥܐ ܐܚܪܝܐ + ܗܢܐ ܫܒܘܥܐ ܫܒܘܥܐ ܕܐܬܐ ܒܚܕ ܫܒܘܥܐ @@ -1096,19 +1180,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܫܒܘܥܐ ܕ{0} - ܫܒܐ + ܏ܫܒܘ + ܏ܫܒܘ ܏ܐܚܪ + ܗܢ ܏ܫܒܘ + ܏ܫܒܘ ܕܐܬܐ + ܏ܫܒܘ ܕ{0} + + + ܏ܫܒܘ + ܏ܫܒܘ ܏ܐܚܪ + ܗܢ ܏ܫܒܘ + ܏ܫܒܘ ܕܐܬܐ + ܏ܫܒܘ {0} ܫܒܘܥܐ ܕܝܪܚܐ - ܫܒܐ ܕܝܪܚܐ + ܫܒܘܥ ܝܪܚܐ + + + ܫܒܘܥ ܝܪܚܐ ܝܘܡܐ ܐܬܡܠܝ ܐܕܝܘܡ - ܝܘܡܐ ܕܐܬܐ + ܩܘܕܡܐ ܒܚܕ ܝܘܡܐ ܒ{0} ܝܘܡܢ̈ܐ @@ -1118,9 +1216,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡ̣ܢ ܩܕܡ {0} ܝܘܡܢ̈ܐ + + ܏ܝܘܡ + ܏ܬܡܠ + ܐܕܝܘܡ + ܏ܩܘܕܡ + + + ܏ܝܘܡ + ܏ܬܡܠ + ܐܕܝܘܡ + ܏ܩܘܕܡ + ܝܘܡܐ ܕܫܢܬܐ + + ܝܘܡ ܫܢܬܐ + ܝܘܡܐ ܕܫܒܘܥܐ @@ -1134,11 +1247,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܝܘܡܐ ܦܘܠܚܢܐ ܕܫܒܐ - ܚܕܒܫܒܐ ܕܕܥܒܪ - ܗܕܐ ܚܕܒܫܒܐ + ܚܕܒܫܒܐ ܐܚܪܝܐ + ܗܢܐ ܚܕܒܫܒܐ ܚܕܒܫܒܐ ܕܐܬܐ - ܒܚܕ ܚܕܒܫܒܐ + ܒ{0} ܚܕܒܫܒ̈ܐ ܒ{0} ܚܕܒܫܒ̈ܐ @@ -1242,6 +1355,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡ̣ܢ ܩܕܡ {0} ܫܥ̈ܐ + + ܏ܫܥ + + + ܏ܫܥ + ܩܛܝܢܬܐ ܗܢܐ ܩܛܝܢܬܐ @@ -1254,6 +1373,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡ̣ܢ ܩܕܡ {0} ܩܛܝ̈ܢܐ + + ܏ܩܛܝܢ + + + ܏ܩܛܝܢ + ܪܦܦܐ ܗܫܐ @@ -1266,27 +1391,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܡ̣ܢ ܩܕܡ {0} ܖ̈ܦܦܐ + + ܏ܪܦ + + + ܏ܪܦ + ܦܢܝܬܐ ܕܙܒܢܐ - ܥܕܢܐ {0} - ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ {0} - ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ {0} + ܥܕܢܐ ܕ{0} + ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕ{0} + ܥܕܢ {0} ܡܫܘܚܬܢܝܬܐ - ܥܕܢܘܬܐ ܬܒܠܝܬܐ ܡܛܟܘܣܬܐ + ܥܕܢܐ ܬܒܠܝܬܐ ܡܛܘܟܣܬܐ - ܡܕܝܢܬܐ ܠܐ ܝܕܥܝܬܐ + ܐܬܪܐ ܠܐ ܝܕܝܥܐ ܐܢܕܘܪܐ - ܕܘܒܐܝ + ܕܘܒܝ ܟܐܒܘܠ @@ -1451,10 +1582,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܦܘܪܬܘ-ܢܘܒܘ - ܡܪ ܒܪ ܬܘܠܡܝ + ܡܪܝ ܒܪ ܬܘܠܡܝ - ܒܝܪܡܝܘܕܐ + ܒܝܪܡܘܕܐ ܒܪܘܢܐܝ @@ -1595,7 +1726,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܒܠܐܢܟ-ܣܐܒܠܘܢ - ܡܪ ܝܘܚܢܢ + ܡܪܝ ܝܘܚܢܢ ܟܘܟܘܣ @@ -1613,7 +1744,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܒܪܐܙܐܒܝܠ - ܙܝܘܪܚ + ܙܝܘܪܟ ܐܒܕܓܢ @@ -1624,6 +1755,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܦܨܚܐ + + ܟܘܝܐܝܟܐ + ܦܘܢܬܐ ܥܪܝܢܣ @@ -1697,7 +1831,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܬܐܠܝܢ - ܩܐܗܖ̈ܗ + ܩܐܗܪܗ ܐܠ ܥܝܘܢ @@ -1746,7 +1880,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܕܒܪܝܛܢܝܐ + ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܒܪܝܛܢܝܐ ܠܘܢܕܘܢ @@ -1865,7 +1999,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܪܐܝܟܒܝܟ - ܪܘܡܝ + ܪܗܘܡܐ ܓܝܪܙܝ @@ -1888,7 +2022,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܦܢܘܡ ܦܢ - + ܟܐܢܬܘܢ @@ -2276,7 +2410,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܟܝܓܐܠܝ - ܪܝܐܕ + ܪܝܐܨ ܓܘܐܕܐܠܟܐܢܐܠ @@ -2498,7 +2632,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܘܐܬܝܩܐܢ - ܡܪ ܒܢܣܢܬ + ܡܪܝ ܒܢܣܢܬ ܟܐܪܐܟܣ @@ -2507,7 +2641,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܬܘܪܬܘܠܐ - ܡܪ ܬܐܘܡܐ + ܡܪܝ ܬܐܘܡܐ ܡܕܝܢܬܐ ܕܗܘ ܟܝ ܡܝܢ @@ -2565,9 +2699,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ܥܕܢܐ ܕܡܥܪܒ ܐܦܪܝܩܐ - ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܕܡܥܪܒ ܐܦܪܝܩܐ - ܥܕܢܐ ܩܝܬܝܬܐ ܕܡܥܪܒ ܐܦܪܝܩܐ + ܥܕܢܐ ܕܡܥܪܒ ܐܦܪܝܩܐ @@ -2649,9 +2781,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ܥܕܢܐ ܕܐܪܒܝܐ - ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܕܐܪܒܝܐ - ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܐܪܒܝܐ + ܥܕܢܐ ܕܐܪܒܝܐ + ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܕܐܪܒܝܐ + ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܐܪܒܝܐ @@ -2798,7 +2930,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ܥܕܢܐ ܕܓܙܝܖ̈ܐ ܕܟܘܟܘܣ + ܥܕܢܐ ܕܓܙܝܪ̈ܐ ܕܟܘܟܘܣ @@ -2817,9 +2949,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ܥܕܢܐ ܕܟܘܒܐ - ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܕܟܘܒܐ - ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܟܘܒܐ + ܥܕܢܐ ܕܩܘܒܐ + ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܕܩܘܒܐ + ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܩܘܒܐ @@ -2955,6 +3087,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܥܕܢܐ ܕܓܘܝܐܢܐ + + + ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܕܗܐܘܐܝܝ ܐܠܘܫܝܢ + + ܥܕܢܐ ܕܗܐܘܐܝܝ ܐܠܘܫܝܢ @@ -3041,6 +3178,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܦܝܬܪܘܦܒܠܒܣܟܝ-ܟܐܡܟܬܣܟܝ + + + ܥܕܢܐ ܕܟܙܩܣܬܐܢ + + ܥܕܢܐ ܕܡܕܢܚ ܟܙܩܣܬܐܢ @@ -3060,7 +3202,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ܥܕܢܐ ܟܘܣܪܐܝ + ܥܕܢܐ ܟܘܣܪܐܝ @@ -3490,21 +3632,314 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ܠܝܬ ܡܢܝܢܐ + ܠܝܬ ܡܢܝܢܐ {0} {1} {0} {1} + + ܕܪܗܡ ܕܐܪܡܢܝܐ + ܕܪܗܡ ܕܐܪܡܢܝܐ + ܕܪ̈ܗܡܐ ܕܐܪܡܢܝܐ + + + ܦܠܘܪܝܢ ܐܢܬܝܠܝܣܝܐ ܕܗܘܠܢܕܐ + ܦܠܘܪܝܢ ܐܢܬܝܠܝܣܝܐ ܕܗܘܠܢܕܐ + ܦܠܘܪ̈ܝܢܐ ܐܢܬܝܠܝܣܝܐ ܕܗܘܠܢܕܐ + + + ܦܝܣܘ ܕܐܪܓܢܬܝܢܐ + ܦܝܣܘ ܕܐܪܓܢܬܝܢܐ + ܦܝ̈ܣܘܣ ܕܐܪܓܢܬܝܢܐ + + + ܕܘܠܪ ܕܐܘܣܬܪܠܝܐ + ܕܘܠܪ ܕܐܘܣܬܪܠܝܐ + ܕܘܠܪ̈ܐ ܕܐܘܣܬܪܠܝܐ + + + ܦܠܘܪܝܢ ܕܐܪܘܒܐ + ܦܠܘܪܝܢ ܕܐܪܘܒܐ + ܦܠܘܪ̈ܝܢܐ ܕܐܪܘܒܐ + + + ܕܘܠܪ ܕܒܪܒܐܕܘܣ + ܕܘܠܪ ܕܒܪܒܐܕܘܣ + ܕܘܠܪ̈ܐ ܕܒܪܒܐܕܘܣ + + + ܕܝܢܪܐ ܕܒܚܪܝܢ + ܕܝܢܪܐ ܕܒܚܪܝܢ + ܕܝܢܪ̈ܐ ܕܒܚܪܝܢ + + + ܕܘܠܪ ܕܒܝܪܡܘܕܐ + ܕܘܠܪ ܕܒܝܪܡܘܕܐ + ܕܘܠܪ̈ܐ ܕܒܝܪܡܘܕܐ + + + ܕܘܠܪ ܕܒܪܘܢܐܝ + ܕܘܠܪ ܕܒܪܘܢܐܝ + ܕܘܠܪ̈ܐ ܕܒܪܘܢܐܝ + + + ܕܘܠܪ ܕܒܗܐܡܣ + ܕܘܠܪ ܕܒܗܐܡܣ + ܕܘܠܪ̈ܐ ܕܒܗܐܡܣ + + + ܕܘܠܪ ܕܒܠܝܙ + ܕܘܠܪ ܕܒܠܝܙ + ܕܘܠܪ̈ܐ ܕܒܠܝܙ + + + ܕܘܠܪ ܕܟܢܕܐ + ܕܘܠܪ ܕܟܢܕܐ + ܕܘܠܪ̈ܐ ܕܟܢܕܐ + + + ܝܘܐܢ ܕܨܝܢ + ܝܘܐܢ ܕܨܝܢ + ܝܘܐܢ̈ܐ ܕܨܝܢ + + + ܦܝܣܘ ܕܟܘܠܘܡܒܝܐ + ܦܝܣܘ ܕܟܘܠܘܡܒܝܐ + ܦܝ̈ܣܘܣ ܕܟܘܠܘܡܒܝܐ + + + ܟܘܠܘܢ ܕܟܘܣܬܐ ܪܝܟܐ + ܟܘܠܘܢ ܕܟܘܣܬܐ ܪܝܟܐ + ܟܘܠܘܢ̈ܐ ܕܟܘܣܬܐ ܪܝܟܐ + + + ܦܝܣܘ ܡܬܥܪܦܢܝܬܐ ܕܩܘܒܐ + ܦܝܣܘ ܡܬܥܪܦܢܝܬܐ ܕܩܘܒܐ + ܦܝ̈ܣܘܣ ܡܬܥܪ̈ܦܢܝܬܐ ܕܩܘܒܐ + + + ܦܝܣܘ ܕܩܘܒܐ + ܦܝܣܘ ܕܩܘܒܐ + ܦܝ̈ܣܘܣ ܕܩܘܒܐ + + + ܦܝܣܘ ܕܕܘܡܝܢܝܟܐܢ + ܦܝܣܘ ܕܕܘܡܝܢܝܟܐܢ + ܦܝ̈ܣܘܣ ܕܕܘܡܝܢܝܟܐܢ + + + ܕܝܢܪܐ ܕܓܙܐܪ + ܕܝܢܪܐ ܕܓܙܐܪ + ܕܝܢܪ̈ܐ ܕܓܙܐܪ + + + ܠܝܛܪܐ ܕܡܨܪܝܢ + ܠܝܛܪܐ ܕܡܨܪܝܢ + ܠܝܛܪ̈ܐ ܕܡܨܪܝܢ + + + ܐܘܪܘ + ܐܘܪܘ + ܐܘܪ̈ܘܣ + + + ܕܘܠܪ ܕܦܝܓܝ + ܕܘܠܪ ܕܦܝܓܝ + ܕܘܠܪ̈ܐ ܕܦܝܓܝ + + + ܠܝܛܪܐ ܕܓܙܪ̈ܬܐ ܕܦܠܟܠܢܕ + ܠܝܛܪܐ ܕܓܙܪ̈ܬܐ ܕܦܠܟܠܢܕ + ܠܝܛܪ̈ܐ ܕܓܙܪ̈ܬܐ ܕܦܠܟܠܢܕ + + + ܠܝܛܪܐ ܕܓܒܪܠܛܪ + ܠܝܛܪܐ ܕܓܒܪܠܛܪ + ܠܝܛܪ̈ܐ ܕܓܒܪܠܛܪ + + + ܟܝܬܙܠ ܕܓܘܐܬܝܡܐܠܐ + ܟܝܬܙܠ ܕܓܘܐܬܝܡܐܠܐ + ܟܝܬܙ̈ܠܐ ܕܓܘܐܬܝܡܐܠܐ + + + ܕܘܠܪ ܕܓܘܝܐܢܐ + ܕܘܠܪ ܕܓܘܝܐܢܐ + ܕܘܠܪ̈ܐ ܕܓܘܝܐܢܐ + + + ܕܘܠܪ ܕܗܘܢܓ ܟܘܢܓ + ܕܘܠܪ ܕܗܘܢܓ ܟܘܢܓ + ܕܘܠܪ̈ܐ ܕܗܘܢܓ ܟܘܢܓ + + + ܠܝܡܦܝܪܐ ܕܗܘܢܕܘܪܣ + ܠܝܡܦܝܪܐ ܕܗܘܢܕܘܪܣ + ܠܝܡܦܝܪ̈ܐ ܕܗܘܢܕܘܪܣ + + + ܓܘܪܕ ܕܗܐܝܬܝ + ܓܘܪܕ ܕܗܐܝܬܝ + ܓܘܪ̈ܕܐ ܕܗܐܝܬܝ + + + ܬܩܠܐ ܚܕܬܐ ܕܐܝܣܪܐܝܠ + ܬܩܠܐ ܚܕܬܐ ܕܐܝܣܪܐܝܠ + ܬܩ̈ܠܐ ܚܕ̈ܬܐ ܕܐܝܣܪܐܝܠ + + + ܕܝܢܪܐ ܕܥܝܪܐܩ + ܕܝܢܪܐ ܕܥܝܪܐܩ + ܕܝܢܪ̈ܐ ܕܥܝܪܐܩ + + + ܕܘܠܪ ܕܓܡܝܟܐ + ܕܘܠܪ ܕܓܡܝܟܐ + ܕܘܠܪ̈ܐ ܕܓܡܝܟܐ + + + ܕܝܢܪܐ ܕܝܘܪܕܢܢ + ܕܝܢܪܐ ܕܝܘܪܕܢܢ + ܕܝܢܪ̈ܐ ܕܝܘܪܕܢܢ + + + ܘܘܢ ܕܟܘܪܝܐ ܓܪܒܝܝܬܐ + ܘܘܢ ܕܟܘܪܝܐ ܓܪܒܝܝܬܐ + ܘܘܢ̈ܐ ܕܟܘܪܝܐ ܓܪܒܝܝܬܐ + + + ܘܘܢ ܕܟܘܪܝܐ ܬܝܡܢܝܬܐ + ܘܘܢ ܕܟܘܪܝܐ ܬܝܡܢܝܬܐ + ܘܘܢ̈ܐ ܕܟܘܪܝܐ ܬܝܡܢܝܬܐ + + + ܕܝܢܪܐ ܕܟܘܝܬ + ܕܝܢܪܐ ܕܟܘܝܬ + ܕܝܢܪ̈ܐ ܕܟܘܝܬ + + + ܕܘܠܪ ܕܓܙܪ̈ܬܐ ܕܟܐܝܡܐܢ + ܕܘܠܪ ܕܓܙܪ̈ܬܐ ܕܟܐܝܡܐܢ + ܕܘܠܪ̈ܐ ܕܓܙܪ̈ܬܐ ܕܟܐܝܡܐܢ + + + ܠܝܛܪܐ ܕܠܒܢܢ + ܠܝܛܪܐ ܕܠܒܢܢ + ܠܝܛܪ̈ܐ ܕܠܒܢܢ + + + ܕܝܢܪܐ ܕܠܘܒܐ + ܕܝܢܪܐ ܕܠܘܒܐ + ܕܝܢܪ̈ܐ ܕܠܘܒܐ + + + ܕܪܗܡ ܕܡܓܪܒ + ܕܪܗܡ ܕܡܓܪܒ + ܕܪ̈ܗܡܐ ܕܡܓܪܒ + + + ܕܝܢܪܐ ܕܡܩܕܘܢܝܐ + ܕܝܢܪܐ ܕܡܩܕܘܢܝܐ + ܕܝܢܪ̈ܐ ܕܡܩܕܘܢܝܐ + + + ܦܝܣܘ ܕܡܟܣܝܟܘ + ܦܝܣܘ ܕܡܟܣܝܟܘ + ܦܝ̈ܣܘܣ ܕܡܟܣܝܟܘ + + + ܩܘܪܕܘܒܝ ܕܢܝܟܐܪܐܓܘܐ + ܩܘܪܕܘܒܝ ܕܢܝܟܐܪܐܓܘܐ + ܩܘܪ̈ܕܘܒܐ ܕܢܝܟܐܪܐܓܘܐ + + + ܒܐܠܒܘܐ ܕܦܐܢܡܐ + ܒܐܠܒܘܐ ܕܦܐܢܡܐ + ܒܐܠܒܘ̈ܐ ܕܦܐܢܡܐ + + + ܦܝܣܘ ܕܦܝܠܝܦܝܐ + ܦܝܣܘ ܕܦܝܠܝܦܝܐ + ܦܝ̈ܣܘܣ ܕܦܝܠܝܦܝܐ + + + ܕܝܢܪܐ ܕܣܪܒܝܐ + ܕܝܢܪܐ ܕܣܪܒܝܐ + ܕܝܢܪ̈ܐ ܕܣܪܒܝܐ + + + ܕܘܠܪ ܕܓܙܪ̈ܬܐ ܕܫܠܝܡܘܢ + ܕܘܠܪ ܕܓܙܪ̈ܬܐ ܕܫܠܝܡܘܢ + ܕܘܠܪ̈ܐ ܕܓܙܪ̈ܬܐ ܕܫܠܝܡܘܢ + + + ܠܝܛܪܐ ܕܣܘܕܐܢ + ܠܝܛܪܐ ܕܣܘܕܐܢ + ܠܝܛܪ̈ܐ ܕܣܘܕܐܢ + + + ܕܘܠܪ ܕܣܝܢܓܐܦܘܪ + ܕܘܠܪ̈ܐ ܕܣܝܢܓܐܦܘܪ + ܕܘܠܪ̈ܐ ܕܣܝܢܓܐܦܘܪ + - ل.س.‏ + ܠܝܛܪܐ ܕܣܘܪܝܐ + ܠܝܛܪܐ ܕܣܘܪܝܐ + ܠܝܛܪ̈ܐ ܕܣܘܪܝܐ + ل.س.‏ + + + ܕܝܢܪܐ ܕܬܘܢܣ + ܕܝܢܪܐ ܕܬܘܢܣ + ܕܝܢܪ̈ܐ ܕܬܘܢܣ + + + ܠܝܛܪܐ ܕܬܘܪܟܝܐ + ܠܝܛܪܐ ܕܬܘܪܟܝܐ + ܠܝܛܪ̈ܐ ܕܬܘܪܟܝܐ + + + ܕܘܠܪ ܕܬܪܝܢܝܕܐܕ ܘܬܘܒܐܓܘ + ܕܘܠܪ ܕܬܪܝܢܝܕܐܕ ܘܬܘܒܐܓܘ + ܕܘܠܪ̈ܐ ܕܬܪܝܢܝܕܐܕ ܘܬܘܒܐܓܘ + + + ܕܘܠܪ ܕܐܘܚܕܢ̈ܐ ܡܚܘܝܕ̈ܐ + ܕܘܠܪ ܕܐܘܚܕܢ̈ܐ ܡܚܘܝܕ̈ܐ + ܕܘܠܪ̈ܐ ܕܐܘܚܕܢ̈ܐ ܡܚܘܝܕ̈ܐ + + + ܦܝܣܘ ܕܐܘܪܘܓܘܐܝ + ܦܝܣܘ ܕܐܘܪܘܓܘܐܝ + ܦܝ̈ܣܘܣ ܕܐܘܪܘܓܘܐܝ + + + ܕܘܢܓ ܕܒܝܬܢܐܡ + ܕܘܢܓ ܕܒܝܬܢܐܡ + ܕܘܢܓ̈ܐ ܕܒܝܬܢܐܡ + + + ܕܘܠܪ ܕܡܕܢܚ ܟܐܪܝܒܐ + ܕܘܠܪ ܕܡܕܢܚ ܟܐܪܝܒܐ + ܕܘܠܪ̈ܐ ܕܡܕܢܚ ܟܐܪܝܒܐ + + + ܦܠܘܪܝܢ ܕܩܘܒܐ + ܦܠܘܪܝܢ ܕܩܘܒܐ + ܦܠܘܪ̈ܝܢܐ ܕܩܘܒܐ + + + ܟܣܦܐ ܠܐ ܝܕܝܥܐ + (ܟܣܦܐ ܠܐ ܝܕܝܥܐ) + (ܟܣܦܐ ܠܐ ܝܕܝܥܐ) - ܝܠܐ ܝܠܗ ܥܬܝܕܐ - ܝܠ̈ܐ ܝܢܐ ܥܬܝܕ̈ܐ <RLM>{0} - ܫܩܘܠ ܦܬܠܐ ܕ{0} ܝܡܝܢܐ + ܚܕ ܝܘܡܐ + {0} ܝܘܡܢ̈ܐ + ܫܩܘܠ ܦܬܠܐ ܝܡܝܢܐ ܕ{0} @@ -3676,7 +4111,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ܚܕ ܡܠܘܐܐ {0} ܡܠܘܐ̈ܐ - + ܡܢܘ̈ܬܐ ܒܡܠܝܘܢ {0} ܡܢܬܐ ܒܡܠܝܘܢ {0} ܡܢܘ̈ܬܐ ܒܡܠܝܘܢ @@ -4292,7 +4727,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ܡܕܢܚܐ {0} ܓܪܒܝܐ {0} ܬܝܡܢܐ - {0} ܡܥܪܒ݂ܐ + {0} ܡܥܪܒܐ @@ -4491,7 +4926,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} °F - ܦܢܝܬܐ ܫܪܫܢܝܬܐ + ܦܢܝܬܐ + {0} ܏ܡܕܢ + {0} ܏ܓܪܒ + {0} ܏ܬܝܡ + {0} ܏ܡܥܪ @@ -4564,10 +5003,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ☉R - {0} ܡܕܢܚܐ - {0} ܓܪܒܝܐ - {0} ܬܝܡܢܐ - {0} ܡܥܪܒ݂ܐ + ܦܢܝܬܐ + {0} ܏ܡܕܢܚ + {0} ܏ܓܪܒܝ + {0} ܏ܬܝܡܢ + {0} ܏ܡܥܪܒ @@ -4607,10 +5047,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-informal} - {given-monogram-allCaps}.{given2-monogram-allCaps}.{surname-monogram-allCaps} + {given-monogram-allCaps}.{given2-monogram-allCaps}.{surname-monogram-allCaps}. - {given-informal-monogram-allCaps}.{surname-monogram-allCaps} + {given-informal-monogram-allCaps}.{surname-monogram-allCaps}. {title} {given} {given2-initial} {surname} @@ -4625,28 +5065,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-monogram-allCaps}.{surname-monogram-allCaps} + {given-monogram-allCaps}.{given2-monogram-allCaps}.{surname-monogram-allCaps}. - {title} {given-initial} {surname} + {title} {given-initial} {surname} {given-informal-initial}. {surname} - {title} {surname} + {title} {surname} {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-monogram-allCaps}.{surname-monogram-allCaps} + {given-monogram-allCaps}.{surname-monogram-allCaps}. {surname}، {given} {given2} @@ -4655,16 +5095,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic {surname} {given-informal} - {title} {surname} + {title} {surname} {given-informal} - {surname-monogram-allCaps}.{given-monogram-allCaps}.{given2-monogram-allCaps} + {surname-monogram-allCaps}.{given-monogram-allCaps}.{given2-monogram-allCaps}. - {surname-monogram-allCaps}.{given-informal-monogram-allCaps} + {surname-monogram-allCaps}.{given-informal-monogram-allCaps}. {surname}، {given} {given2-initial} @@ -4679,10 +5119,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} {surname}، {given-initial} {given2-initial} @@ -4691,16 +5131,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic {surname} {given-initial} - {title} {surname} + {title} {surname} {given-informal} - {surname-monogram-allCaps} + {surname-monogram-allCaps} - {given-informal-monogram-allCaps} + {given-informal-monogram-allCaps} {surname-prefix} {surname-core}، {given} {given2} diff --git a/make/data/cldr/common/main/szl.xml b/make/data/cldr/common/main/szl.xml index 09b54dc4dae..1aee26a3e65 100644 --- a/make/data/cldr/common/main/szl.xml +++ b/make/data/cldr/common/main/szl.xml @@ -1831,9 +1831,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Biszkek - - Enderbury - Kōmory @@ -2195,9 +2192,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - zachodnioafrykański czas - zachodnioafrykański sztandardowy czas - zachodnioafrykański latowy czas + zachodnioafrykański czas @@ -2561,6 +2556,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gujana + + + Hawaje-Aleuty (sztandardowy czas) + + Hawaje-Aleuty @@ -2953,9 +2953,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ ¤ #,##0.00 + ¤ #,##0.00 @@ -3069,7 +3071,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimole na liter {0} milimola na liter - + czyńści na milijōn {0} czyńści na milijōn @@ -3681,7 +3683,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimole/liter {0} mmol/l - + czyńści/miliōn {0} cz/mln diff --git a/make/data/cldr/common/main/ta.xml b/make/data/cldr/common/main/ta.xml index 43a2779bebd..d03477a393b 100644 --- a/make/data/cldr/common/main/ta.xml +++ b/make/data/cldr/common/main/ta.xml @@ -242,7 +242,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ஐஸ்லேண்டிக் இத்தாலியன் இனுகிடூட் - ஜப்பானியம் + ஜாப்பனீஸ் லோஜ்பன் நகொம்பா மாசெம் @@ -289,6 +289,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ பாஃபியா கொலோக்னியன் குர்திஷ் + குர்திஷ் + குர்மாஞ்சி கும்யிக் குடேனை கொமி @@ -768,7 +770,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ லத்தீன் அமெரிக்கா அஷன்ஷியன் தீவு அன்டோரா - ஐக்கிய அரபு எமிரேட்ஸ் + ஐக்கிய அரபு அமீரகம் ஆஃப்கானிஸ்தான் ஆண்டிகுவா மற்றும் பார்புடா அங்கியுலா @@ -820,6 +822,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ சீனா கொலம்பியா கிலிப்பர்டன் தீவு + சார்க் கோஸ்டாரிகா கியூபா கேப் வெர்டே @@ -892,7 +895,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ஐஸ்லாந்து இத்தாலி ஜெர்சி - ஜமைகா + ஜமைக்கா ஜோர்டான் ஜப்பான் கென்யா @@ -926,7 +929,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ மார்ஷல் தீவுகள் வடக்கு மாசிடோனியா மாலி - மியான்மார் (பர்மா) + மியான்மர் (பர்மா) மங்கோலியா மகாவ் எஸ்ஏஆர் சீனா மகாவ் @@ -1057,42 +1060,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ நாள்காட்டி நாணய வடிவம் சின்னங்கள் வரிசைப்படுத்தலைப் புறக்கணி - நேர்மறையான உச்சரிப்பு வரிசைபடுத்துதல் - பெரெழுத்து/சிற்றெழுத்து வரிசைமுறை + தலைகீழ் உச்சரிப்பு வரிசைப்படுத்தல் + பேரெழுத்து/சிற்றெழுத்து வரிசைமுறை எழுத்து உணர்ந்து வரிசைபடுத்துதல் வரிசை முறை இயல்பாக்கப்பட்ட வரிசைபடுத்துதல் எண்முறை வரிசைபடுத்துதல் வரிசைப்படுத்தல் வலிமை நாணயம் + இமோஜி வெளிப்பாடு மணிநேர சுழற்சி (12, 24) வரி முறிப்பு ஸ்டைல் + வவ அளவீட்டு முறை எண்கள் + வமு நேர மண்டலம் மொழி மாறிலி தனிப்பட்ட பயன் புத்த நாள்காட்டி + பௌத்தம் சீன நாள்காட்டி + சீனம் காப்டிக் நாள்காட்டி + காப்டிக் டேங்கி நாள்காட்டி + டேங்கி எத்தியோப்பிய நாள்காட்டி + எத்தியோப்பிக் எத்தியோபிக் அமேதே ஆலெம் நாள்காட்டி + எத்தியோப்பிய அமீத்தி ஆலெம் கிரிகோரியன் நாள்காட்டி + கிரிகோரியன் ஹீப்ரு நாள்காட்டி - இந்திய தேச நாள்காட்டி + எபிரேயம் + இந்திய தேசிய நாள்காட்டி + இந்திய தேசியம் இஸ்லாமிய நாள்காட்டி + ஹிஜ்ரி இஸ்லாமிய சிவில் நாள்காட்டி + ஹிஜ்ரி(அட்டவணை, சிவில் இபோக்) இஸ்லாமிய வானியல் நாள்காட்டி + ஹிஜ்ரி(அட்டவணை, வானவியல் இபோக்) இஸ்லாமிய நாள்காட்டி (உம்-அல்-குரா) - ISO-8601 நாள்காட்டி + ஹிஜ்ரி (உம்முல் குறா) + கிரிகோரிய நாள்காட்டி ஜப்பானிய நாள்காட்டி + ஜப்பானியம் பாரசீக நாள்காட்டி + பாரசீகம் மின்கோ நாள்காட்டி + மின்குவோ கணக்கிடல் நாணய வடிவம் + கணக்கியல் நிலையான நாணய வடிவம் + வழக்கமானது சின்னங்களை வரிசைப்படுத்து சின்னங்களைப் புறக்கணித்து வரிசைப்படுத்து உச்சரிப்புகளை இயல்பாக வரிசைபடுத்து @@ -1102,18 +1126,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ முதலில் பேரெழுத்துகளை வரிசைப்படுத்து எழுத்து உணர்வின்றி வரிசைபடுத்து எழுத்து உணர்வில் வரிசைபடுத்து - பாரம்பரிய சீன வரிசை வடிவம் - Big5 முந்தைய வரிசை வடிவம், இணக்கத்தன்மைக்கு அகராதி வரிசை முறை இயல்புநிலை யுனிகோட் வரிசை முறை + இயல்புநிலை ஒருங்குறி ஐரோப்பிய வரிசைப்படுத்தல் விதிகள் - எளிமையாக்கப்பட்ட சீன வரிசை வடிவம் - GB2312 தொலைபேசி புத்தக வரிசை முறை ஒலியியல் வரிசைப்படுத்தல் முறை பின்யின் வரிசை முறை பொதுப்படையான தேடல் + தேடல் ஹங்குல் முதன்மை மெய்யெழுத்தின்படி தேடு நிலையான வரிசை முறை + வழக்கமானது ஸ்ட்ரோக் வரிசை முறை பாரம்பரிய வரிசை முறை ரேடியன் ஸ்ட்ரோக் வரிசை முறை @@ -1129,18 +1154,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ முழு அகலம் அரை அகலம் எண் + இயல்புநிலை + இமோஜி + வார்த்தை 12 மணிநேர முறைமை (0–11) + 12 (0–11) 12 மணிநேர முறைமை (1–12) + 12 (1–12) 24 மணிநேர முறைமை (0–23) + 24 (0–23) 24 மணிநேர முறைமை (1–24) + 24 (1–24) தளர்வான வரி முறிப்பு ஸ்டைல் + தளர்த்தியது சாதாரண வரி முறிப்பு ஸ்டைல் + இயல்பு கண்டிப்பான வரி முறிப்பு ஸ்டைல் + கடுமையானது + அனைத்தும் உடைத்தல் + அனைத்தும் தக்கவைத்தல் + இயல்பானது + வாக்கியங்களில் தக்கவைத்தல் யூஎஸ் பிஜிஎன் ஒலிபெயர்ப்பு யூஎன் ஜிஇஜிஎன் ஒலிபெயர்ப்பு மெட்ரிக் முறை + மெட்ரிக் இம்பீரியல் அளவீட்டு முறை + UK அமெரிக்க அளவீட்டு முறை + US அரபிய-இந்திய இலக்கங்கள் நீட்டிக்கப்பட்ட அரபிய-இந்திய இலக்கங்கள் ஆர்மேனியன் எண்கள் @@ -1152,8 +1194,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ நிதி எண்கள் முழு-அகல இலக்கங்கள் ஜார்ஜியன் எண்கள் - கிரீக் எண்கள் - கிரீக் சிற்றெழுத்து எண்கள் + கிரேக்க எண்கள் + கிரேக்கச் சிற்றெழுத்து எண்கள் குஜராத்தி இலக்கங்கள் குர்முகி இலக்கங்கள் சீன பின்ன எண்கள் @@ -1174,7 +1216,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ மீடீ மயக் இலக்கங்கள் மியான்மர் இலக்கங்கள் சொந்த இலக்கங்கள் - ஓல் சிக்கி இலக்கங்கள் + ஒல் சிக்கி இலக்கங்கள் ஒடியா இலக்கங்கள் ரோமன் எண்கள் ரோமன் சிற்றெழுத்து எண்கள் @@ -1185,6 +1227,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ திபெத்திய இலக்கங்கள் பாரம்பரிய எண்கள் வை இலக்கங்கள் + முடக்கம் + இயக்கம் மெட்ரிக் @@ -1202,13 +1246,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\u200C\u200D] [அ ஆ இ ஈ உ ஊ எ ஏ ஐ ஒ ஓ ஔ க ங ச ஞ ட ண த ந ப ம ய ர ல வ ழ ள ற ன] [\- ‑ , . % ‰ + 0௦ 1௧ 2௨ 3௩ 4௪ 5௫ 6௬ 7௭ 8௮ 9௯] + [{எண்கள்\-துணை}] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1639,20 +1681,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ நான்காம் காலாண்டு - - - கா.1 - கா.2 - கா.3 - கா.4 - - - முதல் காலாண்டு - இரண்டாம் காலாண்டு - மூன்றாம் காலாண்டு - நான்காம் காலாண்டு - - @@ -1670,7 +1698,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ நள். நண். - அதி. + காலை கா. மதி. பிற். @@ -1792,7 +1820,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d/M dd-MM, E dd-MM - d MMM d MMMM MMMM W -ஆம் வாரம் MMMM W -ஆம் வாரம் @@ -2092,17 +2119,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - காலா. + கா. இறுதி காலாண்டு இந்த காலாண்டு அடுத்த காலாண்டு - - {0} காலா. - {0} காலா. - - {0} காலா. முன் - {0} காலா. முன் + {0} கா. முன் + {0} கா. முன் @@ -2196,7 +2219,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ நாள் - நேற்று முன் தினம் + நேற்று முன்தினம் நேற்று இன்று நாளை @@ -2448,13 +2471,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - முற்./பிற். + AM/PM - முற்பகல்/பிற்பகல் + AM/PM + + + AM/PM - மணி + மணிநேரம் இந்த ஒரு மணிநேரத்தில் {0} மணிநேரத்தில் @@ -2466,14 +2492,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - மணி. - - {0} மணி. - {0} மணி. - + ம. - {0} மணி. முன் - {0} மணி. முன் + {0} ம. முன் + {0} ம. முன் @@ -2533,14 +2555,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - விநா. - - {0} விநா. - {0} விநா. - + வி. - {0} விநா. முன் - {0} விநா. முன் + {0} வி. முன் + {0} வி. முன் @@ -2918,6 +2936,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ஈஸ்டர் + + கொயாய்கே + புன்டா அரீனாஸ் @@ -3183,9 +3204,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ஃப்னோம் பென் - எண்டர்பரி - - கேன்டன் @@ -3862,9 +3880,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - மேற்கு ஆப்பிரிக்க நேரம் - மேற்கு ஆப்பிரிக்க நிலையான நேரம் - மேற்கு ஆப்பிரிக்க கோடை நேரம் + மேற்கு ஆப்பிரிக்க நேரம் @@ -4247,6 +4263,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ கயானா நேரம் + + + ஹவாய்-அலேஷியன் நிலையான நேரம் + + ஹவாய்-அலேஷியன் நேரம் @@ -4673,7 +4694,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - தாய்பே நேரம் + தைவான் நேரம் தாய்பே நிலையான நேரம் தாய்பே பகலொளி நேரம் @@ -4700,6 +4721,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ சுக் நேரம் + + + துருக்கி நேரம் + துருக்கி தர நேரம் + துருக்கி கோடை நேரம் + + துர்க்மெனிஸ்தான் நேரம் @@ -4856,6 +4884,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + never + @@ -4867,6 +4898,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##,##0.00 + ¤ #,##,##0.00 #,##,##0.00 @@ -4877,34 +4909,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ¤ 0ஆ - ¤ 0ஆ - ¤ 00ஆ - ¤ 00ஆ - ¤ 000ஆ - ¤ 000ஆ - ¤ 0மி - ¤ 0மி - ¤ 00மி - ¤ 00மி - ¤ 000மி - ¤ 000மி - ¤ 0பி - ¤ 0பி + ¤0ஆ + ¤ 0ஆ + ¤0ஆ + ¤ 0ஆ + ¤00ஆ + ¤ 00ஆ + ¤00ஆ + ¤ 00ஆ + ¤000ஆ + ¤ 000ஆ + ¤000ஆ + ¤ 000ஆ + ¤0மி + ¤ 0மி + ¤0மி + ¤ 0மி + ¤00மி + ¤ 00மி + ¤00மி + ¤ 00மி + ¤000மி + ¤ 000மி + ¤000மி + ¤ 000மி + ¤0பி + ¤ 0பி ¤0பி - ¤ 0பி - ¤ 00பி - ¤ 00பி - ¤ 000பி - ¤ 000பி + ¤ 0பி + ¤00பி + ¤ 00பி + ¤00பி + ¤ 00பி + ¤000பி + ¤ 000பி ¤000பி - ¤ 000பி - ¤ 0டி - ¤ 0டி - ¤ 00டி - ¤ 00டி - ¤ 000டி - ¤ 000டி + ¤ 000பி + ¤0டி + ¤ 0டி + ¤0டி + ¤ 0டி + ¤00டி + ¤ 00டி + ¤00டி + ¤ 00டி + ¤000டி + ¤ 000டி + ¤000டி + ¤ 000டி @@ -4912,7 +4964,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - #,##,##0.00 + ¤ #,##0.00 + #,##0.00 @@ -5685,6 +5738,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ கிழக்கு கரீபியன் டாலர் கிழக்கு கரீபியன் டாலர்கள் + + கரீபியன் கில்டர் + கரீபியன் கில்டர் + கரீபியன் கில்டர் + மேற்கு ஆப்பிரிக்க CFA ஃப்ராங்க் மேற்கு ஆப்பிரிக்க CFA ஃப்ராங்க் @@ -5716,6 +5774,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ஸாம்பியன் குவாச்சா ஸாம்பியன் குவாச்சாக்கள் + + ஜிம்பாப்வே தங்கம் + ஜிம்பாப்வே தங்கம் + ஜிம்பாப்வே தங்கம் + {0}+ @@ -6016,7 +6079,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} உருப்படிகளை {0} உருப்படிகளுக்கு - + + பகுதிகள் + {0} பகுதி + {0} பகுதிகள் + + பகுதிகள்/மில்லியன் {0} பகுதி/மில்லியன் {0} பகுதி/மில்லியனில் @@ -6068,6 +6136,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} மோல்ஸை {0} மோல்ஸுக்கு + + குளுக்கோஸ் + {0} குளுக்கோஸ் + {0} குளுக்கோஸ் + லிட்டர்கள்/கிலோமீட்டர் {0} லிட்டர்/கிலோமீட்டர் @@ -6312,20 +6385,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} நாட்களுக்கு - மணிநேரங்கள் - {0} மணிநேரம் + மணிநேரம் + {0} ம. {0} மணிநேரத்தில் {0} மணிநேரத்தை {0} மணிநேரத்திற்கு - {0} மணிநேரங்கள் - {0} மணிநேரங்களில் - {0} மணிநேரங்களை - {0} மணிநேரங்களுக்கு + {0} ம. + {0} மணிநேரத்தில் + {0} மணிநேரத்தை + {0} மணிநேரத்திற்கு {0} / மணிநேரம் நிமிடங்கள் - {0} நிமிடம் + {0} நிமி. {0} நிமிடத்தில் {0} நிமிடத்தை {0} நிமிடத்திற்கு @@ -7012,6 +7085,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} மில்லிமீட்டர் பாதரசத்தை {0} மில்லிமீட்டர் பாதரசத்திற்கு + + பாதரசம் + {0} பாதரசம் + {0} பாதரசம் + பவுண்டுகள்/சதுர அங்குலம் {0} பவுண்டு/சதுர அங்குலம் @@ -7137,14 +7215,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ பியூஃபோர்ட் {0} - {0} டிகிரி + {0} டிகிரி வெப்பநிலை {0} டிகிரியில் {0} டிகிரியை {0} டிகிரிக்கு - {0} டிகிரீஸ் - {0} டிகிரீஸில் - {0} டிகிரீஸை - {0} டிகிரீஸுக்கு + {0} டிகிரி + {0} டிகிரியில் + {0} டிகிரியை + {0} டிகிரிக்கு டிகிரி செல்சியஸ் @@ -7332,6 +7410,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} மெட்ரிக் கோப்பைகளை {0} மெட்ரிக் கோப்பைகளுக்கு + + மெட்ரிக் திரவ அவுன்ஸ் + {0} மெட்ரிக் திரவ அவுன்ஸ் + {0} மெட்ரிக் திரவ அவுன்ஸ் + ஏக்கர் அடி {0} ஏக்கர் அடி @@ -7427,8 +7510,72 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} இம்பீரியல் குவார்ட் {0} இம்பீரியல் குவார்ட்ஸ் + + ஸ்டெரேடியன் + {0} ஸ்டெரேடியன் + {0} ஸ்டெரேடியன் + + + கட்டல்கள் + {0} கட்டல் + {0} கட்டல்கள் + + + கூலும் + {0} கூலும் + {0} கூலும் + + + ஃபாரட் + {0} ஃபாரட் + {0} ஃபாரட் + + + ஹென்றி + {0} ஹென்றி + {0} ஹென்றி + + + சீமென் + {0} சீமென் + {0} சீமென் + + + கலோரி [IT] + {0} கலோரி [IT] + {0} கலோரி-IT + + + பெக்கொரல் + {0} பெக்கொரல் + {0} பெக்கொரல் + + + சீவர்ட் + {0} சீவர்ட் + {0} சீவர்ட் + + + கிரே + {0} கிரே + {0} கிரே + + + கிலோகிராம் விசை + {0} கிலோகிராம் விசை + {0} கிலோகிராம் விசை + + + டெஸ்லா + {0} டெஸ்லா + {0} டெஸ்லா + + + வெபர் + வெபர் + {0} வெபர் + - ஒளிவேகம் {0} ஒளிவேகம் {0} ஒளிவேகத்தில் {0} ஒளிவேகத்தை @@ -7438,7 +7585,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ஒளிவேகத்தை {0} ஒளிவேகத்திற்கு - + பார்ட்ஸ்/பில்லியன் {0} பார்ட்ஸ்/பில்லியன் {0} பார்ட்ஸ்/பில்லியனில் @@ -7450,7 +7597,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} பார்ட்ஸ்/பில்லியனுக்கு - இரவுகள் {0} இரவு {0} இரவில் {0} இரவை @@ -7459,7 +7605,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} இரவுகளில் {0} இரவுகளை {0} இரவுகளுக்கு - {0}/இரவு கார்டினல் திசை @@ -7599,20 +7744,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ஆர்க்விநா. - கி.மீ.² - {0} கி.மீ.² - {0} கி.மீ.² - {0}/கி.மீ.² + {0} km² + {0} km² ஹெக்டேர் - {0} ஹெக். - {0} ஹெக். + {0} ha + {0} ha மீட்டர்கள்² - {0} மீ² - {0} மீ² + {0} m² + {0} m² {0}/மீ² @@ -7625,7 +7768,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ சதுர மைல்கள் {0} ச. மை. {0} ச. மை. - {0}/மை.² ஏக்கர் @@ -7673,7 +7815,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} உருப்படி {0} உருப்படி - + + பகுதி + {0} பகுதி + {0} பகுதி + + ப./மி. {0} ப./மி. {0} ப./மி. @@ -7692,6 +7839,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} மோல் {0} மோல் + + Glc + {0} Glc + {0} Glc + லி./கி.மீ. {0} லி./கி.மீ. @@ -7784,16 +7936,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/நா - மணிநேர. - {0} மணிநேரம் - {0} மணிநேரம் + மணிநேரம் + {0} ம. + {0} ம. {0} /ம.நே - நிமிட. - {0} நிமிடம் - {0} நிமிட - {0}/நிமிட + நிமி. + {0} நிமி. + {0} நிமி. + {0}/நிமி. விநாடிகள் @@ -7833,9 +7985,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} வோ. - கி.கலோ. - {0} கி.கலோ. - {0} கி.கலோ. + {0} kcal + {0} kcal கலோ. @@ -7848,19 +7999,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} கலோ. - கி.ஜூ. - {0} கி.ஜூ. - {0} கி.ஜூ. + கிலோஜூல் + {0} kJ + {0} kJ ஜூல் - {0} ஜூ. - {0} ஜூ. + {0} J + {0} J கி.வா-ம.நே. - {0} கி.வா.ம.நே. - {0} கி.வா.ம.நே. + {0} kWh + {0} kWh எலக்ட்ரான்வோல்ட் @@ -7882,8 +8033,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ நியூட்டன் - {0} நியூ - {0} நியூ + {0} N + {0} N கி.வா-ம.நே./100கி.மி. @@ -7891,24 +8042,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} கி.வா-ம.நே./100கி.மி. - ஜி.ஹெஸ். - {0} ஜி.ஹெஸ். - {0} ஜி.ஹெஸ். + {0} GHz + {0} GHz - மெ.ஹெஸ். - {0} மெ.ஹெஸ். - {0} மெ.ஹெஸ். + {0} MHz + {0} MHz - கி.ஹெஸ். - {0} கி.ஹெஸ். - {0} கி.ஹெஸ். + {0} kHz + {0} kHz - ஹெஸ். - {0} ஹெஸ். - {0} ஹெஸ். + {0} Hz + {0} Hz எம் @@ -7922,18 +8069,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ மெகாபிக்சல்கள் - {0} எம்.பி - {0} எம்.பி + {0} MP + {0} MP - பிக். / செ.மீ - {0} பிக். / செ.மீ - {0} பிக். / செ.மீ + {0} ppcm + {0} ppcm - பிக். / அங். - {0} பிக். / அங். - {0} பிக். / அங். + {0} ppi + {0} ppi பு / செ.மீ @@ -7941,9 +8086,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} பு / செ.மீ - பு / அங். - {0} பு / அங். - {0} பு / அங். + dpi + {0} dpi + {0} dpi புள்ளி @@ -7979,9 +8124,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} மி.மீ. - μமீ. - {0} μமீ. - {0} μமீ. + {0} μm + {0} μm நா.மீ. @@ -7995,8 +8139,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ மைல்கள் - {0} மை. - {0} மை. + {0} mi + {0} mi கெஜ. @@ -8011,14 +8155,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ அங்குலங்கள் - {0} அங். - {0} அங். {0}/அங். பு.நொ. - {0} பு.நொ. - {0} பு.நொ. + {0} pc + {0} pc ஒளி ஆண்டுகள் @@ -8026,9 +8168,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ஒ.ஆ. - வா.அ. - {0} வா.அ. - {0} வா.அ. + {0} au + {0} au பர் @@ -8041,9 +8182,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ஃபே. - க.மை. - {0} க.மை. - {0} க.மை. + {0} nmi + {0} nmi ஸ்.மை. @@ -8070,8 +8210,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ லூம. - {0} லூம. - {0} லூம. + {0} lm + {0} lm சூரிய ஒளிர்வுத்தன்மை @@ -8082,10 +8222,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ட. - கி.கி. - {0} கி.கி. - {0} கி.கி. - {0}/கி.கி. + {0} kg + {0} kg கிராம்கள் @@ -8094,14 +8232,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/கி. - மி.கி. - {0} மி.கி. - {0} மி.கி. + {0} mg + {0} mg - μகி - {0} μகி - {0} μகி + {0} μg + {0} μg டன் @@ -8115,14 +8251,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ பவு. - {0} பவு. + {0} lb {0} பவு. - {0}/பவு. அவு. - {0} அவு. - {0} அவு. + {0} oz + {0} oz {0}/அவு. @@ -8152,44 +8287,38 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} கிரைன் - கி.வாட். - {0} கி.வாட். - {0} கி.வாட். + {0} GW + {0} GW - மெ.வா. - {0} மெ.வா. - {0} மெ.வா. + {0} MW + {0} MW - கி.வா. - {0} கி.வா. - {0} கி.வா. + {0} kW + {0} kW வா. - {0} வா. - {0} வா. + {0} W + {0} W - மி.வா. - {0} மி.வா. - {0} மி.வா. + {0} mW + {0} mW - கு.தி. - {0} கு.தி. - {0} கு.தி. + {0} hp + {0} hp - பாத. மி.மீ. - {0} பாத. மி.மீ. - {0} பாத. மி.மீ. + mmHg + {0} mmHg + {0} mmHg - பாத. அங். - {0} பாத. அங். - {0} பாத. அங். + {0} inHg + {0} inHg பார் @@ -8198,28 +8327,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ மி.பா. - {0} மி.பா. - {0} மி.பா. + {0} mbar + {0} mbar - பா. - {0} பா. - {0} பா. + {0} Pa + {0} Pa - ஹெ.பாஸ். - {0} ஹெ.பாஸ். - {0} ஹெ.பாஸ். + {0} hPa + {0} hPa - கிபா - {0} கிபா - {0} கிபா + {0} kPa + {0} kPa - மெபா - {0} மெபா - {0} மெபா + {0} MPa + {0} MPa கி.மீ./மணிநேரம் @@ -8242,24 +8367,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} நா. - பியூ. - பியூ. {0} - பியூ. {0} + B {0} + B {0} - டிகிரி செ. - {0}°செ. - {0}°செ. + {0}°C + {0}°C - டி. ஃபா. - {0}°ஃபா. - {0}°ஃபா. + {0}°F + {0}°F - கெல். - {0} கெல். - {0} கெல். + {0} K + {0} K ப.அடி @@ -8267,9 +8388,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ப.அடி - நியூ.மீ - {0} நியூ.மீ - {0} நியூ.மீ + {0} N⋅m + {0} N⋅m கிமீ³ @@ -8289,9 +8409,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/செ.மீ.³ - மை³ - {0} மை³ - {0} மை³ + {0} mi³ + {0} mi³ யா.³ @@ -8346,8 +8465,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ மெ.கோப்பை - {0} மெ.கோ. - {0} மெ.கோ. + {0} mc + {0} mc ஏக். அடி @@ -8446,15 +8565,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} குவாட். இம்பீ. {0} குவாட். இம்பீ. + + கட் + {0} kat + {0} kat + + + கலோரி-IT + {0} கலோரி [IT] + {0} கலோரி-IT + ஒளிவேகம் {0} ஒளிவேகம் {0} ஒளிவேகம் - + பார்ட்ஸ்/பில்லியன் {0} பார்ட்ஸ்/பில்லியன் - {0} பார்ட்ஸ்/பில்லியன் + {0} ppb இரவுகள் @@ -8500,29 +8629,43 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}″ - {0} ச.கிமீ. - {0} ச.கிமீ. + km² + {0} km² + {0} km² + {0}/km² + + + {0} ha + {0} ha - {0} ச.மீ. - {0} ச.மீ. + {0} m² + {0} m² {0}செ.மீ.² {0}செ.மீ.² + + mi² + {0} mi² + {0} mi² + {0}/mi² + யா² {0}யா² {0}யா² - ச.அ. + ft² + {0} ft² + {0} ft² அங்.² - {0}அங்.² - {0}அங்.² + {0} in² + {0} in² ட்யூனம் @@ -8546,7 +8689,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}உருப்படி {0}உருப்படி - + + பகுதி + {0} பகுதி + {0} பகுதி + + {0}ப./மி. {0}ப./மி. @@ -8563,6 +8711,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}மோல் {0}மோல் + + Glc + {0}லி./கி.மீ. {0}லி./கி.மீ. @@ -8668,7 +8819,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} நா - மணி + மணிநேரம் {0} ம.நே. {0} ம.நே. @@ -8701,7 +8852,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ஆம். - மி.ஆ. + mA {0}மி.ஆ. {0}மி.ஆ. @@ -8716,8 +8867,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}வோ. - {0}கி.கலோ. - {0}கி.கலோ. + kcal + {0} kcal + {0} kcal {0}கலோ. @@ -8728,16 +8880,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}கலோ. - {0}கி.ஜூ. - {0}கி.ஜூ. + kJ + {0} kJ + {0} kJ - {0}ஜூ. - {0}ஜூ. + {0} J + {0} J - {0}கி.வா.ம. - {0}கி.வா.ம. + kWh + {0} kWh + {0} kWh eV @@ -8758,9 +8912,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ப.வி - நியூ. - {0}நியூ. - {0}நியூ. + N + {0}N + {0}N கி.வா.ம./100கி.மி. @@ -8768,20 +8922,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}கி.வா.ம./100கி.மி. - {0}ஜி.ஹெ. - {0}ஜி.ஹெ. + GHz + {0} GHz + {0} GHz - {0}மெ.ஹெ. - {0}மெ.ஹெ. + MHz + {0} MHz + {0} MHz - {0}கி.ஹெ. - {0}கி.ஹெ. + kHz + {0} kHz + {0} kHz - {0}ஹெ. - {0}ஹெ. + Hz + {0} Hz + {0} Hz {0}எம் @@ -8792,25 +8950,28 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}பிக் - மெ.பிக். - {0}எம்.பி - {0}எம்.பி + MP + {0} MP + {0} MP - {0}பி/செ.மீ - {0}பி/செ.மீ + ppcm + {0} ppcm + {0} ppcm - {0}பி/அங். - {0}பி/அங். + ppi + {0} ppi + {0} ppi {0}பு/செ.மீ {0}பு/செ.மீ - {0}பு/அங். - {0}பு/அங். + dpi + {0} dpi + {0} dpi {0}புள்ளி @@ -8837,30 +8998,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}மி.மீ. - மை.மீ. - {0}μமீ. - {0}μமீ. + μm + {0} μm + {0} μm {0}நா.மீ. {0}நா.மீ. - மை. + mi + {0} mi + {0} mi அங். + {0}″ + {0}″ - {0}பு.நொ. - {0}பு.நொ. + {0} pc + {0} pc ஒ.ஆ. - {0}வா.அ. - {0}வா.அ. + au + {0} au + {0} au {0}பர் @@ -8871,8 +9037,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ஃபே. - {0}க.மை. - {0}க.மை. + nmi + {0} nmi + {0} nmi {0}அ.பு. @@ -8892,8 +9059,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ கே. - {0}லூம. - {0}லூம. + lm + {0} lm + {0} lm L☉ @@ -8905,24 +9073,36 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ட. + kg {0}கி.கி. {0}கி.கி. + {0}/kg கிராம் - {0}மி.கி. - {0}மி.கி. + mg + {0} mg + {0} mg - {0}μகி - {0}μகி + μg + {0} μg + {0} μg {0}டன் {0}டன் + + lb + {0}/lb + + + {0} oz + {0} oz + {0}அவு. டி. {0}அவு. டி. @@ -8951,49 +9131,75 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}கிரைன் - {0}கி.வாட். - {0}கி.வாட். + GW + {0} GW + {0} GW - {0}மெ.வா. - {0}மெ.வா. + MW + {0} MW + {0} MW + + + kW + {0} kW + {0} kW + + + {0} W + {0} W - {0}மி.வா. - {0}மி.வா. + mW + {0} mW + {0} mW - {0} கு.வே. - {0} கு.வே. + hp + {0} hp + {0} hp + + + mmHg + {0} mmHg + {0} mmHg பா. அங். - {0} பா.அங். - {0} பா.அங். + {0}″ Hg + {0}″ Hg {0}பார் {0}பார் + + {0} mb + {0} mb + {0}atm {0}atm - {0}பா. - {0}பா. + Pa + {0} Pa + {0} Pa - {0} ஹெ.பா. - {0} ஹெ.பா. + hPa + {0} hPa + {0} hPa - {0}கிபா - {0}கிபா + kPa + {0} kPa + {0} kPa - {0}மெபா - {0}மெபா + MPa + {0} MPa + {0} MPa கி.மீ./ம. @@ -9005,22 +9211,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}நா. - பியூ.{0} - பியூ.{0} + Bft + B {0} + B {0} - °செ + °C + {0}°C + {0}°C - °ஃபா + °F + {0}° + {0}° + + + K + {0} K + {0} K {0}ப.அடி {0}ப.அடி - {0}நியூ.மீ - {0}நியூ.மீ + N⋅m + {0}N⋅m + {0}N⋅m {0} க.கி.மீ. @@ -9035,8 +9252,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}செ.மீ.³ - {0} க.மை. - {0} க.மை. + mi³ + {0} mi³ + {0} mi³ {0}யா.³ @@ -9080,8 +9298,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}மெ.பி. - {0}மெ.கோ. - {0}மெ.கோ. + {0} mc + {0} mc {0}ஏக். அடி @@ -9163,21 +9381,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}கு. இம். {0}கு. இம். + + கட் + + + கலோரி-IT + - ஒளிவேகம் {0}ஒ.வே {0}ஒ.வே - + பா/பி {0} பா/பி {0} பா/பி - இரவுகள் {0} இ {0} இ - {0}/இரவு diff --git a/make/data/cldr/common/main/ta_MY.xml b/make/data/cldr/common/main/ta_MY.xml index f24cc219fb4..78b5b9c0c6c 100644 --- a/make/data/cldr/common/main/ta_MY.xml +++ b/make/data/cldr/common/main/ta_MY.xml @@ -49,6 +49,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/ta_SG.xml b/make/data/cldr/common/main/ta_SG.xml index 5e37f8039e7..e7d800f8602 100644 --- a/make/data/cldr/common/main/ta_SG.xml +++ b/make/data/cldr/common/main/ta_SG.xml @@ -49,6 +49,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ #,##0.00 + ¤ #,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/te.xml b/make/data/cldr/common/main/te.xml index cd6d965ae18..8c6003b89d8 100644 --- a/make/data/cldr/common/main/te.xml +++ b/make/data/cldr/common/main/te.xml @@ -53,7 +53,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ అజర్బైజాని అజెరి బాష్కిర్ - బాలుచి + బలూచి బాలినీస్ బసా బెలారుషియన్ @@ -168,7 +168,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ డారి ఫాంగ్ ఫాంటి - ఫ్యుల + ఫూలా ఫిన్నిష్ ఫిలిపినో ఫిజియన్ @@ -212,7 +212,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ హక్కా చైనీస్ హవాయియన్ దక్షిణ హైదా - హిబ్రూ + హీబ్రూ హిందీ హింగ్లీష్ హిలిగెనాన్ @@ -290,6 +290,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ బాఫియ కొలోనియన్ కుర్దిష్ + కర్డిష్ + కర్మాంజి కుమ్యిక్ కుటేనై కోమి @@ -425,7 +427,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ప్రష్యన్ ప్రాచీన ప్రోవెంసాల్ పాష్టో - పుష్టో పోర్చుగీస్ బ్రెజీలియన్ పోర్చుగీస్ యూరోపియన్ పోర్చుగీస్ @@ -770,7 +771,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఆండోరా యునైటెడ్ అరబ్ ఎమిరేట్స్ ఆఫ్ఘనిస్తాన్ - ఆంటిగ్వా మరియు బార్బుడా + ఆంటిగ్వా & బార్బుడా ఆంగ్విల్లా అల్బేనియా ఆర్మేనియా @@ -783,7 +784,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ అరుబా ఆలాండ్ దీవులు అజర్బైజాన్ - బోస్నియా మరియు హెర్జిగోవినా + బోస్నియా & హెర్జిగోవినా బార్బడోస్ బంగ్లాదేశ్ బెల్జియం @@ -820,6 +821,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ చైనా కొలంబియా క్లిప్పర్టన్ దీవి + సార్క్ కోస్టా రికా క్యూబా కేప్ వెర్డె @@ -854,7 +856,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఫ్రాన్స్‌ గేబన్ యునైటెడ్ కింగ్‌డమ్ - యు.కె. + UK గ్రెనడా జార్జియా ఫ్రెంచ్ గియానా @@ -872,7 +874,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ గ్వామ్ గినియా-బిస్సావ్ గయానా - హాంకాంగ్ ఎస్ఏఆర్ చైనా + హాంకాంగ్ SAR చైనా హాంకాంగ్ హెర్డ్ దీవి మరియు మెక్‌డొనాల్డ్ దీవులు హోండురాస్ @@ -899,7 +901,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ కంబోడియా కిరిబాటి కొమొరోస్ - సెయింట్ కిట్స్ మరియు నెవిస్ + సెయింట్ కిట్స్ & నెవిస్ ఉత్తర కొరియా దక్షిణ కొరియా కువైట్ @@ -927,7 +929,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ మాలి మయన్మార్ మంగోలియా - మకావ్ ఎస్ఏఆర్ చైనా + మకావ్ SAR చైనా మకావ్ ఉత్తర మరియానా దీవులు మార్టినీక్ @@ -941,7 +943,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ మలేషియా మొజాంబిక్ నమీబియా - క్రొత్త కాలెడోనియా + కొత్త కాలెడోనియా నైజర్ నార్ఫోక్ దీవి నైజీరియా @@ -999,7 +1001,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఈస్వాటిని స్వాజిల్యాండ్ ట్రిస్టన్ డ కన్హా - టర్క్స్ మరియు కైకోస్ దీవులు + టర్క్స్ & కైకోస్ దీవులు చాద్ ఫ్రెంచ్ దక్షిణ ప్రాంతాలు టోగో @@ -1018,7 +1020,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ టాంజానియా ఉక్రెయిన్ ఉగాండా - సంయుక్త రాజ్య అమెరికా బయట ఉన్న దీవులు + U.S. బయట ఉన్న దీవులు యునైటెడ్ నేషన్స్ యు.ఎన్ యునైటెడ్ స్టేట్స్ @@ -1071,35 +1073,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ సంఖ్యాత్మక క్రమబద్ధీకరణ క్రమబద్ధీకరణ సామర్థ్యం కరెన్సీ + ఎమోజీ ప్రెజెంటేషన్ గంటల పద్ధతి (12 వర్సెస్ 24) లైన్ బ్రేక్ శైలి + పదాల మధ్య లైన్ బ్రేక్స్ కొలమాన పద్ధతి సంఖ్యలు + సంక్షిప్తీకరణ తర్వాత వాక్య విరామం సమయ మండలి లొకేల్ రూపాంతరం ప్రైవేట్-ఉపయోగం బుద్ధుల క్యాలెండర్‌ + బుద్ధులు చైనీస్ క్యాలెండర్ + చైనీస్ కాప్టిక్ క్యాలెండర్ + కాప్టిక్ దాంగీ క్యాలెండర్ - ఎథియోపిక్ క్యాలెండర్ - ఎథోపిక్ అమేటే అలెమ్ క్యాలెండర్ + దాంగీ + ఇథియోపియన్ క్యాలెండర్ + ఇథియోపిక్ + ఇథియోపియన్ అమెటె ఆలెమ్ క్యాలెండర్ + ఇథియోపిక్ అమటే ఆలెమ్ గ్రేగోరియన్ క్యాలెండర్ + గ్రేగోరియన్ హీబ్రూ క్యాలెండర్ - భారతీయ జాతీయ క్యాలెండర్ + హీబ్రూ + భారతదేశ జాతీయ క్యాలెండర్ + భారతదేశ జాతీయం ఇస్లామిక్ క్యాలెండర్ + ఇస్లామిక్ ఇస్లామిక్-సివిల్ క్యాలెండర్ + ఇస్లామిక్ (సివిల్) ఇస్లామిక్ క్యాలెండర్ (సౌదీ అరేబియా) ఇస్లామిక్ క్యాలెండర్ - ఇస్లామిక్ క్యాలెండర్ (ఉమ్ అల్-ఖురా) + ఇస్లామిక్ క్యాలెండర్ (ఉమ్ అల్-ఖురా) + ఇస్లామిక్ (ఉమ్ అల్-ఖురా) ISO-8601 క్యాలెండర్ - జపానీయుల క్యాలెండర్ + జపనీస్ క్యాలెండర్ + జపనీస్ పర్షియన్ క్యాలెండర్ + పర్షియన్ మింగ్యూ క్యాలెండర్ + మీన్‌గ్వా అకౌంటింగ్ కరెన్సీ ఫార్మాట్ + అకౌంటింగ్ ప్రామాణిక కరెన్సీ ఫార్మాట్ + ప్రామాణికం చిహ్నాలను క్రమబద్ధీకరించు చిహ్నాలను విస్మరించడాన్ని క్రమబద్ధీకరించు ఉచ్ఛారణలను సాధారణంగా క్రమబద్ధీకరించు @@ -1109,18 +1131,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ముందు అప్పర్‌కేస్‌ని క్రమబద్ధీకరించు కేస్ ఇన్‌సెన్సిటివ్‌ను క్రమబద్ధీకరించు కేస్ సెన్సిటివ్‌ని క్రమబద్ధీకరించు - సాంప్రదాయ చైనీస్ క్రమబద్ధీకరణ క్రమం - Big5 మునుపటి క్రమబద్ధీకరణ క్రమం, అనుకూలం నిఘంటువు క్రమబద్ధీకరణ క్రమం డిఫాల్ట్ యూనీకోడ్ క్రమబద్ధీకరణ క్రమం + డిఫాల్ట్ యూనికోడ్ యురోపియన్ క్రమబద్ధీకరణ నిబంధనలు - సరళీకృత చైనీస్ క్రమబద్ధీకరణ క్రమం - GB2312 ఫోన్‌బుక్ క్రమబద్ధీకరణ క్రమం ధ్వని ఉచ్ఛారిత క్రమబద్ధీకరణ క్రమం పిన్‌యిన్ క్రమబద్ధీకరణ క్రమం సాధారణ-ప్రయోజన శోధన + శోధన హాంగుల్ ప్రారంభ హల్లు ద్వారా శోధించు ప్రామాణిక క్రమబద్ధీకరణ క్రమం + ప్రామాణికం స్ట్రోక్ క్రమబద్ధీకరణ క్రమం సాంప్రదాయ క్రమబద్ధీకరణ క్రమం రాడికల్-స్ట్రోక్ క్రమబద్ధీకరణ క్రమం @@ -1136,18 +1159,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ పూర్తి వెడల్పు సగం వెడల్పు సంఖ్య + డిఫాల్ట్ + ఎమోజీ + టెక్స్ట్ 12 గంటల పద్ధతి (0–11) + 12 (0–11) 12 గంటల పద్ధతి (1–12) + 12 (1–12) 24 గంటల పద్ధతి (0–23) + 24 (0–23) 24 గంటల పద్ధతి (1–24) + 24 (1–24) అపక్రమ లైన్ బ్రేక్ శైలి + అపక్రమం సాధారణ లైన్ బ్రేక్ శైలి + సాధారణం క్రమ లైన్ బ్రేక్ శైలి + క్రమం + మొత్తం విభజించండి + మొత్తం అలాగే ఉంచండి + సాధారణం + పదబంధాలలో అలాగే ఉంచండి US BGN ట్రాన్స్‌లిటరేషన్ UN GEGN ట్రాన్స్‌లిటరేషన్ మెట్రిక్ పద్ధతి + మెట్రిక్ ఇంపీరియల్ కొలమాన పద్ధతి + UK యు.ఎస్. కొలమాన పద్ధతి + US అరబిక్-ఇండిక్ అంకెలు పొడిగించబడిన అరబిక్-ఇండిక్ అంకెలు ఆర్మేనియన్ సంఖ్యలు @@ -1192,6 +1232,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ టిబిటన్ అంకెలు సాంప్రదాయ సంఖ్యలు వాయ్ అంకెలు + ఆఫ్ + ఆన్ దశాంశం @@ -1209,6 +1251,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\u200C\u200D ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯] [అ ఆ ఇ ఈ ఉ ఊ ఋ ౠ ఎ ఏ ఐ ఒ ఓ ఔ క ఖ గ ఘ ఙ చ ఛ జ ఝ ఞ ట ఠ డ ఢ ణ త థ ద ధ న ప ఫ బ భ మ య ర ఱ ల వ శ ష స హ ళ] [\- ‑ , . % ‰ + 0౦ 1౧ 2౨ 3౩ 4౪ 5౫ 6౬ 7౭ 8౮ 9౯] + [౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯] [\- ‑ , ; \: ! ? . '‘’ "“” ( ) \[ \] \{ \} \& #] [₹ {రూ} {రూ.} {Rp} {Rs}₨] @@ -1293,11 +1336,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1} {0}కి + {1} {0} + + {1} {0}కి + @@ -1313,10 +1362,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E B h B E h:mm B E h:mm:ss E d y G + G M/y + G d/M/y, E MMM y G d, MMM y G E, d, MMM y G @@ -1528,10 +1580,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ సాయంత్రం రాత్రి - - - సా - @@ -1605,6 +1653,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0}కి + + {1} {0}కి + @@ -1613,6 +1664,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0}కి + + {1} {0}కి + @@ -1625,6 +1679,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + E B h + G M/y + G d/M/y, E G MMM y G d, MMM y G, d MMM, y, E @@ -1969,7 +2026,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ నెలలో వారం - దినం + రోజు మొన్న నిన్న ఈ రోజు @@ -1984,11 +2041,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} రోజుల క్రితం + + రోజు + రోజు - సంవత్సరంలో దినం + సంవత్సరంలో రోజు + + + సంవత్సరంలో రోజు + + + సంవత్సరంలో రోజు వారంలో రోజు @@ -2303,7 +2369,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} సమయం - {0} పగటి వెలుతురు సమయం + {0} పగటి కాంతి సమయం {0} ప్రామాణిక సమయం హోనోలులు @@ -2314,7 +2380,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - తెలియని నగరం + తెలియని లొకేషన్ అండోరా @@ -2443,10 +2509,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ బ్రిస్‌బెయిన్ - మకారీ + మకారీ దీవి - లార్డ్ హౌ + లార్డ్ హౌ దీవి అరుబా @@ -2632,7 +2698,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ సెయింట్ జాన్స్ - కోకోస్ + కోకోస్ దీవులు కిన్షాసా @@ -2658,6 +2724,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఈస్టర్ + + కొయాయ్కె + పుంటా అరీనస్ @@ -2689,7 +2758,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ కురాకవో - క్రిస్మస్ + క్రిస్మస్ దీవి నికోసియా @@ -2707,7 +2776,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ బెర్లిన్ - డిజ్బౌటి + జిబూటి కోపెన్హాగన్ @@ -2923,10 +2992,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ నోమ్‌పెన్హ్ - ఎండర్బెరీ - - - కాంతోన్ + క్యాంటన్ దీవి కిరీటిమాటి @@ -3127,7 +3193,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ నియామే - నోర్ఫోక్ + నార్ఫక్ దీవి లాగోస్ @@ -3151,7 +3217,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ నియూ - చాథమ్ + చాథమ్ దీవులు ఆక్లాండ్ @@ -3436,7 +3502,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ మిడ్వే - వేక్ + వేక్ దీవి అడాక్ @@ -3553,7 +3619,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఇఫేట్ - వాల్లిస్ + వాల్లిస్ & ఫ్యూటునా ఏపియా @@ -3602,9 +3668,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - పశ్చిమ ఆఫ్రికా సమయం - పశ్చిమ ఆఫ్రికా ప్రామాణిక సమయం - పశ్చిమ ఆఫ్రికా వేసవి సమయం + పశ్చిమ ఆఫ్రికా సమయం @@ -3665,9 +3729,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ఏపియా సమయం - ఏపియా ప్రామాణిక సమయం - ఏపియా పగటి సమయం + సమోవా సమయం + సమోవా ప్రామాణిక సమయం + సమోవా పగటి వెలుతురు సమయం @@ -3787,7 +3851,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - బ్రూనే దరుసలామ్ సమయం + బ్రూనై దారుసలామ్ సమయం @@ -3987,6 +4051,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ గయానా సమయం + + + హవాయ్-అల్యూషియన్ ప్రామాణిక సమయం + + హవాయ్-అల్యూషియన్ సమయం @@ -4129,7 +4198,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ లార్డ్ హోవ్ సమయం లార్డ్ హోవ్ ప్రామాణిక సమయం - లార్డ్ హోవ్ పగటి సమయం + లార్డ్ హోవ్ పగటి వెలుతురు సమయం @@ -4244,7 +4313,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ నార్ఫోక్ దీవి సమయం నార్ఫోక్ దీవి ప్రామాణిక సమయం - నార్ఫోక్ దీవి పగటి సమయం + నార్ఫోక్ దీవి పగటి వెలుతురు సమయం @@ -4335,7 +4404,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ప్యోంగాంగ్ సమయం + ఉత్తర కొరియా సమయం @@ -4413,9 +4482,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - తైపీ సమయం - తైపీ ప్రామాణిక సమయం - తైపీ పగటి వెలుతురు సమయం + తైవాన్ సమయం + తైవాన్ ప్రామాణిక సమయం + తైవాన్ పగటి వెలుతురు సమయం @@ -4440,6 +4509,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ చక్ సమయం + + + టర్కీ సమయం + టర్కీ ప్రామాణిక సమయం + టర్కీ వేసవి సమయం + + తుర్క్‌మెనిస్తాన్ సమయం @@ -4602,12 +4678,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + never + ¤#,##,##0.00 - ¤ #,##,##0.00 - #,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4802,8 +4881,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ కెనడియన్ డాలర్‌లు - కొంగోలిస్ ఫ్రాంక్ - కొంగోలిస్ ఫ్రాంక్ + కాంగోలీస్ ఫ్రాంక్ + కాంగోలీస్ ఫ్రాంక్ కొంగోలిస్ ఫ్రాంక్‌లు @@ -4820,7 +4899,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ చైనీస్ యువాన్ (ఆఫ్‌షోర్) - చైనా దేశ యువాన్ + చైనీస్ యువాన్ + చైనీస్ యువాన్ + చైనీస్ యువాన్ కొలంబియన్ పెసో @@ -4888,9 +4969,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఇథియోపియన్ బర్‌లు - యురొ - యురొ - యురోలు + యూరో + యూరో + యూరోలు ఫీజియన్ డాలర్ @@ -4934,8 +5015,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ గ్యుటెమాలన్ క్వెట్‌జల్ - గ్యుటెమాలన్ క్వెట్‌జల్ - గ్యుటెమాలన్ క్వెట్‌జల్‌లు + గ్వాటెమాలన్ క్వెట్‌జల్ + గ్వాటెమాలన్ క్వెట్‌జల్‌లు గుయనియాస్ డాలర్ @@ -4948,9 +5029,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ హాంకాంగ్ డాలర్‌లు - హోండురన్ లెమిపిరా - హోండురన్ లెమిపిరా - హోండురన్ లెమిపిరాలు + హోండురన్ లెంపిరా + హోండురన్ లెంపిరా + హోండురన్ లెంపిరాలు క్రొయేషియన్ క్యూన @@ -5008,7 +5089,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ జోర్‌డానియన్ దీనార్‌లు - జపాను దేశ యెన్ + జపనీస్ యెన్ + జపనీస్ యెన్ + జపనీస్ యెన్ కెన్యాన్ షిల్లింగ్ @@ -5052,9 +5135,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఖజికిస్థాన్ టెంగేలు - లాటియన్ కిప్ - లాటియన్ కిప్ - లాటియన్ కిప్‌లు + లావోషన్ కిప్ + లావోషన్ కిప్ + లావోషన్ కిప్‌లు లెబనీస్ పౌండ్ @@ -5093,7 +5176,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ మోరోకన్ దిర్హామ్ - మోరోకన్ దిర్హామ్ + మొరాకన్ దిర్హామ్ మోరోకన్ దిర్హామ్‌లు @@ -5183,11 +5266,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ నికరగ్యుయన్ కొర్‌డుబు - నికరగ్యుయన్ కొర్‌డుబు + నికరాగ్వన్ కోర్డబా నికరగ్యుయన్ కొర్‌డుబులు - నార్వేజీయన్ క్రోన్ + నార్వేజియన్ క్రోన్ నార్వేజీయన్ క్రోన్ నార్వేజీయన్ క్రోనర్ @@ -5218,6 +5301,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ పప్యూ న్యూ గ్యినియన్ కినా + ప్యాపువా న్యూ గినియన్ కినా + పప్యూ న్యూ గ్యినియన్ కినా ఫిలిప్పిన్ పెసో @@ -5241,12 +5326,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ పరగ్వాయన్ గ్వారనీలు - క్వాటరి రీయల్ - క్వాటరి రీయల్ - క్వాటరి రీయల్‌లు + ఖతారి రియాల్ + ఖతారి రియాల్ + ఖతారి రియాల్‌లు - రోమానియాన్ లెయు + రొమేనియన్ లెయు రోమానియాన్ లెయు రోమానియాన్ లీ @@ -5336,9 +5421,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ సావో టోమ్ మరియు ప్రిన్సిపి డోబ్రాలు - సిరీయన్ పౌండ్ - సిరీయన్ పౌండ్ - సిరీయన్ పౌండ్‌లు + సిరియన్ పౌండ్ + సిరియన్ పౌండ్ + సిరియన్ పౌండ్‌లు స్వాజి లిలాన్గేని @@ -5366,7 +5451,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ టోంగాన్ పాంʻగా - టర్కిస్ లీరా + టర్కిష్ లీరా + టర్కిష్ లీరా + టర్కిష్ లీరా ట్రినిడాడ్ మరియు టొబాగో డాలర్ @@ -5385,9 +5472,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ టాంజానియన్ షిల్లింగ్‌లు - ఉక్రయినియన్ హ్రివ్‌నియా - ఉక్రయినియన్ హ్రివ్‌నియా - ఉక్రయినియన్ హ్రివ్‌నియాలు + ఉక్రేనియన్ హ్రివ్నియా + ఉక్రేనియన్ హ్రివ్నియా + ఉక్రేనియన్ హ్రివ్నియాలు ఉగాండన్ షిల్లింగ్ @@ -5445,6 +5532,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ తూర్పు కరీబియన్ డాలర్ తూర్పు కరీబియన్ డాలర్‌లు + + కరీబియన్ గిల్‌డర్ + కరీబియన్ గిల్‌డర్ + కరీబియన్ గిల్‌డర్‌లు + పశ్చిమ ఆఫ్రికన్ సిఏఫ్ఏ ఫ్రాంక్ పశ్చిమ ఆఫ్రికన్ సిఏఫ్ఏ ఫ్రాంక్ @@ -5465,7 +5557,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ఎమునీ రీయల్ - ఎమునీ రీయల్ + యెమనీ రియాల్ ఎమునీ రీయల్‌లు @@ -5479,6 +5571,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ జాంబియన్ క్వాచా జాంబియన్ క్వాచాలు + + జింబాబ్వేయన్ గోల్డ్ + జింబాబ్వేయన్ గోల్డ్ + జింబాబ్వేయన్ గోల్డ్ + {0}+ @@ -5705,7 +5802,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ఐటమ్ {0} ఐటమ్‌లు - + + పార్ట్‌లు + {0} పార్ట్ + {0} పార్ట్‌లు + + {0} భాగం/మిలియన్ {0} భాగాలు/మిలియన్ @@ -5726,6 +5828,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} మోల్ {0} మోల్‌లు + + గ్లూకోజ్ + {0} గ్లూకోజ్ + {0} గ్లూకోజ్ + లీటర్లు/కిలోమీటరు {0} లీటరు/కిలోమీటరు @@ -6218,6 +6325,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} మిల్లీమీటర్ పాదరసం {0} మిల్లీమీటర్ల పాదరసం + + పాదరసం + {0} పాదరసం + {0} పాదరసం + చదరపు అంగుళానికి పౌండ్లు చదరపు అంగుళానికి {0} పౌండు @@ -6389,6 +6501,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} మెట్రిక్ కప్పు {0} మెట్రిక్ కప్పులు + + మెట్రిక్ ఫ్లూయిడ్ ఔన్స్‌లు + {0} మెట్రిక్ ఫ్లూయిడ్ ఔన్స్ + {0} మెట్రిక్ ఫ్లూయిడ్ ఔన్స్‌లు + ఎకరా-అడుగులు {0} ఎకరా-అడుగు @@ -6450,7 +6567,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} బారెల్‌లు - డెసర్ట్ స్పూన్ + డెజర్ట్ స్పూన్‌లు {0} డెసర్ట్ స్పూన్ {0} డెసర్ట్ స్పూన్ @@ -6460,29 +6577,86 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ఇంపీరియల్ డెసర్ట్ స్పూన్ - డ్రామ్ + డ్రామ్‌లు {0} డ్రామ్ - {0} డ్రామ్ + {0} డ్రామ్‌లు ఇంపీరియల్ చతుర్ధాంశం {0} ఇంపీరియల్ చతుర్ధాంశం {0} ఇంపీరియల్ చతుర్ధాంశం - - లైట్ - {0} లైట్ - {0} లైట్ + + స్టెరేడియన్‌లు + {0} స్టెరేడియన్ + {0} స్టెరేడియన్‌లు - + + క్యాటల్‌లు + {0} క్యాటల్ + {0} క్యాటల్‌లు + + + కూలంబ్స్ + {0} కూలంబ్ + {0} కూలంబ్స్ + + + ఫారెడ్స్ + {0} ఫారెడ్ + {0} ఫారెడ్స్ + + + హెన్రీస్ + {0} హెన్రీ + {0} హెన్రీస్ + + + సీమెన్స్ + {0} సీమెన్స్ + {0} సీమెన్స్ + + + క్యాలరీలు [IT] + {0} క్యాలరీ [IT] + {0} క్యాలరీలు [IT] + + + బెకారెల్స్ + {0} బెకారెల్ + {0} బెకారెల్‌లు + + + సీవర్ట్స్ + {0} సీవర్ట్ + {0} సీవర్ట్స్ + + + గ్రేస్ + {0} గ్రే + {0} గ్రేస్ + + + కిలోగ్రామ్‌లు-బలం + {0} కిలోగ్రామ్-బలం + {0} కిలోగ్రామ్‌లు-బలం + + + టెస్లాలు + {0} టెస్లా + {0} టెస్లాలు + + + వెబర్‌లు + {0} వెబర్ + {0} వెబర్‌లు + + ప్రతి బిలియన్‌కి భాగాలు ప్రతి బిలియన్‌కి {0} భాగం ప్రతి బిలియన్‌కి {0} భాగాలు - రాత్రి - {0} రాత్రి - {0} రాత్రులు ఒక రాత్రికి {0} @@ -6506,9 +6680,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ మై.{0} - - నా.{0} - ఫె{0} @@ -6694,7 +6865,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ఐటమ్ {0} ఐటమ్ - + + పార్ట్ + {0} పార్ట్ + {0} పార్ట్ + + భాగాలు/మిలియన్ {0} భా./మి. {0} భా./మి. @@ -6711,6 +6887,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ మోల్ + + Glc + {0} Glc + {0} Glc + లీటర్లు/కి.మీ {0} లీ./కి.మీ @@ -7207,6 +7388,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} మిమీ. పాద {0} మిమీ. పాద + + {0} Hg + {0} Hg + పౌ/చ.అం {0} పౌ/చ.అం @@ -7368,6 +7553,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}/మె.క. {0}/మె.క. + + {0} fl oz m. + {0} fl oz m. + ఎ.అ. {0} ఎ.అ. @@ -7460,12 +7649,65 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} చతు. ఇంపీరియల్ {0} చతు. ఇంపీరియల్ + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + లైట్ {0} లైట్ {0} లైట్ - + భాగాలు/బిలియన్ @@ -7496,7 +7738,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ మై{0} - నా{0} + n{0} పి{0} @@ -7596,6 +7838,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ఐటమ్ {0}ఐటమ్ + + పార్ట్ + {0} పార్ట్ + {0} పార్ట్ + % @@ -7606,6 +7853,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} మోల్ {0} మోల్ + + Glc + లీ/100కి.మీ. {0}లీ/100కి.మీ. @@ -7798,8 +8048,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}లీ - {0}గ్యా. ఇం. - {0}గ్యా. ఇం. + {0}gal-Im + {0}gal-Im {0}పావు వం. @@ -7825,16 +8075,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}చతు.ఇం. {0}చతు.ఇం. - - లైట్ - {0} లైట్ - {0} లైట్ + + cal-IT - రాత్రులు {0}రాత్రి {0}రాత్రులు - రాత్రికి {0} diff --git a/make/data/cldr/common/main/tg.xml b/make/data/cldr/common/main/tg.xml index 99d34be7f21..2538ce1db16 100644 --- a/make/data/cldr/common/main/tg.xml +++ b/make/data/cldr/common/main/tg.xml @@ -452,6 +452,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Хитой Колумбия Ҷазираи Клиппертон + Сарк Коста-Рика Куба Кабо-Верде @@ -674,10 +675,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic Тақвими грегорианӣ + Грегорианӣ Тақвими ҳиҷрӣ (ҷадвал, давраи шаҳрвандӣ) + Ҳиҷрӣ (ҷадвалӣ, давраи шаҳрвандӣ) Тақвими ҳиҷрӣ (ҷадвал, давраи ситорашиносӣ) + Ҳиҷрӣ (ҷадвал, давраи ситорашиносӣ) Тақвими ISO-8601 Тартиби мураттабсозии стандартӣ + Стандартӣ Рақамҳои ҳинду-арабӣ Рақамҳои ғарбӣ @@ -722,7 +727,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - dd/MM/yy GGGGG + d.MM.y G GGGGGyyMMdd @@ -735,6 +740,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'соати' {0} + + {1} 'соати' {0} + @@ -743,6 +751,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'соати' {0} + + {1} 'соати' {0} + @@ -751,6 +762,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + @@ -759,28 +773,32 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + E h:mm a E h:mm:ss a y G - M/d/y GGGGG + MM/y G + d.MM.y G + E, d.MM.y G MMM y G d MMM y G E, d MMM y G - h a h:mm a h:mm:ss a - dd-MM - E, dd-MM + MM/d + E, MM/d d MMM E, d MMM d MMMM y G y G MM-y GGGGG - d-MM-y GGGGG - E, d-MM-y GGGGG + d.MM.y G + E, d.MM.y G MMM y G d MMM y G E, d MMM y G @@ -789,7 +807,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic QQQQ y G - {0} – {1} h – h B @@ -805,21 +822,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic y – y G - M/y GGGGG – M/y GGGGG - M/y – M/y GGGGG - M/y – M/y GGGGG + MM/y G – MM/y G + MM/y – MM/y G + MM/y – MM/y G - M/d/y – M/d/y GGGGG - M/d/y GGGGG – M/d/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG + d.MM.y – d.MM.y G + d.MM.y G – d.MM.y G + d.MM.y – d.MM.y G + d.MM.y – d.MM.y G - E, M/d/y – E, M/d/y GGGGG - E, M/d/y GGGGG – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG + E, d.MM.y – E, d.MM.y G + E, d.MM.y G – E, d.MM.y G + E, d.MM.y – E, d.MM.y G + E, d.MM.y – E, d.MM.y G MMM y G – MMM y G @@ -827,72 +844,73 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM y – MMM y G - MMM d – d, y G - MMM d, y G – MMM d, y G - MMM d – MMM d, y G - MMM d, y – MMM d, y G + d – d MMM y G + d MMM y G – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E, MMM d – E, MMM d, y G - E, MMM d, y G – E, MMM d, y G - E, MMM d – E, MMM d, y G - E, MMM d, y – E, MMM d, y G + E, d MMM – E, d MMM y G + E, d MMM y G – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G - M – M + MM – MM - M/d – M/d - M/d – M/d + d/MM – d/MM + d/MM – d/MM - E, M/d – E, M/d - E, M/d – E, M/d + E, d/MM – E, d/MM + E, d/MM – E, d/MM MMM – MMM - MMM d – d + MMM d – d + d MMM – d MMM - E, MMM d – E, MMM d - E, MMM d – E, MMM d + E, d MMM – E, d MMM + E, d MMM – E, d MMM - y – y G + y – y G - M/y – M/y GGGGG - M/y – M/y GGGGG + MM/y – MM/y G + MM/y – MM/y G - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG - M/d/y – M/d/y GGGGG + d.MM.y – d.MM.y G + d.MM.y – d.MM.y G + d.MM.y – d.MM.y G - E, M/d/y – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG - E, M/d/y – E, M/d/y GGGGG + E, d.MM.y – E, d.MM.y G + E, d.MM.y – E, d.MM.y G + E, d.MM.y – E, d.MM.y G - MMM – MMM y G - MMM y – MMM y G + MMM – MMM y G + MMM y – MMM y G - MMM d – d, y G - MMM d – MMM d, y G - MMM d, y – MMM d, y G + d – d MMM y G + d MMM – d MMM y G + d MMM y – d MMM y G - E, MMM d – E, MMM d, y G - E, MMM d – E, MMM d, y G - E, MMM d, y – E, MMM d, y G + E, d MMM – E, d MMM y G + E, d MMM – E, d MMM y G + E, d MMM y – E, d MMM y G - MMMM – MMMM'и' y G - MMMM'и' y – MMMM'и' y G + MMMM – MMMM y G + MMMM y – MMMM y G @@ -1088,6 +1106,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic E h:mm a E h:mm:ss a y G + y-MM G + y-MM-dd G + y-MM-dd G, E MMM y G d MMM, y G E, d MMM, y G @@ -2131,6 +2152,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Истер + + Койҳайке + Пунта Аренас @@ -2395,7 +2419,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Пномпен - + Кантон @@ -3065,9 +3089,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Вақти Африқои Ғарбӣ - Вақти стандартии Африқои Ғарбӣ - Вақти тобистонаи Африқои Ғарбӣ + Вақти Африқои Ғарбӣ @@ -3417,6 +3439,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Вақти Гайана + + + Вақти стандартии Ҳавайӣ-Алеутӣ + + Вақти Ҳавайӣ-Алеутӣ @@ -3956,23 +3983,36 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + #,##0.00 + + + #,##0.00 ¤ + #,##0.00 ¤ - #,##0.00;(#,##0.00) + #,##0.00 ¤ + #,##0.00 - ¤0 ҳазор - ¤00 ҳазор - ¤000 ҳазор - ¤0 млн - ¤00 млн - ¤000 млн + 0 ҳзр'.' ¤ + 00 ҳзр'.' ¤ + 000 ҳзр'.' ¤ + 0 млн'.' ¤ + 00 млн'.' ¤ + 000 млн'.' ¤ 0 млрд'.' ¤ 00 млрд'.' ¤ 000 млрд'.' ¤ @@ -4593,6 +4633,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Доллари Кариби Шарқӣ доллари Кариби Шарқӣ + + гулдени Кариб + гулдени Кариб + Франки Африқои Ғарбӣ франки Африқои Ғарбӣ @@ -4617,6 +4661,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Квачаи Замбия квачаи Замбия + + тиллоии Зимбабве + тиллоии Зимбабве + ⩾{0} diff --git a/make/data/cldr/common/main/th.xml b/make/data/cldr/common/main/th.xml index ea1a00e3d0f..f5a89b75752 100644 --- a/make/data/cldr/common/main/th.xml +++ b/make/data/cldr/common/main/th.xml @@ -331,6 +331,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ บาเฟีย โคโลญ เคิร์ด + เคิร์ด + กุรมันชี คูมืยค์ คูเทไน โกมิ @@ -939,6 +941,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ จีน โคลอมเบีย เกาะคลิปเปอร์ตัน + ซาร์ก คอสตาริกา คิวบา เคปเวิร์ด @@ -1245,35 +1248,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ การจัดเรียงตัวเลข ความแม่นยำในการจัดเรียง สกุลเงิน + การแสดงอีโมจิ วงจรชั่วโมง (เทียบ 12 และ 24) รูปแบบการขึ้นบรรทัดใหม่ + การขึ้นบรรทัดใหม่ภายในคำ ระบบการวัด ตัวเลข + การตัดประโยคหลังจากคำย่อ เขตเวลา ตัวแปรภาษาถิ่น ใช้งานส่วนบุคคล ปฏิทินพุทธ + พุทธ ปฏิทินจีน + จีน ปฏิทินคอปติก + คอปติก ปฏิทินเกาหลี + เกาหลี ปฏิทินเอธิโอเปีย + เอธิโอเปีย ปฏิทินปีโลกเอธิโอเปีย + ปีโลกเอธิโอเปีย ปฏิทินเกรกอเรียน + เกรกอเรียน ปฏิทินฮิบรู + ฮิบรู ปฏิทินแห่งชาติอินเดีย ปฏิทินอิสลาม + อิสลาม ปฏิทินอิสลามซีวิล + อิสลามซีวิล ปฏิทินอิสลาม (ซาอุดีอาระเบีย แบบพระจันทร์เสี้ยว) ปฏิทินอิสลาม (แบบตาราง สมัยดาราศาสตร์) ปฏิทินอิสลาม (อุมม์อัลกุรา) + อิสลาม (อุมม์อัลกุรา) ปฏิทิน ISO-8601 ปฏิทินญี่ปุ่น + ญี่ปุ่น ปฏิทินเปอร์เชีย + เปอร์เชีย ปฏิทินไต้หวัน + ไต้หวัน รูปแบบสกุลเงินบัญชี + บัญชี รูปแบบสกุลเงินมาตรฐาน + มาตรฐาน จัดเรียงสัญลักษณ์ จัดเรียงสัญลักษณ์ที่ละไว้ จัดเรียงเสียงหนักเบาตามปกติ @@ -1283,22 +1305,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ จัดเรียงตัวพิมพ์ใหญ่ก่อน จัดเรียงตามความสำคัญของตัวพิมพ์ จัดเรียงความสำคัญของตัวพิมพ์ - ลำดับการจัดเรียงตามอักษรจีนดั้งเดิม ลำดับการจัดเรียงก่อนหน้านี้ ตามความเหมาะสม + ความเหมาะสม ลำดับการจัดเรียงตามพจนานุกรม + พจนานุกรม ลำดับการจัดเรียงตาม Unicode เริ่มต้น + Unicode เริ่มต้น กฎการเรียงลำดับตามแบบยุโรป - ลำดับการจัดเรียงตามอักษรจีนประยุกต์ ลำดับการจัดเรียงตามสมุดโทรศัพท์ + สมุดโทรศัพท์ ลำดับการจัดเรียงตามการออกเสียง + การออกเสียง ลำดับการจัดเรียงตามการถอดเสียงภาษาจีน + การถอดเสียงภาษาจีน การค้นหาทั่วไป + การค้นหา ค้นหาตามพยัญชนะขึ้นต้นที่เป็นฮันกึล ลำดับการจัดเรียงแบบมาตรฐาน + มาตรฐาน ลำดับการจัดเรียงตามการลากเส้น + การลากเส้น ลำดับการจัดเรียงตามแบบดั้งเดิม + ดั้งเดิม ลำดับการจัดเรียงตามจำนวนขีด + จำนวนขีด ลำดับการจัดเรียงตามการสะกดแบบจู้อิน + การสะกดแบบจู้อิน จัดเรียงโดยไม่ต้องทำให้เป็นแบบปกติ จัดเรียงยูนิโค้ดแบบที่เป็นปกติ จัดเรียงตัวเลขแยก @@ -1311,18 +1343,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ตัวเต็ม ตัวย่อ ตัวเลข + ค่าเริ่มต้น + อีโมจิ + ข้อความ ระบบ 12 ชั่วโมง (0–11) + 12 (0–11) ระบบ 12 ชั่วโมง (1–12) + 12 (1–12) ระบบ 24 ชั่วโมง (0–23) + 24 (0–23) ระบบ 24 ชั่วโมง (1–24) + 24 (1–24) รูปแบบที่ยืดหยุ่นของการขึ้นบรรทัดใหม่ + ยืดหยุ่น รูปแบบปกติของการขึ้นบรรทัดใหม่ + ปกติ รูปแบบที่เคร่งครัดของการขึ้นบรรทัดใหม่ + เคร่งครัด + ขึ้นบรรทัดใหม่ได้ในทุกคำ + ป้องกันการขึ้นบรรทัดใหม่ในทุกคำ + ขึ้นบรรทัดใหม่ปกติ + ไม่ขึ้นบรรทัดใหม่ในวลี ชื่อมาตรฐานอังกฤษ (BGN) ชื่อภูมิศาสตร์มาตรฐาน UN (UNGEGN) ระบบเมตริก + เมตริก ระบบการวัดอิมพีเรียล + อังกฤษ ระบบการวัดอเมริกัน + อเมริกัน ตัวเลขอารบิก-อินดิก ตัวเลขอารบิก-อินดิกแบบขยาย ตัวเลขอาร์เมเนีย @@ -1384,6 +1433,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ตัวเลขทิเบต ตัวเลขแบบดั้งเดิม ตัวเลขไว + ปิด + เปิด เมตริก @@ -1408,7 +1459,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [.․﹒.。︒。] - [££ ₤] [\-﹣-‑‒ −⁻₋ ➖] @@ -1457,7 +1507,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + M/G y d/M/GGGGG y + E ที่ d/M/G y E d MMMM EEEEที่ d MMMM M/y @@ -1768,6 +1820,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} เวลา {0} + + {1} เวลา {0} + @@ -1776,6 +1831,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} เวลา {0} + + {1} เวลา {0} + @@ -1789,7 +1847,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d + M/y G d/M/y GGGGG + E ที่ d/M/y G MMM G y d MMM G y E d MMM G y @@ -1979,6 +2039,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + อาทิตย์ + จันทร์ + อังคาร + พุธ + พฤหัส + ศุกร์ + เสาร์ + + อา. จ. อ. @@ -1998,6 +2067,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + อาทิตย์ + จันทร์ + อังคาร + พุธ + พฤหัส + ศุกร์ + เสาร์ + อา @@ -2007,6 +2085,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + อา. + จ. + อ. + พ. + พฤ. + ศ. + ส. + @@ -2151,6 +2238,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} เวลา {0} + + {1} เวลา {0} + @@ -2159,6 +2249,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} เวลา {0} + + {1} เวลา {0} + @@ -2174,6 +2267,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E d E HH:mm น. d/M/GGGGG y + E d/M/G y MMM G y d MMM G y E d MMM G y @@ -3438,6 +3532,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ อีสเตอร์ + + โกไยเก + ปุนตาอาเรนัส @@ -3703,9 +3800,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ พนมเปญ - เอนเดอร์เบอรี - - แคนทอน @@ -4382,9 +4476,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - เวลาแอฟริกาตะวันตก - เวลามาตรฐานแอฟริกาตะวันตก - เวลาฤดูร้อนแอฟริกาตะวันตก + เวลาแอฟริกาตะวันตก @@ -4772,6 +4864,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ เวลากายอานา + + + เวลามาตรฐานฮาวาย-อะลูเชียน + + เวลาฮาวาย-อะลูเชียน @@ -5222,6 +5319,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ เวลาชุก + + + เวลาตุรกี + เวลามาตรฐานตุรกี + เวลาฤดูร้อนตุรกี + + เวลาเติร์กเมนิสถาน @@ -5343,8 +5447,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -6202,6 +6304,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ดอลลาร์แคริบเบียนตะวันออก + + กิลเดอร์แคริบเบียน + กิลเดอร์แคริบเบียน + สิทธิถอนเงินพิเศษ @@ -6282,6 +6388,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ดอลลาร์ซิมบับเว + + ทองซิมบับเว + ทองซิมบับเว + ดอลลาร์ซิมบับเว (2009) @@ -6359,7 +6469,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ มิลลิโมลต่อลิตร {0} มิลลิโมลต่อลิตร - + + ส่วน + {0} ส่วน + + ส่วนต่อล้าน {0} ส่วนต่อล้าน @@ -6372,6 +6486,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} เปอร์มีเรียด + + กลูโคส + {0} กลูโคส + ลิตรต่อกิโลเมตร {0} ลิตรต่อกิโลเมตร @@ -6636,6 +6754,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ มิลลิเมตรปรอท {0} มิลลิเมตรปรอท + + ปรอท + {0} ปรอท + ปอนด์ต่อตารางนิ้ว {0} ปอนด์ต่อตารางนิ้ว @@ -6739,6 +6861,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ถ้วยเมตริก {0} ถ้วยเมตริก + + ฟลูอิดออนซ์เมตริก + {0} ฟลูอิดออนซ์เมตริก + {0} บุชเชล @@ -6778,19 +6904,62 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ควอร์ตอังกฤษ {0} ควอร์ตอังกฤษ - - แสง - {0} แสง + + สเตอเรเดียน + {0} สเตอเรเดียน - + + คาทัล + {0} คาทัล + + + คูลอมบ์ + {0} คูลอมบ์ + + + ฟารัด + {0} ฟารัด + + + เฮนรี + {0} เฮนรี + + + ซีเมนส์ + {0} ซีเมนส์ + + + แคลอรี [IT] + {0} แคลอรี [IT] + + + เบ็กเคอเรล + {0} เบ็กเคอเรล + + + ซีเวิร์ต + {0} ซีเวิร์ต + + + เกรย์ + {0} เกรย์ + + + กิโลกรัมแรง + {0} กิโลกรัมแรง + + + เทสลา + {0} เทสลา + + + เวเบอร์ + {0} เวเบอร์ + + ส่วนต่อพันล้าน {0} ส่วนต่อพันล้าน - - คืน - {0} คืน - {0}/คืน - สี่ทิศหลัก {0}ตะวันออก @@ -6983,7 +7152,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ รายการ {0} รายการ - + + ส่วน + {0} ส่วน + + ส่วน/ล้าน {0} สตล. @@ -7000,6 +7173,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ โมล {0} โมล + + กลูโคส + {0} กลูโคส + ลิตร/กม. {0} ล./กม. @@ -7334,6 +7511,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ มม. ปรอท {0} มม. ปรอท + + ปรอท + {0} ปรอท + ปอนด์/ตร.นิ้ว {0} ปอนด์/ตร.นิ้ว @@ -7443,6 +7624,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ถ. เมตริก {0} ถ. เมตริก + + {0} fl oz m. + เอเคอร์-ฟุต {0} เอเคอร์-ฟุต @@ -7510,11 +7694,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ หยิบมือ {0} หยิบมือ + + สเตอเรเดียน + {0} sr + + + คาทัล + {0} คาทัล + + + คูลอมบ์ + {0} C + + + ฟารัด + {0} ฟารัด + + + เฮนรี + {0} เฮนรี + + + ซีเมนส์ + {0} ซีเมนส์ + + + แคลอรี-IT + {0} แคลอรี-IT + + + เบ็กเคอเรล + {0} Bq + + + ซีเวิร์ต + {0} ซีเวิร์ต + + + เกรย์ + {0} เกรย์ + + + กิโลกรัมแรง + {0} กิโลกรัมแรง + + + เทสลา + {0} เทสลา + + + เวเบอร์ + {0} Wb + แสง {0} แสง - + ส่วน/พันล้าน {0} สตพล. @@ -7594,7 +7830,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}รายการ - + + ส่วน + {0} ส่วน + + สตล. {0}สตล. @@ -7607,6 +7847,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}โมล + + กลูโคส + {0} กลูโคส + ล./กม. {0}ล./กม. @@ -7936,6 +8180,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}มม. ปรอท + + ปรอท + {0} ปรอท + {0}psi @@ -8103,18 +8351,63 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}qt-Imp. + + สเตอเรเดียน + + + คาทัล + {0} คาทัล + + + คูลอมบ์ + + + ฟารัด + {0} ฟารัด + + + เฮนรี + {0} เฮนรี + + + ซีเมนส์ + {0} ซีเมนส์ + + + แคลอรี-IT + {0} แคลอรี-IT + + + เบ็กเคอเรล + + + ซีเวิร์ต + {0} ซีเวิร์ต + + + เกรย์ + {0} เกรย์ + + + กิโลกรัมแรง + {0} กิโลกรัมแรง + + + เทสลา + {0} เทสลา + + + เวเบอร์ + - แสง {0}แสง - + สตพล. {0}สตพล. - คืน {0}คืน - {0}/คืน ทิศ diff --git a/make/data/cldr/common/main/ti.xml b/make/data/cldr/common/main/ti.xml index 767bdcbe280..f34e86a651e 100644 --- a/make/data/cldr/common/main/ti.xml +++ b/make/data/cldr/common/main/ti.xml @@ -16,7 +16,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}፦ {1} - አፋር + ዓፋር ኣብካዝኛ ኣቸኒዝኛ ኣዳንግሜ @@ -39,7 +39,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ናጅዲ ዓረብኛ ኣሳሜዝኛ ኣሱ - ኣስቱርያን + ኣስቱርኛ ኣቲካመክ ኣቫርኛ ኣዋዲ @@ -66,14 +66,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic ባምባራ በንጋሊ ቲበታንኛ + ባኽትያሪ ብረቶንኛ ቦዶ ቦዝንኛ ኣኮስ + ቡርያትኛ ቡጊንኛ ብሊን ካታላን - ካድዶ + ካዶ ካዩጋ ኣትሳም ቻክማ @@ -88,17 +90,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic ቸሮኪ ሻያን ቺካሳው - ማእከላይ ኩርዲሽ - ኩርዲሽ፣ ማእከላይ - ኩርዲሽ፣ ሶራኒ + ኩርዲሽ ሶራኒ ቺልኮቲን ኮርስኛ + ቁብጥኛ ሚቺፍ ደቡባዊ ምብራቕ ክሪ - ክሪ ፕሌንስ + ክሪ ቆላታት ሰሜናዊ ምብራቕ ክሪ ሙስ ክሪ - ካሮሊና አልጎንጉያኛ + ኣልጎንክኛ ካሮሊና ቸክኛ ክሪ ረግረግ ቤተ-ክርስትያን ስላቭኛ @@ -109,6 +110,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ዳርግዋ ታይታ ጀርመን + ኦስትርያዊ ጀርመን + ስዊዘርላንዳዊ ላዕለዋይ ጀርመን ዶግሪብ ዛርማ ዶግሪ @@ -124,10 +127,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic ኤካጁክ ግሪኽኛ እንግሊዝኛ - እንግሊዝኛ (ሕ.መ.) + ኣውስትራልያዊ እንግሊዝኛ + ካናዳዊ እንግሊዝኛ + ብሪጣንያዊ እንግሊዝኛ + ኣመሪካዊ እንግሊዝኛ ኤስፐራንቶ ስጳንኛ + ላቲን ኣመሪካዊ ስጳንኛ ስጳንኛ (ኤውሮጳዊ) + ስጳንኛ ሜክሲኮ ኤስቶንኛ ባስክኛ ኤዎንዶ @@ -140,7 +148,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ፋሮእይና ፎን ፈረንሳይኛ - ካጁን ፈረንሳይ + ካናዳዊ ፈረንሳይኛ + ስዊዘርላንዳዊ ፈረንሳይኛ + ካጁን ፈረንሳይኛ ሰሜናዊ ፍሪስኛ ፍርዩልኛ ምዕራባዊ ፍሪስኛ @@ -204,6 +214,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ታያፕ ማኮንደ ክርዮል ኬፕ ቨርድኛ + ቄቅቺ ኬንያንግ ኮሮ ካይንጋንግ @@ -228,8 +239,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ካሽሚሪ ሻምባላ ባፍያ - ኮሎግኒያን + ኮልሽ ኩርዲሽ + ኩርዲሽ + ኰርማንጂ ኩሚይክ ኮሚ ኮርንኛ @@ -254,7 +267,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ሰሜናዊ ሉሪ ሳምያ ሊትዌንኛ - ላትጋላዊ + ላትጋልኛ ሉባ-ካታንጋ ሉባ-ሉልዋ ሉንዳ @@ -296,7 +309,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ኤርዝያ ማዛንደራኒ ናውርዋንኛ - ኒያፖሊታንኛ + ናፖሊታንኛ ናማ ኖርወያዊ ቦክማል ሰሜን ኤንደበለ @@ -337,12 +350,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic ፓፕያመንቶ ፓላውኛ ፒጂን ናይጀርያ + ፓሊ ፒጂን ፖሊሽ + ፒድሞንትኛ ማሊሲት-ፓሳማኳዲ ፕሩስኛ ፓሽቶ ፖርቱጊዝኛ + ፖርቱጊዝኛ ብራዚል + ፖርቱጊዝኛ ፖርቱጋል ቀችዋ ኪቼ ራጃስታኒ @@ -375,11 +392,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ሰና ኮይራቦሮ ሰኒ ሳንጎ + ሳሞጂትኛ ሰርቦ-ክሮኤሽያኛ ታቸልሂት ሻን ሲንሃላ - ሲዳመኛ + ሲዳሞ ስሎቫክኛ ስሎቬንኛ ደቡባዊ ሉሹትሲድ @@ -392,7 +410,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ሶኒንከ ሶማሊ ኣልባንኛ - ሰርቢያኛ + ሰርብኛ ስራናን ቶንጎ ስዋዚ ሳሆ @@ -402,10 +420,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ሱኩማ ስዊድንኛ ስዋሂሊ - ስዋሂሊ (ኮንጎ) + ስዋሂሊ ኮንጎ ኮሞርኛ - ሶርያኛ - ሲሌሲያን + ሶርይኛ + ሲለዝኛ ታሚል ደቡባዊ ታትቾን ተሉጉ @@ -427,7 +445,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ቶክ ፒሲን ቱርክኛ ታሮኮ - ቶርዋሊኛ + ቶርዋሊ ሶንጋ ታታር ሰሜናዊ ታትቾን @@ -447,21 +465,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic ኡዝበክኛ ቫይ ቨንዳ - ቬንቲያንኛ + ቬነትኛ ቬትናምኛ ማክሁዋ ቮላፑክ ቩንጆ ዋሎን ዋልሰር - ዎላይታኛ + ወላይታ ዋራይ ዋርልፒሪ ዎሎፍ ቻይናዊ ዉ ካልምይክ ኮሳ - ካንጋሪኛ + ካንግሪ ሶጋ ያንግበን የምባ @@ -861,43 +879,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic ቅርጺ ባጤራ ስርዓት ምድላው ባጤራ + ኣቀራርባ ኢሞጂ ዑደት ሰዓት (12 ኣንጻር 24) ቅዲ ምብታኽ መስመር + መስመር ምብታኽ ኣብ ውሽጢ ቃላት ስርዓት መለክዒ ቁጽርታት + ምቁራጽ ሓረግ ድሕሪ ኣሕጽሮተ ቃል ናይ ቡድሃ ዓውደ ኣዋርሕ + ቡድሃ ናይ ቻይናዊ ዓውደ ኣዋርሕ + ቻይናዊ ናይ ቅብጣዊ ዓውደ ኣዋርሕ + ቅብጣዊ ናይ ዳንጊ ዓውደ ኣዋርሕ + ዳንጊ ናይ ግእዝ ዓውደ ኣዋርሕ + ግእዝ ግእዝ ኣመተ ኣለም ዓውደ ኣዋርሕ + ግእዝ ኣመተ ኣለም ጎርጎርዮሳዊ ዓውደ ኣዋርሕ + ጎርጎርዮሳዊ ናይ እብራይስጢ ዓውደ ኣዋርሕ + እብራይስጢ ናይ ሂጅሪ ዓውደ ኣዋርሕ + ሂጅሪ ናይ ሂጅሪ ዓውደ ኣዋርሕ (ሰንጠረዥ፣ ሲቪላዊ ዘመን) + ሂጅሪ ዓውደ ኣዋርሕ (ሰንጠረዥ፣ ሲቪላዊ ዘመን) ናይ ሂጅሪ ዓውደ ኣዋርሕ (ሰንጠረዥ፣ ስነ-ፍልጠታዊ ዘመን) + ሂጅሪ (ሰንጠረዥ፣ ስነ-ፍልጠታዊ ዘመን) ናይ ሂጅሪ ዓውደ ኣዋርሕ (ኡም ኣል-ቁራ) + ሂጅሪ (ኡም ኣል-ቁራ) ISO-8601 ዓውደ ኣዋርሕ ናይ ጃፓናዊ ዓውደ ኣዋርሕ + ጃፓናዊ ናይ ፋርስ ዓውደ ኣዋርሕ + ፋርስ ናይ ሪፓብሊክ ቻይና ዓውደ ኣዋርሕ + ሪፓብሊክ ቻይና ቅርጺ ባጤራ ሕሳብ + ሕሳብ መደበኛ ቅርጺ ባጤራ + መደበኛ ነባሪ ዩኒኮድ ስርዓት ምድላው + ነባሪ ዩኒኮድ ሓፈሻዊ-ዕላማ ምድላይ + ምድላይ መደበኛ ምድላው ስርዓት + መደበኛ + ነባሪ + ኢሞጂ + ጽሑፍ ስርዓት 12 ሰዓታት (0–11) + 12 (0–11) 12 (0–11) ስርዓት 12 ሰዓታት (1–12) + 12 (1–12) 12 (1–12) ናይ 24 ሰዓታት ስርዓት (0–23) + 24 (0–23) ናይ 24 ሰዓታት ስርዓት (1–24) + 24 (1–24) ልሕሉሕ መስመር ምብታኽ ቅዲ + ልሕሉሕ ንቡር ቅዲ ምብታኽ መስመር + ንቡር ቅዲ ስጡም መስመር ምብታኽ + ስጡም + ኩሉ ስበር + ኩሉ ሓልዎ + ንቡር + ብሓረጋት ምሓዝ ሜትሪክ ስርዓት + ሜትሪክ ስርዓተ መለክዒ ሃጸያዊ + ዓባይ ብሪጣንያ ስርዓት መለክዒ ኣሜሪካ + ኣሜሪካ ዓረብ-ህንዳዊ ኣሃዛት ዝተዘርግሐ ኣሃዛት ዓረብ-ህንዳዊ ኣርመንያዊ ቁጽርታት @@ -938,6 +996,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic ናይ ታይላንዳዊ ኣሃዛት ናይ ትቤቲ ኣሃዛት ቫይ ኣሃዛት + ጠፊኡ + በሪሑ ሜትሪክ @@ -954,6 +1014,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic [፟ ሀ ሁ ሂ ሃ ሄ ህ ሆ ለ ሉ ሊ ላ ሌ ል ሎ ሏ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ሠ ሡ ሢ ሣ ሤ ሥ ሦ ሧ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ሰ ሱ ሲ ሳ ሴ ስ ሶ ሷ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቈ ቊ ቋ ቌ ቍ ቐ ቑ ቒ ቓ ቔ ቕ ቖ ቘ ቚ ቛ ቜ ቝ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ ቱ ቲ ታ ቴ ት ቶ ቷ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ኀ ኁ ኂ ኃ ኄ ኅ ኆ ኈ ኊ ኋ ኌ ኍ ነ ኑ ኒ ና ኔ ን ኖ ኗ ኘ ኙ ኚ ኛ ኜ ኝ ኞ ኟ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ከ ኩ ኪ ካ ኬ ክ ኮ ኰ ኲ ኳ ኴ ኵ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ዀ ዂ ዃ ዄ ዅ ወ ዉ ዊ ዋ ዌ ው ዎ ዐ ዑ ዒ ዓ ዔ ዕ ዖ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ ዩ ዪ ያ ዬ ይ ዮ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ገ ጉ ጊ ጋ ጌ ግ ጎ ጐ ጒ ጓ ጔ ጕ ጠ ጡ ጢ ጣ ጤ ጥ ጦ ጧ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ጰ ጱ ጲ ጳ ጴ ጵ ጶ ጷ ጸ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፀ ፁ ፂ ፃ ፄ ፅ ፆ ፇ ፈ ፉ ፊ ፋ ፌ ፍ ፎ ፏ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ] [᎐ ᎑ ᎒ ᎓ ᎔ ᎕ ᎖ ᎗ ᎘ ᎙ ሇ ⶀ ᎀ ᎁ ᎂ ᎃ ⶁ ⶂ ⶃ ⶄ ቇ ᎄ ᎅ ᎆ ᎇ ⶅ ⶆ ⶇ ኇ ⶈ ⶉ ⶊ ኯ ዏ ⶋ ዯ ⶌ ዸ ዹ ዺ ዻ ዼ ዽ ዾ ዿ ⶍ ⶎ ጏ ጘ ጙ ጚ ጛ ጜ ጝ ጞ ጟ ⶓ ⶔ ⶕ ⶖ ⶏ ⶐ ⶑ ᎈ ᎉ ᎊ ᎋ ᎌ ᎍ ᎎ ᎏ ⶒ ፘ ፙ ፚ ⶠ ⶡ ⶢ ⶣ ⶤ ⶥ ⶦ ⶨ ⶩ ⶪ ⶫ ⶬ ⶭ ⶮ ⶰ ⶱ ⶲ ⶳ ⶴ ⶵ ⶶ ⶸ ⶹ ⶺ ⶻ ⶼ ⶽ ⶾ ⷀ ⷁ ⷂ ⷃ ⷄ ⷅ ⷆ ⷈ ⷉ ⷊ ⷋ ⷌ ⷍ ⷎ ⷐ ⷑ ⷒ ⷓ ⷔ ⷕ ⷖ ⷘ ⷙ ⷚ ⷛ ⷜ ⷝ ⷞ] [ሀ ለ ሐ መ ሠ ረ ሰ ሸ ቀ ቈ ቐ ቘ በ ቨ ተ ቸ ኀ ኈ ነ ኘ አ ከ ኰ ኸ ዀ ወ ዐ ዘ ዠ የ ደ ጀ ገ ጐ ጠ ጨ ጰ ጸ ፀ ፈ ፐ] + [% ‰ + − 0 1 2 3 4 5 6 7 8 9] + [፣ ፤ ፦] + [\- ‐‑ ፣ ። /] « @@ -1065,6 +1128,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} ሰዓት {0} + + {1} ሰዓት {0} + @@ -1073,24 +1139,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} ሰዓት {0} + + {1} ሰዓት {0} + {1} {0} + + {1}፣ {0} + {1} {0} + + {1}፣ {0} + d E y G M/d/y GGGGG + G y-MM-dd፣ E MMM y G MMM d, y G E፣ d MMM y G + HHሰ v M/d E፣ d/M dd/MM @@ -1420,11 +1497,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} + + {1}፣ {0} + {1} {0} + + {1}፣ {0} + d E @@ -1434,6 +1517,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic E፣ HH:mm:ss y G M/d/y G + E፣ M/d/y G MMM y G MMM d, y G E፣ d MMM y G @@ -1587,6 +1671,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic d E M/d/y GGGGG + G y-MM-dd፣ E MMM d, y G M/d MMM d @@ -1819,8 +1904,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic ቅድሚ {0} ቀዳም + + ኤ.ኤም/ፒ.ኤም + - AM/PM + ኤ.ኤም/ፒ.ኤም + + + ኤ.ኤም/ፒ.ኤም ሰዓት @@ -2231,6 +2322,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ደሴት ፋሲካ + + ኮሃይክ + ፑንታ ኣረናስ @@ -2496,9 +2590,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ፕኖም ፐን - ኤንደርበሪ - - ካንቶን @@ -3175,9 +3266,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ግዜ ምዕራብ ኣፍሪቃ - ናይ መደበኛ ግዘ ምዕራብ ኣፍሪቃ - ግዜ ክረምቲ ምዕራብ ኣፍሪቃ + ግዜ ምዕራብ ኣፍሪቃ @@ -3527,6 +3616,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ግዜ ጉያና + + + ናይ መደበኛ ሃዋይ-ኣሌውቲያን ግዘ + + ናይ ሃዋይ-ኣሌውቲያን ግዘ @@ -4935,6 +5029,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ምብራቕ ካሪብያን ዶላር ምብራቕ ካሪብያን ዶላር + + ካሪብያን ጊልደር + ካሪብያን ጊልደር + ካሪብያን ጊልደር + ምዕራብ ኣፍሪቃ CFA ፍራንክ ምዕራብ ኣፍሪቃ ሲኤፍኤ ፍራንክ @@ -4965,6 +5064,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic ዛምብያዊ ኳቻ ዛምብያዊ ኳቻ + + ዚምባብወ ወርቂ + ዚምባብወ ወርቂ + ዚምባብወ ወርቂ + ⩾{0} @@ -5192,7 +5296,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ኣቕሓ {0} ኣቕሑ - + + ክፋል + {0} ክፋል + {0} ክፋል + + ክፍልታት ኣብ ሚልዮን {0} ክፍልታት ኣብ ሚልዮን {0} ክፍልታት ኣብ ሚልዮን @@ -5217,6 +5326,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ሞል {0} ሞል + + ግሉኮስ + {0} ግሉኮስ + {0} ግሉኮስ + ሊትሮ ኣብ ኪሎሜትር {0} ሊትሮ አብ ኪሎሜትር @@ -5301,7 +5415,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ዓሰርተታት ዓመታት - ዓመታት {0} ዓመት {0} ዓመታት {0}/ዓመታት @@ -5314,7 +5427,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ኣዋርሕ - {0}/ወርሒ + {0} ወርሒ {0}/ኣዋርሕ {0}/ወርሒ @@ -5702,6 +5815,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ሚሊሜተር ሜርኩሪ {0} ሚሊሜተር ሜርኩሪ + + ሜርኩሪ + {0} ሜርኩሪ + {0} ሜርኩሪ + ፓውንድ-ሓይሊ ኣብ ሓደ ካሬ ኢንች {0} ፓውንድ-ሓይሊ ኣብ ሓደ ካሬ ኢንች @@ -5870,6 +5988,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ሜትሪክ ፓይንት {0} ሜትሪክ ፓይንት + + ሜትሪክ ፈሳሲ ኦውንስ + {0} ሜትሪክ ፈሳሲ ኦውንስ + {0} ሜትሪክ ፈሳሲ ኦውንስ + acre-ጫማ {0} acre ጫማ @@ -5967,12 +6090,77 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ኢምፒ. ርብዒ ጋሎን {0} ኢምፒ. ርብዒ ጋሎን + + ስትራዲያን + {0} ስትራዲያን + {0} ስትራዲያን + + + ካታል + {0} ካታል + {0} ካታል + + + ኮለምብ + {0} ኮለምብ + {0} ኮለምብ + + + ፋራድ + {0} ፋራድ + {0} ፋራድ + + + ሄነሪ + {0} ሄነሪ + {0} ሄነሪ + + + ሲመን + {0} ሲመን + {0} ሲመን + + + ካሎሪ [IT] + {0} ካሎሪ [IT] + {0} ካሎሪ [IT] + + + ቤክዌርሌስ + {0} ቤክዌርሌስ + {0} ቤክዌርሌስ + + + ሴቨርትስ + {0} ሴቨርት + {0} ሴቨርትስ + + + ግሬይስ + {0} ግሬይ + {0} ግሬይስ + + + ኪሎግራም-ሓይሊ + {0} ኪሎግራም-ሓይሊ + {0} ኪሎግራም-ሓይሊ + + + ቴስላ + {0} ቴስላ + {0} ቴስላ + + + ዌበር + {0} ዌበር + {0} ዌበር + ብርሃን {0} ብርሃን {0} ብርሃን - + ክፍልታት ኣብ ሓደ ቢልዮን {0} ክፍልታት ኣብ ሓደ ቢልዮን {0} ክፍልታት ኣብ ሓደ ቢልዮን @@ -6190,7 +6378,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ኣቕሓ {0} ኣቕሑ - + + ክፋል + {0} ክፋል + {0} ክፋል + + ክፍልታት/ሚልዮን {0} ክፍልታት ኣብ ሚልዮን {0} ክፍልታት ኣብ ሚልዮን @@ -6209,6 +6402,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ሞል {0} ሞል + + ግሉኮስ + {0} ግሉኮስ + {0} ግሉኮስ + ሊትሮ/ኪሎሜትር {0} ሊትሮ/ኪሜ @@ -6667,6 +6865,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ሚሜ ሜርኩሪ {0} ሚሜ ሜርኩሪ + + ሜርኩሪ + {0} ሜርኩሪ + {0} ሜርኩሪ + + + ፒ.ኤስ.አይ + ኢንች ሜርኩሪ {0} ኢንች ሜርኩሪ @@ -6925,12 +7131,62 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ኢምፒ. ርብዒ ጋሎን {0} ኢምፒ. ርብዒ ጋሎን + + ስትራዲያን + {0} ስትራዲያን + {0} ስትራዲያን + + + ካታል + {0} ካታል + {0} ካታል + + + ኮለምብ + {0} ኮለምብ + {0} ኮለምብ + + + ፋራድ + {0} ፋራድ + {0} ፋራድ + + + ሄነሪ + {0} ሄነሪ + {0} ሄነሪ + + + ሲመን + {0} ሲመን + {0} ሲመን + + + ካል-IT + {0} ካል-IT + {0} ካል-IT + + + ኪሎግ-ሓ + {0} ኪሎግ-ሓ + {0} ኪሎግ-ሓ + + + ቴስላ + {0} ቴስላ + {0} ቴስላ + + + ዌበር + {0} ዌበር + {0} ዌበር + ብርሃን {0} ብርሃን {0} ብርሃን - + ክፍልታት/ሓደ ቢልዮን {0} ክፍልታት ኣብ ሓደ ቢልዮን {0} ክፍልታት ኣብ ሓደ ቢልዮን @@ -7144,7 +7400,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}ኣቕሓ {0}ኣቕሑ - + + ክፋል + {0} ክፋል + {0} ክፋል + + ክፍልታት ኣብ ሚልዮን {0}ክፍልታት ኣብ ሚልዮን {0}ክፍልታት ኣብ ሚልዮን @@ -7154,6 +7415,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}ሞል {0}ሞል + + ግሉኮስ + {0} ግሉኮስ + {0} ግሉኮስ + ሊትሮ/ኪሜ {0}ሊትሮ/ኪሜ @@ -7608,6 +7874,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}ሚሜ ሜርኩሪ {0}ሚሜ ሜርኩሪ + + ሜርኩሪ + {0} ሜርኩሪ + {0} ሜርኩሪ + + + ፒ.ኤስ.አይ + ″ ሜርኩሪ {0}″ ሜርኩሪ @@ -7866,12 +8140,62 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}ኢምፒ. ርብዒ ጋሎን {0}ኢምፒ. ርብዒ ጋሎን + + ስትራዲያን + {0} ስትራዲያን + {0} ስትራዲያን + + + ካታል + {0} ካታል + {0} ካታል + + + ኮለምብ + {0} ኮለምብ + {0} ኮለምብ + + + ፋራድ + {0} ፋራድ + {0} ፋራድ + + + ሄነሪ + {0} ሄነሪ + {0} ሄነሪ + + + ሲመን + {0} ሲመን + {0} ሲመን + + + ካል-IT + {0} ካል-IT + {0} ካል-IT + + + ኪሎግ-ሓ + {0} ኪሎግ-ሓ + {0} ኪሎግ-ሓ + + + ቴስላ + {0} ቴስላ + {0} ቴስላ + + + ዌበር + {0} ዌበር + {0} ዌበር + ብርሃን {0}ብርሃን {0}ብርሃን - + ክፍልታት ኣብ ሓደ ቢልዮን {0}ክፍልታት ኣብ ሓደ ቢልዮን {0}ክፍልታት ኣብ ሓደ ቢልዮን @@ -8183,13 +8507,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {surname-core}፣ {given} {given2} {surname-prefix} - {surname}, {given-informal} + {surname}፣ {given-informal} - {surname-core}, {given} {given2-initial} {surname-prefix} + {surname-core}፣ {given} {given2-initial} {surname-prefix} - {surname}, {given-informal} + {surname}፣ {given-informal} {surname-core}፣ {given} {given2} {surname-prefix} diff --git a/make/data/cldr/common/main/ti_ER.xml b/make/data/cldr/common/main/ti_ER.xml index c0fb0e068e6..eca0d671a6e 100644 --- a/make/data/cldr/common/main/ti_ER.xml +++ b/make/data/cldr/common/main/ti_ER.xml @@ -11,11 +11,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - ሰርብኛ - - [፟ ፡ ፣ ፤ ፥ ፦ ፧ ። ፠ ፨ ፩ ፪ ፫ ፬ ፭ ፮ ፯ ፰ ፱ ፲ ፳ ፴ ፵ ፶ ፷ ፸ ፹ ፺ ፻ ፼ ሀ ሁ ሂ ሃ ሄ ህ ሆ ለ ሉ ሊ ላ ሌ ል ሎ ሏ ሐ ሑ ሒ ሓ ሔ ሕ ሖ ሗ መ ሙ ሚ ማ ሜ ም ሞ ሟ ረ ሩ ሪ ራ ሬ ር ሮ ሯ ሰ ሱ ሲ ሳ ሴ ስ ሶ ሷ ሸ ሹ ሺ ሻ ሼ ሽ ሾ ሿ ቀ ቁ ቂ ቃ ቄ ቅ ቆ ቈ ቊ ቋ ቌ ቍ ቐ ቑ ቒ ቓ ቔ ቕ ቖ ቘ ቚ ቛ ቜ ቝ በ ቡ ቢ ባ ቤ ብ ቦ ቧ ቨ ቩ ቪ ቫ ቬ ቭ ቮ ቯ ተ ቱ ቲ ታ ቴ ት ቶ ቷ ቸ ቹ ቺ ቻ ቼ ች ቾ ቿ ኀ ኁ ኂ ኃ ኄ ኅ ኆ ኈ ኊ ኋ ኌ ኍ ነ ኑ ኒ ና ኔ ን ኖ ኗ ኘ ኙ ኚ ኛ ኜ ኝ ኞ ኟ አ ኡ ኢ ኣ ኤ እ ኦ ኧ ከ ኩ ኪ ካ ኬ ክ ኮ ኰ ኲ ኳ ኴ ኵ ኸ ኹ ኺ ኻ ኼ ኽ ኾ ዀ ዂ ዃ ዄ ዅ ወ ዉ ዊ ዋ ዌ ው ዎ ዐ ዑ ዒ ዓ ዔ ዕ ዖ ዘ ዙ ዚ ዛ ዜ ዝ ዞ ዟ ዠ ዡ ዢ ዣ ዤ ዥ ዦ ዧ የ ዩ ዪ ያ ዬ ይ ዮ ደ ዱ ዲ ዳ ዴ ድ ዶ ዷ ጀ ጁ ጂ ጃ ጄ ጅ ጆ ጇ ገ ጉ ጊ ጋ ጌ ግ ጎ ጐ ጒ ጓ ጔ ጕ ጠ ጡ ጢ ጣ ጤ ጥ ጦ ጧ ጨ ጩ ጪ ጫ ጬ ጭ ጮ ጯ ጸ ጹ ጺ ጻ ጼ ጽ ጾ ጿ ፈ ፉ ፊ ፋ ፌ ፍ ፎ ፏ ፐ ፑ ፒ ፓ ፔ ፕ ፖ ፗ] [᎐ ᎑ ᎒ ᎓ ᎔ ᎕ ᎖ ᎗ ᎘ ᎙ ሇ ⶀ ᎀ ᎁ ᎂ ᎃ ⶁ ሠ ሡ ሢ ሣ ሤ ሥ ሦ ሧ ⶂ ⶃ ⶄ ቇ ᎄ ᎅ ᎆ ᎇ ⶅ ⶆ ⶇ ኇ ⶈ ⶉ ⶊ ኯ ዏ ⶋ ዯ ⶌ ዸ ዹ ዺ ዻ ዼ ዽ ዾ ዿ ⶍ ⶎ ጏ ጘ ጙ ጚ ጛ ጜ ጝ ጞ ጟ ⶓ ⶔ ⶕ ⶖ ⶏ ⶐ ⶑ ፀ ፁ ፂ ፃ ፄ ፅ ፆ ፇ ᎈ ᎉ ᎊ ᎋ ᎌ ᎍ ᎎ ᎏ ⶒ ፘ ፙ ፚ ⶠ ⶡ ⶢ ⶣ ⶤ ⶥ ⶦ ⶨ ⶩ ⶪ ⶫ ⶬ ⶭ ⶮ ⶰ ⶱ ⶲ ⶳ ⶴ ⶵ ⶶ ⶸ ⶹ ⶺ ⶻ ⶼ ⶽ ⶾ ⷀ ⷁ ⷂ ⷃ ⷄ ⷅ ⷆ ⷈ ⷉ ⷊ ⷋ ⷌ ⷍ ⷎ ⷐ ⷑ ⷒ ⷓ ⷔ ⷕ ⷖ ⷘ ⷙ ⷚ ⷛ ⷜ ⷝ ⷞ] diff --git a/make/data/cldr/common/main/tk.xml b/make/data/cldr/common/main/tk.xml index 79104bb6449..92694e0cebf 100644 --- a/make/data/cldr/common/main/tk.xml +++ b/make/data/cldr/common/main/tk.xml @@ -42,6 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic azerbaýjan dili azeri dili başgyrt dili + buluç dili baliý dili basaa dili belarus dili @@ -152,6 +153,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic günorta haýda dili ýewreý dili hindi dili + hingliş hiligaýnon dili hmong dili horwat dili @@ -215,6 +217,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic bafia dili keln dili kürt dili + kürt dili + kurmanji dili kumyk dili komi dili korn dili @@ -322,8 +326,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic pijin dili polýak dili malisit-passamakwodi dili - prussiýa dili - peştun dili + prus dili + puştu dili portugal dili portugal dili (Ýewropa) keçua dili @@ -607,6 +611,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Hytaý Kolumbiýa Klipperton adasy + Sark Kosta-Rika Kuba Kabo-Werde @@ -839,43 +844,83 @@ CLDR data files are interpreted according to the LDML specification (http://unic Pul birliginiň formaty Tertip rejesi Pul birligi + Emoji aňlatmasy Sagat aýlawy (12–24 sagat) Setirden setire geçiş stili + Sözleriň içinde setir bölünmeleri Ölçeg ulgamy Sanlar + Gysgaltmadan soň sözlemi bölmek Buddist senenamasy + Buddist Hytaý senenamasy + Hytaý Kopt senenamasy + Kopt Dangi senenamasy + Dangi Efiop senenamasy + Efiopiýa Efiopiýa Amete Alem senenamasy + Efiopiýa amete alem Grigorian senenamasy + Grigorian Ýewreý senenamasy + Ýewreý Hijri-kamary senenamasy + Hijri-kamary Hijri-kamary senenamasy (tablisaly, raýat eýýamy) + Hijri-kamary (tablisaly, raýat eýýamy) Hijri-kamary senenamasy (tablisaly, astronomik eýýam) + Hijri-kamary (tablisaly, astronomil eýýam) Hijri-kamary senenamasy (Umm al-Kura) + Hijri-kamary (Umm al-Kura) ISO-8601 senenamasy Ýapon senenamasy + Ýapon Pars senenamasy + Pars Minguo senenamasy + Minguo Pul birliginiň buhgalterçilik formaty + Buhgalterçilik Pul birliginiň standart formaty + Standart Deslapky Ýunikod tertip rejesi + Deslapky ýunikod Umumy maksatly gözleg + Gözleg Standart tertip rejesi + Standart + Deslapky + Emoji + Tekst 12 sagat ulgamy (0–11) + 12 (0–11) 12 sagat ulgamy (1–12) + 12 (1–12) 24 sagat ulgamy (0–23) + 24 (0–23) 24 sagat ulgamy (1–24) + 24 (1–24) Setirden setire geçişiň gowşak stili + Gowşak Setirden setire geçişiň adaty stili + Adaty Setirden setire geçişiň berk stili + Berk + Hemmesi geçsin + Hemmesi galsyn + Adaty + Sözlemler galsyn Metrik ulgam + Metrik Imperial ölçeg ulgamy + Iňlis ABŞ ölçeg ulgamy + ABŞ Arap-hindi sanlary Arap-hindi sanlarynyň giňeldilen görnüşi Ermeni sanlary @@ -916,6 +961,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Taý sanlary Tibet sanlary Waý sanlary + öçürilen + açyk Metrik @@ -938,13 +985,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic [c q v x] [A B Ç D E Ä F G H I J Ž K L M N Ň O Ö P R S Ş T U Ü W Y Ý Z] [  \- ‑ , % ‰ + 0 1 2 3 4 5 6 7 8 9] - [\- ‑ – — , ; \: ! ? . … "“” ( ) \[ \] \{ \} § @ * #] + [\- ‑ – — , ; \: ! ? . … ' "“” ( ) \[ \] \{ \} § @ * / {\&,} #] + [· / < = > ~ №] [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -990,6 +1035,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'sagat' {0} + + {1}, {0} + @@ -998,6 +1046,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'sagat' {0} + + {1}, {0} + @@ -1006,6 +1057,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + @@ -1014,14 +1068,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + + E, h B + E, h:mm B d E + E, h a E h:mm a E h:mm:ss a - h a + G M.y + G dd.MM.y E h:mm a h:mm:ss a + 'sagat' HH, v dd.MM dd.MM E d MMM @@ -1039,12 +1101,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMMM y - - h B – h B - - - h:mm B – h:mm B - h a – h a h–h a @@ -1407,18 +1463,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic + E, h B d E E h:mm a E h:mm:ss a - GGGGG dd.MM.y + G MM.y + G dd.MM.y + G dd.MM.y, E G MMM y G d MMM y G d MMM y, E - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v + 'sagat' HH v dd.MM dd.MM E d MMM @@ -1440,11 +1499,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic - h B – h B h – h B - h:mm B – h:mm B h:mm – h:mm B @@ -1481,10 +1538,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic G d MMM, E – d MMM, E y G d MMM y, E – d MMM y, E - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1495,10 +1548,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - MM – MM @@ -1612,7 +1661,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - d/M/y GGGGG + d.M.y GGGGG @@ -1620,7 +1669,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic d, E y G - d.M.y GGGGG + M.y G + d.M.y G + E, d.M.y G MMM y G d MMM, y G E, d MMM, y G @@ -2182,9 +2233,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Angilýa - - Tirana - Ýerewan @@ -2437,6 +2485,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Pasha adasy + + Koýýaik + Punta-Arenas @@ -2646,7 +2697,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Pnompen - Enderberi + Kanton adasy Komor adalary @@ -3107,6 +3158,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ýohannesburg + + + Akri wagty + Akri standart wagty + Akri tomusky wagty + + Owganystan wagty @@ -3129,9 +3187,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Günbatar Afrika wagty - Günbatar Afrika standart wagty - Günbatar Afrika tomusky wagty + Günbatar Afrika wagty @@ -3179,6 +3235,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Anadyr wagty + Anadyr tomusky wagty @@ -3486,6 +3543,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gaýana wagty + + + Gawaý-Aleut standart wagty + + Gawaý-Aleut wagty @@ -3568,6 +3630,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Petropavlowsk-Kamçatskiý wagty + Kamçatka tomusky wagty @@ -3835,6 +3898,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Samara wagty + Samara tomusky wagty @@ -4075,13 +4139,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + #,##0.00 + + + #,##0.00 ¤ + #,##0.00 ¤ - #,##0.00;(#,##0.00) + #,##0.00 ¤ + #,##0.00 @@ -4891,6 +4968,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic gündogar karib dollary gündogar karib dollary + + karib guldeni + karib guldeni + karib guldeni + Kg. + KFA BCEAO franky @@ -4919,6 +5002,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic zambiýa kwaçasy zambiýa kwaçasy + + Zimbabwe altyny + Zimbabwe altyny + Zimbabwe altyny + {0} gün @@ -5120,7 +5208,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} millimol/litr {0} millimol/litr - + + bölek + {0} bölek + {0} bölek + + {0} bölejik/million {0} bölejik/million @@ -5139,6 +5232,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic mollar + + gýukoza + {0} glýukoza + {0} glýukoza + litr/kilometr {0} litr/kilometr @@ -5395,7 +5493,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic santimetr başyna nokat santimetr başyna {0} nokat - santimetr başyna {0} nokat + {0} nokat santimetr başyna nokat dýuým başyna @@ -5627,6 +5725,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} millimetr simap sütüni {0} millimetr simap sütüni + + simap sütüni + {0} simap sütüni + {0} simap sütüni + funt/inedördül dýuým {0} funt/inedördül dýuým @@ -5800,6 +5903,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} metrik käse {0} metrik käse + + metrik suwuk unsiýa + {0} metrik suwuk unsiýa + {0} metrik suwuk unsiýa + akr-fut {0} akr-fut @@ -5880,21 +5988,70 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Imp. kwarta {0} Imp. kwarta - - ýagtylyk - {0} ýagtylyk - {0} ýagtylyk + + steradian + {0} steradian + {0} steradian - - bölejik/milliard - milliardda {0} bölejik - milliardda {0} bölejik + + katal + {0} katal + {0} katal - - gije - {0} gije - {0} gije - {0}/gije + + kulon + {0} kulon + {0} kulon + + + farad + {0} farad + {0} farad + + + genri + {0} genri + {0} genri + + + simens + {0} simens + {0} simens + + + kaloriýa [IT] + {0} kaloriýa [IT] + {0} kaloriýa [IT] + + + bekkerel + {0} bekkerel + {0} bekkerel + + + ziwert + {0} ziwert + {0} ziwert + + + greý + {0} greý + {0} greý + + + kilogram-güýç + {0} kilogram-güýç + {0} kilogram-güýç + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber esasy ugur @@ -5962,8 +6119,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic millimol/litr - - bölejik/million + + bölek + {0} bölek + {0} bölek + + + böl/mln. + {0} böl/mln. + {0} böl/mln. göterim @@ -5974,6 +6138,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic permiriad + + Glýuk + {0} Glýuk + {0} Glýuk + litr/km {0} l/km @@ -6334,6 +6503,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mmHg {0} mmHg + + simap sütüni + {0} simap süt. + {0} simap süt. + dý sim.süt. {0} dý sim.süt. @@ -6362,6 +6536,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} dü. {0} dü. + + Bft {0} + Bft {0} + sm³ {0} sm³ @@ -6411,6 +6589,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mkä {0} mkä + + suw uns m. + {0} suw uns m. + {0} suw uns m. + akr-ft {0} ak-ft @@ -6481,15 +6664,75 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kt Imp. {0} kt Imp. + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + Kl + {0} Kl + {0} Kl + + + {0} F + {0} F + + + Gn + {0} Gn + {0} Gn + + + Sm + {0} Sm + {0} Sm + + + kal-IT + {0} kal-IT + {0} kal-IT + + + Bk + {0} Bk + {0} Bk + + + Zw + {0} Zw + {0} Zw + + + Gr + {0} Gr + {0} Gr + + + kgg + {0} kgg + {0} kgg + + + {0} T + {0} T + + + {0} Wb + {0} Wb + ýagtylyk {0} ýagtylyk {0} ýagtylyk - - bölejik/milliard - {0} bölejik/milliard - {0} bölejik/milliard + + böl/mlrd. + {0} böl/mlrd + {0} böl/mlrd gije @@ -6519,9 +6762,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}″ {0}″ + + bölek + {0} bölek + {0} bölek + + + bmln + {0} bmln + {0} bmln + % + + Glýuk + {0} Glýuk + {0} Glýuk + {0}m/gUK {0}m/gUK @@ -6623,6 +6881,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mmHg {0}mmHg + + simap süt. + {0} sim. süt. + {0} sim. süt. + ″ Hg {0}″ Hg @@ -6636,10 +6899,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic m/s + + Bft {0} + Bft {0} + {0}l {0}l + + suw uns m. + {0} suw uns m. + {0} suw uns m. + {0}galIm {0}galIm @@ -6678,22 +6950,51 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} kt-Imp. {0} kt-Imp. - - ýagtylyk - {0} ýagtylyk - {0} ýagtylyk + + Kl + {0} Kl + {0} Kl - + + Gn + {0} Gn + {0} Gn + + + Sm + {0} Sm + {0} Sm + + + kal-IT + {0} kal-IT + {0} kal-IT + + + Bk + {0} Bk + {0} Bk + + + Zw + {0} Zw + {0} Zw + + + Gr + {0} Gr + {0} Gr + + + kgg + {0} kgg + {0} kgg + + bmlrd {0} bmlrd {0} bmlrd - - gije - {0} gije - {0} gije - {0}/gije - {0}gd {0}dg diff --git a/make/data/cldr/common/main/tn.xml b/make/data/cldr/common/main/tn.xml index e157138b2a5..7d8cbf92728 100644 --- a/make/data/cldr/common/main/tn.xml +++ b/make/data/cldr/common/main/tn.xml @@ -336,6 +336,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic monongwaga ngwaga o tlang + + kgwedi e fetileng + kgwedi eno + kgwedi e tlang + + + beke e fetileng + beke eno + beke e tlang + + + maabane + gompieno + kamoso + + + Tshipi e fetileng + Tshipi eno + Tshipi e tlang + @@ -347,7 +367,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + ' diff --git a/make/data/cldr/common/main/to.xml b/make/data/cldr/common/main/to.xml index e3010060c94..adea3915467 100644 --- a/make/data/cldr/common/main/to.xml +++ b/make/data/cldr/common/main/to.xml @@ -696,6 +696,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -842,6 +843,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -862,6 +864,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -872,6 +875,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic + @@ -1351,14 +1355,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic fakapēsia fakalepupelika siaina anga paʻanga-kalake + paʻanga-kalake anga paʻanga-sīpinga - siaina-nimalahi + sīpinga ki muʻa, hoa tikisinale ʻunikōti ngaahi ongo fakaʻeulope - siaina-fakafaingofua fika telefoni piniini fakafoʻou @@ -1370,15 +1374,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic tongi tefitoʻi sūini takai houa 0–11 + 12 (0–11) takai houa 1–12 + 12 (1–12) takai houa 0–23 + 24 (0–23) takai houa 1–24 + 24 (1–24) fesiʻilaine ngaloku + ngaloku fesiʻilaine faʻafai + faʻafai fesiʻilaine mafao + mafao founga fakamita + fakamita founga fakapilitānia + fakapilitānia founga fakaʻamelika + fakaʻamelika fika fakaʻahomi fika fakaʻalepea fika fakaʻalepea fakalahi @@ -1577,16 +1591,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - - Taʻu maletile - - - TMT - - - @@ -2719,11 +2723,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Taimi liliu {0} Taimi totonu - - HTT - HTT - HTL - Honolulu @@ -2797,9 +2796,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Loma - ʻEnitipulī - - Kanitoni @@ -2924,9 +2920,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - houa fakaʻafelika-hihifo - houa fakaʻafelika-hihifo taimi totonu - houa fakaʻafelika-hihifo taimi liliu + houa fakaʻafelika-hihifo @@ -3314,6 +3308,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic houa fakakuiana + + + houa fakahauaiʻi-aleuti taimi totonu + + houa fakahauaiʻi-aleuti @@ -4281,7 +4280,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic kongokonga kongokonga ʻe {0} - + + paati + paati ʻe {0} + + konga he miliona konga ʻe {0} he miliona @@ -4695,6 +4698,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimita meakuli milimita meakuli ʻe {0} + + meakuli + meakuli ʻe {0} + pāuni he ʻinisi sikuea pāuni he ʻinisi sikuea ʻe {0} @@ -4834,6 +4841,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ipu fakamita ipu fakamita ʻe {0} + + ʻaunisetafe fakamita + ʻaunisetafe fakamita ʻe {0} + ʻeka-fute ʻeka-fute ʻe {0} @@ -4860,10 +4871,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic painite painite ʻe {0} + + painite fakaʻemipaea + painite fakaʻemipaea ʻe {0} + ipu ipu ʻe {0} + + ipu fakaʻemipaea + ipu fakaʻemipaea ʻe {0} + ʻaunise tafe ʻaunise tafe ʻe {0} @@ -4900,11 +4919,59 @@ CLDR data files are interpreted according to the LDML specification (http://unic kuata fakaʻemipaea kuata fakaʻemipaea ʻe {0} + + lētiani sikuea + lētiani sikuea ʻe {0} + + + pekeleli + pekeleli ʻe {0} + + + sīveti + sīveti ʻe {0} + + + kelē + kelē ʻe {0} + + + kilokalami-mālohi + kilokalami-mālohi ʻe {0} + + + loti + loti ʻe {0} + + + sēini + sēini ʻe {0} + + + tesila + tesila ʻe {0} + + + Uepe + Uepe ʻe {0} + + + lanikine + lanikine ʻe {0} + + + fakahiliuike + fakahiliuike ʻe {0} + + + penisini-tatau + penisini-tatau ʻe {0} + vavemaama vavemaama ʻe {0} - + konga ʻi he piliona konga ʻe {0} ʻi he piliona @@ -5015,7 +5082,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kkonga kkonga ʻe {0} - + khm khm ʻe {0} @@ -5427,6 +5494,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic mm-Hg mm-Hg ʻe {0} + + Hg ʻe {0} + pā/in² pā/in² ʻe {0} @@ -5552,6 +5622,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic ipm ipm ʻe {0} + + ʻau-tf-m + ʻau-tf-m ʻe {0} + ʻe-ft ʻe-ft ʻe {0} @@ -5577,10 +5651,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic pt ʻe {0} + + pt-ʻem + pt-ʻem ʻe {0} + ip ip ʻe {0} + + ip-ʻem + ip-ʻem ʻre {0} + ʻau-tf ʻau-tf ʻe {0} @@ -5629,6 +5711,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic ku-ʻem ku-ʻem ʻe {0} + + lēt² + lēt² ʻe {0} + + + Pq + Pq ʻe {0} + + + Sv ʻe {0} + + + Ky + Ky ʻe {0} + + + kk-m + kk-m ʻe {0} + + + lt + lt ʻe {0} + + + sn + sn ʻe {0} + + + T ʻe {0} + + + Up + Up ʻe {0} + + + °L + °L ʻe {0} + + + fhu + fhu ʻe {0} + + + pe-t + pe-t ʻe {0} + vm vm ʻe {0} @@ -5715,7 +5843,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic kk kk ʻe {0} - + {0} khm @@ -6071,6 +6199,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} mm-Hg + + Hg ʻe {0} + {0} pā/in² @@ -6173,6 +6304,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ipm + + ʻau-tf-m + {0} ʻau-tf-m + {0} ʻe-ft @@ -6193,9 +6328,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} pt + + pt-ʻem + {0} pt-ʻem + {0} ip + + ip-ʻem + {0} ip-ʻem + {0} ʻau-tf @@ -6233,6 +6376,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} ku-ʻem + + lēt² + {0} lēt² + + + Pq + {0} Pq + + + {0} Sv + + + Ky + {0} Ky + + + kk-m + {0} kk-m + + + lt + {0} lt + + + sn + {0} sn + + + {0} T + + + Up + {0} Up + + + °L + {0} °L + + + fhu + {0} fhu + + + pe-t + {0} pe-t + vm {0} vm diff --git a/make/data/cldr/common/main/tok.xml b/make/data/cldr/common/main/tok.xml index 59db8671691..c1c54695adf 100644 --- a/make/data/cldr/common/main/tok.xml +++ b/make/data/cldr/common/main/tok.xml @@ -11,74 +11,160 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - {0} pi {1} - {0} pi {1} - - toki Alapi - toki Panla - toki Tosi + toki Apikan + toki Amali + toki Alapi + toki Panla + toki Posuna + toki Supo + toki Tosi + toki Elin toki Inli - toki Inli pi ma Kanata - toki Inli pi ma Piten - toki Inli pi ma Juke - toki Epanja - toki Epanja pi ma Amelika - toki Kanse - toki Kanse pi ma Kanata - toki Insi - toki Intonesija - toki Italija - toki Nijon - toki Anku - toki Netelan - toki Posuka - toki Potuke - toki Lusi - toki Tawi + toki Inli pi ma Oseja + toki Inli pi ma Kanata + toki Inli pi ma Juke + toki Epelanto + toki Epanjo + toki Epanjo pi ma Amelika + toki Epanjo pi ma Epanja + toki Epanjo pi ma Mesiko + toki Esuka + toki Pasi + toki Pasi pi ma Akan + toki Sumi + toki Takalo + toki Kanse + toki Kanse pi ma Kanata + toki Lise + toki Kusalasi + toki Iwi + toki Insi + toki Kowata + toki Maja + toki Intelinwa + toki Intonesija + toki Ito + toki Italija + toki Nijon + toki Losupan + toki Sowa + toki Kame + toki Anku + toki Kenuwe + toki Lasina + toki Ma + toki Majoli + toki Malasi + toki Melaju + toki mute + toki Mijama + toki Pan pi ma seli + toki Nosiki lipu + toki Netelan + toki Nosiki sin + toki Nosiki + toki Posuka + toki Potuke + toki Lusi + toki Somali + toki Sepi + toki Suwasi + toki Sensa + toki Suwawili + toki Suwawili pi ma Konko + toki Tami + toki Teluku + toki Tawi + toki Suwana toki pona - toki Tuki + toki Tuki + toki Sonka + toki Ukawina toki ante + toki Utu toki Opeki - toki Sonko + toki Wenta + toki Wije + toki Olapu + toki Kosa + toki Jolupa + toki Ju + toki Konton + toki Sonko + toki Sonko kulupu + toki Sonko pi linja lili + toki An pi linja lili + toki Sonko pi linja mute + toki An pi linja mute + toki Sulu + toki ala - - + + + + + + + + + + + + + + + + + + + + + + ma ale - ma Apika - ma Osijanija - ma Amelika - ma Asija - ma Elopa + ma Apika + ma Amelika lete + ma Amelika seli + ma Osejanija + ma Amelika insa + ma Amelika + ma Elopa seli + ma Asija + ma Elopa + ma Elopa pi kama suno + ma Elopa lete + ma Elopa pi pini suno ma Antola - ma Akanisan + ma Imala + ma Akan ma Sipe ma Aja ma Ankola - ma Antasika + ma Antasika ma Alensina - ma Esalasi - ma Oselija + ma Esalasi + ma Oseja ma Posan - ma Panla - ma Pesije + ma Panla + ma Pelije ma Pukinapaso toki Pokasi ma Palani ma Penen - ma Pasiju - ma Posuwana + ma Pasiju + ma Suwana ma Pelalusi + ma Kanata ma Konko pi ma tomo Kinsasa ma Santapiken ma Konko pi ma tomo Pasapi @@ -86,57 +172,58 @@ CLDR data files are interpreted according to the LDML specification (http://unic ma Kosiwa ma Sile ma Kamelun - ma Sonko + ma Sonko ma Kolonpija ma Kiposi ma Seki - ma Tosi + ma Tosi ma Sipusi ma Tansi ma Sasali - ma Ekato + ma Ekuwato ma Esi - ma Masu + ma Masi ma Eliteja - ma Epanja + ma Epanja ma Isijopija kulupu ma Elopa - ma Sumi + ma Sumi ma Pisi - ma Kanse + ma Kanse ma Kapon + ma Juke ma Katelo ma Kana ma Kanpija ma Kine ma Kinejekatolija - ma Elena + ma Elin ma Kinepisa - ma Onkon - ma Lowasi - ma Mosijo - ma Intonesija + ma Onkon + ma Kowata + ma Maja + ma Intonesija ma Alan - ma Isale - ma Palata - ma Ilakija - ma Ilan + ma Isale + ma Palata + ma Ilaki + ma Ilan ma Isilan - ma Italija + ma Italija ma Utun - ma Nijon - ma Kenja - ma Kanpusi + ma Nijon + ma Kenja + ma Kame ma Kilipasi ma Komo - ma Anku - ma Soson + ma Soson + ma Anku ma Kuwasi ma Lunpan ma Lisensan ma Lanka ma Lapewija - ma Lesoto + ma Sutu ma Lijatuwa ma Lusepu ma Lawi @@ -146,70 +233,119 @@ CLDR data files are interpreted according to the LDML specification (http://unic ma Malakasi ma Maketonija ma Mali - ma Mijama + ma Mijama ma Mulitanija ma Mowisi ma Malawi - ma Mesiko - ma Malasija + ma Mesiko + ma Malesija ma Mosanpi ma Namipija ma Nise - ma Naselija - ma Netelan - ma Nosiki - ma Nusilan + ma Nasilija + ma Netelan + ma Nosiki + ma Awatejalowa ma Uman - ma Pelu + ma Pelu ma Papuwanijukini - ma Pilipina - ma Pakisan - ma Posuka - ma Pilisin - ma Potuke + ma Pilipina + ma Pakitan + ma Posuka + ma Palasin + ma Potuke + ma Kita ma Lomani - ma Sopisi - ma Lusi + ma Sepi + ma Lusi ma Luwanta - ma Sawusi + ma Sajusi ma Sutan - ma Sensa - ma Sinkapo + ma Sensa + ma Sinkapo ma Lowensina ma Lowenki ma Sijelalijon ma Samalino ma Seneka - ma Somalija + ma Somali ma Sasutan - ma Sulija - ma Sawasi + ma Sawato + ma Suli + ma Suwasi ma Sate ma Toko - ma Tawi + ma Tawi ma Tunisi ma Tona - ma Tuki + ma Tuki ma Tuwalu - ma Tansanija - ma Ukawina + ma Tawan + ma Tansanija + ma Ukawina ma Ukanta kulupu pi ma ale - ma Mewika - ma Opekisan + ma Mewika + ma Opeki ma Wasikano ma Penesuwela - ma Wije + ma Wije ma Wanuwatu ma Samowa ma Jamanija - ma Setapika + ma Unsansi ma Sanpija ma Sinpapuwe + ma ante + + sitelen IPA + sitelen UPA + + + nasin tenpo + nasin mani + nasin nimi + mani + nasin nanpa pi suli ijo + sitelen nanpa + - sitelen nanpa Alapi + nasin tenpo Nijon + nasin Nijon + nasin nimi Juniko + nasin Juniko + nasin nimi Emosi + nasin nimi Pinin + nasin Pinin + nasin sitelen + nasin sitelen Emosi + nasin sitelen Emosi ala + nasin nanpa pi kulupu SI + nasin SI + nasin nanpa pi ma Juke + nasin Juke + nasin nanpa pi ma Mewika + nasin Mewika + nasin nanpa Alapi + sitelen nanpa Panla + sitelen nanpa Elin + sitelen nanpa Kusalasi + sitelen nanpa Sonko + sitelen nanpa Sonko pi linja lili + sitelen nanpa mani Sonko pi linja lili + sitelen nanpa Sonko pi linja mute + sitelen nanpa mani Sonko pi linja mute + sitelen nanpa Iwi + sitelen nanpa Sowa + sitelen nanpa Nijon + sitelen nanpa mani Nijon + sitelen nanpa Kanata sitelen nanpa Lasina + sitelen nanpa Mijama + sitelen nanpa Teluku + sitelen nanpa Tawi + sitelen nanpa Po nasin pi ma ale @@ -217,16 +353,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic nasin pi ma Mewika - toki li {0} - sitelen li {0} - ma li {0} + toki: {0} + sitelen: {0} + ma: {0} [a e i j k l m n o p s t u w] [b c d f g h q r v x y z] [A E I J K L M N O P S T U W] - [\- ‑ / # % + 0 1 2 3 5 6 7 8 9] + [\- ‑ / # % + 0 1 2 3 4 5 6 7 8 9] [\- ‑ , ; \: ! ? . '‘’ "“” ( ) \[ \] @ * / #] @@ -235,23 +371,32 @@ CLDR data files are interpreted according to the LDML specification (http://unic - mun #1 - mun #2 - mun #3 - mun #4 - mun #5 - mun #6 - mun #7 - mun #8 - mun #9 - mun #10 - mun #11 - mun #12 + tenpo mun #1 + tenpo mun #2 + tenpo mun #3 + tenpo mun #4 + tenpo mun #5 + tenpo mun #6 + tenpo mun #7 + tenpo mun #8 + tenpo mun #9 + tenpo mun #10 + tenpo mun #11 + tenpo mun #12 + + 7 + 1 + 2 + 3 + 4 + 5 + 6 + suno esun #7 suno esun #1 @@ -262,6 +407,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic suno esun #6 + + + 7 + 1 + 2 + 3 + 4 + 5 + 6 + + @@ -270,23 +426,228 @@ CLDR data files are interpreted according to the LDML specification (http://unic pi pini suno + + + open suno + pini suno + + + + + + 'sike' #y 'la' MMM 'la' 'suno' #d + + + + + 'tenpo' 'sike' #y 'la' 'tenpo' MMMM 'la' 'tenpo' 'suno' #d + + + + + 'sike' #y 'la' MMM 'la' 'suno' #d + + + + + y-MM-dd + + + + + + + zzzz 'la' HH:mm:ss + + + + + z 'la' HH:mm:ss + + + + + HH:mm:ss + + + + + HH:mm + + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + + + {1} {0} + + + 'tenpo' 'ilo' #h B + #d + 'tenpo' 'ilo' #h a #h:mm a #HH:mm #h:mm:ss a #HH:mm:ss #h:mm:ss a 'lon' v #HH:mm:ss 'lon' v + #h:mm a 'lon' v + MMMM 'la' 'sike' 'esun' #W + #y #y)#M)#d 'sike' #y ) #M ) #d + #y 'la' MMMM + #y 'la' QQQ + #y 'la' QQQQ + Y 'la' 'sike' 'esun' #w + + + tenpo + + + tenpo sike + tenpo sike pini + tenpo sike ni + tenpo sike wan + + tenpo sike kama {0} + + + tenpo sike pini {0} + + + + sike + + + sike + + + tenpo mun + tenpo mun pini + tenpo mun ni + tenpo mun kama + + tenpo mun kama {0} + + + tenpo mun pini {0} + + + + mun + + + mun + + + tenpo esun + tenpo esun pini + tenpo esun ni + tenpo esun kama + + tenpo esun kama {0} + + + tenpo esun pini {0} + + + + esun + + + esun + + + tenpo suno + tenpo suno pini + tenpo suno ni + tenpo suno kama + + tenpo suno kama {0} + + + tenpo suno pini {0} + + + + suno + + + suno + + + tenpo esun #7 pini + tenpo esun #7 ni + tenpo esun #7 kama + + + tenpo esun #1 pini + tenpo esun #1 ni + tenpo esun #1 kama + + + tenpo esun #2 pini + tenpo esun #2 ni + tenpo esun #2 kama + + + tenpo esun #3 pini + tenpo esun #3 ni + tenpo esun #3 kama + + + tenpo esun #4 pini + tenpo esun #4 ni + tenpo esun #4 kama + + + tenpo esun #5 pini + tenpo esun #5 ni + tenpo esun #5 kama + + + tenpo esun #6 pini + tenpo esun #6 ni + tenpo esun #6 kama + + + tenpo ilo + tenpo ilo ni + + tenpo ilo kama {0} + + + tenpo ilo pini {0} + + + + nasin tenpo + + - tenpo UTC{0} + tenpo GMT{0} tenpo UTC tenpo pi {0} tenpo seli suno pi {0} @@ -310,19 +671,91 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - - - %#,#0 - - - ¤#,#0.00 + ¤ #,#0.00 + #,#0.00 + + + ¤ #,#0.00 + #,#0.00 + + + mani Akan + + + mani Oseja + + + mani Panla + + + mani Intonesija + + + mani Palata + + + mani Ilan + + + mani Kame + + + mani Lanka + + + mani Mijama + + + mani Malesija + + + mani Awatejalowa + + + mani Pilipina + + + mani Pakitan + + + mani Sinkapo + + + mani Tawi + + + mani Wije + + + + tenpo suno {0} + + + + hh:mm + + + hh:mm:ss + + + mm:ss + + + + + lon:l:y + ala:a:n + + + + informal + diff --git a/make/data/cldr/common/main/tpi.xml b/make/data/cldr/common/main/tpi.xml index becca68770f..4916be29031 100644 --- a/make/data/cldr/common/main/tpi.xml +++ b/make/data/cldr/common/main/tpi.xml @@ -199,6 +199,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/tr.xml b/make/data/cldr/common/main/tr.xml index 21e58dc9a8b..5bed509b4fd 100644 --- a/make/data/cldr/common/main/tr.xml +++ b/make/data/cldr/common/main/tr.xml @@ -333,6 +333,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bafia Köln lehçesi Kürtçe + Kürtçe + Kurmanci Kumukça Kutenai dili Komi @@ -938,6 +940,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Çin Kolombiya Clipperton Adası + Sark Kosta Rika Küba Cabo Verde @@ -1215,35 +1218,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sayısal Sıralama Sıralama Gücü Para Birimi + Emoji Gösterimi Saat Sistemi (12 - 24) Satır Sonu Stili + Sözcükler İçindeki Satır Sonları Ölçü Sistemi Rakamlar + Kısaltmadan Sonra Cümle Sonu Saat Dilimi Yerel Varyant Özel Kullanım Budist Takvimi + Budist Çin Takvimi + Çin Kıpti Takvim + Kıpti Dangi Takvimi + Dangi Etiyopik Takvim + Etiyopik Etiyopik Amete Alem Takvimi + Etiyopik Amete Alem Miladi Takvim + Miladi İbrani Takvimi + İbrani Ulusal Hint Takvimi Hicri Takvim + Hicri Hicri Takvim (16 Temmuz 622) + Hicri (16 Temmuz 622) Hicri Takvim (Suudi) Hicri Takvim (15 Temmuz 622) + Hicri (15 Temmuz 622) Hicri Takvim (Ümmü-l Kurra Takvimi) + Hicri (Ümmü-l Kurra Takvimi) ISO-8601 Takvimi Japon Takvimi + Japon İran Takvimi + İran Çin Cumhuriyeti Takvimi + Çin Cumhuriyeti Muhasebe Para Biçimi + Muhasebe Standart Para Biçimi + Standart Sembolleri Sıralama Sembolleri Yoksayarak Sıralama Aksanları Normal Olarak Sıralama @@ -1253,23 +1276,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Önce Büyük Harfleri Sıralama Büyük/Küçük Harfe Duyarlı Olmadan Sıralama Büyük/Küçük Harfe Duyarla Sıralama - Geleneksel Çince Sıralama Düzeni - Big5 Önceki Sıralama Düzeni (uyumluluk için) + Uyumluluk Sözlük Sıralama Düzeni + Sözlük Saptanmış Unicode Sıralama Düzeni + Saptanmış Unicode Emoji Sıralama Düzeni Avrupa Sıralama Kuralları - Basitleştirilmiş Çince Sıralama Düzeni - GB2312 Telefon Defteri Sıralama Düzeni + Telefon Defteri Fonetik Sıralama Düzeni + Fonetik Pinyin Sıralama Düzeni + Pinyin Genel Amaçlı Arama + Arama Hangul İlk Sessiz Harfe Göre Arama Standart Sıralama Düzeni + Standart Vuruş Sıralama Düzeni + Vuruş Geleneksel Sıralama Düzeni + Geleneksel Radikal-Vuruş Sıralama Düzeni + Radikal-Vuruş Zhuyin Sıralama Düzeni + Zhuyin Normalleştirme Olmadan Sıralama Unicode Normalleştirilmiş Olarak Sıralama Rakamları Ayrı Sıralama @@ -1282,18 +1315,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tam Genişlik Yarım genişlik Rakam + Varsayılan + Emoji + Metin 12 Saat Sistemi (0–11) + 12 (0–11) 12 Saat Sistemi (1–12) + 12 (1–12) 24 Saat Sistemi (0–23) + 24 (0–23) 24 Saat Sistemi (1–24) + 24 (1–24) Serbest Satır Sonu Stili + Serbest Normal Satır Sonu Stili + Normal Katı Satır Sonu Stili + Katı + Tümünü kes + Tümünü koru + Normal + Sözcük öbeklerinde koru US BGN Transliterasyon UN GEGN Transliterasyon Metrik Sistem + Metrik İngiliz Ölçü Sistemi + İngiliz ABD Ölçü Sistemi + ABD Ahom Rakamları Hint-Arap Rakamları Genişletilmiş Hint-Arap Rakamları @@ -1371,6 +1421,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Geleneksel Rakamlar Vai Rakamları Warang Citi Rakamları + Kapalı + Açık Metrik @@ -1504,11 +1556,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d E E a h:mm E a h:mm:ss + G M.y d/M/y GGGGG + G dd.MM.y E G MMM y G d MMM y G d MMM y E - h a h:mm a h:mm:ss a dd/MM @@ -1573,10 +1626,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ G d MMM E – d MMM E y G d MMM y E – d MMM y E - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1587,10 +1636,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - dd/MM – dd/MM dd/MM – dd/MM @@ -1877,7 +1922,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d E E a h:mm E a h:mm:ss - GGGGG dd.MM.y + MM/y G + G dd.MM.y + G dd.MM.y E G MMM y G d MMM y G d MMM y E @@ -1886,8 +1933,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ a h:mm:ss a h:mm:ss v a h:mm v + HH v d/M - d/MM E + d/M E d MMM d MMM E d MMMM @@ -1919,19 +1967,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ GGGGG MM.y – GGGGG MM.y GGGGG MM.y – MM.y - GGGGG MM.y – MM.y + G MM.y – MM.y - GGGGG dd.MM.y – dd.MM.y + G dd.MM.y – dd.MM.y GGGGG dd.MM.y – GGGGG dd.MM.y GGGGG dd.MM.y – dd.MM.y GGGGG dd.MM.y – dd.MM.y - GGGGG dd.MM.y E – dd.MM.y E + G dd.MM.y E – dd.MM.y E GGGGG dd.MM.y E – GGGGG dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E - GGGGG dd.MM.y E – dd.MM.y E + G dd.MM.y E – dd.MM.y E + G dd.MM.y E – dd.MM.y E G MMM y – G MMM y @@ -2085,6 +2133,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hicri + + + G M.y + G d/M/y + G d/M/y E + + @@ -2518,9 +2573,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Erivan - - Showa - Viyana @@ -2578,9 +2630,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Prag - - Büsingen - Cibuti @@ -2668,7 +2717,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bişkek - Enderbury + Canton Adası Komor @@ -2897,9 +2946,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Batı Afrika Saati - Batı Afrika Standart Saati - Batı Afrika Yaz Saati + Batı Afrika Saati @@ -3287,6 +3334,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Guyana Saati + + + Hawaii-Aleut Standart Saati + + Hawaii-Aleut Saati @@ -3737,6 +3789,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chuuk Saati + + + Türkiye Saati + Türkiye Standart Saati + Türkiye Yaz Saati + + + TSİ + + Türkmenistan Saati @@ -3899,41 +3961,64 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 + ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) - #,##0.00 ¤;(#,##0.00 ¤) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) - 0 B ¤ - 0 B ¤ - 00 B ¤ - 00 B ¤ - 000 B ¤ - 000 B ¤ - 0 Mn ¤ - 0 Mn ¤ - 00 Mn ¤ - 00 Mn ¤ - 000 Mn ¤ - 000 Mn ¤ - 0 Mr ¤ - 0 Mr ¤ - 00 Mr ¤ - 00 Mr ¤ - 000 Mr ¤ - 000 Mr ¤ - 0 Tn ¤ - 0 Tn ¤ - 00 Tn ¤ - 00 Tn ¤ - 000 Tn ¤ - 000 Tn ¤ + ¤0 B + ¤ 0 B + ¤0 B + ¤ 0 B + ¤00 B + ¤ 00 B + ¤00 B + ¤ 00 B + ¤000 B + ¤ 000 B + ¤000 B + ¤ 000 B + ¤0 Mn + ¤ 0 Mn + ¤0 Mn + ¤ 0 Mn + ¤00 Mn + ¤ 00 Mn + ¤00 Mn + ¤ 00 Mn + ¤000 Mn + ¤ 000 Mn + ¤000 Mn + ¤ 000 Mn + ¤0 Mr + ¤ 0 Mr + ¤0 Mr + ¤ 0 Mr + ¤00 Mr + ¤ 00 Mr + ¤00 Mr + ¤ 00 Mr + ¤000 Mr + ¤ 000 Mr + ¤000 Mr + ¤ 000 Mr + ¤0 Tn + ¤ 0 Tn + ¤0 Tn + ¤ 0 Tn + ¤00 Tn + ¤ 00 Tn + ¤00 Tn + ¤ 00 Tn + ¤000 Tn + ¤ 000 Tn + ¤000 Tn + ¤ 000 Tn @@ -4826,6 +4911,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Doğu Karayip doları + + Karayip guldeni + Karayip guldeni + Karayip guldeni + Özel Çekme Hakkı (SDR) @@ -4910,6 +5000,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zimbabve Doları + + Zimbabve altını + Zimbabve altını + Zimbabve altını + Zimbabve Doları (2009) @@ -5125,7 +5220,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimol/litre {0} milimol/litre - + parça/milyon {0} parça/milyon {0} parça/milyon @@ -5144,6 +5239,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ onbinde {0} onbinde {0} + + glikoz + {0} glikoz + {0} glikoz + litre/kilometre {0} litre/kilometre @@ -5574,6 +5674,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milimetre cıva {0} milimetre cıva + + cıva + {0} cıva + {0} cıva + libre/inç kare {0} libre/inç kare @@ -5744,6 +5849,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metrik su bardağı {0} metrik su bardağı + + metrik sıvı ons + {0} buşel {0} buşel @@ -5802,22 +5910,67 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ İng. quart - - ışık - {0} ışık - {0} ışık + + steradyan + {0} steradyan + {0} steradyan - - parça/milyar + + katal + {0} katal + {0} katal + + + coulomb + + + farad + + + henry + + + siemens + + + kalori [IT] + {0} kalori [IT] + {0} kalori [IT] + + + bekerel + {0} bekerel + {0} bekerel + + + sievert + {0} sievert + {0} sievert + + + gray + {0} gray + {0} gray + + + kilogram-kuvvet + {0} kilogram-kuvvet + {0} kilogram-kuvvet + + + tesla + {0} tesla + {0} tesla + + + weber + {0} weber + {0} weber + + {0} parça/milyar {0} parça/milyar - - gece - {0} gece - {0} gece - {0}/gece - ana yön {0}Doğu @@ -5882,6 +6035,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} öğe {0} öğe + + parça/milyon + %{0} %{0} @@ -5895,6 +6051,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ‱{0} ‱{0} + + Glc + l/km {0} l/km @@ -6327,12 +6486,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} İng. quart {0} İng. quart + + cal-IT + ışık {0} ışık {0} ışık - + parça/milyar @@ -6364,6 +6526,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmol/L {0} mmol/L + + Glc + l/100km {0} l/100km @@ -6508,16 +6673,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} İng. qt. {0} İng. qt. - - ışık - {0} ışık - {0} ışık - - - gece - {0} gece - {0} gece - {0}/gece + + cal-IT diff --git a/make/data/cldr/common/main/trv.xml b/make/data/cldr/common/main/trv.xml index 655cbab6b0e..9f224542e48 100644 --- a/make/data/cldr/common/main/trv.xml +++ b/make/data/cldr/common/main/trv.xml @@ -105,7 +105,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd diff --git a/make/data/cldr/common/main/trw.xml b/make/data/cldr/common/main/trw.xml index f6c91fe2759..b1eefb14bf1 100644 --- a/make/data/cldr/common/main/trw.xml +++ b/make/data/cldr/common/main/trw.xml @@ -2370,9 +2370,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - مغربی افریقہ ٹائم - مغربی افریقہ سٹینڈرڈ ٹائم - مغربی افریقہ سمر ٹائم + مغربی افریقہ ٹائم @@ -2722,6 +2720,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic گیانا سی وَخ + + + ہوائی الیوٹیئن اسٹینڈرڈ ٹائم + + ہوائی الیوٹیئن ٹائم @@ -3850,7 +3853,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ملی مولس فی لیٹر {0} ملی مول فی لیٹر - + فی ملین حصے {0} فی ملین حصے @@ -4445,7 +4448,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ملی مول/لیٹر - + حصے/ملین diff --git a/make/data/cldr/common/main/tt.xml b/make/data/cldr/common/main/tt.xml index 51b999e428d..98976250131 100644 --- a/make/data/cldr/common/main/tt.xml +++ b/make/data/cldr/common/main/tt.xml @@ -13,20 +13,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic африкаанс + акан амхар - гарәп - Заманча стандарт гарәп + гарәпчә + заманча стандарт гарәпчә мапуче ассам + астурианча әзәрбайҗан + азәричә башкорт + бәлүҗчә бали белорус бемба болгар - бенгали + һарианви + бһоҗпури + ании + бенгалча тибет бретон + бодо босния каталан себуано @@ -35,13 +43,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic үзәк көрд корсика чех + сазлык кричәсе + чуашча уэльс дания алман югары алман (Швейцария) + догри түбән сорб мальдив дзонг-кха + әвәчә грек инглиз Британия инглизчәсе @@ -60,7 +72,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic филиппин фарер француз + көнбатыш фризчәсе ирланд + га шотланд гэль галисия гуарани @@ -77,14 +91,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic венгр әрмән гереро + интерлингуа ибибио индонезия + интерлингве игбо + сичуан йи исланд итальян инуктикут япон + җавача грузин + кабувердиану + каинганг казакъ кхмер каннада @@ -94,12 +114,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic курух кашмири көрд + көрдчә + курманҗи + куви кыргыз латин люксембург + лигурча + ломбардча лаос литва латыш + маитһили менде малагаси маори @@ -111,23 +137,32 @@ CLDR data files are interpreted according to the LDML specification (http://unic маратхи малай мальта + Берничә тел бирма + түбән алманча непали ниуэ голланд фламандча + нурвәҗчә нүнорск + нурвәҗчә + нко + төньяк сото ньянҗа окситан оромо ория пәнҗаби папьяменто + Нигерия пидҗине поляк + прусча пушту португал португал (Европа) кечуа киче + раҗастһани ретороман румын рус @@ -135,6 +170,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic санскрит саха сантали + сардинчә синдһи төньяк саам сингал @@ -147,14 +183,19 @@ CLDR data files are interpreted according to the LDML specification (http://unic сомали албан серб + көньяк сото + сундача швед + суаһили сүрия + силезиячә тамил телугу таҗик тай тигринья төрекмән + тсвана тонга төрек татар @@ -165,28 +206,87 @@ CLDR data files are interpreted according to the LDML specification (http://unic урду үзбәк венда + вәнәтчә вьетнам + махувача волоф + кхоса + кангричә идиш йоруба - кытай + ньеңату + кантунча + кытайча, кантунча + жуаңча + кытайча мандарин кытайчасы гадиләштерелгән кытай гадиләштерелгән мандарин кытайчасы традицион кытай традицион мандарин кытайчасы + зулуча + Лингвистик эчтәлек юк + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -273,6 +373,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Кытай Колумбия Клиппертон утравы + Сарк Коста-Рика Куба Кабо-Верде @@ -493,11 +594,125 @@ CLDR data files are interpreted according to the LDML specification (http://unic Зимбабве билгесез төбәк + + тәкъвим + валюта форматы + сортлау тәртибе + валюта + сәгать системасы (12 - 24) + юл ахыры стиле + үлчәү системасы + саннар + + буддист тәкъвиме + буддист + кытай тәкъвиме + кытай + кыйбти тәкъвим + кыйбти + данги тәкъвиме + данги + хәбәши тәкъвим + хәбәши + хәбәши амәте галәм тәкъвим + хәбәши амәте галәм григориан ел исәбе + милади + гыйбрани тәкъвиме + гыйбрани + һиҗри тәкъвим + һиҗри + һиҗри тәкъвим (15 йүл 622) + һиҗри (15.07.622) + һиҗри тәкъвим (Өммелкора) + һиҗри (Өммелкора) ISO-8601 календаре + япун тәкъвиме + япун + иран тәкъвиме + иран + Кытай җөмһүрияте тәкъвиме + мингуо + хисапчылык валюта форматы + хисапчылык + гадәти валюта форматы + гадәти + беренчел юникод сортлау тәртибе + беренчел юникод + гомуми максатлы эзләү + эзләү гадәти тәртипләү ысулы + гадәти + беренчел + эмоҗи + мәтен + 12 сәгать системасы (0–11) + 12 (0–11) + 12 сәгать системасы (1–12) + 12 (1–12) + 24 сәгать системасы (0–23) + 24 (0–23) + 24 сәгать системасы (1–24) + 24 (1–24) + ирекле юл ахыры стиле + ирекле + гадәти юл ахыры стиле + гадәти + кискен юл ахыры стиле + кискен + барын күчерү + барын калдыру + гадәти + гыйбарәләрдә калдыру + метрик система + метрик + инглиз үлчәү системасы + БП + БШ үлчәү системасы + БШ + һинд-гарәп рәкымнары + киңәйтелгән һинд-гарәп рәкымнары + әрмәни рәкымнары + кече хәреф әрмәни рәкымнары + бенгал рәкымнары + чакма рәкымнары + деванагари рәкымнары + хәбәши рәкымнар + тулы киңлектә рәкымнар + гөрҗи рәкымнары + юнан рәкымнары + кече хәреф юнан рәкымнары + гөҗәрат рәкымнары + гурмухи рәкымнары + кытай унарлы рәкымнары + гадиләштерелгән кытай рәкымнары + финанс гадиләштерелгән кытай рәкымнары + горфи кытай рәкымнары + финанс горфи кытай рәкымнары + гыйбрани рәкымнары + җава рәкымнары + япун рәкымнары + финанс япун рәкымнары + кмәр рәкымнары + каннада рәкымнары + лао рәкымнары көнбатыш цифрлары + малаялам рәкымнары + меетей майек рәкымнары + мьянмар рәкымнары + ол чики рәкымнары + одия рәкымнары + рум рәкымнары + кече хәреф рум рәкымнары + горфи тамил рәкымнары + тамил рәкымнары + телугу рәкымнары + тай рәкымнары + төбет рәкымнары + вай рәкымнары + сүн + каб метрик @@ -547,21 +762,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1} {0} + {1}, {0} + + {1} {0} + {1}, {0} + + {1} {0} + {1}, {0} + + {1} {0} + G y 'ел' @@ -832,6 +1059,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} 'сәгатьтә' + + {1} {0} + @@ -840,22 +1070,31 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} 'сәгатьтә' + + {1} {0} + {1}, {0} + + {1} {0} + {1}, {0} + + {1} {0} + E, HH:mm E, HH:mm:ss G y 'ел' - G y 'ел', MMM + MMM y G G y 'ел', d MMM G y 'ел', d MMM, E h a @@ -1645,6 +1884,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Пасха утравы + + Куяйкә + Пунта-Аренас @@ -1909,7 +2151,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Пномпень - + Кантон @@ -2586,9 +2828,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Көнбатыш Африка вакыты - Көнбатыш Африка стандарт вакыты - Көнбатыш Африка җәйге вакыты + Көнбатыш Африка вакыты @@ -2945,6 +3185,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гайана вакыты + + + Гавай-Алеут стандарт вакыты + + Гавай-Алеут вакыты @@ -3509,22 +3754,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ - ¤0 мең - ¤00 мең - ¤000 мең - ¤0 млн - ¤00 млн - ¤000 млн - ¤0 млрд - ¤00 млрд - ¤000 млрд - ¤0 трлн - ¤00 трлн - ¤000 трлн + 0 мең ¤ + 00 мең ¤ + 000 мең ¤ + 0 млн ¤ + 00 млн ¤ + 000 млн ¤ + 0 млрд ¤ + 00 млрд ¤ + 000млрд ¤ + 0 трлн ¤ + 00 трлн ¤ + 000 трлн ¤ @@ -4137,6 +4386,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Көнчыгыш Кариб доллары Көнчыгыш Кариб долларлары + + кариб гульдены + кариб гульдены + Көнбатыш Африка КФА франкы Көнбатыш Африка КФА франклары @@ -4161,6 +4414,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Замбия квачасы Замбия квачалары + + Зимбабве алтыны + Зимбабве алтыны + {0}+ @@ -4176,6 +4433,272 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} һәр {1} + + квадрат километр + {0} квадрат километр + {0}/км² + + + гектар + {0} гектар + + + квадрат метр + {0} квадрат метр + {0}/квадрат метр + + + квадрат сантиметр + {0} квадрат сантиметр + {0}/квадрат сантиметр + + + квадрат миль + {0} квадрат миль + {0}/квадрат миль + + + акр + {0} акр + + + квадрат ярд + {0} квадрат ярд + + + квадрат фут + {0} квадрат фут + + + квадрат дюйм + {0} квадрат дюйм + {0}/квадрат дюйм + + + дунам + {0} дунам + + + гасыр + {0} гасыр + + + унъеллык + {0} унъеллык + + + ел + {0} ел + {0}/ел + + + чирек + {0} чирек + {0}/ч + + + ай + {0} ай + {0}/ай + + + атна + {0} атна + {0}/атна + + + көн + {0} көн + {0}/көн + + + сәгать + {0} сәгать + {0}/сәгать + + + минут + {0} минут + {0}/минут + + + секунд + {0} секунд + {0}/секунд + + + миллисекунд + {0} миллисекунд + + + микросекунд + {0} микросекунд + + + наносекунд + {0} наносекунд + + + типографик эм + {0} эм + + + пиксел + {0} пиксел + + + мегапиксел + {0} мегапиксел + + + пиксел/сантиметрә + {0} пиксел/сантиметрә + + + пиксел/дүйм + {0} пиксел/дүйм + + + Җир радиусы + {0} Җир радиусы + + + километр + {0} километр + {0}/километр + + + метр + {0} метр + {0}/метр + + + дециметр + {0} дециметр + + + сантиметр + {0} сантиметр + {0}/см + + + миллиметр + {0} миллиметр + + + микрометр + {0} микрометр + + + нанометр + {0} нанометр + + + пикометр + {0} пикометр + + + миль + {0} миль + + + ярд + {0} ярд + + + фут + {0} фут + {0}/фут + + + дюйм + {0} дюйм + {0}/дюйм + + + парсек + {0} парсек + + + яктылык елы + {0} яктылык елы + + + астрономик берәмлек + {0} астрономик берәмлек + + + диңгез миле + {0} диңгез миле + + + скандинав миле + {0} скандинав миле + + + пункт + {0} пкт + + + Кояш радиусы + {0} Кояш радиусы + + + кубик километр + {0} кубик километр + + + кубик метр + {0} кубик метр + {0}/кубик метр + + + кубик сантиметр + {0} кубик сантиметр + {0}/кубик сантиметр + + + мегалитр + {0} мегалитр + + + гектолитр + {0} гектолитр + + + литр + {0} литр + {0}/литр + + + децилитр + {0} децилитр + + + сантилитр + {0} сантилитр + + + миллилитр + {0} миллилитр + + + метрик пинт + {0} метрик пинт + + + метрик чынаяк + {0} метрик чынаяк + + + метрик сыек унция + {0} метрик сыек унция + + + төн + {0} төн + {0}/төн + кардиналь юнәлеш {0} көнчыгыш @@ -4185,6 +4708,267 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + км² + {0} км² + {0}/км² + + + гектар + {0} га + + + м² + {0} м² + {0}/м² + + + см² + {0} см² + {0}/см² + + + ми² + {0} ми² + {0}/ми² + + + акр + {0} акр + + + ярд² + {0} ярд² + + + фут² + {0} фут² + + + дюйм² + {0} дюйм² + {0}/дюйм² + + + дунам + {0} дунам + + + г + {0} г + + + унъеллык + {0} унъеллык + + + ел + {0} ел + {0}/е + + + чирек + {0} чир. + {0}/ч + + + ай + {0} ай + {0}/ай + + + атна + {0} ат. + {0}/ат. + + + көн + {0} көн + {0}/көн + + + сәгать + {0} сг + {0}/сг + + + минут + {0} мин + {0}/минут + + + секунд + {0} сек + {0}/ск + + + миллисекунд + {0} мск + + + μсек + {0} μск + + + наносек + {0} нск + + + эм + {0} эм + + + пиксел + {0} пкс + + + мегапиксел + {0} МП + + + пкс/см + {0} пкс/см + + + пкс/дүйм + {0} пкс/дүйм + + + км + {0} км + {0}/км + + + м + {0} м + {0}/м + + + дм + {0} дм + + + см + {0} см + {0}/см + + + мм + {0} мм + + + микрон + {0} мкм + + + нм + {0} нм + + + пм + {0} пм + + + миль + {0} ми + + + ярд + {0} ярд + + + фут + {0} фут + {0}/фут + + + дюйм + {0} дюйм + {0}/дюйм + + + парсек + {0} пк + + + яктылык елы + {0} якт. елы + + + а. б. + {0} а. б. + + + диң. ми + {0} д. ми + + + ск. ми + {0} ск. ми + + + пункт + {0} пкт + + + Кояш радиусы + + + км³ + {0} км³ + + + м³ + {0} м³ + {0}/м³ + + + см³ + {0} см³ + {0}/см³ + + + Мл + {0} Мл + + + гл + {0} гл + + + литр + {0} л + {0}/л + + + дл + {0} дл + + + сл + {0} сл + + + мл + {0} мл + + + мпт + {0} мпт + + + м. чын. + {0} м. чын. + + + м. сыек унц. + {0} м. сыек унц. + + + төн + {0} төн + {0}/төн + юнәлеш {0} көнчыгыш @@ -4193,6 +4977,266 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} көнбатыш + + + км² + {0} км² + {0}/км² + + + гектар + {0} га + + + м² + {0} м² + {0}/м² + + + см² + {0} см² + {0}/см² + + + ми² + {0} ми² + {0}/ми² + + + акр + {0} акр + + + ярд² + {0} ярд² + + + фут² + {0} фут² + + + дюйм² + {0} дюйм² + {0}/дюйм² + + + дунам + {0} дунам + + + г + {0}г + + + унъеллык + {0}унъеллык + + + ел + {0}е + {0}/е + + + чир. + {0}ч + {0}/ч + + + ай + {0}а + {0}/ай + + + атна + {0}ат. + {0}/ат. + + + көн + {0}к + {0}/к + + + сг + {0}с + {0}/сг + + + мин + {0}м + {0}/минут + + + сек + {0}ск + {0}/ск + + + мсек + {0} мск + + + μсек + {0}μск + + + нск + {0}нск + + + эм + {0}эм + + + пкс + {0}пкс + + + МП + {0}МП + + + пкс/см + {0}пкс/см + + + пкс/дүйм + {0}пкс/дүйм + + + км + {0}км + {0}/км + + + м + {0}м + {0}/м + + + дм + {0}дм + + + см + {0}см + {0}/см + + + мм + {0}мм + + + мкм + {0}мкм + + + нм + {0}нм + + + пм + {0}пм + + + ми + {0} ми + + + ярд + {0} ярд + + + фут + {0} фут + {0}/фут + + + дюйм + {0} дюйм + {0}/дюйм + + + парсек + {0} пк + + + якт. елы + {0} якт. елы + + + а. б. + {0} а.б. + + + д. ми + {0} д. ми + + + ск. ми + {0}ск. ми + + + пкт + {0}пкт + + + км³ + {0} км³ + + + м³ + {0} м³ + {0}/м³ + + + см³ + {0} см³ + {0}/см³ + + + Мл + {0} Мл + + + гл + {0} гл + + + литр + {0} л + {0}/л + + + дл + {0} дл + + + сл + {0} сл + + + мл + {0} мл + + + мпт + {0} мпт + + + м. чын. + {0} м. чын. + + + м. сыек унц. + {0} м. сыек унц. + + + төн + {0} төн + {0}/төн + + diff --git a/make/data/cldr/common/main/tyv.xml b/make/data/cldr/common/main/tyv.xml index 4457e457a04..86e5ca8a3fe 100644 --- a/make/data/cldr/common/main/tyv.xml +++ b/make/data/cldr/common/main/tyv.xml @@ -10,9 +10,717 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + Араб + Амгы стандарт араб + Бенгал + Немец + Немец (AT) + Немец (CH) + Англи + Англи (AU) + Англи (CA) + Англи (GB) + Англи (US) + Испан + Латин Америкада Испан + Европей Испан + Мексикан Испан + Француз + Француз (CA) + Француз (CH) + Хинди (латин) + Хинглиш + Индонези + Итали + Япон + Көрей + Нидерланд + Фламанд + Поляк + Португал + Бразилияда Португал + Европей Португал + Орус + Тай + Турк + Тыва + Кыдат + Кыдат Мандарин + Кыдат (бөдүүнчүткен) + Кыдат Мандарин (бөдүүнчүткен) + Кыдат (чаңчылчаан) + Кыдат Мандарин (чаңчылчаан) + + + + + + + + + + + + + + + + Бүгү Делегей + Африка + Соңгу Америка + Мурнуу Америка + Океания + Барыын Африка + Төп Америка + Чөөн Африка + Соңгу Африка + Төп Африка + Мурнуу Африка + Америкалар + Соңгу Америка кезээ + Карибтер + Чөөн Азия + Мурнуу Азия + Мурнуу-Чөөн Азия + Мурнуу Европа + Австралия + Меланезия + Микронезия + Полинезия + Азия + Төп Азия + Барыын Азия + Европа + Чөөн Европа + Соңгу Европа + Барыын Европа + Тропик Африка + Латин Америка + Антигуа & Барбуда + Ангилья + Ангола + Аргентина + Аруба + Барбадос + Буркина-Фасо + Бурунди + Бенин + Сен-Бартелеми + Бермуд Ортулуктар + Боливия + Кариб Нидерландтар + Бразилия + Багамнар + Буве Ортулуктар + Ботсвана + Белиз + Канада + Конго - Киншаса + Конго (ДРК) + Төп-Африкан Республика + Конго - Браззавиль + Республика Конго + Кот-д’Ивуар + Чили + Камерун + Колумбия + Коста-Рика + Куба + Кабо-Верде + Кюрасао + Джибути + Доминика + Доминикан Республика + Алжир + Сеута & Мелилья + Эквадор + Египет + Барыын Сахара + Эритрея + Эфиопия + Европа Эвилели + Еврозона + Фолкленд Ортулуктар + Фолкленд (Мальвин) Ортулуктар + Габон + Гренада + Француз Гвиана + Гана + Гренландия + Гамбия + Гвинея + Гваделупа + Экваторда Гвинея + Мурнуу Георгия & Мурнуу Сандвич Ортулуктар + Гватемала + Гвинея-Бисау + Гайана + Гондурас + Гаити + Канар Ортулуктар + Британ девискээр Инди океанда + Архипелаг Чагос + Ямайка + Кения + Коморлар + Сент-Китс & Невис + Кайман Ортулуктар + Сент-Люсия + Либерия + Лесото + Ливия + Морокко + Сен-Мартен + Мадагаскар + Мали + Мартиника + Мавритания + Монтсеррат + Маврикий + Малави + Мексика + Мозамбик + Намибия + Нигер + Нигерия + Никарагуа + Панама + Перу + Сен-Пьер & Микелон + Пуэрто-Рико + Парагвай + Дашкаар Океания + Реюньон + Россия Федерациязы + Руанда + Сейшелдер + Судан + Ыдыктыг Елена Ортулуктары + Сьерра-Леоне + Сенегал + Сомали + Суринам + Мурнуу Судан + Сан-Томе & Принсипи + Сальвадор + Синт-Мартен + Эсватини + Свазиленд + Түрктер & Кайкос + Чад + Француз Мурнуу девискээрлер + Того + Тунис + Тринидад & Тобаго + Танзания + Уганда + Каттышкан Нациялар + Каттышкан Штаттар + АКШ + Уругвай + Сент-Винсент & Гренадиннер + Венесуэла + Виргин Ортулуктар (Великобритания) + Виргин Ортулуктар (АКШ) + Псевдо-Акценттер + Псевдо-Bidi + Майотта + Мурнуу Африкан Республика + Замбия + Зимбабве + Билдинмес Регион + + + Григориан Календарь + Григориан + Календарь ISO-8601 + Стандарт сортал + Стандарт + араб чурагайлар + + + Метрик + Англи + Американ + + + Дыл: {0} + Бижимел: {0} + Регион: {0} + + [а б в г д её ж з и й к л м н ң о ө п р с т у ү ф х ц ч ш щ ъ ы ь э ю я] [А Б В Г Д ЕЁ Ж З И Й К Л М Н Ң О Ө П Р С Т У Ү Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я] + [. / A B C D E F I L M V X] [\- ‐‑ – — , ; \: ! ? . … '‘’ "“” « » ( ) \[ \] § @ * / \& # † ‡ ′ ″] + [– · + < = > ~ №] + [\- ‑ – . '’ ( )] + + « + » + + + + + + + + + + Янв. + Февр. + Мар. + Апр. + Май + Июн. + Июл. + Авг. + Сент. + Окт. + Нояб. + Дек. + + + Я + Ф + М + А + М + И + И + А + С + О + Н + Д + + + Январь + Февраль + Март + Апрель + Май + Июнь + Июль + Август + Сентябрь + Октябрь + Ноябрь + Декабрь + + + + + Янв. + Февр. + Мар. + Апр. + Май + Июн. + Июл. + Авг. + Сент. + Окт. + Нояб. + Дек. + + + Я + Ф + М + А + М + И + И + А + С + О + Н + Д + + + Январь + Февраль + Март + Апрель + Май + Июнь + Июль + Август + Сентябрь + Октябрь + Ноябрь + Декабрь + + + + + + + УХ + ПН + ВТ + СР + ЧТ + ПТ + СБ + + + У + П + В + С + Ч + П + С + + + УХ + ПН + ВТ + СР + ЧТ + ПТ + СБ + + + Улуг-хүн + Понедельник + Вторник + Среда + Четверг + Пятница + Суббота + + + + + УХ + ПН + ВТ + СР + ЧТ + ПТ + СБ + + + У + П + В + С + Ч + П + С + + + УХ + ПН + ВТ + СР + ЧТ + ПТ + СБ + + + Улуг-хүн + Понедельник + Вторник + Среда + Четверг + Пятница + Суббота + + + + + + + 1ги кв. + 2ги кв. + 3кү кв. + 4кү кв. + + + 1ги квартал + 2ги квартал + 3кү квартал + 4кү квартал + + + + + 1ги кв. + 2ги кв. + 3кү кв. + 4кү кв. + + + 1ги квартал + 2ги квартал + 3кү квартал + 4кү квартал + + + + + + Христос бертинде + Бистиң Эрага чедир + Христос төрүмелинден + Бистиң эрада + + + БЭЧ + БЭ + + + + + + y'ч' MMMM d, EEEE + + + + + y'ч' MMMM d + + + + + y'ч' MMM d + + + + + y-MM-dd + + + + + + + HH:mm:ss zzzz + + + + + HH:mm:ss z + + + + + HH:mm:ss + + + + + HH:mm + + + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + + {1}, {0} + + + {1}, {0} + + + {1}, {0} + + + + E, h B + E, h:mm B + E, h:mm:ss B + E, h a + E, h:mm a + E, h:mm:ss a + HH'ш' + h a, v + HH'ш' v + MMMM, W 'чедилик' + y'ч' MMM + y'ч' MMM d + y'ч' MMM d, E + y'ч' MMMM + y'ч' QQQ + y'ч' QQQQ + Y'ч', w 'чедилик' + + + + G y'ч' – G y'ч' + G y–y'чч' + + + HH–HH'ш' + + + HH–HH'ш' v + + + y'ч' MMM–MMM + y'ч' MMM – y'ч' MMM + + + y'ч' MMM d–d + y'ч' MMM d – MMM d + y'ч' MMM d – y'ч' MMM d + + + y'ч' MMM d, E – MMM d, E + y'ч' MMM d, E – MMM d, E + y'ч' MMM d, E – y'ч' MMM d, E + + + y'ч' MMMM–MMMM + y'ч' MMMM – y'ч' MMMM + + + + + + + + эра + + + чыл + эрткен чыл + амгы чыл + келир чыл + + + ч. + + + ч. + + + квартал + + + кв. + + + кв. + + + ай + + + ай + + + ай + + + чедилик + + + чед. + + + чед. + + + хүн + + + х. + + + х. + + + чедилик хүнү + + + AM/PM + + + шак + + + ш. + + + ш. + + + минута + + + мин. + + + мин + + + секунда + + + сек. + + + с + + + шак куржаа + + + + {0}, чайгы үе + {0}, стандарт үе + + + Гринвичтиң ортаа үези + + + + + + +   + + diff --git a/make/data/cldr/common/main/tzm.xml b/make/data/cldr/common/main/tzm.xml index c0c00692564..cc039d9d407 100644 --- a/make/data/cldr/common/main/tzm.xml +++ b/make/data/cldr/common/main/tzm.xml @@ -541,6 +541,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/ug.xml b/make/data/cldr/common/main/ug.xml index 685a49e71cf..1311752b41c 100644 --- a/make/data/cldr/common/main/ug.xml +++ b/make/data/cldr/common/main/ug.xml @@ -1056,11 +1056,9 @@ Reviewed by Waris Abdukerim Janbaz of the Uyghur Computer Sci ياپونىيە يىلنامەسى پارىس يىلنامەسى مىنگو يىلنامەسى - مۇرەككەپ خەنچە تىزىش تەرتىپى - Big5 لۇغەت تىزىش تەرتىپى كۆڭۈلدىكى يۇنىكود تىزىش تەرتىپى ياۋروپا تەرتىپلەش قائىدىسى - ئاددىي خەنچە تىزىش تەرتىپى - GB2312 تېلېفون نومۇر تىزىش تەرتىپى پىنيىن تىزىش تەرتىپى ياخشىلانغان تەرتىپلەش تەرتىپى @@ -1968,9 +1966,7 @@ Reviewed by Waris Abdukerim Janbaz of the Uyghur Computer Sci - غەربىي ئافرىقا ۋاقتى - غەربىي ئافرىقا ئۆلچەملىك ۋاقتى - غەربىي ئافرىقا يازلىق ۋاقتى + غەربىي ئافرىقا ۋاقتى @@ -2346,6 +2342,11 @@ Reviewed by Waris Abdukerim Janbaz of the Uyghur Computer Sci گىۋىيانا ۋاقتى + + + ھاۋاي-ئالېيۇت ئۆلچەملىك ۋاقتى + + ھاۋاي-ئالېيۇت ۋاقتى diff --git a/make/data/cldr/common/main/uk.xml b/make/data/cldr/common/main/uk.xml index ed07b15f361..220d142488b 100644 --- a/make/data/cldr/common/main/uk.xml +++ b/make/data/cldr/common/main/uk.xml @@ -45,7 +45,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ надждійська арабська арабська, надждійська аравакська - асамська + ассамська асу американська мова рухів астурійська @@ -297,6 +297,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ бафіа кельнська курдська + курдська + курманджі кумицька кутенаї комі @@ -843,6 +845,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Китай Колумбія Острів Кліппертон + Сарк Коста-Рика Куба Кабо-Верде @@ -1120,35 +1123,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ цифрове сортування інтенсивність сортування валюта + емодзі формат часу (12 або 24 години) стиль розриву рядка + розриви рядків у словах система вимірювання цифри + розрив речення після скорочення часовий пояс варіант мовного коду особисте використання буддійський календар + буддійський китайський календар + китайський коптський календар + коптський корейський календар + корейський ефіопський календар + ефіопський ефіопський амете алем календар + ефіопський амете алем григоріанський календар + григоріанський єврейський календар + єврейський індійський світський календар календар Хіджра + Хіджра календар Хіджра, світський + Хіджра, світський ісламський календар Саудівської Аравії ісламський астрономічний календар календар Хіджра (Умм аль-Кура) + Хіджра (Умм аль-Кура) календар ISO-8601 японський календар + японський перський календар + перський календар Китайської Республіки + Китайської Республіки обліковий грошовий формат + обліковий стандартний грошовий формат + стандартний сортувати за символами сортувати, ігноруючи символи сортувати за діакритичними знаками уніфіковано @@ -1158,23 +1180,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ сортувати спершу за великими символами сортувати без урахування регістру сортувати з урахуванням регістру - китайський традиційний порядок сортування Big5 попередній порядок сортування, для сумісності + сумісність порядок сортування за словником + за словником типовий порядок сортування Юнікод + типовий Юнікод порядок сортування за емодзі європейські правила упорядкування - китайський спрощений порядок сортування - GB2312 порядок сортування за телефонним довідником + за телефонним довідником фонетичний порядок сортування + фонетичний порядок сортування піньїнь + піньїнь універсальний пошук + пошук пошук за початковою приголосною хангул стандартний порядок сортування + стандартний порядок сортування за рисками + за рисками традиційний порядок сортування + традиційний порядок сортування за ключами ієрогліфів + за ключами ієрогліфів порядок сортування чжуїнь + чжуїнь сортувати без уніфікації сортувати за Unicode уніфіковано сортувати цифри окремо @@ -1187,18 +1219,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ повна ширина половинна ширина цифри + типово + емодзі + текст 12-годинний формат (0–11) + 12 (0–11) 12-годинний формат (1–12) + 12 (1–12) 24-годинний формат (0–23) + 24 (0–23) 24-годинний формат (1–24) + 24 (1–24) неточний стиль розриву рядка + неточний звичайний стиль розриву рядка + звичайний точний стиль розриву рядка + точний + розривати всі + залишати всі + звичайний + залишати фразами транслітерація РГН США транслітерація ГЕГН ООН метрична система + метрична англійська система мір + англійська американська система мір + американська арабсько-індійські цифри арабсько-індійські розширені цифри вірменські цифри @@ -1243,6 +1292,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ тибетські цифри традиційні символи чисел цифри ваї + вимкнено + увімкнено Метрична @@ -1297,9 +1348,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1503,13 +1551,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM-y G dd-MM-y GGGGG + E, dd-MM-y, G LLL y 'р'. G d MMM y 'р'. G E, d MMM y 'р'. G - h a h:mm a h:mm:ss a + HH 'год' v dd.MM E, dd.MM d MMM @@ -1570,7 +1620,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a h:mm a – h:mm a @@ -1584,7 +1633,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v M–M @@ -1781,22 +1829,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ вечора ночі - - ночі - дня - ранку - дня - вечора - ночі - - - ночі - дня - ранку - дня - вечора - ночі - @@ -1878,6 +1910,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'о' {0} + + {1} 'о' {0} + @@ -1886,6 +1921,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} 'о' {0} + + {1} 'о' {0} + @@ -1902,15 +1940,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a y G + MM y G dd-MM-y GGGGG + dd-MM-y, E, G LLL y 'р'. G d MMM y 'р'. G E, d MMM y 'р'. G - h a + H h:mm a h:mm:ss a h:mm:ss a v h:mm a v + HH 'год' v LL dd.MM E, dd.MM @@ -1978,7 +2019,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a - h–h a + + + HH–HH 'год' h:mm a – h:mm a @@ -1992,7 +2035,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h a – h a v - h–h a v + + + HH–HH 'год' v M–M @@ -3547,6 +3592,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Острів Пасхи + + Кояїке + Пунта-Аренас @@ -3812,9 +3860,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Пномпень - Ендербері - - Кантон @@ -4491,9 +4536,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - за західноафриканським часом - за західноафриканським стандартним часом - за західноафриканським літнім часом + за західноафриканським часом @@ -4855,6 +4898,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ за часом у Ґаяні + + + за стандартним гавайсько-алеутським часом + + за гавайсько-алеутським часом @@ -5100,9 +5148,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - за часом на острові Норфолк - за стандартним часом на острові Норфолк - за літнім часом на острові Норфолк + за часом на острові Норфолк + за стандартним часом на острові Норфолк + за літнім часом на острові Норфолк @@ -5293,6 +5341,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ за часом на островах Чуук + + + за турецьким часом + за турецьким стандартним часом + за турецьким літнім часом + + за часом у Туркменістані @@ -5376,7 +5431,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - за стандартним часом на Юконі + за стандартним часом на Юконі @@ -5473,7 +5528,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ + + + #,##0.00 ¤ @@ -7005,6 +7063,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ східнокарибського долара XCD + + карибський гульден + карибський гульден + карибські гульдени + карибських гульденів + карибського гульдена + спеціальні права запозичення СПЗ @@ -7110,6 +7175,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ зімбабвійських доларів зімбабвійські долари + + зімбабвійський золотий + зімбабвійський золотий + зімбабвійські золоті + зімбабвійських золотих + зімбабвійського золотого + зімбабвійський долар (2009) зімбабвійський долар (2009) @@ -7822,35 +7894,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} елемента {0} елемента - + + частки + {0} частка + {0} частки + {0} часток + {0} частки + + feminine - {0} мільйонна доля - {0} мільйонну долю - {0} мільйонній долі - {0} мільйонної долі - {0} мільйонною долею - {0} мільйонній долі - {0} мільйонні долі - {0} мільйонні долі - {0} мільйонним долям - {0} мільйонних доль - {0} мільйонними долями - {0} мільйонних долях - {0} мільйонних доль - {0} мільйонних доль - {0} мільйонним долям - {0} мільйонних доль - {0} мільйонними долями - {0} мільйонних долях - {0} мільйонної долі - {0} мільйонної долі - {0} мільйонної долі - {0} мільйонної долі - {0} мільйонної долі - {0} мільйонної долі + мільйонні частки + {0} мільйонна частка + {0} мільйонну частку + {0} мільйонній частці + {0} мільйонної частки + {0} мільйонною часткою + {0} мільйонній частці + {0} мільйонні частки + {0} мільйонні частки + {0} мільйонним часткам + {0} мільйонних часток + {0} мільйонними частками + {0} мільйонних частках + {0} мільйонних часток + {0} мільйонних часток + {0} мільйонним часткам + {0} мільйонних часток + {0} мільйонними частками + {0} мільйонних частках + {0} мільйонної частки + {0} мільйонної частки + {0} мільйонної частки + {0} мільйонної частки + {0} мільйонної частки + {0} мільйонної частки masculine + відсотки {0} відсоток {0} відсоток {0} відсотку @@ -7878,6 +7959,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + проміле {0} проміле {0} проміле {0} проміле @@ -7959,6 +8041,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} моля {0} моля + + одиниці глюкози + {0} одиниця глюкози + {0} одиниці глюкози + {0} одиниць глюкози + {0} одиниці глюкози + masculine літри на кілометр @@ -8511,6 +8600,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + дні {0} день {0} день {0} дню @@ -9936,6 +10026,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine + карати {0} карат {0} карат {0} карату @@ -10157,6 +10248,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} міліметра ртутного стовпа {0} міліметра ртутного стовпа + + ртутного стовпа + {0} ртутного стовпа + {0} ртутного стовпа + {0} ртутного стовпа + {0} ртутного стовпа + фунти на квадратний дюйм {0} фунт на квадратний дюйм @@ -10884,6 +10982,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метричної чашки {0} метричної чашки + + метричні рідинні унції + {0} метрична рідинна унція + {0} метричні рідинні унції + {0} метричних рідинних унцій + {0} метричної рідинної унції + {0} акр-фут {0} акр-фути @@ -10987,6 +11092,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мірних склянок {0} мірна склянка + + дрібки + {0} дрібка + {0} дрібки + {0} дрібок + {0} дрібки + англійські кварти {0} англійська кварта @@ -10994,33 +11106,131 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} англійських кварт {0} англійської кварти - + + стерадіани + {0} стерадіан + {0} стерадіани + {0} стерадіанів + {0} стерадіана + + + катали + {0} катал + {0} катали + {0} каталів + {0} катала + + + кулони + {0} кулон + {0} кулони + {0} кулонів + {0} кулона + + + фаради + {0} фарад + {0} фаради + {0} фарадів + {0} фарада + + + генрі + {0} генрі + {0} генрі + {0} генрі + {0} генрі + + + сіменси + {0} сіменс + {0} сіменси + {0} сіменсів + {0} сіменса + + + міжнародні калорії + {0} міжнародна калорія + {0} міжнародні калорії + {0} міжнародних калорій + {0} міжнародної калорії + + + бекерелі + {0} бекерель + {0} бекерелі + {0} бекерелів + {0} бекереля + + + зіверти + {0} зіверт + {0} зіверти + {0} зівертів + {0} зіверта + + + греї + {0} грей + {0} греї + {0} греїв + {0} грея + + + кілограм-сили + {0} кілограм-сила + {0} кілограм-сили + {0} кілограм-сил + {0} кілограм-сили + + + тесли + {0} тесла + {0} тесли + {0} тесл + {0} тесли + + + вебери + {0} вебер + {0} вебери + {0} веберів + {0} вебера + + + швидкості світла + {0} швидкість світла + {0} швидкості світла + {0} швидкостей світла + {0} швидкості світла + + feminine - частини на мільярд - {0} частина на мільярд - {0} частину на мільярд - {0} частині на мільярд - {0} частини на мільярд - {0} частиною на мільярд - {0} частині на мільярд - {0} частини на мільярд - {0} частини на мільярд - {0} частинам на мільярд - {0} частин на мільярд - {0} частинами на мільярд - {0} частинах на мільярд - {0} частин на мільярд - {0} частин на мільярд - {0} частинам на мільярд - {0} частин на мільярд - {0} частинами на мільярд - {0} частинах на мільярд - {0} частини на мільярд - {0} частини на мільярд - {0} частини на мільярд - {0} частини на мільярд - {0} частини на мільярд - {0} частини на мільярд + мільярдні частки + {0} мільярдна частка + {0} мільярдну частку + {0} мільярдній частці + {0} мільярдної частки + {0} мільярдною часткою + {0} мільярдній частці + {0} мільярдні частки + {0} мільярдні частки + {0} мільярдним часткам + {0} мільярдних часток + {0} мільярдними частками + {0} мільярдних частках + {0} мільярдних часток + {0} мільярдних часток + {0} мільярдним часткам + {0} мільярдних часток + {0} мільярдними частками + {0} мільярдних частках + {0} мільярдної частки + {0} мільярдної частки + {0} мільярдної частки + {0} мільярдної частки + {0} мільярдної частки + {0} мільярдної частки feminine @@ -11304,12 +11514,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ел. {0} ел. - - м. д. - {0} м. д. - {0} м. д. - {0} м. д. - {0} м. д. + + част. + {0} част. + {0} част. + {0} част. + {0} част. + + + ч/млн + {0} ч/млн + {0} ч/млн + {0} ч/млн + {0} ч/млн {0} % @@ -11336,6 +11553,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} моль {0} моль + + од. глюкози + {0} од. глюкози + {0} од. глюкози + {0} од. глюкози + {0} од. глюкози + літри/км {0} л/км @@ -12048,6 +12272,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} мм рт. ст. {0} мм рт. ст. + + рт. ст + {0} рт. ст. + {0} рт. ст. + {0} рт. ст. + {0} рт. ст. + фунт/дюйм² {0} фунт/дюйм² @@ -12287,6 +12518,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} метр. чашок {0} метр. чашки + + ун. рід. метр. + {0} ун. рід. метр. + {0} ун. рід. метр. + {0} ун. рід. метр. + {0} ун. рід. метр. + акр-фути {0} акр-фт @@ -12422,12 +12660,110 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} англ. кварт {0} англ. кварти - - частини/млрд - {0} част/млрд - {0} част/млрд - {0} част/млрд - {0} част/млрд + + ср + {0} ср + {0} ср + {0} ср + {0} ср + + + кат + {0} кат + {0} кат + {0} кат + {0} кат + + + Кл + {0} Кл + {0} Кл + {0} Кл + {0} Кл + + + Ф + {0} Ф + {0} Ф + {0} Ф + {0} Ф + + + Гн + {0} Гн + {0} Гн + {0} Гн + {0} Гн + + + См + {0} См + {0} См + {0} См + {0} См + + + калмн + {0} калмн + {0} калмн + {0} калмн + {0} калмн + + + Бк + {0} Бк + {0} Бк + {0} Бк + {0} Бк + + + Зв + {0} Зв + {0} Зв + {0} Зв + {0} Зв + + + Гр + {0} Гр + {0} Гр + {0} Гр + {0} Гр + + + кгс + {0} кгс + {0} кгс + {0} кгс + {0} кгс + + + Тл + {0} Тл + {0} Тл + {0} Тл + {0} Тл + + + Вб + {0} Вб + {0} Вб + {0} Вб + {0} Вб + + + шв. св. + {0} шв. св. + {0} шв. св. + {0} шв. св. + {0} шв. св. + + + ч/млрд + {0} ч/млрд + {0} ч/млрд + {0} ч/млрд + {0} ч/млрд нч. @@ -12582,21 +12918,37 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ел. {0}ел. - - м.д. - {0}м.д. - {0}м.д. - {0}м.д. - {0}м.д. + + ч. + {0}ч. + {0}ч. + {0}ч. + {0}ч. + + + ч/млн + {0}ч/млн + {0}ч/млн + {0}ч/млн + {0}ч/млн - % + {0}% + {0}% + {0}% + {0}% - + {0}‰ + {0}‰ + {0}‰ + {0}‰ - + {0}‱ + {0}‱ + {0}‱ + {0}‱ {0}моль @@ -12604,6 +12956,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}моль {0}моль + + од.гл. + {0}од.гл. + {0}од.гл. + {0}од.гл. + {0}од.гл. + л/км {0}л/км @@ -13289,6 +13648,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ммрс {0}ммрс + + рс + {0}рс + {0}рс + {0}рс + {0}рс + фнт/дюйм² {0}фнт/дюйм² @@ -13373,7 +13739,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}вуз. - Бофорт + бали {0} бал {0} бали {0} балів @@ -13503,6 +13869,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}м.чаш. {0}м.чаш. + + ун. рід. метр. + {0}ун.рід.м. + {0}ун.рід.м. + {0}ун.рід.м. + {0}ун.рід.м. + акр-фт {0}акр-фт @@ -13522,7 +13895,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}гал. {0}гал. {0}гал. - {0}/гал англ. гал. @@ -13623,7 +13995,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}мір. - дріб. {0}дріб. {0}дріб. {0}дріб. @@ -13636,12 +14007,110 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}англ.квар. {0}англ.квар. - + + ср + {0}ср + {0}ср + {0}ср + {0}ср + + + кат + {0}кат + {0}кат + {0}кат + {0}кат + + + Кл + {0}Кл + {0}Кл + {0}Кл + {0}Кл + + + Ф + {0}Ф + {0}Ф + {0}Ф + {0}Ф + + + Гн + {0}Гн + {0}Гн + {0}Гн + {0}Гн + + + См + {0}См + {0}См + {0}См + {0}См + + + калмн + {0}калмн + {0}калмн + {0}калмн + {0}калмн + + + Бк + {0}Бк + {0}Бк + {0}Бк + {0}Бк + + + Зв + {0}Зв + {0}Зв + {0}Зв + {0}Зв + + + Гр + {0}Гр + {0}Гр + {0}Гр + {0}Гр + + + кгс + {0}кгс + {0}кгс + {0}кгс + {0}кгс + + + Тл + {0}Тл + {0}Тл + {0}Тл + {0}Тл + + + Вб + {0}Вб + {0}Вб + {0}Вб + {0}Вб + + + шв.св. + {0}шв.св. + {0}шв.св. + {0}шв.св. + {0}шв.св. + + ч/млрд - {0} ч/млрд - {0} ч/млрд - {0} ч/млрд - {0} ч/млрд + {0}ч/млрд + {0}ч/млрд + {0}ч/млрд + {0}ч/млрд нч diff --git a/make/data/cldr/common/main/ur.xml b/make/data/cldr/common/main/ur.xml index b56793e017c..a018ec0621a 100644 --- a/make/data/cldr/common/main/ur.xml +++ b/make/data/cldr/common/main/ur.xml @@ -49,6 +49,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ازیری آزربائیجانی (عربی) باشکیر + بلوچی بالینیز باسا بیلاروسی @@ -235,7 +236,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ شامبالا بافيا کولوگنیائی - کردش + کردی + کردی + کرمانجی کومیک کومی کورنش @@ -284,7 +287,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ مکمیک منانگکباؤ مقدونیائی - مالایالم + ملیالم منگولین منی پوری انو ایمن @@ -636,6 +639,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ چین کولمبیا کلپرٹن آئلینڈ + سارک کوسٹا ریکا کیوبا کیپ ورڈی @@ -877,34 +881,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ عددی چھانٹی چھانٹی کی قوت کرنسی + ایموجی پریزینٹیشن گھنٹہ سائیکل (12 بنام 24) لائن بریک انداز + الفاظ کے اندر لائن بریکس پیمائش کا نظام اعداد + مخففات کے بعد سنٹینس بریک منطقۂ وقت مقام کا متغیرہ نجی-استعمال بودھ کلینڈر + بودھ چینی کیلنڈر + چینی کاپٹک کیلنڈر + قبطی ڈانگی کیلنڈر + ڈانگی ایتھوپیائی کیلنڈر + ایتھوپیائی ایتھوپک امیٹ الیم کیلنڈر + ایتھوپیائی امیٹ الیم گریگورین کیلنڈر + گریگورین عبرانی کیلنڈر - ہندوستانی قومی کیلنڈر - اسلامی کیلنڈر + عبرانی + بھارتی قومی کیلنڈر + بھارتی قومی + ہجری کیلنڈر + ہجری اسلامی شہری کیلنڈر (ٹیبیولر، مدنی دور) - اسلامی کیلنڈر (ٹیبولر، فلکیاتی دور) - اسلامی کیلنڈر (ام القراہ) + ہجری (شہری تقویم) + ہجری کیلنڈر (لوحی، ایسٹرونومیکل ایپوک) + ہجری (فلکیاتی تقویم) + ہجری کیلنڈر (ام القریٰ) + ہجری (ام القریٰ) ISO-8601 کیلنڈر جاپانی کیلنڈر + جاپانی فارسی کیلنڈر + فارسی منگوو کیلنڈر + مینگوو اکاؤنٹنگ کرنسی فارمیٹ + اکاؤنٹنگ اسٹینڈرڈ کرنسی فارمیٹ + اسٹینڈرڈ علامات کی چھٹائی کریں علامات کو نظرانداز کرکے چھٹائی کریں لہجوں کی چھٹائی معمول کے انداز میں کریں @@ -914,18 +939,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ پہلے بالائی حروف کی چھٹائی کریں حروف کی عدم حساسیت کی چھٹائی کریں حروف کے تئیں حساس کی چھٹائی کریں - روایتی چینی کی چھٹائی کی ترتیب - Big5 سابقہ چھٹائی کی ترتیب، مطابقت کیلئے لغت کی چھٹنی کی ترتیب ڈیفالٹ یونی کوڈ چھانٹی کی ترتیب + ڈیفالٹ یونی کوڈ یورپی ترتیبی قوانین - آسان چینی کی چھٹائی کی ترتیب - GB2312 فون بک کی چھٹنی کی ترتیب صوتی چھٹائی کی ترتیب پن ین کی چھٹنی کی ترتیب عمومی تلاش + تلاش Hangul Initial Consonant کے لحاظ سے تلاش کریں معیاری چھانٹی کی ترتیب + معیاری سٹروک کی چھٹنی کی ترتیب روایتی چھٹنی کی ترتیب اساسی-سٹروک کی چھٹنی کی ترتیب @@ -941,18 +967,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ پورا عرض نصف عرض عددی + ڈیفالٹ + ایموجی + متن 12 گھنٹے کا نظام (0–11) + 12 (0–11) 12 گھنٹے کا نظام (1–12) + 12 (1–12) 24 گھنٹے کا نظام (0–23) + 24 (0–23) 24 گھنٹے کا نظام (1–24) + 24 (1–24) ڈھیلا لائن بریک انداز + ڈھیلا عمومی لائن بریک انداز + عمومی سخت لائن بریک انداز + سخت + سبھی کو بریک کریں + سبھی کو رکھیں + عمومی + فقروں میں رکھیں US BGN ٹرانسلٹریشن UN GEGN ٹرانسلٹریشن میٹرک نظام + میٹرک پیمائش کا امپیریل نظام + UK پیمائش کا امریکی نظام + US عربی ہندی ہندسے توسیع شدہ عربی ہندی ہندسے آرمینیائی اعداد @@ -997,6 +1040,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ تبتی اعداد روایتی اعداد وائی ہندسے + آف + آن میٹرک @@ -1019,7 +1064,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [؀؁؂؃\u200C\u200D\u200E\u200F ً ٌ ٍ َ ُ ِ ّ ْ ٔ ٖ ٗ ٘ ٰ أ آ ں ؤ ۂ ۃ ئ ٻ ة ٺ ټ ٽ ه ي] [ا ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ہ ھ ء ی ے] [\u200E \- ‑ , ٫ ٬ . % ‰ + 0۰ 1۱ 2۲ 3۳ 4۴ 5۵ 6۶ 7۷ 8۸ 9۹] + [0۰ 1۱ 2۲ 3۳ 4۴ 5۵ 6۶ 7۷ 8۸ 9۹] [، ؍ ٫ ٬ ؛ \: ؟ . ۔ ( ) \[ \]] + [\- ‑ – — ، ؛ \: ! ؟ … ۔ ‘’ “” ( ) \[ \] § @ * / \\ \& # † ‡ ′ ″] + [\- ‑ , . /] ؟ [\: ∶] @@ -1060,12 +1108,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - دور0 - دور1 - - @@ -1087,12 +1129,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - دور0 - دور1 - - @@ -1123,6 +1159,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1} {0} پر + @@ -1131,6 +1170,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} کو {0} + + {1} {0} پر + @@ -1139,6 +1181,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}، {0} + + {1}، {0} + @@ -1147,11 +1192,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}، {0} + + {1}، {0} + + h E B d E y G + M/y G d/M/y GGGGG + E, d/M/y G MMM y G d MMM، y G E، d MMM، y G @@ -1345,8 +1396,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ رات + نصف شب a p + صبح + دوپہر + سہ پہر + شام + رات آدھی رات @@ -1427,6 +1484,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} کو {0} + + {1} {0} پر + @@ -1435,6 +1495,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} کو {0} + + {1} کو {0} + @@ -1443,6 +1506,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}، {0} + + {1}، {0} + @@ -1451,11 +1517,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1}، {0} + + {1}، {0} + d E y G + M/y G d/M/y GGGGG + E، d/M/y G MMM y G d MMM، y G E، d MMM، y G @@ -1713,6 +1784,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ہجری + + + M/y G + E، d/M/y G + + @@ -2409,6 +2486,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ایسٹر + + کویائیکے + پنٹا اریناس @@ -2674,9 +2754,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ پنوم پن - اینڈربری - - کانٹن @@ -3346,9 +3423,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - مغربی افریقہ ٹائم - مغربی افریقہ سٹینڈرڈ ٹائم - مغربی افریقہ سمر ٹائم + مغربی افریقہ ٹائم @@ -3705,6 +3780,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ گیانا کا وقت + + + ہوائی الیوٹیئن اسٹینڈرڈ ٹائم + + ہوائی الیوٹیئن ٹائم @@ -4296,18 +4376,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - - ¤ #,##0.00 - - - ¤#,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4317,32 +4389,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - ¤ 0 ہزار - ¤ 0 ہزار - ¤ 00 ہزار - ¤ 00 ہزار - ¤ 0 لاکھ - ¤ 0 لاکھ - ¤ 00 لاکھ - ¤ 00 لاکھ - ¤ 0 کروڑ - ¤ 0 کروڑ - ¤ 00 کروڑ - ¤ 00 کروڑ - ¤ 0 ارب - ¤ 0 ارب - ¤ 00 ارب - ¤ 00 ارب - ¤ 0 کھرب - ¤ 0 کھرب - ¤0 ٹریلین - ¤ 0 ٹریلین - ¤0 ٹریلین - ¤ 0 ٹریلین - ¤ 00 ٹریلین - ¤ 00 ٹریلین - ¤ 000 ٹریلین - ¤ 000 ٹریلین + ¤0 ہزار + ¤ 0 ہزار + ¤0 ہزار + ¤ 0 ہزار + ¤00 ہزار + ¤ 00 ہزار + ¤00 ہزار + ¤ 00 ہزار + ¤0 لاکھ + ¤ 0 لاکھ + ¤0 لاکھ + ¤ 0 لاکھ + ¤00 لاکھ + ¤ 00 لاکھ + ¤00 لاکھ + ¤ 00 لاکھ + ¤0 کروڑ + ¤ 0 کروڑ + ¤0 کروڑ + ¤ 0 کروڑ + ¤00 کروڑ + ¤ 00 کروڑ + ¤00 کروڑ + ¤ 00 کروڑ + ¤0 ارب + ¤ 0 ارب + ¤0 ارب + ¤ 0 ارب + ¤00 ارب + ¤ 00 ارب + ¤00 ارب + ¤ 00 ارب + ¤0 کھرب + ¤ 0 کھرب + ¤0 کھرب + ¤ 0 کھرب + ¤00 کھرب + ¤ 00 کھرب + ¤00 کھرب + ¤ 00 کھرب + ¤00 ٹریلین + ¤ 00 ٹریلین + ¤00 ٹریلین + ¤ 00 ٹریلین + ¤000 ٹریلین + ¤ 000 ٹریلین + ¤000 ٹریلین + ¤ 000 ٹریلین @@ -4366,7 +4460,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ انگولا کا کوانزا - ارجنٹائن پیسہ + ارجنٹائن پیسو + ارجنٹائن پیسو + ارجنٹائن پیسو آسٹریلین ڈالر @@ -4438,7 +4534,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ سوئس فرانکس - چلّین پیسہ + چلین پیسو + چلین پیسو + چلین پیسو چینی یوآن (آف شور) @@ -4447,7 +4545,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ چینی یوآن - کولمبین پیسہ + کولمبین پیسو + کولمبین پیسو + کولمبین پیسو کوسٹا ریکا کا کولن @@ -4665,7 +4765,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ملاوی کواچا - میکسیکی پیسہ + میکسیکی پیسو + میکسیکی پیسو + میکسیکی پیسو ملیشیائی رنگِٹ @@ -4706,8 +4808,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ پاپوآ نیو گنی کا کینا - فلپائینی پیسہ - فلپائینی پیسہ + فلپائنی پیسو + فلپائنی پیسو فلپائنی پیسو PHP @@ -4865,6 +4967,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ مشرقی کریبیا کا ڈالر + + کیریبین گلڈر + کیریبین گلڈر + کیریبین گلڈرز + مغربی افریقی [CFA] فرانک @@ -4890,6 +4997,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ زامبیائی کواچا + + زمبابوے گولڈ + زمبابوے گولڈ + زمبابوے گولڈ + {0} گھنٹہ @@ -5110,8 +5222,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ masculine آئٹمز - - feminine + + پارٹس + {0} پارٹ + {0} پارٹس + + + masculine فی ملین حصے {0} فی ملین حصے {0} فی ملین حصے @@ -5137,6 +5254,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} مول {0} مولز + + گلوکوز کے + {0} گلوکوز کے + {0} گلوکوز کے + masculine لیٹر فی کلومیٹر @@ -5645,6 +5767,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ملی میٹر مرکری {0} ملی میٹر مرکری + + مرکری کے + {0} مرکری کے + {0} مرکری کے + پاؤنڈز فی مربع انچ {0} پاؤنڈ فی مربع انچ @@ -5823,6 +5950,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} میٹرک کپ {0} میٹرک کپ + + میٹرک فلوئیڈ آؤنس + {0} میٹرک فلوئیڈ آؤنس + {0} میٹرک فلوئیڈ آؤنسز + {0} ایکڑ فٹ {0} ایکڑ فٹ @@ -5901,13 +6033,75 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} امپیریئل کوارٹ {0} امپیریئل کوارٹ + + سٹرڈئینز + {0} سٹرڈئین + {0} سٹرڈئینز + + + کاتلز + {0} کاتل + {0} کاتلز + + + کولمبز + {0} کولمب + {0} کولمبز + + + فیراڈ + {0} فیراڈ + {0} فیراڈ + + + ہینریز + {0} ہینری + {0} ہینریز + + + سیمنز + {0} سیمنز + {0} سیمنز + + + کیلوریز [IT] + {0} کیلوری [IT] + {0} کیلوریز [IT] + + + بیکوریل + {0} بیکوریل + {0} بیکوریلز + + + سیورٹس + {0} سیورٹ + {0} سیورٹس + + + گریز + {0} گرے + {0} گریز + + + کلوگرامز فورس + {0} کلوگرم فورس + {0} کلوگرامز فورس + + + ٹیسلاز + {0} ٹیسلا + {0} ٹیسلاز + + + ویبرز + {0} ویبر + {0} ویبرز + feminine - روشنی - {0} روشنی - {0} روشنی - + masculine اجزا فی بلین {0} جزو فی بلین @@ -5915,9 +6109,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ feminine - راتیں - {0} رات - {0} راتیں {0} فی رات @@ -6019,7 +6210,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} آئٹم {0} آئٹمز - + + پارٹ + {0} پارٹ + {0} پارٹ + + حصے/ملین @@ -6036,6 +6232,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} مول {0} مول + + Glc + {0} Glc + {0} Glc + لیٹر/100 کلو میٹر @@ -6308,6 +6509,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} واٹ {0} واٹ + + of Hg + {0} of Hg + {0} of Hg + بار {0} بار @@ -6368,6 +6574,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ سینٹی لیٹر + + {0} fl oz m. + {0} fl oz m. + ایکڑ فٹ @@ -6419,12 +6629,65 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} چٹکی {0} چٹکی + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + روشنی {0} روشنی {0} روشنی - + اجزا/بلین @@ -6493,7 +6756,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ دُنام - + + پارٹ + {0} پارٹ + {0} پارٹ + + ppm @@ -6505,6 +6773,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + Glc + {0} Glc + {0} Glc + {0}L/100km {0}L/100km @@ -6651,6 +6924,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}hp {0}hp + + of Hg + {0} of Hg + {0} of Hg + ″ Hg {0} انچ مرکری @@ -6745,21 +7023,43 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}fl.dr. {0}fl.dr. - - روشنی - {0} روشنی - {0} روشنی + + {0} sr + {0} sr - + + {0} kat + {0} kat + + + cal-IT + {0} cal-IT + {0} cal-IT + + + {0} Sv + {0} Sv + + + {0} Gy + {0} Gy + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + {0}ppb {0}ppb - - راتیں - {0} رات - {0} راتیں - {0}/رات - diff --git a/make/data/cldr/common/main/ur_IN.xml b/make/data/cldr/common/main/ur_IN.xml index e5a965fba35..e9cb92998d3 100644 --- a/make/data/cldr/common/main/ur_IN.xml +++ b/make/data/cldr/common/main/ur_IN.xml @@ -481,8 +481,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤ #,##,##0.00 - #,##,##0.00 + #,##0.00 diff --git a/make/data/cldr/common/main/uz.xml b/make/data/cldr/common/main/uz.xml index af0dbd54840..99ca6fb6ee8 100644 --- a/make/data/cldr/common/main/uz.xml +++ b/make/data/cldr/common/main/uz.xml @@ -44,6 +44,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ozarbayjon ozar boshqird + baluj bali basa belarus @@ -230,6 +231,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ bafiya kyoln kurdcha + kurd + kurmanji qo‘miq komi korn @@ -467,7 +470,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tamazigxt xitoy xitoy, mandarin - zh_Hans xitoy (soddalashtirilgan mandarin) xitoy (an’anaviy) xitoy (an’anaviy mandarin) @@ -624,6 +626,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Xitoy Kolumbiya Klipperton oroli + Sark Kosta-Rika Kuba Kabo-Verde @@ -857,43 +860,83 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ valyuta formati saralash tartibi valyuta + emoji namoyishi soat tizimi (12 yoki 24) qatorni uzish uslubi + so‘z ko‘chirish uslubi o‘lchov tizimi raqamlar + qisqartirilgandan keyin gapning uzilishi buddizm taqvimi + buddist xitoy taqvimi + xitoy qibtiy taqvim + qibtiy dangi taqvimi + dangi habash taqvimi + habash Amete Alem habash taqvimi + Amete Alem habash grigorian taqvimi + grigorian yahudiy taqvimi + yahudiy hijriy taqvim + hijriy jadvalli hijriy taqvim + jadvalli hijriy jadvalli hijriy taqvim (astronomik davr) + jadvalli hijriy (atronomik davr) hijriy taqvim (Ummul Quro) + hijriy (Ummul Quro) ISO-8601 taqvimi yapon taqvimi + yapon fors taqvimi + fors mingo taqvimi + mingo moliyaviy valyuta formati + moliyaviy standart valyuta formati + standart standart Unicode saralash tartibi + standart Unicode qidiruv + qidiruv standart saralash tartibi + standart + birlamchi + emoji + matn 12 soatlik tizim (0–11) + 12 (0–11) 12 soatlik tizim (1–12) + 12 (1–12) 24 soatlik tizim (0–23) + 24 (0–23) 24 soatlik tizim (1–24) + 24 (1–24) qatorni yumshoq uzish + yumshoq qatorni odatiy uzish + odatiy qatorni qat’iy uzish + qatʼiy + hammasini koʻchirish + hammasini saqlash + oddiy uslub + iboralarda saqlash metrik tizim + metrik Britaniya o‘lchov tizimi + Birlashgan Qirollik AQSH o‘lchov tizimi + AQSH arab-hind raqamlari kengaytirilgan arab-hind raqamlari arman raqamlari @@ -934,6 +977,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ tay raqamlari tibet raqamlari vay raqamlari + oʻchiq + yoniq Metrik @@ -1049,9 +1094,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h:mm–h:mm B h:mm – h:mm - - G y – G y - M/y (GGGGG) – M/y (GGGGG) M/y – M/y (GGGGG) @@ -1376,17 +1418,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h B h:mm B h:mm:ss + E, B h E, B h:mm E, B h:mm:ss + E, h a E, h:mm a E, HH:mm E, h:mm:ss a E, HH:mm:ss + MM-y G dd.MM.y GGGGG + E, dd-MM-y G MMM, G y d-MMM, G y E, d-MMM, G y - h a h:mm a h:mm:ss a h:mm:ss a (v) @@ -1423,9 +1468,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B h:mm – h:mm B h:mm – h:mm - - G y – G y - M/y (G) – M/y (G) M/y – M/y (G) @@ -1460,10 +1502,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d-MMM – E, d-MMM, G y E, d-MMM, y – E, d-MMM, y (G) - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1574,36 +1612,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zulhijja - - - Muh. - Saf. - Rab. avv. - Rab. son. - Jum. avv. - Jum. son. - Raj. - Sha. - Ram. - Shav. - Zulq. - Zulh. - - - Muharram - Safar - Rabiʼul avval - Rabiʼus soniy - Jumodul avval - Jumodus soniy - Rajab - Sha’bon - Ramazon - Shavvol - Zulqaʼda - Zulhijja - - @@ -1947,9 +1955,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Angilya - - Tirana - Rotera @@ -2392,9 +2397,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pnompen - - Enderberi oroli - Tarava @@ -2828,9 +2830,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Gʻarbiy Afrika vaqti - Gʻarbiy Afrika standart vaqti - Gʻarbiy Afrika yozgi vaqti + Gʻarbiy Afrika vaqti @@ -3180,6 +3180,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Gayana vaqti + + + Gavayi-aleut standart vaqti + + Gavayi-aleut vaqti @@ -3753,13 +3758,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + ¤ #,##0.00;(¤ #,##0.00) + + + #,##0.00 ¤ + #,##0.00 ¤ ¤#,##0.00;(¤#,##0.00) + ¤ #,##0.00;(¤ #,##0.00) #,##0.00;(#,##0.00) @@ -4276,6 +4290,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sharqiy Karib dollari + + Karib guldeni + Karib guldeni + Karib guldeni + G‘arbiy Afrika CFA franki @@ -4296,6 +4315,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Zambiya kvachasi + + Zimbabve oltini + Zimbabve oltini + Zimbabve oltini + Bu jildda {0} ta fayl bor. Uni oʻchirib tashlaysizmi? @@ -4498,6 +4522,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ elementlar + + qism + {0} qismi + {0} qismi + + + {0} milliondan ulush + {0} milliondan ulush + {0} foiz {0} foiz @@ -4510,6 +4543,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} promiriada {0} promiriada + + glyukoza + {0} glyukoza + {0} glyukoza + litr/kilometr {0} litr/kilometr @@ -4872,6 +4910,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mm simob ustuni {0} mm simob ustuni + + simob + {0} simob + {0} simob + funt/duym kvadrat {0} funt/duym kvadrat @@ -5003,6 +5046,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} metrik piyola {0} metrik piyola + + metrik suyuqlik unsiyasi + {0} metrik suyuqlik unsiyasi + {0} metrik suyuqlik unsiyasi + gallon {0} gallon @@ -5019,29 +5067,85 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ingliz suyuq unsiyasi {0} ingliz suyuq unsiyasi - - imp. desert qoshiq - {0} imp. desert qoshiq - {0} imp. desert qoshiq - draxma {0} draxma {0} draxma - - imp.kvarta + + steradian + {0} steradian + {0} steradian - - qism/milliard - {0} ta qism/milliard - {0} ta qism/milliard + + katal + {0} katal + {0} katal - - kecha - {0} kecha - {0} kecha - {0}/kecha + + kulon + {0} kulon + {0} kulon + + + farad + {0} farad + {0} farad + + + genri + {0} genri + {0} genri + + + simens + {0} simens + {0} simens + + + kaloriya-IT + {0} kaloriya-IT + {0} kaloriya-IT + + + bekkerel + {0} bekkerel + {0} bekkerel + + + zivert + {0} zivert + {0} zivert + + + Grey + {0} grey + {0} grey + + + kilogramm-kuch + {0} kilogramm-kuch + {0} kilogramm-kuch + + + tesla + {0} tesla + {0} tesla + + + veber + {0} veber + {0} veber + + + yorug‘lik + {0} yorug‘lik tezligi + {0} yorug‘lik tezligi + + + milliarddan ulush + {0} milliarddan ulush + {0} milliarddan ulush {0} sharqiy uzunlik @@ -5138,7 +5242,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} element {0} ta element - + + qism + {0} qismi + {0} qismi + + milliondan ulush @@ -5150,6 +5259,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ promiriada + + Glk + {0} Glk + {0} Glk + litr/km @@ -5542,6 +5656,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mmHg {0} mmHg + + {0} Hg + {0} Hg + funt/dy.kv {0} funt/dy.kv @@ -5716,10 +5834,69 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} imp. kvarta {0} imp. kvarta - - qism/milliard - {0} ta qism/mlrd - {0} ta qism/mlrd + + {0} sr + {0} sr + + + {0} kat + {0} kat + + + {0} C + {0} C + + + {0} F + {0} F + + + {0} H + {0} H + + + {0} S + {0} S + + + kal-IT + {0} kal-IT + {0} kal-IT + + + {0} Bq + {0} Bq + + + {0} Sv + {0} Sv + + + Gr + {0} Gr + {0} Gr + + + {0} kgf + {0} kgf + + + {0} T + {0} T + + + {0} Wb + {0} Wb + + + yorug‘lik + {0} yorug‘lik + {0} yorug‘lik + + + milliarddan ulush + {0} ppb + {0} ppb kecha @@ -5760,7 +5937,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} ft² {0} ft² - + + qism + {0} qismi + {0} qismi + + ppm {0}ppm {0}ppm @@ -5768,6 +5950,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ % + + Glk + {0} Glk + {0} Glk + {0}L/100km {0}L/100km @@ -5815,6 +6002,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} o.k. {0} hp + + {0} Hg + {0} Hg + {0} mi/h {0} mi/h @@ -5831,22 +6022,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}L {0}L - - {0} imp. desert qoshiq - {0} imp. desert qoshiq + + kal-IT + {0} kal-IT + {0} kal-IT - - imp.kvarta + + Gr + {0} Gr + {0} Gr - - qism/milliard - {0} ta qism/mlrd - {0} ta qism/mlrd + + yorug‘lik + {0} yorug‘lik + {0} yorug‘lik + + + ppb + {0}ppb + {0}ppb - kecha - {0} kecha - {0} kecha {0}/nkecha diff --git a/make/data/cldr/common/main/uz_Arab.xml b/make/data/cldr/common/main/uz_Arab.xml index c69396e1118..739972de648 100644 --- a/make/data/cldr/common/main/uz_Arab.xml +++ b/make/data/cldr/common/main/uz_Arab.xml @@ -215,6 +215,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/uz_Cyrl.xml b/make/data/cldr/common/main/uz_Cyrl.xml index 6def99fbf5a..5e12f439c3b 100644 --- a/make/data/cldr/common/main/uz_Cyrl.xml +++ b/make/data/cldr/common/main/uz_Cyrl.xml @@ -1290,9 +1290,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Ғарбий Африка вақти - Ғарбий Африка стандарт вақти - Ғарбий Африка ёзги вақти + Ғарбий Африка вақти @@ -1630,6 +1628,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Гайана вақти + + + Гавайи-алеут стандарт вақти + + Гавайи-алеут вақти @@ -2182,38 +2185,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + #,##0.00 ¤ + + + #,##0.00 ¤ + + + #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ - ¤ 0минг - ¤ 0минг - ¤ 00минг - ¤ 00минг - ¤ 000минг - ¤ 000минг - ¤ 0млн - ¤ 0млн - ¤ 00млн - ¤ 00млн - ¤ 000млн - ¤ 000млн - ¤ 0млрд - ¤ 0млрд - ¤ 00млрд - ¤ 00млрд - ¤ 000млрд - ¤ 000млрд - ¤ 0трлн - ¤ 0трлн - ¤ 00трлн - ¤ 00трлн - ¤ 000трлн - ¤ 000трлн + 0минг ¤ + 0минг ¤ + 00минг ¤ + 00минг ¤ + 000минг ¤ + 000минг ¤ + 0млн ¤ + 0млн ¤ + 00млн ¤ + 00млн ¤ + 000млн ¤ + 000млн ¤ + 0млрд ¤ + 0млрд ¤ + 00млрд ¤ + 00млрд ¤ + 000млрд ¤ + 000млрд ¤ + 0трлн ¤ + 0трлн ¤ + 00трлн ¤ + 00трлн ¤ + 000трлн ¤ + 000трлн ¤ {0} {1} diff --git a/make/data/cldr/common/main/vec.xml b/make/data/cldr/common/main/vec.xml index df905e32262..b73420ede1a 100644 --- a/make/data/cldr/common/main/vec.xml +++ b/make/data/cldr/common/main/vec.xml @@ -1028,6 +1028,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic lunaro etiòpego lunaro etiòpego (amete alem) lunaro gregorian + gregorian lunaro ebràego lunaro izlàmego lunaro izlàmego (tabular) @@ -1041,6 +1042,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic òrdane predefenìo Unicode reserca jenèrega òrdane standard + standard sistema a 12 ore (0–11) sistema a 12 ore (1–12) sistema a 24 ore (0–23) @@ -1141,6 +1143,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'le' {0} + + {1} 'a' 'le' {0} + @@ -1149,6 +1154,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'a' 'le' {0} + + {1} 'a' 'le' {0} + @@ -1163,10 +1171,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic E d y G + MM/y GGGGG dd/MM/y GGGGG + E dd/MM/y GGGGG MMM y G d MMM y G E d MMM y G + 'h'HH v dd/MM E dd/MM d MMM @@ -1502,7 +1513,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic E d y G + MM/y G dd/MM/y G + E dd/MM/y G MMM y G d MMM y G E d MMM y G @@ -1510,6 +1523,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH:mm:ss (v) h:mm a (v) HH:mm (v) + 'h'HH v dd/MM E dd/MM d MMM @@ -2301,6 +2315,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic UTC{0} UTC + UTC+? Ora {0} Ora d’istà {0} Ora normale {0} @@ -2584,7 +2599,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Pnom Pen - + Atolo Canton @@ -3008,9 +3023,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Ora de l’Àfrega osidentale - Ora normale de l’Àfrega osidentale - Ora d’istà de l’Àfrega osidentale + Ora de l’Àfrega osidentale @@ -3360,6 +3373,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ora de la Guyana + + + Ora normale de Hawai e Aleutine + + Ora de Hawai e Aleutine @@ -3927,34 +3945,38 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ 0 - 0 - 0 - 0 - 0 - 0 - 0 mln ¤ - 0 mln ¤ - 00 mln ¤ - 00 mln ¤ - 000 mln ¤ - 000 mln ¤ - 0 mld ¤ - 0 mld ¤ - 00 mld ¤ - 00 mld ¤ - 000 mld ¤ - 000 mld ¤ - 0 bln ¤ - 0 bln ¤ - 00 bln ¤ - 00 bln ¤ - 000 bln ¤ - 000 bln ¤ + 0 mila ¤ + 00 mila ¤ + 00 mila ¤ + 000 mila ¤ + 000 mila ¤ + 0 mln ¤ + 0 mln ¤ + 00 mln ¤ + 00 mln ¤ + 000 mln ¤ + 000 mln ¤ + 0 mld ¤ + 0 mld ¤ + 00 mld ¤ + 00 mld ¤ + 000 mld ¤ + 000 mld ¤ + 0 bln ¤ + 0 bln ¤ + 00 bln ¤ + 00 bln ¤ + 000 bln ¤ + 000 bln ¤ {0} ¤¤ @@ -4737,6 +4759,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic dòlari caraìbeghi XCD + + fiorin caraìbego + fiorin caraìbego + fiorini caraìbeghi + Cf + franco CFA de l’Àfrega osidentale franco CFA de l’Àfrega osidentale @@ -4769,6 +4797,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic kwacha zanbian kwacha zanbiani + + oro de Zimbabwe + oro de Zimbabwe + ori de Zimbabwe + {0}-{1} diff --git a/make/data/cldr/common/main/vi.xml b/make/data/cldr/common/main/vi.xml index 3f709432953..fa08b4ff0b5 100644 --- a/make/data/cldr/common/main/vi.xml +++ b/make/data/cldr/common/main/vi.xml @@ -57,7 +57,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tiếng Azerbaijan Tiếng Azeri Tiếng Bashkir - Tiếng Baluchi + Tiếng Baloch Tiếng Bali Tiếng Bavaria Tiếng Basaa @@ -312,6 +312,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tiếng Bafia Tiếng Cologne Tiếng Kurd + Tiếng Kurd + Tiếng Kurmanji Tiếng Kumyk Tiếng Kutenai Tiếng Komi @@ -412,7 +414,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tiếng Na Uy cổ Tiếng N’Ko Tiếng Ndebele Miền Nam - Tiếng Sotho Miền Bắc + Tiếng Bắc Sotho Tiếng Nuer Tiếng Navajo Tiếng Newari cổ @@ -515,7 +517,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Tiếng Serer Tiếng Swati Tiếng Saho - Tiếng Sotho Miền Nam + Tiếng Nam Sotho Tiếng Straits Salish Tiếng Sunda Tiếng Sukuma @@ -833,7 +835,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Argentina Samoa thuộc Mỹ Áo - Australia + Úc Aruba Quần đảo Åland Azerbaijan @@ -874,6 +876,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Trung Quốc Colombia Đảo Clipperton + Sark Costa Rica Cuba Cape Verde @@ -1166,35 +1169,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sắp xếp theo số Cường độ sắp xếp Tiền tệ + Trình bày emoji Chu kỳ giờ (12 với 24) Kiểu xuống dòng + Ngắt dòng trong từ Hệ thống đo lường Số + Ngắt câu sau khi viết tắt. Múi giờ Biến thể ngôn ngữ Sử dụng cá nhân Lịch Phật Giáo + Phật giáo Lịch Trung Quốc + Trung Quốc Lịch Copts + Copts Lịch Dangi + Dangi Lịch Ethiopia + Ethiopic Lịch Ethiopic Amete Alem + Ethiopic Amete Alem Lịch Gregory + Gregory Lịch Do Thái + Do Thái Lịch Quốc gia Ấn Độ Lịch Hồi Giáo + Hồi giáo Lịch Hồi Giáo (dạng bảng, kỷ nguyên dân sự) + Hồi giáo (dạng bảng, kỷ nguyên dân sự) Lịch Hồi Giáo - Ả Rập Xê-út Lịch Hồi Giáo - Thiên văn Lịch Hồi Giáo (Umm al-Qura) + Hồi giáo (Umm al-Qura) Lịch ISO-8601 Lịch Nhật Bản + Nhật Bản Lịch Ba Tư + Ba Tư Lịch Trung Hoa Dân Quốc + Trung Hoa Dân Quốc Định dạng tiền tệ kế toán + Kế toán Định dạng tiền tệ chuẩn + Chuẩn Sắp xếp biểu tượng Sắp xếp biểu tượng bỏ qua Sắp xếp dấu trọng âm bình thường @@ -1204,23 +1226,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Sắp xếp chữ hoa đầu tiên Sắp xếp không phân biệt chữ hoa/chữ thường Sắp xếp phân biệt chữ hoa/chữ thường - Thứ tự sắp xếp theo tiếng Trung phồn thể - Big5 Thứ tự sắp xếp trước đây, để tương thích + Khả năng tương thích Thứ tự sắp xếp theo từ điển + Từ điển Thứ tự sắp xếp unicode mặc định + Unicode mặc định Thứ tự sắp xếp biểu tượng Quy tắc sắp xếp Châu Âu - Thứ tự sắp xếp theo tiếng Trung giản thể - GB2312 Thứ tự sắp xếp theo danh bạ điện thoại + Danh bạ điện thoại Thứ tự sắp xếp theo ngữ âm + Ngữ âm Thứ tự sắp xếp theo bính âm + Bính âm Tìm kiếm mục đích chung + Tìm kiếm Tìm kiếm theo Phụ âm Đầu Hangul Thứ tự sắp xếp chuẩn + Chuẩn Thứ tự sắp xếp theo nét chữ + Nét chữ Thứ tự sắp xếp truyền thống + Truyền thống Trình tự sắp xếp theo bộ-nét + Bộ-nét Thứ tự sắp xếp theo chú âm phù hiệu + Chú âm phù hiệu Sắp xếp không theo chuẩn hóa Sắp xếp unicode được chuẩn hóa Sắp xếp từng chữ số @@ -1233,18 +1265,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Độ rộng tối đa Nửa độ rộng Số + Mặc định + Emoji + Văn bản Hệ thống 12 giờ (0–11) + 12 (0–11) Hệ thống 12 giờ (1–12) + 12 (1–12) Hệ thống 24 giờ (0–23) + 24 (0–23) Hệ thống 24 giờ (1–24) + 24 (1–24) Kiểu xuống dòng thoáng + Thoáng Kiểu xuống dòng thường + Bình thường Kiểu xuống dòng hẹp + Hẹp + Ngắt tất cả + Giữ tất cả + Bình thường + Giữ trong cụm từ Chuyển tự US BGN Chuyển tự UN GEGN Hệ mét + Mét Hệ đo lường Anh + Anh Hệ đo lường Mỹ + Mỹ Chữ số Ahom Chữ số Ả Rập - Ấn Độ Chữ số Ả Rập - Ấn Độ mở rộng @@ -1326,6 +1375,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Chữ số Vai Chữ số Wara Chữ số Wancho + Tắt + Bật Hệ mét @@ -1352,9 +1403,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] @@ -1597,6 +1645,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h 'giờ' B + h 'giờ' B E h:mm B E h:mm:ss B E E, 'ngày' d @@ -1706,69 +1755,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h B – h B h – h B - - h:mm B – h:mm B - - - h a – h a - h:mm a – h:mm a h:mm a – h:mm a v - - h a – h a v - h–h a v - - - MM-dd – MM-dd - MM-dd – MM-dd - - - MM-dd, E – MM-dd, E - MM-dd, E – MM-dd, E - - - MMM d – MMM d - - - MMM d, E – MMM d, E - MMM d, E – MMM d, E - - - y-MM – y-MM - y-MM – y-MM - - - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - - - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - - - U MMM – U MMM - - - U MMM d – MMM d - U MMM d – U MMM d - - - U MMM d, E – MMM d, E - U MMM d, E – MMM d, E - U MMM d, E – U MMM d, E - - - U MMMM – U MMMM - @@ -1828,6 +1822,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 'lúc' {0} {1} + + 'lúc' {0} {1} + @@ -1836,6 +1833,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 'lúc' {0} {1} + + 'lúc' {0} {1} + @@ -1849,22 +1849,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h 'giờ' B + h 'giờ' B E h:mm B E h:mm:ss B E E, 'ngày' d + h a E h:mm a E HH:mm E h:mm:ss a E HH:mm:ss E y G + M/y G d/M/y GGGGG + E d/M/y G MMM y G d MMM, y G E, d MMM, y G - h a HH 'giờ' h:mm a h:mm:ss a + h 'giờ' a v d/M E, d/M dd-MM @@ -1891,7 +1895,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h – h 'giờ' B - h:mm B – h:mm B h:mm – h:mm B h:mm – h:mm B @@ -2084,12 +2087,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ CN - Th 2 - Th 3 - Th 4 - Th 5 - Th 6 - Th 7 + Thứ 2 + Thứ 3 + Thứ 4 + Thứ 5 + Thứ 6 + Thứ 7 CN @@ -2253,6 +2256,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 'lúc' {0} {1} + + 'lúc' {0} {1} + @@ -2261,6 +2267,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 'lúc' {0} {1} + + 'lúc' {0} {1} + @@ -2274,25 +2283,29 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h 'giờ' B + h 'giờ' B E h:mm B E h:mm:ss B E E, 'ngày' d + h 'giờ' a E h:mm a E HH:mm E h:mm:ss a E HH:mm:ss E y G + M/y G d/M/y G + E, d/M/y G MMM y G d MMM, y G E, d MMM, y G - h a HH 'giờ' h:mm a H:mm h:mm:ss a h:mm:ss a v h:mm a v + h 'giờ' a v d/M E, d/M dd-MM @@ -2364,10 +2377,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E, d MMM – E, d MMM y G E, d MMM y – E, d MMM y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -2378,10 +2387,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - 'Tháng' M – M @@ -2818,11 +2823,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Giờ mùa hè {0} Giờ chuẩn {0} - - Giờ HST - HST - HDT - Honolulu @@ -2859,7 +2859,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Đảo Man - Enderbury + Đảo Canton Bình Nhưỡng @@ -2938,9 +2938,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Giờ Tây Phi - Giờ Chuẩn Tây Phi - Giờ Mùa Hè Tây Phi + Giờ Tây Phi @@ -3358,6 +3356,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Giờ Guyana + + + Giờ Chuẩn Hawaii-Aleut + + + HAST + + Giờ Hawaii-Aleut @@ -3813,6 +3819,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Giờ Chuuk + + + Giờ Thổ Nhĩ Kỳ + Giờ Chuẩn Thổ Nhĩ Kỳ + Giờ Mùa Hè Thổ Nhĩ Kỳ + + Giờ Turkmenistan @@ -3944,10 +3957,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ #,##0.00 ¤ - #,##0.00 + #,##0.00 ¤ - #,##0.00;(#,##0.00) + #,##0.00 ¤ + #,##0.00 @@ -4572,7 +4586,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Rupee Maldives (1947–1981) - Rupee Maldives (1947–1981) Rufiyaa Maldives @@ -4928,6 +4941,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Đô la Đông Caribê đô la Đông Caribê + + Guilder Caribe + Guilder Caribe + Quyền Rút vốn Đặc biệt @@ -5007,6 +5024,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Đồng Đô la Zimbabwe (1980–2008) + + Zimbabwean Gold + Zimbabwean Gold + Đồng Đô la Zimbabwe (2009) @@ -5186,9 +5207,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ carat {0} carat + + phần + {0} phần + + + phần triệu + {0} phần triệu + {0} phần vạn + + {0} glucose + lít/km {0} lít/km @@ -5487,6 +5519,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milimét thủy ngân {0} milimét thủy ngân + + thuỷ ngân + {0} thuỷ ngân + pound/inch vuông {0} pound/inch vuông @@ -5619,6 +5655,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ cup khối {0} cup khối + + ao-xơ chất lỏng hệ mét + {0} ao-xơ chất lỏng hệ mét + gallon {0} gallon @@ -5648,14 +5688,64 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ dram {0} dram - - phần tỷ - {0} phần tỷ + + steradian + {0} steradian - - đêm - {0} đêm - {0}/đêm + + katal + {0} katal + + + coulomb + {0} coulomb + + + fara + {0} fara + + + henry + {0} henry + + + siemen + {0} siemen + + + calo [IT] + {0} calo [IT] + + + becquerel + {0} becquerel + + + sievert + {0} sievert + + + gray + {0} gray + + + lực kilôgam + {0} lực kilôgam + + + tesla + {0} tesla + + + weber + {0} weber + + + ánh sáng + {0} ánh sáng + + + {0} phần tỷ phương trời @@ -5693,9 +5783,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mục {0} mục + + phần + {0} phần + + + phần triệu + {0} phần triệu + phần vạn + + Glc + {0} Glc + l/km {0} l/km @@ -5881,6 +5983,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ W + + of Hg + {0} of Hg + {0} mph @@ -5889,6 +5995,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} L {0}/L + + {0} fl oz m. + gal {0} gal @@ -5946,8 +6055,53 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ lít Anh {0} lít Anh - + + {0} sr + + + {0} kat + + + {0} C + + + {0} F + + + {0} H + + + {0} S + + + cal-IT + {0} cal-IT + + + {0} Bq + + + {0} Sv + + + {0} Gy + + + {0} kgf + + + {0} T + + + {0} Wb + + + ánh sáng + {0} ánh sáng + + phần tỷ + {0} phần tỷ đêm @@ -5969,9 +6123,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}ha + + phần + {0} phần + + + phần triệu + {0} phần triệu + + + Glc + {0} Glc + PB @@ -5979,9 +6145,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ B {0} B - - {0}miligiây - eV @@ -6046,6 +6209,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}hp + + of Hg + {0} of Hg + {0}" Hg @@ -6062,19 +6229,61 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}L {0}/l + + {0} fl oz m. + {0}/gal {0} fl ozIm - - {0}ppb + + {0} sr - - đêm - {0} đêm - {0}/đêm + + {0} kat + + + {0} C + + + {0} F + + + {0} H + + + {0} S + + + cal-IT + {0} cal-IT + + + {0} Bq + + + {0} Sv + + + {0} Gy + + + {0} kgf + + + {0} T + + + {0} Wb + + + ánh sáng + {0} ánh sáng + + + {0} phần tỷ @@ -6141,7 +6350,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mũi tên hướng xuống mũi tên lên xuống chữ viết Đông Á - biểu tượng + biểu tượng cảm xúc chữ viết Châu Âu nữ cờ diff --git a/make/data/cldr/common/main/vmw.xml b/make/data/cldr/common/main/vmw.xml index 0ee0670414f..f232efec747 100644 --- a/make/data/cldr/common/main/vmw.xml +++ b/make/data/cldr/common/main/vmw.xml @@ -80,7 +80,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic d MMM y - {0} ‘mpakha’ {1} + {0} mpakha {1} @@ -106,6 +106,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/vo.xml b/make/data/cldr/common/main/vo.xml index 94fd4835ca3..3a121014dc1 100644 --- a/make/data/cldr/common/main/vo.xml +++ b/make/data/cldr/common/main/vo.xml @@ -78,7 +78,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - GGGGG y-MM-dd + G y-MM-dd diff --git a/make/data/cldr/common/main/wae.xml b/make/data/cldr/common/main/wae.xml index ac04028d196..9009f112dbf 100644 --- a/make/data/cldr/common/main/wae.xml +++ b/make/data/cldr/common/main/wae.xml @@ -1354,7 +1354,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic , - + ' {0} {1} diff --git a/make/data/cldr/common/main/wal.xml b/make/data/cldr/common/main/wal.xml index 70297ce0897..9be1f34aa0e 100644 --- a/make/data/cldr/common/main/wal.xml +++ b/make/data/cldr/common/main/wal.xml @@ -340,7 +340,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ethi - + ' diff --git a/make/data/cldr/common/main/wo.xml b/make/data/cldr/common/main/wo.xml index 5b75bfa0907..ba992d3bdf3 100644 --- a/make/data/cldr/common/main/wo.xml +++ b/make/data/cldr/common/main/wo.xml @@ -15,7 +15,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Afrikaans Amharik Arabic - Araab Asame Aserbayjane Baskir @@ -277,6 +276,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Siin Kolombi Ile Clipperton + Guernsey Pound Kosta Rika Kuba Kabo Werde @@ -494,8 +494,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Arminaatu Gregoriyee + Gregorian ISO-8601 Calendar SSO (Toftalin wiñ gën a xam) + Njàng miir Siifari Tugal @@ -767,7 +769,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM, y G d MMM, y G E, d MMM, y G - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1238,9 +1239,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Waxtu sowwu Afrique - Waxtu buñ miin ci sowwu Afrique - Afrique du sowwu jant + Waxtu sowwu Afrique @@ -1590,6 +1589,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Waxtu Guyana + + + Waxtu buñ jagleel Hawaii-Aleutian + + Waxtu Hawaii-Aleutian @@ -2121,18 +2125,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic - ¤0K - ¤00K - ¤000K - ¤0M - ¤00M - ¤000M - ¤0B - ¤00B - ¤000B - ¤0T - ¤00T - ¤000T + ¤ 0K + ¤ 00K + ¤ 000K + ¤ 0M + ¤ 00M + ¤ 000M + ¤ 0B + ¤ 00B + ¤ 000B + ¤ 0T + ¤ 00T + ¤ 000T @@ -2199,7 +2203,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Burundian Franc - Burundian francs Vote BMD @@ -2207,7 +2210,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Brunei Dollar - Brunei dollars Bolivian Boliviano @@ -2223,7 +2225,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bhutanese Ngultrum - Bhutanese ngultrums Botswanan Pula @@ -2235,7 +2236,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Belize Dollar - Belize dollars Vote CAD @@ -2268,7 +2268,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Costa Rican Colón - Costa Rican colóns Cuban Convertible Peso @@ -2309,7 +2308,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Eritrean Nakfa - Eritrean nakfas Ethiopian Birr @@ -2317,7 +2315,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Euro - euro Fijian Dollar @@ -2333,7 +2330,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Georgian Lari - Georgian laris Ghanaian Cedi @@ -2422,7 +2418,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kenyan Shilling - Kenyan shillings Kyrgystani Som @@ -2434,7 +2429,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Comorian Franc - Comorian francs North Korean Won @@ -2466,7 +2460,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Sri Lankan Rupee - Sri Lankan rupees Liberian Dollar @@ -2482,7 +2475,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Moroccan dirhams - Moroccan dirhams Moldovan Leu @@ -2515,15 +2507,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic Mauritian Rupee - Mauritian rupees Maldivian Rufiyaa - Maldivian rufiyaas Malawian Kwacha - Malawian kwachas Mexican Peso @@ -2556,7 +2545,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nepalese Rupee - Nepalese rupees New Zealand Dollar @@ -2580,11 +2568,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Philippine Peso - Philippine pesos Pakistani Rupee - Pakistani rupees Polish Zloty @@ -2637,7 +2623,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Singapore Dollar - Singapore dollars St. Helena Pound @@ -2677,7 +2662,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Thai Baht - Thai baht Tajikistani Somoni @@ -2697,7 +2681,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Turkish Lira - Turkish Lira Trinidad & Tobago Dollar @@ -2756,6 +2739,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic East Caribbean Dollar East Caribbean dollars + + Gildiye Karayib + Gildiye Karayib + Franc CFA bu Afrik Sowwu-jant Franc CFA yu Afrik Sowwu-jant @@ -2766,11 +2753,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Xaalis buñ Xamul - (xaalis buñ xamul) Yemeni Rial - Yemeni rials South African Rand @@ -2780,6 +2765,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Zambian Kwacha Zambian kwachas + + Zimbabwean ZiG + Zimbabwean ZiG + ⩾{0} diff --git a/make/data/cldr/common/main/xh.xml b/make/data/cldr/common/main/xh.xml index e4dec18f57d..3bd9a1e8b15 100644 --- a/make/data/cldr/common/main/xh.xml +++ b/make/data/cldr/common/main/xh.xml @@ -16,21 +16,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic IsiAmharic Isi-Arabhu Isi-Arabhu (Sale mihla) - isiAssamese - Isi-Azerbaijani - Isi-Belarusian - Isi-Bulgaria + IsiAssamese + Isi-Azerbaijani + Isi-Belarusian + Isi-Bulgaria IsiBangla - Breton - Isi-Bosnia - Isi-Calatan - Isi-Czech - Isi-Welsh - Isi-Danish + IsiBreton + Isi-Bosnia + Isi-Calatan + Isi-Czech + Isi-Welsh + Isi-Danish IsiJamani IsiJamani Sase-Austria IsiJamani Esiyi-High Swiss - Isi-Greek + Isi-Greek IsiNgesi IsiNgesi Sase-Australia IsiNgesi SaseKhanada @@ -38,99 +38,99 @@ CLDR data files are interpreted according to the LDML specification (http://unic IsiNgesi sase-UK Isingesi SaseMelika IsiNgesi Sase-US - Isi-Esperanto + Isi-Esperanto Isi-Spanish IsiSpanish SaseLatin America IsiSpanish SaseYurophu IsiSpanish SaseMexico - Isi-Estonian - Isi-Basque - Isi-Persia - Isi-Finnish - Isi-Taglog - Isi-Faroese + Isi-Estonian + Isi-Basque + Isi-Persia + Isi-Finnish + Isi-Taglog + Isi-Faroese IsiFrentshi IsiFrentshi SaseKhanada IsiFrentshi SaseSwitzerland - Isi-Frisian - Isi-Irish - Scots Gaelic - Isi-Galician + Isi-Frisian + Isi-Irish + Scots Gaelic + Isi-Galician Guarani - Isi-Gujarati - Isi-Hebrew + Isi-Gujarati + Isi-Hebrew IsiHindi IsiHindi (Latin) IsiHinglish - Isi-Croatia - Isi-Hungarian - isiArmenian - Interlingua + Isi-Croatia + Isi-Hungarian + IsiArmenia + Isi-Interlingua Isi-Indonesia - isiInterlingue - Isi-Icelandic + Isi-Interlingue + Isi-Icelandic IsiTaliyane IsiJapan - Isi-Javanese - Isi-Georgia - isiCambodia - Isi-Kannada + Isi-Javanese + Isi-Georgia + IsiCambodia + Isi-Kannada Isi-Korean - Kurdish - Kyrgyz + IsiKurdish + IsiKyrgz Isi-Latin Iilwimi - IsiLoathian - Isi-Lithuanian - Isi-Latvian - Isi-Macedonian - Isi-Malayalam - IsiMongolian - Isi-Marathi - Isi-Malay - Isi-Maltese - Isi-Nepali + IsiLoathian + Isi-Lithuanian + Isi-Latvian + Isi-Macedonian + Isi-Malayalam + IsiMongolian + Isi-Marathi + Isi-Malay + Isi-Maltese + Isi-Nepali IsiDatshi IsiFlemish - Isi-Norwegia (Nynorsk) - Isi-Norwegian - Iso-Occitan - Oriya - Isi-Punjabi + Isi-Norwegia (Nynorsk) + Isi-Norwegian + Iso-Occitan + Oriya + Isi-Punjabi Isi-Polish - Pashto + IsiPashto IsiPhuthukezi IsiPhuthukezi SaseBrazil IsiPhuthukezi SasePortugal - Isi-Romanian + Isi-Romanian Isi-Russian - iSanskrit - isiSindhi + IsiSanskrit + IsiSindhi Serbo-Croatian - Isi-Sinhalese - Isi-Slovak - Isi-Slovenian - IsiSomaliya + Isi-Sinhalese + Isi-Slovak + Isi-Slovenian + IsiSomaliya IsiAlbania - Isi-Serbia - Sesotho - Isi-Sudanese - Isi-Swedish - Isi-Swahili - Isi-Tamil - Isi-Telegu + Isi-Serbia + Sesotho + Isi-Sudanese + Isi-Swedish + Isi-Swahili + Isi-Tamil + Isi-Telegu Isi-Thai - Isi-Tigrinya - Turkmen + Isi-Tigrinya + IsiTurkmen Klingon Isi-Turkish Twi - Isi Uighur - Isi-Ukranian - Unknown language - Urdu - Isi-Uzbek - Isi-Vietnamese + Isi Uighur + Isi-Ukranian + Ulwimi olungaziwayo + IsiUrdu + Isi-Uzbek + Isi-Vietnamese IsiXhosa Yiddish IsiMandarin @@ -139,7 +139,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic IsiMandarin Esenziwe Lula IsiTshayina Esiqhelekileyo IsiMandarin Esiqhelekileyo - isiZulu + IsiZulu @@ -240,6 +240,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ETshayina EColombia EClipperton Island + ESark ECosta Rica ECuba ECape Verde @@ -466,9 +467,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ingingqi Engaziwayo - Ngokwekhalenda YeGregorian - Ikhalenda ye-ISO-8601 + Ngokwekhalenda KaGregorian + IGregorian + Ikhalenda kaGregorian Standard Sort Order + Eqhelekileyo Western Digits @@ -544,7 +547,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM y G MMM d, y G E, MMM d, y G - h a h:mm a h:mm:ss a M/d @@ -620,7 +622,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM d – d - MMM d – MMM d E, MMM d – E, MMM d @@ -681,6 +682,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nov Dis + + J + F + M + A + M + J + J + A + S + O + N + D + Janyuwari Februwari @@ -711,6 +726,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic Nov Dis + + J + F + M + A + M + J + J + A + S + O + N + D + Janyuwari Februwari @@ -740,7 +769,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic C - M + Mv Sb Tht Sin @@ -769,7 +798,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic C - M + Mv Sb St Sin @@ -796,7 +825,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic + Phambi KoKristu Phambi Kwexesha Eliqhelekileyo + Anno Domino Ixesha Eliqhelekileyo @@ -855,42 +886,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} {0} + + {1} 'ngo' {0} + {1} {0} - {1} 'kwi' {0} + {1} 'ngo' {0} + + + {1} 'ngo' {0} {1} {0} + + {1}, {0} + + + {1}, {0} + {1} {0} + + {1}, {0} + + + {1}, {0} + - d E E h:mm a E h:mm:ss a - y G - M/d/y G - MMM y G - MMM d, y G - E, MMM d, y G - h a h:mm a h:mm:ss a h:mm:ss a v h:mm a v - M/d - E, M/d - E, MMM d + 'iveki' W 'ka' MMMM + 'iveki' W 'ka' MMMM M/y M/d/y E, M/d/y @@ -900,53 +941,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMMM y QQQ y QQQQ y + 'iveki' w 'ka' Y + 'iveki' w 'ka' Y d – d - - y G – y G - y – y G - - - M/y G – M/y G - M/y – M/y G - M/y – M/y G - - - M/d/y – M/d/y G - M/d/y G – M/d/y G - M/d/y – M/d/y G - M/d/y – M/d/y G - - - E, M/d/y – E, M/d/y G - E, M/d/y G – E, M/d/y G - E, M/d/y – E, M/d/y G - E, M/d/y – E, M/d/y G - - - MMM y G – MMM y G - MMM – MMM y G - MMM y – MMM y G - - - MMM d – d, y G - MMM d, y G – MMM d, y G - MMM d – MMM d, y G - MMM d, y – MMM d, y G - - - E, MMM d – E, MMM d, y G - E, MMM d, y G – E, MMM d, y G - E, MMM d – E, MMM d, y G - E, MMM d, y – E, MMM d, y G - - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -955,9 +956,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm a – h:mm a v - - h–h a v - M – M @@ -974,7 +972,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic MMM d – d - MMM d – MMM d E, MMM d – E, MMM d @@ -1043,6 +1040,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic ikota + ikota edlulileyo + ikota esikuyo + ikota elandelayp kot. @@ -1097,11 +1097,117 @@ CLDR data files are interpreted according to the LDML specification (http://unic usuku lweveki + + kwiCawa edlulileyo + kule iCawa + kwiCawa ezayo + + + kwiCawa edlulileyo + kule iCawa + kwiCawa ezayo + + + kwiCawa edlulileyo + kule iCawa + kwiCawa ezayo + + + uMvulo odlulileyo + ngalo Mvulo + ngoMvulo ozayi + + + uMvulo odlulileyo + ngalo Mvulo + ngoMvulo ozayi + + + uMvulo odlulileyo + ngalo Mvulo + ngoMvulo ozayi + + + ngoLwesibini odlulileyo + ngalo uLwesibini + ngoLwesibini ozayo + + + ngoLwesibini odlulileyo + ngalo uLwesibini + ngoLwesibini ozayo + + + ngoLwesibini odlulileyo + ngalo uLwesibini + ngoLwesibini ozayo + + + ngoLwesithathu odlulileyo + ngalo Lwesithathu + ngoLwesithathu ozayo + + + ngoLwesithathu odlulileyo + ngalo Lwesithathu + ngoLwesithathu ozayo + + + ngoLwesithathu odlulileyo + ngalo Lwesithathu + lwest ozay + + + ngoLwesine odlulileyo + ngalo Lwesine + ngoLwesine ozayo + + + ngoLwesine odlulileyo + ngalo Lwesine + ngoLwesine ozayo + + + ngoLwesine odlulileyo + ngalo Lwesine + ngoLwesine ozayo + + + ngoLwesihlanu odlulileyo + ngalo Lwesihlanu + ngoLwesihlanu ozayo + + + ngoLwesihlanu odlulileyo + ngalo Lwesihlanu + ngoLwesihlanu ozayo + + + ngoLwesihlanu odlulileyo + ngalo Lwesihlanu + ngoLwesihlanu ozayo + + + ngoMgqibelo odlulileyo + ngalo Mgqibelo + ngoMgqibelo ozayo + + + ngoMgqibelo odlulileyo + ngalo Mgqibelo + ngoMgqibelo ozayo + + + ngoMgqibelo odlulileyo + ngalo Mgqibelo + ngoMgqibelo ozayo + Kusasa/Emva kwemini iyure + ngale yure yur. @@ -1111,6 +1217,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic umzuzu + ngalo mzuzu umz. @@ -1120,6 +1227,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic umzuzwana + ngoku zuzwa. @@ -1141,7 +1249,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Unknown City + Indawo Engaziwayo @@ -1153,6 +1261,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic Irish Standard Time + + ICanton Island + Kostanay @@ -1190,9 +1301,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - West Africa Time - West Africa Standard Time - West Africa Summer Time + West Africa Time @@ -1542,6 +1651,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Guyana Time + + + Hawaii-Aleutian Standard Time + + Hawaii-Aleutian Time @@ -2050,7 +2164,58 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 + + + + + ¤0K + ¤ 0K + ¤0K + ¤ 0K + ¤00K + ¤ 00K + ¤00K + ¤ 00K + ¤000K + ¤ 000K + ¤000K + ¤ 000K + ¤0M + ¤ 0M + ¤0M + ¤ 0M + ¤00M + ¤ 00M + ¤00M + ¤ 00M + ¤000M + ¤ 000M + ¤000M + ¤ 000M + ¤0G + ¤ 0G + ¤0G + ¤ 0G + ¤00G + ¤ 00G + ¤00G + ¤ 00G + ¤000G + ¤ 000G + ¤000G + ¤ 000G + ¤0T + ¤ 0T + ¤0T + ¤ 0T + ¤00T + ¤ 00T + ¤00T + ¤ 00T + ¤000T + ¤ 000T + ¤000T + ¤ 000T @@ -2818,6 +2983,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic East Caribbean dollar East Caribbean dollars + + ICaribbean guilder + ICaribbean guilder + ICaribbean guilder + ICg. + ICFA Franc yaseWest Africa ICFA franc yaseWest Africa @@ -2849,6 +3020,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic I-kwacha yaseZambia I-kwacha yaseZambia + + IZimbabwean Gold + IZimbabwean gold + IZimbabwean gold + IZWG + usuku {0} @@ -2858,6 +3035,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + square {0} + square {0} + + + cubic {0} + cubic {0} + cardinal direction {0} east @@ -2871,6 +3056,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + {0} Pa + {0}Pa + {0}S diff --git a/make/data/cldr/common/main/xnr.xml b/make/data/cldr/common/main/xnr.xml index 1bc080f23d7..486f0f029c6 100644 --- a/make/data/cldr/common/main/xnr.xml +++ b/make/data/cldr/common/main/xnr.xml @@ -893,9 +893,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic चीनी गणतंत्र पंचांग लेखांकन मुद्रा प्रारूप मानक मुद्रा प्रारूप - पारम्पारिक चीनी वर्गीकरण डिफ़ॉल्ट यूनिकोड सॉर्ट क्रम - सरलीकृत चीनी वर्गीकरण फोनबुक छंटाई क्रम पिनयीन वर्गीकरण सामान्य-उद्देश्य खोज @@ -906,7 +904,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 12 घंटेयां दी प्रणाली (1–12) 24 घंटेयां दी प्रणाली (0–23) 24 घंटेयां दी प्रणाली (1–24) - ढीली लैंण विच्छेद शैली< + ढीली लैंण विच्छेद शैली सामान्य लैंण विच्छेद शैली सख्त लैंण विच्छेद शैली मेट्रिक प्रणाली @@ -2156,7 +2154,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic कायरो - अल आइयून< + अल आइयून अस्मारा @@ -2344,7 +2342,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic नोम पेन्ह - + कैंटन @@ -3011,9 +3009,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - पश्चिम अफ़्रीका दा टैम - पश्चिम अफ़्रीका दा मानक टैम - पश्चिम अफ़्रीका दी तोंदिया दा टैम + पश्चिम अफ़्रीका दा टैम @@ -3363,6 +3359,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic गुयाना दा टैम + + + हवाई–आल्यूशन दा मानक टैम + + हवाई–आल्यूशन दा टैम @@ -3908,29 +3909,55 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + + + ¤ #,##,##0.00 + #,##,##0.00 + + + ¤ #,##,##0.00 + + + ¤#,##,##0.00 + ¤ #,##,##0.00 + #,##,##0.00 + ¤ #,##,##0.00 #,##,##0.00 - ¤0 हज़ार - ¤00 हज़ार + ¤0 हजार + ¤ 0 हजार + ¤00 हजार + ¤ 00 हजार ¤0 लख + ¤ 0 लख ¤00 लख + ¤ 00 लख ¤0 क॰ + ¤ 0 क॰ ¤00 क॰ + ¤ 00 क॰ ¤0 अ॰ + ¤ 0 अ॰ ¤00 अ॰ + ¤ 00 अ॰ ¤0 ख॰ + ¤ 0 ख॰ ¤00 ख॰ + ¤ 00 ख॰ ¤0 नील + ¤ 0 नील ¤00 नील + ¤ 00 नील diff --git a/make/data/cldr/common/main/xog.xml b/make/data/cldr/common/main/xog.xml index fc983490a00..9b83503d664 100644 --- a/make/data/cldr/common/main/xog.xml +++ b/make/data/cldr/common/main/xog.xml @@ -552,6 +552,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ + + + #,##0.00 ¤ diff --git a/make/data/cldr/common/main/yav.xml b/make/data/cldr/common/main/yav.xml index 88d7b957533..9246f963d23 100644 --- a/make/data/cldr/common/main/yav.xml +++ b/make/data/cldr/common/main/yav.xml @@ -558,9 +558,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic #,##0.00 ¤ + #,##0.00 ¤ #,##0.00 ¤;(#,##0.00 ¤) + #,##0.00 ¤;(#,##0.00 ¤) #,##0.00;(#,##0.00) diff --git a/make/data/cldr/common/main/yo.xml b/make/data/cldr/common/main/yo.xml index 056ec4d0f17..e160441da34 100644 --- a/make/data/cldr/common/main/yo.xml +++ b/make/data/cldr/common/main/yo.xml @@ -27,7 +27,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Èdè Obolo Èdè Angika Èdè Lárúbáwá - Èdè Lárúbáwá (Agbáyé) Èdè Mapushe Èdè Arapaho Èdè Arabiki ti Najidi @@ -41,6 +40,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Èdè Asabaijani Èdè Aseri Èdè Bashiri + Èdè Belúṣì Èdè Balini Èdè Basaa Èdè Belarusi @@ -221,6 +221,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Èdè Báfíà Èdè Colognian Kọdiṣì + Èdè Kọ́dìṣì + Èdè Kùmáǹjì Èdè Kumiki Èdè Komi Èdè Kọ́nììṣì @@ -611,7 +613,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àrin gùngun Áfíríkà Kóńgò – Brazaville Kóńgò (Olómìnira) - switiṣilandi + Súwísìlanìdì Kóútè forà Etíokun Kùúkù Ṣílè @@ -619,6 +621,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ṣáínà Kòlómíbìa Erékùsù Clipperston + Sáàkì Kuusita Ríkà Kúbà Etíokun Kápé féndè @@ -788,7 +791,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Siria looni Sani Marino Sẹnẹga - Somalia + Sòmálíà Surinami Gúúsù Sudan Sao tomi ati piriiṣipi @@ -852,42 +855,81 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ònà Ìgbekalẹ̀ owó Ètò Ẹlẹ́sẹẹsẹ Owó + Ìgbékalẹ̀ Ẹ̀mójì Òbíríkiti Wákàtí (12 vs 24) Àra Ìda Ìlà + Àwọn Ìdá Ìlà Láàárín Àwọn Ọ̀rọ̀ Èto Ìdiwọ̀n Àwọn nọ́ńbà + Ìdá Gbólóhùn Lẹ́yìn Ìgékúrú Kàlẹ́ńdà Buddhist + Ti Búdà Kàlẹ́ńdà ti Ṣáìnà + Ti Ṣáínà Èdè Kopti + Kọ́pítíìkì Kàlẹ́ńdà dangi + Dangi Kàlẹ́ńdà Ẹtíópíìkì + ti Etiópíà Èdè Kalenda Alem Amete tio Etiopia + Kàlẹ́ńdà Etiópíà Kàlẹ́ńdà Gregory + Ti Gregory Kàlẹ́ńdà Hébérù + Hébérù Kàlẹ́ńdà Lárúbáwá + Híjìrì Kàlẹ́ńdà ti Musulumi + Híjìrí (kàlẹ́ńdà oní-àtòkọ ti arà-ìlú) Kàlẹ́ńdà Musulumi + Híjìrí (Umm al-Qura) Kàlẹ́ńdà ISO-8601 Kàlẹ́ńdà ti Jàpánù + Ti Japan Kàlẹ́ńdà Pásíànù + Ti Páṣíà Kàlẹ́ńdà Minguo + Kàlẹ́ńdà Ṣáínà Ìgúnrégé Ìṣirò Owó Kọ́rẹ́ńsì + Ìṣirò owó Ònà ìgbekalẹ̀ owó tó jẹ́ àjùmọ̀lò + Àjùmọ̀lò Ètò Ẹlẹ́sẹẹsẹ Àkùàyàn Unicode + Unicode Àkùnyàn Ìṣàwárí Ète-Gbogbogbò + Ṣàwárí Ìlànà Onírúurú Ètò + Àjùmọ̀lò + Àkùnàyàn + Ẹ̀mójì + àtẹ̀jíṣẹ́ Èto Wákàtí 12 (0–11) + 12 (0–11) Èto Wákàtí 12 (1–12) + 12 (1–12) Èto Wákàtí 24 (0–23) + 24 (0–23) Èto Wákàtí 24 (1–24) + 24 (1–24) Àra Ìda Ìlà Títú + Tó dẹ̀ Àra Ìda Ìlà Déédéé + Déédéé Àra Ìda Ìlà Mímúná + Pàtó + Fọ́ gbogbo ẹ̀ + Pa gbogbo ẹ̀ mọ́ + Déédéé + Fi sílẹ̀ ní àpólà Èto Mẹ́tíríìkì + Mẹ́tíríìkì Èto Ìdiwọ̀n Ọba + UK Èto Ìdiwọ̀n US + US àwọn díjítì Làrubáwá-Índíà Àwọn Díjíìtì Lárúbáwá-Índíà fífẹ̀ Àwọn nọ́ńbà Àmẹ́níà @@ -928,6 +970,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àwọn díjíìtì Thai Àwọn díjíìtì Tibetán Àwọn díjíìtì Fai + Pípa + Títàn Mẹ́tíríìkì @@ -981,6 +1025,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ní' {0} + + {1} 'ní' {0} + @@ -989,6 +1036,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ní' {0} + + {1} 'ní' {0} + @@ -997,6 +1047,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + @@ -1005,6 +1058,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + d/M/y GGGGG @@ -1043,20 +1099,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Oṣù Ṣẹ́rẹ́ - Oṣù Èrèlè - Oṣù Ẹrẹ̀nà - Oṣù Ìgbé - Oṣù Ẹ̀bibi - Oṣù Òkúdu - Oṣù Agẹmọ - Oṣù Ògún - Oṣù Owewe - Oṣù Ọ̀wàrà - Oṣù Bélú - Oṣù Ọ̀pẹ̀ - S È @@ -1084,15 +1126,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ẹtì Àbámẹ́ta - - Àìkú - Ajé - Ìsẹ́gun - Ọjọ́rú - Ọjọ́bọ - Ẹtì - Àbámẹ́ta - Ọjọ́ Àìkú Ọjọ́ Ajé @@ -1104,15 +1137,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Àìkú - Ajé - Ìsẹ́gun - Ọjọ́rú - Ọjọ́bọ - Ẹtì - Àbámẹ́ta - À A @@ -1122,15 +1146,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic À - - Àìkú - Ajé - Ìsẹ́gun - Ọjọ́rú - Ọjọ́bọ - Ẹtì - Àbámẹ́ta - Àìkú Ajé @@ -1236,6 +1251,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ní' {0} + + {1} 'ní' {0} + @@ -1244,6 +1262,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1} 'ní' {0} + + {1} 'ní' {0} + @@ -1252,6 +1273,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + @@ -1260,13 +1284,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}, {0} + + {1}, {0} + E, d E h:mm a E h:mm:ss a + MM-y G d/M/y GGGGG - h a + E, d/M/y G h:mm a h:mm:ss a h:mm:ss a v @@ -1325,10 +1353,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic E, MMM d – E, MMM d, y G E, MMM d, y – E, MMM d, y G - - h a – h a - h–h a - h:mm a – h:mm a h:mm–h:mm a @@ -1339,46 +1363,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic h:mm–h:mm a v h:mm–h:mm a v - - h a – h a v - h–h a v - - - MM-dd – MM-dd - MM-dd – MM-dd - - - MM-dd, E – MM-dd, E - MM-dd, E – MM-dd, E - - - MMM d – MMM d - - - MMM d, E – MMM d, E - MMM d, E – MMM d, E - MM-y – MM-y - y-MM – y-MM - - - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd - y-MM-dd – y-MM-dd E, dd-MM-y – E dd-MM-y, E - y-MM-dd, E – y-MM-dd, E - y-MM-dd, E – y-MM-dd, E - - - y MMM – y MMM MMM d–d y MMM d – MMM d y - y MMM d – y MMM d MMM d, E – MMM d, E y @@ -1416,17 +1409,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ọdún tó kọjá Ọdún yìí Ọdún tó ńbọ̀ - - ní {0} Ọdún - - - Ọdún {0} sẹ́yìn - - - - - ní {0} Ọdún - Ọdún {0} sẹ́yìn @@ -1467,9 +1449,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ọjọ́ inú ọdún. - - Ọjọ́ inú ọdún. - Ọjọ́ tó wà láàárín ọ̀sẹ̀ @@ -1494,11 +1473,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ọjọ́ Ajé yìí next Monday - - ọjọ́ Ajé tó kọjá - ọjọ́ Ajé yìí - next Monday - Ìṣẹ́gun tókọ́já Ìṣẹ́gun èyí @@ -1554,17 +1528,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Ojọ́ tẹ́lẹ̀ - - O àná - O yì - O tóńbọ̀ - - ní {0} O - - - {0} W tẹ́lẹ̀ - - Ojọ́bọ̀ kẹyìn Ojọ́bọ̀ eyì @@ -1576,23 +1539,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic -{0} Àwọn Ojọ́bọ̀ - - Ojọ́ sẹ́yìn - Ojọ́ èyí - Ojọ́ tónbọ̀ - - + {0} Ojọ́ - - - {0} Ojọ́ èyìn - - + Ojọ́bọ̀ kẹyìn + Ojọ́bọ̀ eyì + Ojọ́bọ̀ tónbọ̀ - {0} Ojọ́ + +{0} Ojọ́bọ̀ - {0} Ojọ́ sẹ́yìn + -{0} Àwọn Ojọ́bọ̀ @@ -1607,22 +1562,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Etì àná - Etì yì - Et tónbọ̀ - - {0} Et - {0} Et sẹ́yìn - F tóko̩já - F èyí - F tómbò̩ + E̩tì tóko̩já + E̩tì èyí + E̩tì tómbò̩ - {0} F + {0} Àwo̩n Eti {0} F tẹ́lẹ̀ @@ -1639,26 +1588,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Abameta tokoja - - Aba tókojá - Aba èyí - Aba tónbọ̀ - - {0} Aba - - - {0} Aba. sẹ́yìn - - - Ab sẹ́yìn - Ab èyí - Ab tónbò + Abameta tóko̩já + Abameta eyi + Abameta tombo - {0} Ab + {0} Awon Abameta - {0} Ab ẹ̀yí + {0} Abameta tokoja @@ -1682,9 +1620,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Agbègbè - - Agbègbè - WAT{0} @@ -2044,9 +1979,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Àkókò Ìwọ̀-Oòrùn Afírikà - Àkókò Ìwọ̀-Oòrùn Àfẹnukò Afírikà - Àkókò Ìwọ̀-Oòrùn Ooru Afírikà + Àkókò Ìwọ̀-Oòrùn Afírikà @@ -2396,6 +2329,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àkókò Gúyànà + + + Àkókò Àfẹnukò Hawaii-Aleutian + + Àkókò Hawaii-Aleutian @@ -2922,7 +2860,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -2944,12 +2881,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤ 00M ¤000M ¤ 000M - ¤0B - ¤ 0B - ¤00B - ¤ 00B - ¤000B - ¤ 000B + ¤0G + ¤ 0G + ¤00G + ¤ 00G + ¤000G + ¤ 000G ¤0T ¤ 0T ¤00T @@ -3526,6 +3463,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dọ́là Ilà Oòrùn Karíbíà àwọn dọ́là Ilà Oòrùn Karíbíà + + Owó ìlú Kùrásọ̀ àti Saint Mátìnì + Owó ìlú Kùrásọ̀ àti Saint Mátìnì + Faransì ìwọ̀-oorùn Afíríkà àwọn faransì ìwọ̀-oorùn Afíríkà @@ -3553,6 +3494,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dọla ti Orílẹ́ède Siibabuwe + + Owó ìlú Sìnbábúwè + Owó ìlú Sìnbábúwè + Àwọn ọjọ́ {0} @@ -3663,19 +3608,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic kubiki {0} - - hekita - - - sare - àwọ́n ohun {0} àwon ohun + + ìpín + ìpín {0} + {0} ìdákan nínú ẹgbẹ̀rún + + nínú èròjà gúlúkóòsì + {0} nínú èròjà gúlúkóósì + maili ninu ami galọọnu kan @@ -3733,6 +3680,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ọ̀dún {0} ọ̀dún + {0} lọ́dún idamerin @@ -3760,9 +3708,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ìdinwọ̀n ayé {0} ìdinwọ̀n ayé - - mita - àwọn fọ́lọ́ọ̀ngì {0} àwọn fọ́lọ́ọ̀ngì @@ -3772,7 +3717,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} fátọ́ọ̀mù - kandẹ́là {0} kandẹ́là @@ -3791,13 +3735,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic milimita ti makuiri + + ti makuiri + {0} ti makuiri + Beaufort Beaufort {0} - - lita - búsẹ́ẹ̀li {0} búsẹ́ẹ̀li @@ -3816,18 +3761,52 @@ CLDR data files are interpreted according to the LDML specification (http://unic ìdásímérin {0} ìdásímérin - - ìmọ́lẹ̀ - {0} ìmọ́lẹ̀ + + steradians + {0} steradians - + + katals + {0} katals + + + coulombs + {0} coulombs + + + farads + + + henrys + + + siemens + + + kálórì [IT] + kálórì {0} [IT] + + + sieverts + + + grays + {0} grays + + + kilograms-force + {0} kilograms-force + + + teslas + + + webers + {0} webers + + ẹ̀yà nínú ìdá blíọ̀nù - - àwọn alẹ́ - àwọn alẹ́ {0} - {0}/alẹ́ - @@ -3864,13 +3843,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic ohun {0} ohun - + + ìpín + ìpín {0} + + ara/milíọ̀nù ìdákan nínú ẹgbẹ̀rún {0} pasenti + + Glc + Píbáìtì {0} Píbáìtì @@ -3990,6 +3976,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic gíréènì {0} gíréènì + + {0} ti Hg + lita @@ -4027,6 +4016,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic àmì ìdásímérin {0} àmì ìdásímérin + + cal-IT + ìmọ́lẹ̀ {0} ìmọ́lẹ̀ @@ -4063,7 +4055,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}km² - hekita {0}ha @@ -4073,7 +4064,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mi² - sare {0}ac @@ -4100,7 +4090,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}ohun - + + ìpín + ìpín {0} + + {0}ppm @@ -4109,6 +4103,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}mol + + Glc + {0}L/km @@ -4163,10 +4160,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic bit {0}bíìtì - - ọd - {0} ọd - {0} i @@ -4254,9 +4247,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic R⊕ {0}R⊕ - - mita - {0}fur @@ -4409,7 +4399,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}hL - lita {0}/L @@ -4452,7 +4441,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}pt - ife {0}c @@ -4493,14 +4481,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}àmì ìdásímérin + + cal-IT + - ìmọ́lẹ̀ {0}ìmọ́lẹ̀ - àwọn alẹ́ àwọn alẹ́{0} - {0}/alẹ́ @@ -4512,9 +4500,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}, tabi {1} {0} tàbí {1} - - {0}, {1} - {0} àti {1} diff --git a/make/data/cldr/common/main/yo_BJ.xml b/make/data/cldr/common/main/yo_BJ.xml index 0523124f50a..19168d7adba 100644 --- a/make/data/cldr/common/main/yo_BJ.xml +++ b/make/data/cldr/common/main/yo_BJ.xml @@ -14,6 +14,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Èdè Ágɛ̀ɛ̀mù + Èdè Belúshì Èdè Bɛ́nà Èdè Shɛ́rókiì Èdè Síláfííkì Ilé Ìjɔ́sìn @@ -47,6 +48,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kashímirì Sháńbálà Kɔdishì + Èdè Kɔ́dìshì Èdè Kɔ́nììshì Lùshɛ́mbɔ́ɔ̀gì Ɔlɔ́pɔ̀ èdè @@ -144,7 +146,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kàríbíánì ti Nɛ́dálándì Bɔ̀tìsúwánà Bèlísɛ̀ - switishilandi Shílè Sháínà Shɛ́ɛ́kì @@ -232,28 +233,48 @@ CLDR data files are interpreted according to the LDML specification (http://unic Kàlɛ́ńdà Ònà Ìgbekalɛ̀ owó Ètò Ɛlɛ́sɛɛsɛ + Ìgbékalɛ̀ Ɛ̀mójì + Àwɔn Ìdá Ìlà Láàárín Àwɔn Ɔ̀rɔ̀ Èto Ìdiwɔ̀n Àwɔn nɔ́ńbà + Ìdá Gbólóhùn Lɛ́yìn Ìgékúrú Kàlɛ́ńdà Buddhist Kàlɛ́ńdà ti Sháìnà + Ti Sháínà + Kɔ́pítíìkì Kàlɛ́ńdà dangi Kàlɛ́ńdà Ɛtíópíìkì + Kàlɛ́ńdà Etiópíà Kàlɛ́ńdà Gregory Kàlɛ́ńdà Hébérù Kàlɛ́ńdà Lárúbáwá Kàlɛ́ńdà ti Musulumi + Híjìrí (kàlɛ́ńdà oní-àtòkɔ ti arà-ìlú) Kàlɛ́ńdà Musulumi Kàlɛ́ńdà ISO-8601 Kàlɛ́ńdà ti Jàpánù Kàlɛ́ńdà Pásíànù + Ti Páshíà Kàlɛ́ńdà Minguo + Kàlɛ́ńdà Sháínà Ìgúnrégé Ìshirò Owó Kɔ́rɛ́ńsì + Ìshirò owó Ònà ìgbekalɛ̀ owó tó jɛ́ àjùmɔ̀lò + Àjùmɔ̀lò Ètò Ɛlɛ́sɛɛsɛ Àkùàyàn Unicode Ìshàwárí Ète-Gbogbogbò + Shàwárí + Àjùmɔ̀lò + Ɛ̀mójì + àtɛ̀jíshɛ́ + Tó dɛ̀ + Fɔ́ gbogbo ɛ̀ + Pa gbogbo ɛ̀ mɔ́ + Fi sílɛ̀ ní àpólà Èto Mɛ́tíríìkì + Mɛ́tíríìkì Èto Ìdiwɔ̀n Ɔba Èto Ìdiwɔ̀n US àwɔn díjítì Làrubáwá-Índíà @@ -328,20 +349,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Oshù Shɛ́rɛ́ - Oshù Èrèlè - Oshù Ɛrɛ̀nà - Oshù Ìgbé - Oshù Ɛ̀bibi - Oshù Òkúdu - Oshù Agɛmɔ - Oshù Ògún - Oshù Owewe - Oshù Ɔ̀wàrà - Oshù Bélú - Oshù Ɔ̀pɛ̀ - S È @@ -369,15 +376,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ɛtì Àbámɛ́ta - - Àìkú - Ajé - Ìsɛ́gun - Ɔjɔ́rú - Ɔjɔ́bɔ - Ɛtì - Àbámɛ́ta - Ɔjɔ́ Àìkú Ɔjɔ́ Ajé @@ -389,15 +387,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - Àìkú - Ajé - Ìsɛ́gun - Ɔjɔ́rú - Ɔjɔ́bɔ - Ɛtì - Àbámɛ́ta - À A @@ -407,15 +396,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ɛ À - - Àìkú - Ajé - Ìsɛ́gun - Ɔjɔ́rú - Ɔjɔ́bɔ - Ɛtì - Àbámɛ́ta - Àìkú Ajé @@ -475,17 +455,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ɔdún tó kɔjá Ɔdún yìí Ɔdún tó ńbɔ̀ - - ní {0} Ɔdún - - - Ɔdún {0} sɛ́yìn - - - - - ní {0} Ɔdún - Ɔdún {0} sɛ́yìn @@ -524,9 +493,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic Ɔjɔ́ inú ɔdún. - - Ɔjɔ́ inú ɔdún. - Ɔjɔ́ tó wà láàárín ɔ̀sɛ̀ @@ -551,11 +517,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ɔjɔ́ Ajé yìí next Monday - - ɔjɔ́ Ajé tó kɔjá - ɔjɔ́ Ajé yìí - next Monday - Ìshɛ́gun tókɔ́já Ìshɛ́gun èyí @@ -608,14 +569,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} Ojɔ́ tɛ́lɛ̀ - - O àná - O yì - O tóńbɔ̀ - - {0} W tɛ́lɛ̀ - - Ojɔ́bɔ̀ kɛyìn Ojɔ́bɔ̀ eyì @@ -627,29 +580,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic -{0} Àwɔn Ojɔ́bɔ̀ - - Ojɔ́ sɛ́yìn - Ojɔ́ èyí - Ojɔ́ tónbɔ̀ - - + {0} Ojɔ́ - - - {0} Ojɔ́ èyìn - - + Ojɔ́bɔ̀ kɛyìn + Ojɔ́bɔ̀ eyì + Ojɔ́bɔ̀ tónbɔ̀ - {0} Ojɔ́ + +{0} Ojɔ́bɔ̀ - {0} Ojɔ́ sɛ́yìn + -{0} Àwɔn Ojɔ́bɔ̀ - Etì àná - Etì yì - Et tónbɔ̀ {0} Et sɛ́yìn @@ -659,22 +601,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} F tɛ́lɛ̀ - - Aba tókojá - Aba èyí - Aba tónbɔ̀ - - {0} Aba. sɛ́yìn - - - - Ab sɛ́yìn - Ab èyí - Ab tónbò - - {0} Ab ɛ̀yí - - Àárɔ̀/ɔ̀sán @@ -771,9 +697,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Àkókò Ìwɔ̀-Oòrùn Afírikà - Àkókò Ìwɔ̀-Oòrùn Àfɛnukò Afírikà - Àkókò Ìwɔ̀-Oòrùn Ooru Afírikà + Àkókò Ìwɔ̀-Oòrùn Afírikà @@ -1027,6 +951,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic Àkókò Àfɛnukò Gulf + + + Àkókò Àfɛnukò Hawaii-Aleutian + + Àkókò Hawaii-Aleutian @@ -1814,6 +1743,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic Dɔ́là Ilà Oòrùn Karíbíà àwɔn dɔ́là Ilà Oòrùn Karíbíà + + Owó ìlú Kùrásɔ̀ àti Saint Mátìnì + Owó ìlú Kùrásɔ̀ àti Saint Mátìnì + Faransì ìwɔ̀-oorùn Afíríkà àwɔn faransì ìwɔ̀-oorùn Afíríkà @@ -1919,6 +1852,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic ɔ̀dún {0} ɔ̀dún + {0} lɔ́dún {0}/ɔsh @@ -1947,7 +1881,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} fátɔ́ɔ̀mù - kandɛ́là {0} kandɛ́là @@ -1971,21 +1904,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic shíbí oúnjɛ kékeré - - ìmɔ́lɛ̀ - {0} ìmɔ́lɛ̀ - - + ɛ̀yà nínú ìdá blíɔ̀nù - - àwɔn alɛ́ - àwɔn alɛ́ {0} - {0}/alɛ́ - - + ara/milíɔ̀nù @@ -2087,10 +2011,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - ɔd - {0} ɔd - ɔshɛ́ {0}/ɔ̀shɛ̀ @@ -2112,13 +2032,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}búsɛ́ɛ̀li - ìmɔ́lɛ̀ {0}ìmɔ́lɛ̀ - àwɔn alɛ́ àwɔn alɛ́{0} - {0}/alɛ́ diff --git a/make/data/cldr/common/main/yrl.xml b/make/data/cldr/common/main/yrl.xml index a82d832c7dc..e769a85c96c 100644 --- a/make/data/cldr/common/main/yrl.xml +++ b/make/data/cldr/common/main/yrl.xml @@ -1089,12 +1089,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Reyupurawaka turusuwa rupí Yupurawakasawa mirĩwa yuí turusúwa ãmurupí Yupurawakasawa mirĩwa yuí turusúwa amũrupisawa - Xinanhẽẽga rikusawarupí muakaresawa - Big5 Muakaresawa rinũdewa nũgarásawa Disiunariu muakaresawa Unicode muakaresawa retewa Tekô eurupawara muakarésawa supé - Xinanheẽga iwasuĩma muakarewa - GB2312 Terefuni sesewara muakaresawa Yupurawakasawa terefuniara mukaresawa Pin-yin mukaresawa @@ -2830,9 +2828,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Pinõ Pẽi - - Ẽdeburi - Kumure-ita @@ -3455,9 +3450,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Afirikia Usidẽtawara Hurariyu - Afirika Usidẽtawara Hurariyu Retewa - Afirika Usidẽtawara Kurasí Ara Hurariyu + Afirikia Usidẽtawara Hurariyu @@ -3850,6 +3843,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Giyana Hurariyu + + + Hawaí asuí Kapuã-ita Areuta-ita Hurariyu Retewa + + Hawaí asuí Kapuã-ita Areuta-ita Hurariyu @@ -6089,7 +6087,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} mirimol irerú-pukú rupi {0} mirimol-ita irerú-pukú rupi - + pisawera-ita miliãu rupi {0} pisawera miliãu rupi {0} pisawera-ita miliãu rupi @@ -6884,7 +6882,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mirimol/ritru {0} mmol/l - + pisawera miliãu rupi diff --git a/make/data/cldr/common/main/yrl_CO.xml b/make/data/cldr/common/main/yrl_CO.xml index a8607444c93..c120bce318e 100644 --- a/make/data/cldr/common/main/yrl_CO.xml +++ b/make/data/cldr/common/main/yrl_CO.xml @@ -59,8 +59,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kuatiasawasupí pañé-yara - Xinañẽẽga rikusawarupí muakaresawa - Big5 - Xinañeẽga iwasuĩma muakarewa - GB2312 Sikaisá purusawa pañérupí Reyupurawaka letera básika ñũtú @@ -239,7 +237,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milla kuadaradu-ita {0} milla kuadaradu rupi - + pisawera-ita millón rupi {0} pisawera millón rupi {0} pisawera-ita millón rupi @@ -284,7 +282,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milla-itá² - + pisawera millón rupi diff --git a/make/data/cldr/common/main/yrl_VE.xml b/make/data/cldr/common/main/yrl_VE.xml index d6663f73a9b..79276b33a6a 100644 --- a/make/data/cldr/common/main/yrl_VE.xml +++ b/make/data/cldr/common/main/yrl_VE.xml @@ -59,8 +59,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ kuatiasawasupí pañé-yara - Xinañẽẽga rikusawarupí muakaresawa - Big5 - Xinañeẽga iwasuĩma muakarewa - GB2312 Sikaisá purusawa pañérupí Reyupurawaka letera básika ñũtú @@ -239,7 +237,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} milla kuadaradu-ita {0} milla kuadaradu rupi - + pisawera-ita millón rupi {0} pisawera millón rupi {0} pisawera-ita millón rupi @@ -284,7 +282,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ milla-itá² - + pisawera millón rupi diff --git a/make/data/cldr/common/main/yue.xml b/make/data/cldr/common/main/yue.xml index 30024be998e..3615cb547d8 100644 --- a/make/data/cldr/common/main/yue.xml +++ b/make/data/cldr/common/main/yue.xml @@ -317,7 +317,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 尚巴拉文 巴菲亞文 科隆文 - 庫爾德文 + 庫德文 + 庫德文 + 北庫德文 庫密克文 庫特奈文 科米文 @@ -919,6 +921,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 中國 哥倫比亞 克里派頓島 + 薩克 哥斯大黎加 古巴 維德角 @@ -1215,35 +1218,54 @@ CLDR data files are interpreted according to the LDML specification (http://unic 數字排序 排序強度 貨幣 + Emoji 顯示方式 時間週期(12 小時制與 24 小時制) 換行樣式 + 單字強制換行 度量單位系統 數字 + 縮寫後斷句 時區 區域變異 專用區 佛曆 + 佛曆 農曆 + 農曆 科普特曆 + 科普特曆 檀紀曆 - 衣索比亞曆 - 衣索比亞曆 (Amete Alem) + 檀紀曆 + 埃塞俄比亞曆 + 埃塞俄比亞曆 + 埃塞俄比亞阿美德阿萊姆曆 + 埃塞俄比亞阿美德阿萊姆 公曆 + 公曆 希伯來曆 + 希伯來曆 印度國曆 伊斯蘭曆 - 伊斯蘭民用曆 + 伊斯蘭曆 + 伊斯蘭民用曆 (表格式) + 伊斯蘭民用曆 (表格式) 伊斯蘭新月曆 伊斯蘭天文曆 伊斯蘭曆 (烏姆庫拉) - 國際標準 ISO 8601 + 伊斯蘭曆 (烏姆庫拉) + 公曆 (元年) 日本曆 + 日本曆 波斯曆 + 波斯曆 民國曆 + 民國曆 會計貨幣格式 + 會計 標準貨幣格式 + 標準 排序符號 略過符號排序 正常排序重音 @@ -1253,17 +1275,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic 優先排序大寫 不分大小寫排序 依大小寫排序 - 繁體中文排序 - Big5 字典排序 預設 Unicode 排序 + 預設 Unicode 歐洲排序規則 - 簡體中文排序 - GB2312 電話簿排序 發音排序 拼音排序 一般用途搜尋 + 搜尋 韓文子音排序 標準排序 + 標準 筆畫排序 傳統排序 部首筆畫排序 @@ -1280,18 +1303,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic 全形 半形 數值 + 預設 + Emoji + 文字 12 小時制 (0–11) + 12 (0–11) 12 小時制 (1–12) + 12 (1–12) 24 小時制 (0–23) + 24 (0–23) 24 小時制 (1–24) + 24 (1–24) 寬鬆換行樣式 + 寬鬆 一般換行樣式 + 一般 強制換行樣式 + 強制 + 任意換行 + 全部保留 + 一般 + 唔拆開詞組 美國地名委員會 聯合國地名專家組 公制 + 公制 英制度量單位系統 + 英制 美制度量單位系統 + 美制 阿拉伯-印度數字 阿拉伯-印度擴充數字 亞美尼亞數字 @@ -1353,6 +1393,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 西藏數字 傳統數字 瓦伊文數字 + + 公制 @@ -1964,6 +2006,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + @@ -1972,30 +2017,47 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + {1} {0} + + {1}{0} + Bh時 Bh:mm Bh:mm:ss d日 + EBh點 + EBh:mm + EBh:mm:ss d E - ah:mmE - ah:mm:ssE + Eah點 + Eah:mm + EHH:mm + Eah:mm:ss + EHH:mm:ss G y年 + G M/y + G d/M/y + G d/M/y (E) G y年M月 G y年M月d日 G y年M月d日 E - ah時 - H時 + ah點 + H點 ah:mm H:mm ah:mm:ss H:mm:ss + ah 點 (v) + HH點 (v) M月 M/d M/d(E) @@ -2220,8 +2282,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 午夜 - 上午 - 下午 + 上晝 + 下晝 清晨 朝早 中午 @@ -2229,6 +2291,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic 夜晚 凌晨 + + 上晝 + 下晝 + + + 上晝 + 下晝 + + + + + 上晝 + 下晝 + + + 上晝 + 下晝 + @@ -2299,6 +2379,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + @@ -2307,6 +2390,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + @@ -2315,34 +2401,47 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + {1} {0} + + {1}{0} + - Bh時 + Bh點 Bh:mm Bh:mm:ss d日 + EBh點 E Bh:mm E Bh:mm:ss d E + Eah 點 E ah:mm E ah:mm:ss Gy年 + GM/y + Gd/M/y + Gd/M/y (E) Gy年M月 Gy年M月d日 Gy年M月d日 E ah時 - H時 + H點 ah:mm ah:mm:ss ah:mm:ss [v] HH:mm:ss [v] ah:mm [v] HH:mm [v] + ah點 (v) + HH點 (v) M月 M/d M/d(E) @@ -3605,6 +3704,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 復活島 + + 科伊艾克 + 蓬塔阿雷納斯 @@ -3870,9 +3972,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 金邊 - 恩得伯理島 - - 坎頓 @@ -4549,9 +4648,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 西非時間 - 西非標準時間 - 西非夏令時間 + 西非時間 @@ -4939,6 +5036,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 蓋亞那時間 + + + 夏威夷-阿留申標準時間 + + 夏威夷-阿留申時間 @@ -5508,7 +5610,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -5519,17 +5620,29 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤0千 + ¤ 0千 ¤0萬 + ¤ 0萬 ¤00萬 + ¤ 00萬 ¤000萬 + ¤ 000萬 ¤0000萬 + ¤ 0000萬 ¤0億 + ¤ 0億 ¤00億 + ¤ 00億 ¤000億 + ¤ 000億 ¤0000億 + ¤ 0000億 ¤0兆 + ¤ 0兆 ¤00兆 + ¤ 00兆 ¤000兆 + ¤ 000兆 {0} {1} @@ -6363,6 +6476,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 格瑞那達元 + + 加勒比盾 + 加勒比盾 + 特殊提款權 @@ -6443,6 +6560,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 辛巴威元 (1980–2008) + + 辛巴威金 + 辛巴威金 + 辛巴威元 (2009) @@ -6479,6 +6600,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每平方英吋 {0} + + 等份 + {0} 等份 + + + 葡萄糖 + {0} 葡萄糖 + {0} 個世紀 @@ -6557,6 +6686,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}格令 + + 水銀柱 + {0} 水銀柱 + 每平方吋 {0} 磅 @@ -6584,6 +6717,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每公升 {0} + + 公制液量安士 + {0} 公制液量安士 + 每加侖 {0} @@ -6593,19 +6730,62 @@ CLDR data files are interpreted according to the LDML specification (http://unic 英制甜品匙{0}匙 - - 光速 - {0} 光速 + + 球面度 + {0} 球面度 - + + 開特 + {0} 開特 + + + 庫侖 + {0} 庫侖 + + + 法拉 + {0} 法拉 + + + 亨利 + {0} 亨利 + + + 西門子 + {0} 西門子 + + + 國際蒸汽表卡路里 + {0} 國際蒸汽表卡路里 + + + 貝克勒爾 + {0} 貝克勒爾 + + + 希沃特 + {0} 希沃特 + + + 戈瑞 + {0} 戈瑞 + + + 公斤力 + {0} 公斤力 + + + 特斯拉 + {0} 特斯拉 + + + 韋伯 + {0} 韋伯 + + 十億分點濃度 {0} 十億分點濃度 - - - {0} 晚 - {0}/晚 - @@ -6801,7 +6981,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 項 - + + 等份 + {0} 等份 + + 百萬分率 {0} 百萬分率 @@ -6813,6 +6997,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 摩爾 {0} 摩爾 + + 葡萄糖 + {0} 葡萄糖 + 公升/公里 {0} 公升/公里 @@ -7194,6 +7382,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 毫米汞柱 {0} 毫米汞柱 + + {0} Hg + 磅力/平方英吋 每平方吋{0}磅 @@ -7327,6 +7518,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 公制量杯 {0} 公制杯 + + 公制液量安士 + {0} 公制液量安士 + 英畝英呎 {0} 英畝英呎 @@ -7405,11 +7600,63 @@ CLDR data files are interpreted according to the LDML specification (http://unic 英制夸脫 {0} 英制夸脫 + + 球面度 + {0} 球面度 + + + 開特 + {0} 開特 + + + + {0} 庫 + + + + {0} 法 + + + + {0} 亨 + + + 西 + {0} 西 + + + 國際蒸汽表卡 + {0} 國際蒸汽表卡 + + + 貝克 + {0} 貝克 + + + + {0} 希 + + + + {0} 戈 + + + 公斤力 + {0} 公斤力 + + + + {0} 特 + + + + {0} 韋 + 光速 {0} 光速 - + 濃度/十億 @@ -7426,6 +7673,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + 等份 + {0} 等份 + + + 葡萄糖 + {0} 葡萄糖 + B {0}B @@ -7462,6 +7717,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每安士 {0} + + {0} Hg + 每平方吋 {0} 磅 @@ -7477,17 +7735,70 @@ CLDR data files are interpreted according to the LDML specification (http://unic °C + + 公制液量安士 + {0} 公制液量安士 + + + 球面度 + {0} 球面度 + + + 開特 + {0} 開特 + + + + {0} 庫 + + + + {0} 法 + + + + {0} 亨 + + + 西 + {0} 西 + + + 卡路里-IT + {0} 卡路里-IT + + + 貝克 + {0} 貝克 + + + + {0} 希 + + + + {0} 戈 + + + 公斤力 + {0} 公斤力 + + + + {0} 特 + + + + {0} 韋 + - 光速 {0}光速 - + {0}ppb - {0}晚 - {0}/晚 diff --git a/make/data/cldr/common/main/yue_Hans.xml b/make/data/cldr/common/main/yue_Hans.xml index b7c29be1597..75da3270126 100644 --- a/make/data/cldr/common/main/yue_Hans.xml +++ b/make/data/cldr/common/main/yue_Hans.xml @@ -147,7 +147,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 达尔格瓦文 台塔文 德文 - 高地德文(瑞士) + 高地德文 (瑞士) 德拉瓦文 斯拉夫 多格里布文 @@ -210,7 +210,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 苏格兰盖尔文 吉兹文 吉尔伯特群岛文 - 加利西亚文 + 加里西亚文 吉拉基文 中古高地德文 瓜拉尼文 @@ -245,7 +245,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 海地文 匈牙利文 胡帕文 - 哈尔科梅勒姆文 + 哈尔魁梅林语 亚美尼亚文 赫雷罗文 国际文 @@ -261,7 +261,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 印古什文 伊多文 冰岛文 - 意大利文 + 义大利文 因纽特文 英格里亚文 日文 @@ -318,7 +318,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 尚巴拉文 巴菲亚文 科隆文 - 库尔德文 + 库德文 + 库德文 + 北库德文 库密克文 库特奈文 科米文 @@ -883,7 +885,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 澳洲 荷属阿鲁巴 奥兰群岛 - 亚塞拜然 + 阿塞拜疆 波斯尼亚同黑塞哥维那 巴贝多 孟加拉 @@ -917,9 +919,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 库克群岛 智利 喀麦隆 - 中华人民共和国 + 中国 哥伦比亚 克里派顿岛 + 萨克 哥斯大黎加 古巴 维德角 @@ -955,7 +958,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 加彭 英国 格瑞那达 - 乔治亚共和国 + 格鲁吉亚 法属圭亚那 根西岛 迦纳 @@ -971,7 +974,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 关岛 几内亚比索 盖亚那 - 中华人民共和国香港特别行政区 + 中国香港特别行政区 香港 赫德岛同麦克唐纳群岛 宏都拉斯 @@ -989,7 +992,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 伊拉克 伊朗 冰岛 - 义大利 + 意大利 泽西岛 牙买加 约旦 @@ -1005,7 +1008,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 科威特 开曼群岛 哈萨克 - 寮国 + 老挝 黎巴嫩 圣露西亚 列支敦斯登 @@ -1023,11 +1026,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 法属圣马丁 马达加斯加 马绍尔群岛 - 马其顿 + 北马其顿 马利 缅甸 蒙古 - 中华人民共和国澳门特别行政区 + 中国澳门特别行政区 澳门 北马里亚纳群岛 马丁尼克岛 @@ -1051,7 +1054,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 尼泊尔 诺鲁 纽埃岛 - 纽西兰 + 新西兰 阿曼王国 巴拿马 秘鲁 @@ -1075,7 +1078,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 塞尔维亚 俄罗斯 卢安达 - 沙乌地阿拉伯 + 沙特阿拉伯 索罗门群岛 塞席尔 苏丹 @@ -1133,7 +1136,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 伪口音 伪 Bidi 科索沃 - 叶门 + 也门 马约特 南非 尚比亚 @@ -1216,35 +1219,54 @@ CLDR data files are interpreted according to the LDML specification (http://unic 数字排序 排序强度 货币 + Emoji 显示方式 时间周期(12 小时制与 24 小时制) 换行样式 + 单字强制换行 度量单位系统 数字 + 缩写后断句 时区 区域变异 专用区 佛历 + 佛历 农历 + 农历 科普特历 + 科普特历 檀纪历 - 衣索比亚历 - 衣索比亚历 (Amete Alem) + 檀纪历 + 埃塞俄比亚历 + 埃塞俄比亚历 + 埃塞俄比亚阿美德阿莱姆历 + 埃塞俄比亚阿美德阿莱姆 公历 + 公历 希伯来历 + 希伯来历 印度国历 伊斯兰历 - 伊斯兰民用历 + 伊斯兰历 + 伊斯兰民用历 (表格式) + 伊斯兰民用历 (表格式) 伊斯兰新月历 伊斯兰天文历 - 乌姆库拉历 - 国际标准 ISO 8601 + 伊斯兰历 (乌姆库拉) + 伊斯兰历 (乌姆库拉) + 公历 (元年) 日本历 + 日本历 波斯历 + 波斯历 民国历 + 民国历 会计货币格式 + 会计 标准货币格式 + 标准 排序符号 略过符号排序 正常排序重音 @@ -1254,17 +1276,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic 优先排序大写 不分大小写排序 依大小写排序 - 繁体中文排序 - Big5 字典排序 预设 Unicode 排序 + 预设 Unicode 欧洲排序规则 - 简体中文排序 - GB2312 电话簿排序 发音排序 拼音排序 一般用途搜寻 + 搜寻 韩文子音排序 标准排序 + 标准 笔画排序 传统排序 部首笔画排序 @@ -1281,18 +1304,35 @@ CLDR data files are interpreted according to the LDML specification (http://unic 全形 半形 数值 + 预设 + Emoji + 文字 12 小时制 (0–11) + 12 (0–11) 12 小时制 (1–12) + 12 (1–12) 24 小时制 (0–23) + 24 (0–23) 24 小时制 (1–24) + 24 (1–24) 宽松换行样式 + 宽松 一般换行样式 + 一般 强制换行样式 + 强制 + 任意换行 + 全部保留 + 一般 + 唔拆开词组 美国地名委员会 联合国地名专家组 公制 + 公制 英制度量单位系统 + 英制 美制度量单位系统 + 美制 阿拉伯-印度数字 阿拉伯-印度扩充数字 亚美尼亚数字 @@ -1354,6 +1394,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 西藏数字 传统数字 瓦伊文数字 + + 公制 @@ -1372,11 +1414,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] [\- ‑ , . % ‰ + 0 1 2 3 4 5 6 7 8 9 〇 一 七 三 九 二 五 八 六 四] [﹉﹊﹋﹌ __﹍﹎﹏︳︴ \--﹣ ‐‑ – —︱ ― ,,﹐ 、﹑ ;;﹔ \::﹕ !!﹗ ??﹖ ..﹒ ‥︰ … 。 · '‘’ ""“”〝〞 ((﹙︵ ))﹚︶ \[[ \]] \{{﹛︷ \}}﹜︸ 〈︿ 〉﹀ 《︽ 》︾ 「﹁ 」﹂ 『﹃ 』﹄ 【︻ 】︼ 〔﹝︹ 〕﹞︺ 〖 〗 ‖ § @@﹫ **﹡ // \\\﹨ \&&﹠ ##﹟ %%﹪ ‰ ′ ″ ‵ 〃 ※] - {0}… - …{0} - {0}…{1} + + + + + + @@ -1389,43 +1434,41 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gy年M月d日EEEE - GyMMMEEEEd Gy年M月d日 - GyMMMd Gy年M月d日 - GyMMMd - Gy-M-d + Gy/M/d d日(E) + Gy年 Gy年M月 Gy年M月d日 Gy年M月d日E - M月 - M-d - M-dE - LLL - Gy-M - Gy-M-d - Gy-M-d(E) + M月d日E + Gy年 + Gy年 + Gy/M + Gy/M/d + Gy/M/d(E) Gy年M月 Gy年M月d日 Gy年M月d日E + Gy年M月 Gy年QQQ Gy年QQQQ @@ -1620,14 +1663,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic - rU年MMMdEEEE - rMMMEEEEd + U (r) 年MMMdEEEE + UMMMEEEEd - rU年MMMd - rMMMd + U (r) 年MMMd + UMMMd @@ -1651,8 +1694,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic r年MMMd rU年MMMdE MMM - M-d - M-dE + M/d + M/dE MMMd日 MMMd日E MMMMd日 @@ -1674,13 +1717,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic rU年QQQQ - {0}–{1} + {0}至{1} d日至d日 - ah至ah时 - ah至h时 + ah时至ah时 + ah时至h时 ah:mm至ah:mm @@ -1688,28 +1731,31 @@ CLDR data files are interpreted according to the LDML specification (http://unic ah:mm至h:mm - vah:mm至ah:mm - vah:mm至h:mm - vah:mm至h:mm + ah:mm至ah:mm [v] + ah:mm至h:mm [v] + ah:mm至h:mm [v] - HH:mm至HH:mm v - HH:mm至HH:mm v + HH:mm–HH:mm [v] + HH:mm–HH:mm [v] - vah至ah时 - vah至h时 + ah时至ah时 [v] + ah时至h时 [v] + + + HH–HH [v] - L至L + MMM至MMM - M-d至M-d - M-d至M-d + M/d至M/d + M/d至M/d - M-dE至M-dE - M-dE至M-dE + M/dE至M/dE + M/dE至M/dE LLL至LLL @@ -1729,18 +1775,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic rU至rU - r-M至r-M - r-M至r-M + r/M至r/M + r/M至r/M - r-M-d至r-M-d - r-M-d至r-M-d - r-M-d至r-M-d + r/M/d至r/M/d + r/M/d至r/M/d + r/M/d至r/M/d - r-M-dE至r-M-dE - r-M-dE至r-M-dE - r-M-dE至r-M-dE + r/M/dE至r/M/dE + r/M/dE至r/M/dE + r/M/dE至r/M/dE rU年MMM至MMM @@ -1879,13 +1925,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic U年MMMd日EEEE - UMMMEEEEd U年MMMd日 - UMMMd @@ -1927,25 +1971,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Gy年MM月d日EEEE + G y年M月d日 EEEE GyMMMEEEEd - Gy年MM月d日 + G y年M月d日 GyMMMd - Gy年MM月d日 + G y年M月d日 GyMMMd - Gy/M/d + G y/M/d GyMd @@ -1953,7 +1997,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {1} {0} + {1}{0} @@ -1963,6 +2007,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + @@ -1971,48 +2018,67 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + {1} {0} + + {1}{0} + Bh时 Bh:mm Bh:mm:ss d日 - d日E - ah:mmE - ah:mm:ssE - Gy年 - Gy年MM月 - Gy年MM月d日 - Gy年MM月d日E - ah时 - H时 + EBh点 + EBh:mm + EBh:mm:ss + d E + Eah点 + Eah:mm + EHH:mm + Eah:mm:ss + EHH:mm:ss + G y年 + G M/y + G d/M/y + G d/M/y (E) + G y年M月 + G y年M月d日 + G y年M月d日 E + ah点 + H点 ah:mm + H:mm ah:mm:ss + H:mm:ss + ah 点 (v) + HH点 (v) + M月 M/d - M/dE - LL + M/d(E) M月d日 - M月d日E + M月d日 E M月d日 - Gy年 - Gy年 - Gy年M月 + G y年 + G y年 + G y/M G y/M/d - G y/M/dE - Gy年MM月 - Gy年MM月d日 - Gy年MM月d日E - Gy年M月 - Gy年第Q季度 - Gy年第Q季度 + G y/M/d(E) + G y年M月 + G y年M月d日 + G y年M月d日 E + G y年M月 + G y年QQQ + G y年QQQQ - {0} – {1} + {0}至{1} Bh时至Bh时 Bh至h时 @@ -2023,7 +2089,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bh:mm至h:mm - d至d日 + d日至d日 G y年至G y年 @@ -2073,31 +2139,34 @@ CLDR data files are interpreted according to the LDML specification (http://unic ah:mm至h:mm - vah:mm至ah:mm - vah:mm至h:mm - vah:mm至h:mm + ah:mm至ah:mm [v] + ah:mm至h:mm [v] + ah:mm至h:mm [v] - v HH:mm – HH:mm - v HH:mm – HH:mm + HH:mm–HH:mm [v] + HH:mm–HH:mm [v] - vah时至ah时 - vah时至h时 + ah时至ah时 [v] + ah时至h时 [v] + + + HH–HH [v] - M–M月 + M月至M月 - M/d – M/d - M/d – M/d + M/d至M/d + M/d至M/d - M/dE至M/dE - M/dE至M/dE + d/M (E) 至 d/M (E) + d/M (E) 至 d/M (E) - MMM – MMM + LLL至LLL M月d日至d日 @@ -2111,39 +2180,39 @@ CLDR data files are interpreted according to the LDML specification (http://unic LLLL至LLLL - Gy–y年 + G y至y - Gy年M月至M月 - Gy年M月至y年M月 + G y/M至y/M + G y/M至y/M - Gy/M/d – y/M/d - Gy/M/d – y/M/d - Gy/M/d – y/M/d + G y/M/d至y/M/d + G y/M/d至y/M/d + G y/M/d至y/M/d - Gy/M/dE至y/M/dE - Gy/M/dE至y/M/dE - Gy/M/dE至y/M/dE + G y/M/dE至y/M/dE + G y/M/dE至y/M/dE + G y/M/dE至y/M/dE - Gy年M月至M月 - Gy年M月至y年M月 + G y年M月至M月 + G y年M月至y年M月 - Gy年M月d日至d日 - Gy年M月d日至M月d日 - Gy年M月d日至y年M月d日 + G y年M月d日至d日 + G y年M月d日至M月d日 + G y年M月d日至y年M月d日 - Gy年M月d日E至d日E - Gy年M月d日E至M月d日E - Gy年M月d日E至y年M月d日E + G y年M月d日E至d日E + G y年M月d日E至M月d日E + G y年M月d日E至y年M月d日E - Gy年M月至M月 - Gy年M月至y年M月 + G y年M月至M月 + G y年M月至y年M月 @@ -2151,7 +2220,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + 1月 2月 3月 @@ -2165,32 +2234,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic 11月 12月 - - 一月 - 二月 - 三月 - 四月 - 五月 - 六月 - 七月 - 八月 - 九月 - 十月 - 十一月 - 十二月 - - - 周日 - 周一 - 周二 - 周三 - 周四 - 周五 - 周六 + + + + + + + + 星期日 @@ -2228,8 +2283,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 午夜 - 上午 - 下午 + 上昼 + 下昼 清晨 朝早 中午 @@ -2237,6 +2292,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic 夜晚 凌晨 + + 上昼 + 下昼 + + + 上昼 + 下昼 + + + + + 上昼 + 下昼 + + + 上昼 + 下昼 + @@ -2250,7 +2323,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - y年M月d日EEEE + y年M月d日 EEEE yMMMEEEEd @@ -2276,22 +2349,26 @@ CLDR data files are interpreted according to the LDML specification (http://unic - zzzz HH:mm:ss + HH:mm:ss [zzzz] + HHmmssz - z HH:mm:ss + HH:mm:ss [z] + HHmmssz HH:mm:ss + HHmmss HH:mm + HHmm @@ -2303,6 +2380,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + @@ -2311,6 +2391,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + @@ -2319,62 +2402,70 @@ CLDR data files are interpreted according to the LDML specification (http://unic {1}{0} + + {1}{0} + {1} {0} + + {1}{0} + - Bh时 + Bh点 Bh:mm Bh:mm:ss d日 + EBh点 E Bh:mm E Bh:mm:ss - d日E - Eah:mm - EHH:mm - Eah:mm:ss - EHH:mm:ss + d E + Eah 点 + E ah:mm + E ah:mm:ss Gy年 + GM/y + Gd/M/y + Gd/M/y (E) Gy年M月 Gy年M月d日 - Gy年M月d日E + Gy年M月d日 E ah时 - H时 + H点 ah:mm ah:mm:ss - v ah:mm:ss - v HH:mm:ss - v ah:mm - v HH:mm + ah:mm:ss [v] + HH:mm:ss [v] + ah:mm [v] + HH:mm [v] + ah点 (v) + HH点 (v) M月 M/d - M/dE + M/d(E) MM/dd M月d日 - M月d日E + M月d日 E M月d日 M月第W个星期 y年 - y年M月 + y/M y/M/d - y/M/dE - y年M月 + y/M/d(E) + y/MM y年M月 y年M月d日 - y年M月d日E + y年M月d日 E y年M月 y年QQQ y年QQQQ Y年第w个星期 - - {1}{0} - - {0} – {1} + {0}至{1} Bh时至Bh时 Bh至h时 @@ -2385,7 +2476,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic Bh:mm至h:mm - d–d日 + d日至d日 Gy年至Gy年 @@ -2434,35 +2525,38 @@ CLDR data files are interpreted according to the LDML specification (http://unic ah:mm至h:mm ah:mm至h:mm + + HH:mm至HH:mm + - vah:mm至ah:mm - vah:mm至h:mm - vah:mm至h:mm + ah:mm至ah:mm [v] + ah:mm至h:mm [v] + ah:mm至h:mm [v] - v HH:mm–HH:mm - v HH:mm–HH:mm + HH:mm–HH:mm [v] + HH:mm–HH:mm [v] - vah时至ah时 - vah时至h时 + ah时至ah时 [v] + ah时至h时 [v] - v HH–HH + HH–HH [v] - M–M月 + M月至M月 - M/d – M/d - M/d – M/d + M/d至M/d + M/d至M/d - M/dE至M/dE - M/dE至M/dE + d/M (E) 至 d/M (E) + d/M (E) 至 d/M (E) - MMM – MMM + LLL至LLL M月d日至d日 @@ -2476,21 +2570,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic LLLL至LLLL - y–y年 + y至y - y年M月至M月 - y年M月至y年M月 + y/M至y/M + y/M至y/M - y/M/d – y/M/d - y/M/d – y/M/d - y/M/d – y/M/d + y/M/d至y/M/d + y/M/d至y/M/d + y/M/d至y/M/d - y/M/dE至y/M/dE - y/M/dE至y/M/dE - y/M/dE至y/M/dE + d/M/y (E) 至 d/M/y (E) + d/M/y (E) 至 d/M/y (E) + d/M/y (E) 至 d/M/y (E) y年M月至M月 @@ -2543,24 +2637,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gy年M月d日EEEE - GyMMMEEEEd Gy年M月d日 - GyMMMd Gy年M月d日 - GyMMMd - Gy-M-d + Gy/M/d @@ -2632,19 +2723,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gy年M月d日EEEE - GyMMMEEEEd Gy年M月d日 - GyMMMd Gy年M月d日 - GyMMMd @@ -2656,19 +2744,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic d日(E) + Gy年 Gy年M月 Gy年M月d日 Gy年M月d日E - M月 - M-d - M-dE - LLL + M月d日E + Gy年 + Gy年 Gy/M Gy/M/d Gy/M/d(E) Gy年M月 Gy年M月d日 Gy年M月d日E + Gy年M月 Gy年QQQ Gy年QQQQ @@ -2920,25 +3009,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic Gy年M月d日EEEE - GyMMMEEEEd Gy年M月d日 - GyMMMd Gy年M月d日 - GyMMMd - Gyy-MM-dd - GyyMMdd + Gy/M/d @@ -2964,19 +3049,25 @@ CLDR data files are interpreted according to the LDML specification (http://unic + d日(E) + Gy年 Gy年M月 Gy年M月d日 Gy年M月d日E - M月 - M-d - M-dE - LLL - Gy-MM - Gy-MM-dd - Gy-M-d(E) + HH:mm + HH:mm:ss + MMM d + M月d日E + MMMM d + Gy年 + Gy年 + Gy/M + Gy/M/d + Gy/M/d(E) Gy年M月 Gy年M月d日 Gy年M月d日E + Gy年M月 Gy年QQQ Gy年QQQQ @@ -3017,41 +3108,42 @@ CLDR data files are interpreted according to the LDML specification (http://unic - Gy年M月d日EEEE - GyMMMEEEEd + Gy年M月d日 EEEE Gy年M月d日 - GyMMMd Gy年M月d日 - GyMMMd - Gyy/M/d - GyyMd + Gy/M/d + d日(E) + Gy年 Gy年M月 Gy年M月d日 Gy年M月d日E - M月 - LLL + M月d日E + Gy年 + Gy年 + Gy/M Gy/M/d - Gy/M/dE + Gy/M/d(E) Gy年M月 Gy年M月d日 Gy年M月d日E + Gy年M月 Gy年QQQ Gy年QQQQ @@ -3258,6 +3350,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}时间 + {0}夏令时间 + {0}标准时间 檀香山 @@ -3611,6 +3705,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 复活岛 + + 科伊艾克 + 蓬塔阿雷纳斯 @@ -3876,9 +3973,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 金边 - 恩得伯理岛 - - 坎顿 @@ -4555,9 +4649,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 西非时间 - 西非标准时间 - 西非夏令时间 + 西非时间 @@ -4945,6 +5037,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 盖亚那时间 + + + 夏威夷-阿留申标准时间 + + 夏威夷-阿留申时间 @@ -5486,8 +5583,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic hanidec - hans - hansfin + hant + hantfin 非数值 @@ -5495,7 +5592,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 0 + 0千 0万 00万 000万 @@ -5514,7 +5611,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -5524,18 +5620,30 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 0 + ¤0千 + ¤ 0千 ¤0万 + ¤ 0万 ¤00万 + ¤ 00万 ¤000万 + ¤ 000万 ¤0000万 + ¤ 0000万 ¤0亿 + ¤ 0亿 ¤00亿 + ¤ 00亿 ¤000亿 + ¤ 000亿 ¤0000亿 + ¤ 0000亿 ¤0兆 + ¤ 0兆 ¤00兆 + ¤ 00兆 ¤000兆 + ¤ 000兆 {0} {1} @@ -5743,7 +5851,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 人民币 - 哥伦比亚披索 @@ -5939,6 +6046,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 日圆 + ¥ 肯尼亚先令 @@ -6328,7 +6436,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 委内瑞拉玻利瓦 (1871–2008) - 委内瑞拉玻利瓦 (2008–2018) + 委内瑞拉玻利瓦 (VEF) 委内瑞拉玻利瓦 @@ -6369,6 +6477,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 格瑞那达元 + + 加勒比盾 + 加勒比盾 + 特殊提款权 @@ -6449,6 +6561,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 辛巴威元 (1980–2008) + + 辛巴威金 + 辛巴威金 + 辛巴威元 (2009) @@ -6470,10 +6586,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每 {1} {0} - - 每平方秒公尺 - 每平方秒 {0} 米 - 每平方公里 {0} @@ -6487,19 +6599,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每平方英里 {0} - 每平方吋 {0} + 每平方英寸 {0} - - 每公里公升 - 每公里 {0} 公升 + + 等份 + {0} 等份 - - 每 100 公里公升 - 每 100 公里 {0} 公升 - - - 每加仑英里 - 每加仑 {0} 英里 + + 葡萄糖 + {0} 葡萄糖 {0} 个世纪 @@ -6514,10 +6622,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每月 {0} - 每星期 {0} + 每周 {0} - 每日 {0} + 每天 {0} 每小时 {0} @@ -6531,25 +6639,24 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 伏特 - - 千卡路里 - {0} 千卡路里 - - - {0} 卡路里 - - - 卡路里 - {0} 千焦耳 - - {0} 焦耳 - 字体 em + + 每吋像素 + {0} 像素/吋 + + + 每厘米点数 + {0} 点/厘米 + + + 每吋点数 + {0} 点/吋 + 每公里 {0} @@ -6560,18 +6667,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每厘米 {0} - {0} 英尺 - 每呎 {0} + 每英呎 {0} - {0} 英寸 - 每吋 {0} - - - 天文单位 - - - 英寻 + 每英寸 {0} 每公斤 {0} @@ -6579,9 +6678,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每克 {0} - - 英石 - 每磅 {0} @@ -6591,53 +6687,28 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}格令 - - 百万瓦特 - {0} 百万瓦特 - - - 千瓦特 - {0} 千瓦特 - - - {0} 瓦特 - - - 毫瓦特 - {0} 毫瓦特 - - - 马力 - {0} 匹马力 + + 水银柱 + {0} 水银柱 - 每平方英寸磅力 每平方吋 {0} 磅 - 每小时公里 每小时 {0} 公里 - 每秒公尺 每秒 {0} 米 - 每小时英里 每小时 {0} 英里 - 摄氏度数 摄氏 {0} 度 - 华氏度数 华氏 {0} 度 - - 克耳文 - {0} 克耳文 - 每立方米 {0} @@ -6645,11 +6716,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每立方厘米 {0} - {0} 公升 每公升 {0} - - 蒲式耳 + + 公制液量安士 + {0} 公制液量安士 每加仑 {0} @@ -6660,19 +6731,62 @@ CLDR data files are interpreted according to the LDML specification (http://unic 英制甜品匙{0}匙 - - 光速 - {0} 光速 + + 球面度 + {0} 球面度 - + + 开特 + {0} 开特 + + + 库仑 + {0} 库仑 + + + 法拉 + {0} 法拉 + + + 亨利 + {0} 亨利 + + + 西门子 + {0} 西门子 + + + 国际蒸汽表卡路里 + {0} 国际蒸汽表卡路里 + + + 贝克勒尔 + {0} 贝克勒尔 + + + 希沃特 + {0} 希沃特 + + + 戈瑞 + {0} 戈瑞 + + + 公斤力 + {0} 公斤力 + + + 特斯拉 + {0} 特斯拉 + + + 韦伯 + {0} 韦伯 + + 十亿分点浓度 {0} 十亿分点浓度 - - - {0} 晚 - {0}/晚 - @@ -6784,11 +6898,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} G 力 - 公尺/平方秒 - 每平方秒{0}米 + 米/平方秒 + 每平方秒 {0} 米 - 圈数 + {0} 圈 @@ -6817,13 +6931,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 公顷 - 平方公尺 - {0} 平方公尺 + 平方米 + {0} 平方米 每平方米{0} - 平方公分 - {0} 平方公分 + 平方厘米 + {0} 平方厘米 每平方厘米{0} @@ -6840,13 +6954,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 平方码 - 平方英尺 - {0} 平方英尺 + 平方英呎 + {0} 平方英呎 平方英寸 {0} 平方英寸 - 每平方吋{0} + 每平方英寸{0} 德南 @@ -6868,7 +6982,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 项 - + + 等份 + {0} 等份 + + 百万分率 {0} 百万分率 @@ -6880,17 +6998,21 @@ CLDR data files are interpreted according to the LDML specification (http://unic 摩尔 {0} 摩尔 + + 葡萄糖 + {0} 葡萄糖 + 公升/公里 - 每公里{0}公升 + {0} 公升/公里 - 升/100 公里 - 每100公里 {0} 升 + 公升/100 公里 + {0} 公升/100 公里 英里/加仑 - 每加仑{0}英里 + {0} 英里/加仑 英里/英制加仑 @@ -6927,7 +7049,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 天 - 每日{0} + 每天{0} 小时 @@ -6978,7 +7100,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 卡路里 - {0} 卡 + {0} 卡路里 大卡 @@ -6990,7 +7112,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 焦耳 - {0} 焦 + {0} 焦耳 千瓦小时 @@ -7048,17 +7170,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每厘米像素 {0} 像素/厘米 - - 每吋像素 - {0} 像素/吋 - - 每厘米点数 - {0} 点/厘米 + dpcm + {0} dpcm - 每吋点数 - {0} 点/吋 + dpi + {0} dpi 圆点 @@ -7074,8 +7192,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每公里{0} - 公尺 - {0} 公尺 + + {0} 米 每米{0} @@ -7083,13 +7201,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 公寸 - 公分 - {0} 公分 + 厘米 + {0} 厘米 每厘米{0} - 公厘 - {0} 公厘 + 毫米 + {0} 毫米 微米 @@ -7112,14 +7230,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 码 - 英尺 - {0} 呎 - 每呎{0} + 英呎 + {0} 英呎 + 每英呎{0} 英寸 - {0} 吋 - 每吋{0} + {0} 英寸 + 每英寸{0} 秒差距 @@ -7130,6 +7248,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 光年 + 天文单位 {0} 天文单位 @@ -7137,6 +7256,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 化朗 + 英寻 {0} 英寻 @@ -7198,6 +7318,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 英吨 + 英石 {0} 英石 @@ -7206,13 +7327,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每磅{0} - 盎司 - {0} 盎司 + 安士 + {0} 安士 每安士{0} - 金衡盎司 - {0} 金衡盎司 + 金衡安士 + {0} 金衡安士 克拉 @@ -7239,20 +7360,20 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 吉瓦 - 百万瓦 - {0} 百万瓦 + 百万瓦特 + {0} 百万瓦特 - 千瓦 - {0} 千瓦 + 千瓦特 + {0} 千瓦特 瓦特 - {0} 瓦 + {0} 瓦特 - 毫瓦 - {0} 毫瓦 + 毫瓦特 + {0} 毫瓦特 @@ -7262,6 +7383,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic 毫米汞柱 {0} 毫米汞柱 + + {0} Hg + 磅力/平方英寸 每平方吋{0}磅 @@ -7299,7 +7423,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每小时{0}公里 - 公尺/秒 + 米/秒 每秒{0}米 @@ -7320,6 +7444,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 华氏 + + 克耳文 + {0} 克耳文 + 尺磅 {0} 尺磅 @@ -7333,13 +7461,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 立方公里 - 立方公尺 - {0} 立方公尺 + 立方米 + {0} 立方米 每立方米{0} - 立方公分 - {0} 立方公分 + 立方厘米 + {0} 立方厘米 每立方厘米{0} @@ -7351,8 +7479,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 立方码 - 立方英尺 - {0} 立方英尺 + 立方英呎 + {0} 立方英呎 立方英寸 @@ -7368,8 +7496,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 公升 - {0} 升 - 每升{0} + {0} 公升 + 每公升{0} 公合 @@ -7391,11 +7519,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic 公制量杯 {0} 公制杯 + + 公制液量安士 + {0} 公制液量安士 + - 英亩英尺 - {0} 英亩英尺 + 英亩英呎 + {0} 英亩英呎 + 蒲式耳 {0} 蒲式耳 @@ -7468,11 +7601,63 @@ CLDR data files are interpreted according to the LDML specification (http://unic 英制夸脱 {0} 英制夸脱 + + 球面度 + {0} 球面度 + + + 开特 + {0} 开特 + + + + {0} 库 + + + + {0} 法 + + + + {0} 亨 + + + 西 + {0} 西 + + + 国际蒸汽表卡 + {0} 国际蒸汽表卡 + + + 贝克 + {0} 贝克 + + + + {0} 希 + + + + {0} 戈 + + + 公斤力 + {0} 公斤力 + + + + {0} 特 + + + + {0} 韦 + 光速 {0} 光速 - + 浓度/十亿 @@ -7489,15 +7674,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic - - {0}m/s² + + 等份 + {0} 等份 - - 升/100公里 + + 葡萄糖 + {0} 葡萄糖 B - {0}byte + {0}B MP @@ -7507,53 +7694,112 @@ CLDR data files are interpreted according to the LDML specification (http://unic ppcm {0}ppcm + + {0}ppi + + + {0}dpcm + + + {0}dpi + 每英寸 {0} - - 英寻 - 每公斤 {0} 每克 {0} - - 英石 - 每磅 {0} 每安士 {0} + + {0} Hg + - {0}psi + 每平方吋 {0} 磅 - {0}公里/小时 + 每小时 {0} 公里 - {0}m/s + 每秒 {0} 米 - {0}英里/小时 + 每小时 {0} 英里 °C + + 公制液量安士 + {0} 公制液量安士 + + + 球面度 + {0} 球面度 + + + 开特 + {0} 开特 + + + + {0} 库 + + + + {0} 法 + + + + {0} 亨 + + + 西 + {0} 西 + + + 卡路里-IT + {0} 卡路里-IT + + + 贝克 + {0} 贝克 + + + + {0} 希 + + + + {0} 戈 + + + 公斤力 + {0} 公斤力 + + + + {0} 特 + + + + {0} 韦 + - 光速 {0}光速 - + {0}ppb - {0}晚 - {0}/晚 @@ -7673,7 +7919,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 标记/标准符号 小写变体 表情符号 - 表情符号与人 + 表情符号同人 南亚字体 东南亚字体 空位 @@ -7682,7 +7928,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic 技术符号 声调符号 旅游 - 旅游和地点 + 旅游同地点 向上箭咀 变化型 元音字母 @@ -7760,27 +8006,64 @@ CLDR data files are interpreted according to the LDML specification (http://unic + · {0} + + {title} {given} {given2} {surname} {generation},{credentials} + + + {given-informal} + {surname}{title} {given-informal} + + {given2-monogram-allCaps}{surname-monogram-allCaps}{given-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {given} {credentials},{generation} {given2-initial} + + + {given-informal} + {surname}{title} {given-informal} + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + + + {given-initial} {given2-initial} {surname} + + + {given-informal} + {surname}{title} {given-informal} + + {surname-monogram-allCaps} + + + {given-informal-monogram-allCaps} + - {surname} {given} {credentials} {given2} + {surname} {given} {title},{generation} {given2} {credentials} {surname} {given-informal} @@ -7792,10 +8075,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-informal} - {surname-monogram-allCaps}{given-monogram-allCaps} + {surname-monogram-allCaps}{given-informal-monogram-allCaps} - {surname} {given} {credentials} {given2-initial} + {surname} {given} {credentials},{generation} {given2-initial} {surname} {given-informal} @@ -7807,13 +8090,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-informal} - {surname-monogram} + {surname-monogram-allCaps} - {given-informal-monogram} + {given-informal-monogram-allCaps} - {surname} {given} {given2-initial} + {surname} {given},{given2-initial} {surname} {given} @@ -7831,34 +8114,31 @@ CLDR data files are interpreted according to the LDML specification (http://unic {given-informal-monogram-allCaps} - {surname} {given} {credentials} {given2} + {surname-core} {given} {given2} {surname} {given-informal} - - {surname} {given} {credentials} {given2-initial} - {surname} {given-informal} - {surname} {given} {given2-initial} + {surname-core} {given-initial} {given2-initial} {surname} {given-informal} - 大文 + 文杰 - 大文 - + 雅婷 + - 大文 + 家豪 明德 - + 先生 @@ -7884,9 +8164,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic - 先生 - 大文 - 小二 + 教授 + 怡君 + 小君 + 达印 + + + ∅∅∅ 博士 diff --git a/make/data/cldr/common/main/zh.xml b/make/data/cldr/common/main/zh.xml index 533073cf9f7..6ab65938589 100644 --- a/make/data/cldr/common/main/zh.xml +++ b/make/data/cldr/common/main/zh.xml @@ -305,13 +305,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 巴菲亚语 科隆语 库尔德语 + 库尔德语 + 北库尔德语 库梅克语 库特奈语 科米语 康沃尔语 夸夸瓦拉语 库维语 - 柯尔克孜语 + 吉尔吉斯语 拉丁语 拉迪诺语 朗吉语 @@ -907,6 +909,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 中国 哥伦比亚 克利珀顿岛 + 萨克岛 哥斯达黎加 古巴 佛得角 @@ -1255,35 +1258,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 数字排序 排序强度 货币 + 表情符号表示法 小时制(12或24) - 换行符样式 + 中文、日文及韩语换行规则 + 词内换行规则 度量衡制 数字 + 在缩写后断句 时区 语言区域别名 专用 佛历 + 佛历 农历 + 农历 科普特历 + 科普特历 檀纪历 + 檀纪历 埃塞俄比亚历 + 埃塞俄比亚历 埃塞俄比亚阿米特阿莱姆日历 + 埃塞俄比亚阿米特阿莱姆日历 公历 + 公历 希伯来历 + 希伯来历 印度国定历 伊斯兰历 + 伊斯兰历 表格式伊斯兰历(民用纪元) + 表格式伊斯兰历(民用纪元) 沙特阿拉伯伊斯兰历 表格式伊斯兰历(天文纪元) + 表格式伊斯兰历(天文纪元) 伊斯兰历(乌姆库拉) + 伊斯兰历(乌姆库拉) 国际标准历法 和历 + 和历 波斯历 + 波斯历 民国纪年 + 民国纪年 会计货币格式 + 会计 标准货币格式 + 标准 对符号进行排序 忽略符号进行排序 对重音进行正常排序 @@ -1293,23 +1316,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 先对大写字母进行排序 不区分大小写进行排序 区分大小写进行排序 - 繁体中文排序 - Big5 基于兼容性沿用既往排序 + 兼容性 字典排序 - 默认 Unicode 排序 + 字典 + 默认Unicode排序 + 默认Unicode 表情符号排序 欧洲排序规则 - 简体中文排序 - GB2312 电话簿排序 + 电话簿 语音排序 + 语音 拼音排序 + 拼音 常规搜索 - 按韩文字开首辅音来搜索 + 搜索 + 按谚文初声辅音搜索 标准排序 + 标准 笔画排序 + 笔画 传统排序 + 传统 部首笔画排序 + 部首笔画 注音排序 + 注音 非规范化排序 对 Unicode 进行规范化排序 对数字进行单独排序 @@ -1322,18 +1355,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 全角 半角 数字 + 默认 + 表情符号 + 文字 12小时制(0–11) + 12 (0–11) 12小时制(1–12) + 12 (1–12) 24小时制(0–23) + 24 (0–23) 24小时制(1–24) - 宽松换行符样式 - 正常换行符样式 - 严格换行符样式 + 24 (1–24) + 宽松换行样式 + 宽松 + 正常换行样式 + 正常 + 严格换行样式 + 严格 + 允许断词换行 + 不允许断词换行 + 正常 + 保留短语 美国地名委员会 (BGN) 联合国地名专家组 (UNGEGN) 公制 + 公制 英制 + 英制 美制 + 美制 阿霍姆数字 阿拉伯-印度数字 扩展阿拉伯-印度数字 @@ -1418,6 +1468,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 瓦伊文数字 瓦郎奇蒂数字 万秋数字 + 关闭 + 开启 公制 @@ -1434,8 +1486,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [一 丁 七 万 丈 三 上 下 丌 不 与 丑 专 且 世 丘 丙 业 东 丝 丢 两 严 丧 个 中 丰 串 临 丸 丹 为 主 丽 举 乃 久 么 义 之 乌 乍 乎 乏 乐 乔 乖 乘 乙 九 也 习 乡 书 买 乱 乾 了 予 争 事 二 于 亏 云 互 五 井 亚 些 亡 交 亥 亦 产 亨 享 京 亮 亲 人 亿 什 仁 仅 仇 今 介 仍 从 仔 他 付 仙 代 令 以 仪 们 仰 仲 件 价 任 份 仿 企 伊 伍 伏 伐 休 众 优 伙 会 伟 传 伤 伦 伯 估 伴 伸 似 伽 但 位 低 住 佐 佑 体 何 余 佛 作 你 佤 佩 佳 使 例 供 依 侠 侦 侧 侨 侬 侯 侵 便 促 俄 俊 俗 保 信 俩 修 俱 俾 倍 倒 候 倚 借 倦 值 倾 假 偌 偏 做 停 健 偶 偷 储 催 傲 傻 像 僧 儒 儿 允 元 兄 充 兆 先 光 克 免 兑 兔 党 入 全 八 公 六 兮 兰 共 关 兴 兵 其 具 典 兹 养 兼 兽 内 冈 册 再 冒 写 军 农 冠 冬 冰 冲 决 况 冷 准 凌 减 凝 几 凡 凤 凭 凯 凰 出 击 函 刀 分 切 刊 刑 划 列 刘 则 刚 创 初 判 利 别 到 制 刷 券 刺 刻 剂 前 剑 剧 剩 剪 副 割 力 劝 办 功 加 务 劣 动 助 努 劫 励 劲 劳 势 勇 勉 勋 勒 勤 勾 勿 包 匆 匈 化 北 匙 匹 区 医 十 千 升 午 半 华 协 卒 卓 单 卖 南 博 占 卡 卢 卫 卯 印 危 即 却 卷 厂 厄 厅 历 厉 压 厌 厍 厚 原 去 县 参 又 叉 及 友 双 反 发 叔 取 受 变 叙 口 古 句 另 只 叫 召 叭 可 台 史 右 叶 号 司 叹 吃 各 合 吉 吊 同 名 后 吐 向 吓 吗 君 吝 吟 否 吧 含 听 启 吵 吸 吹 吻 吾 呀 呆 呈 告 呐 员 呜 呢 呦 周 味 呵 呼 命 和 咖 咦 咧 咨 咪 咬 咯 咱 哀 品 哇 哈 哉 响 哎 哟 哥 哦 哩 哪 哭 哲 唉 唐 唤 唬 售 唯 唱 唷 商 啊 啡 啥 啦 啪 喀 喂 善 喇 喊 喏 喔 喜 喝 喵 喷 喻 嗒 嗨 嗯 嘉 嘛 嘴 嘻 嘿 器 四 回 因 团 园 困 围 固 国 图 圆 圈 土 圣 在 圭 地 圳 场 圾 址 均 坎 坐 坑 块 坚 坛 坜 坡 坤 坦 坪 垂 垃 型 垒 埃 埋 城 埔 域 培 基 堂 堆 堕 堡 堪 塑 塔 塞 填 境 增 墨 壁 壤 士 壬 壮 声 处 备 复 夏 夕 外 多 夜 够 夥 大 天 太 夫 央 失 头 夷 夸 夹 夺 奇 奈 奉 奋 奏 契 奔 奖 套 奥 女 奴 奶 她 好 如 妇 妈 妖 妙 妥 妨 妮 妹 妻 姆 姊 始 姐 姑 姓 委 姿 威 娃 娄 娘 娜 娟 娱 婆 婚 媒 嫁 嫌 嫩 子 孔 孕 字 存 孙 孜 孝 孟 季 孤 学 孩 宁 它 宇 守 安 宋 完 宏 宗 官 宙 定 宛 宜 宝 实 审 客 宣 室 宪 害 宴 家 容 宽 宾 宿 寂 寄 寅 密 寇 富 寒 寝 寞 察 寡 寨 寸 对 寻 导 寿 封 射 将 尊 小 少 尔 尖 尘 尚 尝 尤 就 尺 尼 尽 尾 局 屁 层 居 屋 屏 展 属 屠 山 岁 岂 岗 岘 岚 岛 岳 岸 峡 峰 崇 崩 崴 川 州 巡 工 左 巧 巨 巫 差 己 已 巳 巴 巷 币 市 布 帅 师 希 帐 帕 帖 帝 带 席 帮 常 帽 幅 幕 干 平 年 并 幸 幻 幼 幽 广 庆 床 序 库 应 底 店 庙 庚 府 庞 废 度 座 庭 康 庸 廉 廖 延 廷 建 开 异 弃 弄 弊 式 引 弗 弘 弟 张 弥 弦 弯 弱 弹 强 归 当 录 彝 形 彩 彬 彭 彰 影 彷 役 彻 彼 往 征 径 待 很 律 後 徐 徒 得 循 微 徵 德 心 必 忆 忌 忍 志 忘 忙 忠 忧 快 念 忽 怀 态 怎 怒 怕 怖 思 怡 急 性 怨 怪 总 恋 恐 恢 恨 恩 恭 息 恰 恶 恼 悄 悉 悔 悟 悠 患 您 悲 情 惑 惜 惠 惧 惨 惯 想 惹 愁 愈 愉 意 愚 感 愧 慈 慎 慕 慢 慧 慰 憾 懂 懒 戈 戊 戌 戏 成 我 戒 或 战 截 戴 户 房 所 扁 扇 手 才 扎 扑 打 托 扣 执 扩 扫 扬 扭 扮 扯 批 找 承 技 抄 把 抑 抓 投 抗 折 抢 护 报 披 抬 抱 抵 抹 抽 担 拆 拉 拍 拒 拔 拖 拘 招 拜 拟 拥 拦 拨 择 括 拳 拷 拼 拾 拿 持 指 按 挑 挖 挝 挡 挤 挥 挪 振 挺 捉 捐 捕 损 捡 换 据 捷 授 掉 掌 排 探 接 控 推 掩 措 掸 描 提 插 握 援 搜 搞 搬 搭 摄 摆 摊 摔 摘 摩 摸 撒 撞 播 操 擎 擦 支 收 改 攻 放 政 故 效 敌 敏 救 教 敝 敢 散 敦 敬 数 敲 整 文 斋 斐 斗 料 斜 斥 断 斯 新 方 於 施 旁 旅 旋 族 旗 无 既 日 旦 旧 旨 早 旭 时 旺 昂 昆 昌 明 昏 易 星 映 春 昨 昭 是 显 晃 晋 晒 晓 晚 晨 普 景 晴 晶 智 暂 暑 暖 暗 暮 暴 曰 曲 更 曹 曼 曾 替 最 月 有 朋 服 朗 望 朝 期 木 未 末 本 札 术 朱 朵 机 杀 杂 权 杉 李 材 村 杜 束 条 来 杨 杯 杰 松 板 极 构 析 林 果 枝 枢 枪 枫 架 柏 某 染 柔 查 柬 柯 柳 柴 标 栋 栏 树 校 样 核 根 格 桃 框 案 桌 桑 档 桥 梁 梅 梦 梯 械 梵 检 棉 棋 棒 棚 森 椅 植 椰 楚 楼 概 榜 模 樱 檀 欠 次 欢 欣 欧 欲 欺 款 歉 歌 止 正 此 步 武 歪 死 殊 残 段 毅 母 每 毒 比 毕 毛 毫 氏 民 气 氛 水 永 求 汇 汉 汗 汝 江 池 污 汤 汪 汶 汽 沃 沈 沉 沙 沟 没 沧 河 油 治 沿 泉 泊 法 泛 泡 波 泣 泥 注 泰 泳 泽 洋 洗 洛 洞 津 洪 洲 活 洽 派 流 浅 测 济 浏 浑 浓 浙 浦 浩 浪 浮 浴 海 涅 消 涉 涛 涨 涯 液 涵 淋 淑 淘 淡 深 混 添 清 渐 渡 渣 温 港 渴 游 湖 湾 源 溜 溪 滋 滑 满 滥 滨 滴 漂 漏 演 漠 漫 潘 潜 潮 澎 澳 激 灌 火 灭 灯 灰 灵 灿 炉 炎 炮 炸 点 烂 烈 烤 烦 烧 热 焦 然 煌 煞 照 煮 熊 熟 燃 燕 爆 爪 爬 爱 爵 父 爷 爸 爽 片 版 牌 牙 牛 牡 牢 牧 物 牲 牵 特 牺 犯 状 犹 狂 狐 狗 狠 独 狮 狱 狼 猛 猜 猪 献 猴 玄 率 玉 王 玛 玩 玫 环 现 玲 玻 珀 珊 珍 珠 班 球 理 琊 琪 琳 琴 琼 瑙 瑜 瑞 瑟 瑰 瑶 璃 瓜 瓦 瓶 甘 甚 甜 生 用 田 由 甲 申 电 男 甸 画 畅 界 留 略 番 疆 疏 疑 疗 疯 疲 疼 疾 病 痕 痛 痴 癸 登 白 百 的 皆 皇 皮 盈 益 监 盒 盖 盘 盛 盟 目 直 相 盼 盾 省 眉 看 真 眠 眼 着 睛 睡 督 瞧 矛 矣 知 短 石 矶 码 砂 砍 研 破 础 硕 硬 确 碍 碎 碗 碟 碧 碰 磁 磅 磨 示 礼 社 祖 祚 祝 神 祥 票 祯 祸 禁 禅 福 离 秀 私 秋 种 科 秒 秘 租 秤 秦 秩 积 称 移 稀 程 稍 税 稣 稳 稿 穆 究 穷 穹 空 穿 突 窗 窝 立 站 竞 竟 章 童 端 竹 笑 笔 笛 符 笨 第 等 筋 筑 答 策 筹 签 简 算 管 箭 箱 篇 篮 簿 籍 米 类 粉 粒 粗 粤 粹 精 糊 糕 糖 糟 系 素 索 紧 紫 累 繁 红 约 级 纪 纯 纲 纳 纵 纷 纸 纽 线 练 组 细 织 终 绍 经 结 绕 绘 给 络 绝 统 继 绩 绪 续 维 绵 综 绿 缅 缓 编 缘 缠 缩 缴 缶 缸 缺 罐 网 罕 罗 罚 罢 罪 置 署 羊 美 羞 群 羯 羽 翁 翅 翔 翘 翠 翰 翻 翼 耀 老 考 者 而 耍 耐 耗 耳 耶 聊 职 联 聘 聚 聪 肉 肖 肚 股 肤 肥 肩 肯 育 胁 胆 背 胎 胖 胜 胞 胡 胶 胸 能 脆 脑 脱 脸 腊 腐 腓 腰 腹 腾 腿 臂 臣 自 臭 至 致 舌 舍 舒 舞 舟 航 般 舰 船 良 色 艺 艾 节 芒 芝 芦 芬 芭 花 芳 苍 苏 苗 若 苦 英 茂 范 茨 茫 茶 草 荐 荒 荣 药 荷 莉 莎 莪 莫 莱 莲 获 菜 菩 菲 萄 萍 萤 营 萧 萨 落 著 葛 葡 蒂 蒋 蒙 蓉 蓝 蓬 蔑 蔡 薄 薪 藉 藏 藤 虎 虑 虫 虹 虽 虾 蚁 蛇 蛋 蛙 蛮 蜂 蜜 蝶 融 蟹 蠢 血 行 街 衡 衣 补 表 袋 被 袭 裁 裂 装 裕 裤 西 要 覆 见 观 规 视 览 觉 角 解 言 誉 誓 警 计 订 认 讨 让 训 议 讯 记 讲 讷 许 论 设 访 证 评 识 诉 词 译 试 诗 诚 话 诞 询 该 详 语 误 说 请 诸 诺 读 课 谁 调 谅 谈 谊 谋 谓 谜 谢 谨 谱 谷 豆 象 豪 貌 贝 贞 负 贡 财 责 贤 败 货 质 贩 贪 购 贯 贱 贴 贵 贸 费 贺 贼 贾 资 赋 赌 赏 赐 赔 赖 赚 赛 赞 赠 赢 赤 赫 走 赵 起 趁 超 越 趋 趣 足 跃 跌 跑 距 跟 路 跳 踏 踢 踩 身 躲 车 轨 轩 转 轮 软 轰 轻 载 较 辅 辆 辈 辉 辑 输 辛 辞 辨 辩 辰 辱 边 达 迁 迅 过 迈 迎 运 近 返 还 这 进 远 违 连 迟 迦 迪 迫 述 迷 追 退 送 适 逃 逆 选 逊 透 逐 递 途 通 逛 逝 速 造 逢 逸 逻 逼 遇 遍 道 遗 遭 遮 遵 避 邀 邓 那 邦 邪 邮 邱 邻 郎 郑 部 郭 都 鄂 酉 酋 配 酒 酷 酸 醉 醒 采 释 里 重 野 量 金 针 钓 钟 钢 钦 钱 钻 铁 铃 铜 铢 铭 银 铺 链 销 锁 锅 锋 错 锡 锦 键 锺 镇 镜 镭 长 门 闪 闭 问 闰 闲 间 闷 闹 闻 阁 阅 阐 阔 队 阮 防 阳 阴 阵 阶 阻 阿 陀 附 际 陆 陈 降 限 院 除 险 陪 陵 陶 陷 隆 随 隐 隔 障 难 雄 雅 集 雉 雨 雪 雯 雳 零 雷 雾 需 震 霍 霖 露 霸 霹 青 靖 静 非 靠 面 革 靼 鞋 鞑 韦 韩 音 页 顶 项 顺 须 顽 顾 顿 预 领 颇 频 颗 题 额 风 飘 飙 飞 食 餐 饭 饮 饰 饱 饼 馆 首 香 馨 马 驱 驶 驻 驾 验 骑 骗 骚 骤 骨 高 鬼 魂 魅 魔 鱼 鲁 鲜 鸟 鸡 鸣 鸭 鸿 鹅 鹤 鹰 鹿 麦 麻 黄 黎 黑 默 鼓 鼠 鼻 齐 齿 龄 龙 龟] [丐 丛 丫 乒 乓 乞 乳 亢 亩 亭 仂 仆 仑 仓 仗 伞 伪 伶 伺 佃 佣 侄 侈 侍 侣 侥 侮 俏 俐 俘 俭 俯 俺 倔 倘 倡 债 偎 偿 傅 傈 傍 傣 僚 僳 僵 僻 兜 兢 冀 冉 冗 冤 冥 冯 冶 冻 净 凄 凉 凑 凛 凳 凶 凸 凹 凿 刁 刃 删 刨 刮 刹 剃 削 剔 剖 剥 剽 剿 劈 勃 勘 募 勺 匀 匕 匠 匣 匪 匮 匾 匿 卉 卑 卜 卞 卤 卦 卧 卵 卸 卿 厕 厘 厢 厦 厨 叁 叛 叠 叨 叩 叮 叼 叽 吁 吆 吏 吕 吞 吠 吨 吩 吭 吮 吱 吴 吼 呕 呛 呣 呻 咄 咋 咏 咐 咒 咕 咙 咳 咸 咽 哄 哆 哑 哗 哨 哮 哺 哼 唁 唆 唇 唠 唧 唾 啃 啄 啤 啮 啰 啸 啼 喉 喘 喧 喱 喳 嗅 嗓 嗜 嗡 嗦 嗽 嘀 嘘 嘟 嘱 嘲 嘶 嘹 噘 噜 噢 噩 噪 嚎 嚏 嚣 嚷 嚼 囊 囚 囤 囱 圃 坊 坏 坝 坟 坠 坯 坷 垄 垛 垢 垦 垫 垮 埂 埠 堤 堰 堵 塌 塘 墅 墓 墙 墟 墩 壳 壶 壹 夭 夯 奎 奠 奢 奸 妃 妄 妆 妒 妓 姚 姜 姥 姨 姻 娇 娥 娶 婉 婪 婴 婶 婿 媚 媳 嫂 嫉 孪 孵 孽 宅 宠 宦 宫 宰 宵 寓 寥 寺 尉 尧 尬 尴 尸 尿 屈 屉 届 屎 屑 屡 履 屯 屹 屿 岔 岖 岩 岭 峦 峨 峭 峻 崎 崔 崖 崛 崭 嵌 巅 巍 巢 巩 巽 巾 帆 帘 帚 帜 帧 帷 幌 幢 庄 庇 庐 庵 庶 廊 廓 弓 弛 弧 彗 彤 彪 徊 徘 徙 御 徽 忱 忿 怔 怜 怠 怯 恃 恍 恒 恕 恤 恬 恳 悍 悖 悦 悬 悯 悴 悼 惊 惋 惕 惟 惦 惩 惫 惭 惰 惶 愕 愣 愤 愿 慌 慨 慷 憋 憎 憔 憨 懈 懊 懦 戎 戚 戟 戳 扒 扔 扛 扰 扳 扶 扼 抒 抖 抚 抛 抠 抡 押 拂 拄 拇 拌 拎 拐 拓 拗 拙 拢 拣 拧 拭 拯 拱 拴 拽 挂 挎 挚 挟 挠 挣 挨 挫 挽 捂 捅 捆 捌 捍 捎 捏 捞 捣 捧 捶 捺 捻 掀 掂 掏 掐 掘 掠 掰 掷 掺 揉 揍 揣 揩 揪 揭 揽 搀 搁 搂 搅 搏 搓 搔 携 摇 摧 摹 撅 撇 撑 撕 撤 撩 撬 撮 撰 撵 撼 擂 擅 擒 攀 敛 敞 敷 斌 斑 斟 斤 斧 斩 旬 旱 旷 昔 昙 昧 昼 晌 晕 晦 晰 晾 暇 曙 曝 朔 朦 朴 朽 杆 杏 杖 杠 杭 枉 枕 枚 枣 枯 柄 柑 柒 柜 柠 柩 柱 柿 栅 栈 栓 栖 栗 株 栽 桂 桐 桔 桦 桨 桩 桶 梆 梗 梢 梧 梨 梭 梳 棍 棕 棘 棠 棱 棵 棺 椎 椒 椭 椿 楔 楠 楷 榄 榆 榈 榔 榕 榨 榴 槌 槐 槛 槟 槽 槿 樟 横 橄 橇 橘 橙 橡 橱 檐 檬 歇 歧 歹 歼 殃 殉 殖 殴 殷 殿 毁 毙 毡 毯 氓 氢 氧 氨 氮 氯 汁 汛 汞 汰 汹 沁 沐 沛 沥 沦 沪 沫 沮 沸 沼 沽 沾 泄 泌 泞 泪 泵 泻 泼 洁 洒 洼 浆 浇 浊 浣 浸 涂 涌 涎 涕 涝 涡 涣 涤 润 涧 涩 涮 淀 淆 淇 淌 淤 淫 淮 淳 淹 渊 渔 渗 渝 渠 渤 渲 渺 湃 湘 湿 溃 溅 溉 溢 溯 溶 溺 滇 滔 滕 滚 滞 滤 滩 漆 漓 漱 漾 潇 潭 澄 澈 澜 澡 濒 瀑 灶 灸 灼 灾 炊 炒 炕 炫 炬 炭 炼 炽 烁 烘 烙 烛 烟 烫 烹 焉 焊 焕 焙 焚 焰 煎 煤 煽 熄 熏 熔 熙 熬 燥 爹 犀 犁 犄 犬 犸 狈 狞 狡 狭 狰 狸 猎 猕 猖 猩 猫 猬 猾 猿 獭 獾 玖 玷 琅 琉 琐 琢 瑚 璧 瓢 瓣 瓤 瓮 瓷 甥 甩 甫 畏 畔 畜 畴 畸 疙 疚 疟 疤 疫 疮 疹 症 痊 痒 痘 痢 痪 痰 痹 瘟 瘤 瘦 瘩 瘪 瘫 瘸 瘾 癌 癣 皂 皓 皖 皱 皿 盆 盏 盐 盔 盗 盥 盯 盲 盹 眨 眩 眯 眶 眷 睁 睐 睦 睫 睬 睹 睿 瞄 瞅 瞌 瞎 瞒 瞩 瞪 瞬 瞭 瞳 瞻 矗 矢 矩 矫 矮 矾 矿 砌 砖 砚 砰 砸 砾 硅 硝 硫 碌 碑 碘 碱 碳 碾 磊 磕 磷 礁 祀 祈 祟 祠 祭 祷 禀 禄 禹 禽 禾 秃 秆 秉 秧 秸 秽 稚 稠 稻 稼 稽 穗 穴 窃 窄 窍 窑 窒 窖 窘 窜 窟 窥 窿 竖 竣 竭 竿 笆 笋 笙 笺 笼 筏 筐 筒 筛 筝 筷 箕 箩 箫 箸 篓 篡 篱 篷 簇 簧 簸 籽 粑 粘 粟 粥 粪 粮 粱 粽 糙 糠 糯 紊 絮 纠 纤 纫 纬 纱 纹 纺 绅 绊 绎 绑 绒 绚 绞 绢 绣 绰 绳 绷 绸 绽 缀 缄 缆 缉 缎 缔 缕 缚 缝 缤 缭 缰 罩 羔 羚 羡 羹 翩 翱 耕 耘 耙 耸 耻 耽 耿 聂 聆 聋 肃 肆 肇 肋 肌 肘 肛 肝 肠 肢 肪 肮 肴 肺 肾 肿 胀 胃 胚 胧 胰 胳 脂 脉 脊 脏 脐 脓 脖 脚 脯 脾 腋 腔 腕 腥 腮 腺 腻 膀 膊 膏 膛 膜 膝 膨 臀 臊 臼 舀 舅 舆 舔 舱 舵 舶 艇 艘 艮 艰 艳 芋 芙 芜 芥 芯 芹 芽 苇 苑 苔 苛 苜 苞 苟 苣 苹 茁 茄 茅 茉 茎 茧 茬 茵 茸 荆 荔 荡 荤 荧 荫 莓 莴 莹 莺 莽 菇 菊 菌 菠 菱 萌 萎 萝 董 葩 葫 葬 葱 葵 蒜 蒲 蒸 蓄 蓿 蔓 蔗 蔚 蔬 蔼 蔽 蕉 蕊 蕴 蕾 薇 薛 薯 藐 藕 藻 蘑 虏 虐 虚 蚀 蚂 蚊 蚌 蚓 蚕 蚝 蚣 蚤 蚪 蚯 蛀 蛆 蛎 蛐 蛛 蛤 蛰 蛾 蜀 蜈 蜒 蜓 蜕 蜗 蜘 蜡 蜥 蜴 蜻 蝇 蝉 蝌 蝎 蝗 蝙 蝠 蝴 螂 螃 螺 蟀 蟆 蟋 蟑 蠕 衅 衍 衔 衙 衫 衬 衰 衷 袁 袄 袍 袖 袜 袱 裙 裳 裸 裹 褂 褐 褒 褥 褪 襟 觅 触 誊 譬 讥 讳 讶 讹 讼 讽 诀 诈 诊 诡 诫 诬 诱 诲 诵 诽 谆 谍 谎 谐 谚 谣 谤 谦 谬 谭 谴 豁 豌 豚 豫 豹 豺 账 贫 贬 贮 贰 贷 贻 贿 赁 赂 赃 赎 赘 赡 赣 赦 赴 赶 趟 趴 趾 跆 跋 跛 跤 跨 跪 践 跷 跺 踊 踪 踱 蹂 蹄 蹈 蹋 蹦 蹬 蹭 蹲 躁 躏 躬 躯 躺 轧 轴 轿 辐 辖 辗 辙 辜 辟 辣 辫 辽 迂 迄 迢 迭 迹 逗 逞 逮 逾 遂 遏 遣 遥 邑 郁 郊 鄙 酌 酗 酝 酢 酣 酥 酪 酬 酱 酵 酿 醇 醋 醺 鉴 钉 钙 钝 钞 钠 钥 钧 钩 钮 钯 钳 钾 铂 铅 铐 铛 铝 铰 铲 铸 锄 锈 锌 锐 锑 锚 锣 锤 锥 锯 锰 锹 锻 镀 镐 镑 镖 镰 镶 闯 闸 闺 闽 阀 阎 阱 陋 陌 陕 陡 陨 隅 隋 隘 隙 隧 隶 雀 雁 雇 雌 雏 雕 雹 霄 霉 霎 霜 霞 霾 靡 靴 靶 鞍 鞠 鞭 韧 韭 韵 顷 颁 颂 颅 颈 颊 颓 颖 颜 颠 颤 飓 饥 饪 饲 饵 饶 饺 饿 馁 馅 馈 馋 馍 馏 馒 驮 驯 驰 驳 驴 驹 驼 骂 骄 骆 骇 骏 骡 骰 骷 骼 髅 髓 髦 鬈 鬓 魁 魄 魏 鱿 鲍 鲤 鲨 鲫 鲸 鳄 鳍 鳖 鳞 鸢 鸥 鸦 鸯 鸳 鸵 鸽 鹃 鹉 鹊 鹏 鹦 黏 黔 黛 黯 鼎 鼬 龇] [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] - [\- ‑ , . % ‰ + 0 1 2 3 4 5 6 7 8 9 〇 一 七 三 九 二 五 八 六 四] - [﹉﹊﹋﹌ __﹍﹎﹏︳︴ \--﹣ ‐‑ – —︱ ― ,,﹐ 、﹑ ;;﹔ \::﹕ !!﹗ ??﹖ ..﹒ ‥︰ … 。 · '‘’ ""“”〝〞 ((﹙︵ ))﹚︶ \[[ \]] \{{﹛︷ \}}﹜︸ 〈︿ 〉﹀ 《︽ 》︾ 「﹁ 」﹂ 『﹃ 』﹄ 【︻ 】︼ 〔﹝︹ 〕﹞︺ 〖 〗 ‖ § @@﹫ **﹡ // \\\﹨ \&&﹠ ##﹟ %%﹪ ‰ ′ ″ ‵ 〃 ※] + [\- ‑ , . % ‰ + 0 1 2 3 4 5 6 7 8 9 〇 一 七 三 九 二 五 八 六 十 四] + [伍 叁 壹 拾 捌 柒 玖 肆 贰 陆 零] + [\- ‑ – — ,, 、 ;; \:: !! ?? . … 。 · '‘’ "“” (( )) \[ \] \{ \} 《 》 「 」 【 】 @ * \\ \& # % ` \^ + < = > || ~~] + [﹉﹊﹋﹌ _﹍﹎﹏︳︴ -﹣ ‐ ― ﹐ ﹑ ﹔ ﹕ ﹗ ﹖ .﹒ ‥︰ ' "〝〞 ﹙︵ ﹚︶ [ ] {﹛︷ }﹜︸ 〈︿ 〉﹀ ︽ ︾ ﹁ ﹂ 『﹃ 』﹄ ︻ ︼ 〔﹝︹ 〕﹞︺ 〖 〗 ‖ § @﹫ *﹡ / \﹨ &﹠ #﹟ %﹪ ‰ ′ ″ ‵ 〃 ※] + [\- ‐‑ , . {/·}] {0}… …{0} {0}…{1} @@ -1443,9 +1498,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ [\: ∶] - - [££ ₤] - [\--﹣ ‑ ‒ −⁻₋ ➖] [,,﹐︐ ، ٫ 、﹑、︑] @@ -1777,6 +1829,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bh:mm Bh:mm:ss d日 + EBh时 EB h:mm EB h:mm:ss d日E @@ -1790,6 +1843,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ah时 ah:mm ah:mm:ss + vah时 + vH时 MMM M-d M-dE @@ -1958,7 +2013,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 科普特历前 科普特历 @@ -2006,16 +2060,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - 埃塞俄比亚历前 - 埃塞俄比亚历 - - - 埃历前 - 埃历 - - @@ -2025,13 +2069,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - - 埃塞俄比亚阿米特阿莱姆历 - - - @@ -2085,13 +2122,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bh:mm Bh:mm:ss d日 - EB h:mm + EBh时 + EBh:mm EB h:mm:ss d日E + Eah时 Ea h:mm Ea h:mm:ss Gy年 + Gy/M Gy/M/d + Gy/M/d E Gy年M月d日EEEE Gy年M月 Gy年M月d日 @@ -2100,6 +2141,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H时 ah:mm ah:mm:ss + vah时 + vH时 M/d M/dE LL @@ -2438,14 +2481,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bh:mm Bh:mm:ss d日 + EBh时 EBh:mm EBh:mm:ss d日E + Eah时 Eah:mm EHH:mm Eah:mm:ss EHH:mm:ss Gy年 + Gy年M月 + Gy-MM-dd + Gy-MM-ddE Gy年M月 Gy年M月d日 Gy年M月d日E @@ -2453,10 +2501,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H时 ah:mm ah:mm:ss - v ah:mm:ss - v HH:mm:ss - v ah:mm + vah:mm:ss + vHH:mm:ss + vah:mm v HH:mm + vah时 + vH时 M月 M/d M/dE @@ -2585,8 +2635,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ y–y年 - y年M月至M月 - y年M月至y年M月 + y/M – y/M + y/M – y/M y/M/d – y/M/d @@ -2596,25 +2646,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ y/M/dE至y/M/dE y/M/dE至y/M/dE - y/M/dE至y/M/dE + y/M/dE – y/M/dE - y年M月至M月 - y年M月至y年M月 + y年MMM – MMM + y年MMM – y年MMM - y年M月d日至d日 - y年M月d日至M月d日 - y年M月d日至y年M月d日 + y年MMMd日 – d日 + y年MMMd日 – MMMd日 + y年MMMd日 – y年MMMd日 - y年M月d日E至d日E + y年MMMd日E – MMMd日E y年M月d日E至M月d日E y年M月d日E至y年M月d日E - y年M月至M月 - y年M月至y年M月 + y年M月 – M月 + y年M月 – y年M月 @@ -2818,6 +2868,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + Gy/M + Gy-MM-dd E M月 M-d M-dE @@ -2828,6 +2880,38 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + + + + + MMMd日 E – MMMd日 E + + + y-MM-dd E – y-MM-dd E + y-MM-dd E – y-MM-dd E + y-MM-dd E – y-MM-dd E + + + y年MMM–MMM + y年MMM – y年MMM + + + y年MMMd–d日 + y年MMMd日 – MMMd日 + y年MMMd日 – y年MMMd日 + + + y年MMMd日 E – MMMd日 E + y年MMMd日 E – MMMd日 E + y年MMMd日 E – y年MMMd日 E + + + y年MMM–MMM + y年MMMM – y年MMMM + + + + @@ -3345,6 +3429,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ + Gy年M月 + Gy-MM-dd E M月 LLL Gy/M/d @@ -3438,12 +3524,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 星期 - - 星期 - - - 星期 - 月中日 @@ -3586,7 +3666,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 未知城市 + 未知地点 安道尔 @@ -3715,7 +3795,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 布里斯班 - 麦格理 + 麦夸里岛 豪勋爵岛 @@ -3930,6 +4010,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 复活节岛 + + 科伊艾克 + 蓬塔阿雷纳斯 @@ -4195,9 +4278,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 金边 - 恩德伯里 - - 坎顿岛 @@ -4558,7 +4638,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 雅库茨克 - 符拉迪沃斯托克 + 海参崴 汉德加 @@ -4874,9 +4954,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 西部非洲时间 - 西部非洲标准时间 - 西部非洲夏令时间 + 西部非洲时间 @@ -5264,6 +5342,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 圭亚那时间 + + + 夏威夷-阿留申标准时间 + + 夏威夷-阿留申时间 @@ -5714,6 +5797,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 楚克时间 + + + 土耳其时间 + 土耳其标准时间 + 土耳其夏令时间 + + 土库曼斯坦时间 @@ -5896,8 +5986,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -5909,16 +5997,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 0 ¤0万 + ¤ 0万 ¤00万 + ¤ 00万 ¤000万 + ¤ 000万 ¤0000万 + ¤ 0000万 ¤0亿 + ¤ 0亿 ¤00亿 + ¤ 00亿 ¤000亿 + ¤ 000亿 ¤0000亿 + ¤ 0000亿 ¤0万亿 + ¤ 0万亿 ¤00万亿 + ¤ 00万亿 ¤000万亿 + ¤ 000万亿 {0}{1} @@ -6830,6 +6929,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 东加勒比元 + + 加勒比盾 + 加勒比盾 + 特别提款权 @@ -6910,6 +7013,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 津巴布韦元 (1980–2008) + + 津巴布韦金元 + 津巴布韦金元 + 津巴布韦元 (2009) @@ -7034,13 +7141,21 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 毫摩尔/升 每升{0}毫摩尔 - + + + {0}份 + + 百万分之{0} 摩尔 {0}摩尔 + + 葡萄糖 + {0}葡萄糖 + 升/公里 每公里{0}升 @@ -7276,6 +7391,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 毫米汞柱 {0}毫米汞柱 + + 汞柱 + {0}汞柱 + 磅/平方英寸 每平方英寸{0}磅 @@ -7352,6 +7471,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 牛顿米 {0}牛顿米 + + 公制液量盎司 + {0}公制液量盎司 + 英制甜点匙 {0}英制甜点匙 @@ -7364,19 +7487,62 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 英制夸脱 {0}英制夸脱 - - - {0}光 + + 球面度 + {0}球面度 - + + 开特 + {0}开特 + + + 库仑 + {0}库仑 + + + 法拉 + {0}法拉 + + + 亨利 + {0}亨利 + + + 西门子 + {0}西门子 + + + 国际蒸汽表卡路里 + {0}国际蒸汽表卡路里 + + + 贝克勒尔 + {0}贝克勒尔 + + + 西弗 + {0} 西弗 + + + 戈瑞 + {0}戈瑞 + + + 千克力 + {0}千克力 + + + 特斯拉 + {0}特斯拉 + + + 韦伯 + {0}韦伯 + + 十亿分比 十亿分之{0} - - - {0}晚 - {0}/晚 - 主方向 @@ -7454,9 +7620,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}项 - + + + {0}份 + + {0}ppm + + Glc + {0}Glc + B {0} B @@ -7709,6 +7883,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ mmHg {0} mmHg + + {0}Hg + {0}K @@ -7779,6 +7956,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 公制杯 {0}公制杯 + + 公制液量盎司 + {0}公制液量盎司 + 英亩英尺 {0}英亩英尺 @@ -7849,10 +8030,44 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}撮 + + {0}sr + + + {0}kat + + + 国际蒸汽表卡 + {0}国际蒸汽表卡 + + + 贝克 + {0}贝克 + + + 西弗 + {0}西弗 + + + 戈瑞 + {0}戈瑞 + + + {0}kgf + + + {0}T + + + {0}Wb + {0}光 + + {0}ppb + {0}晚 @@ -7928,9 +8143,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmol/L + + + {0}份 + {0}mol + + Glc + {0}Glc + {0}L/km @@ -8201,6 +8424,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mmHg + + {0}Hg + {0}psi @@ -8369,14 +8595,36 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 英制夸脱 {0}qt-Imp. - - - {0}光 + + {0}sr - - - {0}晚 - {0}/晚 + + {0}kat + + + cal-IT + {0}cal-IT + + + {0}Bq + + + {0}Sv + + + {0}Gy + + + {0}kgf + + + {0}T + + + {0}Wb + + + {0}ppb {0}E diff --git a/make/data/cldr/common/main/zh_Hans_MY.xml b/make/data/cldr/common/main/zh_Hans_MY.xml index 6a8050439d9..a47e65a3193 100644 --- a/make/data/cldr/common/main/zh_Hans_MY.xml +++ b/make/data/cldr/common/main/zh_Hans_MY.xml @@ -12,6 +12,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic - + @@ -946,6 +948,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 中國 哥倫比亞 克里派頓島 + 薩克島 哥斯大黎加 古巴 維德角 @@ -1260,35 +1263,55 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 數字排序 排序強度 貨幣 + 表情符號展示 時間週期(12 小時制與 24 小時制) 換行樣式 + 單字內的換行 度量單位系統 數字 + 縮寫後斷句 時區 區域變異 私人使用 佛曆 + 佛曆 農曆 + 農曆 科普特曆 + 科普特曆 檀紀曆 + 檀紀曆 衣索比亞曆 + 衣索比亞曆 衣索比亞曆 (Amete Alem) + 衣索比亞曆 (Amete Alem) 公曆 + 公曆 希伯來曆 + 希伯來曆 印度國曆 伊斯蘭曆 + 伊斯蘭曆 伊斯蘭民用曆 + 表格式伊斯蘭曆(民用紀元) 伊斯蘭新月曆 伊斯蘭天文曆 + 表格式伊斯蘭曆(天文紀元) 伊斯蘭曆(烏姆庫拉) + 伊斯蘭曆(烏姆庫拉) ISO 8601 國際曆法 - 日本曆 + 和曆 + 和曆 波斯曆 + 波斯曆 國曆 + 國曆 會計貨幣格式 + 會計 標準貨幣格式 + 標準 排序符號 略過符號排序 正常排序重音 @@ -1298,23 +1321,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 優先排序大寫 不分大小寫排序 依大小寫排序 - 繁體中文排序 - Big5 舊制排序 + 相容性 字典排序 + 字典 預設 Unicode 排序 + 預設 Unicode 表情符號 歐洲排序規則 - 簡體中文排序 - GB2312 電話簿排序 + 電話簿 發音排序 + 發音 拼音排序 + 拼音 一般用途搜尋 + 搜尋 依諺文聲母搜尋 標準排序 + 標準 筆畫排序 + 筆畫 傳統排序 + 傳統 部首筆畫排序 + 部首筆畫 注音排序 + 注音 非正規化排序 依正規化排序 Unicode 個別排序數字 @@ -1327,18 +1360,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 全形 半形 數字 + 預設 + 表情符號 + 文字 12 小時制 (0–11) + 12 (0–11) 12 小時制 (1–12) + 12 (1–12) 24 小時制 (0–23) + 24 (0–23) 24 小時制 (1–24) + 24 (1–24) 寬鬆換行樣式 + 寬鬆 一般換行樣式 + 一般 強制換行樣式 + 強制 + 任意字元強迫換行 + 保留完整單字換行 + 一般 + 維持詞組 美國地名委員會 聯合國地名專家組 - 公制 + 公制系統 + 公制 英制度量單位系統 + 英制 美制度量單位系統 + 美制 阿洪姆數字 阿拉伯-印度數字 阿拉伯-印度擴充數字 @@ -1418,6 +1468,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 傳統數字 瓦伊文數字 瓦蘭齊地數字 + 關閉 + 開啟 公制 @@ -1754,6 +1806,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bh:mm Bh:mm:ss d日 + EBh時 E Bh:mm E Bh:mm:ss d E @@ -1768,6 +1821,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH時 Bh:mm Bh:mm:ss + ah v MMM M/d M/dE @@ -2115,29 +2169,41 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {1} {0} + + {1}{0} + {1} {0} + + {1}{0} + {1} {0} + + {1}{0} + Bh時 Bh:mm Bh:mm:ss d日 + EB h E Bh:mm E Bh:mm:ss d E + E ah  E Bh:mm E Bh:mm:ss G y年 G y/M/d + G y-MM-dd E G y年M月 G y年M月d日 G y年M月d日 E @@ -2147,6 +2213,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ H:mm Bh:mm:ss H:mm:ss + ah v M月 M/d M/d(E) @@ -2406,22 +2473,43 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - {1} {0} + {1}{0} + + + {1}{0} + + + {1}{0} - {1} {0} + {1}{0} + + + {1}{0} + + + {1}{0} - {1} {0} + {1}{0} + + + {1}{0} + + + {1}{0} - {1} {0} + {1}{0} + + + {1}{0} @@ -2429,13 +2517,17 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Bh:mm Bh:mm:ss d日 - E Bh:mm - E Bh:mm:ss + EBh時 + EBh:mm + EBh:mm:ss d E - E Bh:mm - E Bh:mm:ss + Eah時 + EBh:mm + EBh:mm:ss Gy年 + Gy/M G y/M/d + Gy/M/d(E) Gy年M月 Gy年M月d日 Gy年M月d日 E @@ -2447,12 +2539,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm:ss [v] Bh:mm [v] HH:mm [v] + ah v M月 M/d M/d(E) MM/dd M月d日 - M月d日 E + M月d日E M月d日 MMMM的第W週 y年 @@ -2463,7 +2556,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ y/MM y年M月 y年M月d日 - y年M月d日 E + y年M月d日E y年M月 y年QQQ y年QQQQ @@ -2799,7 +2892,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ d日(E) Gy年 + Gy/M GGGGG y/M/d + Gy-MM-dd E Gy年M月 Gy年M月d日 Gy年M月d日E @@ -3437,7 +3532,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Gy年 + Gy年M月 Gy/M/d + Gy年M月d日(E) Gy年M月 Gy年M月d日 Gy年M月d日E @@ -3461,12 +3558,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 紀元 - - 紀元 - - - 紀元 - 去年 @@ -3522,9 +3613,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 月週次 - - 月週次 - 前天 @@ -3542,30 +3630,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 該年第幾天 - - 該年第幾天 - - - 該年第幾天 - 星期 - - 星期 - - - 星期 - 該月第幾週 - - 該月第幾週 - - - 該月第幾週 - 上週日 本週日 @@ -3643,15 +3713,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} 個週六前 - - 時段 - 時段 - - 時段 - 小時 這一小時 @@ -3665,9 +3729,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - 分鐘 這一分鐘 @@ -3681,9 +3742,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - - - 現在 @@ -4054,6 +4112,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 復活島 + + 科伊艾克 + 蓬塔阿雷納斯 @@ -4319,9 +4380,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 金邊 - 恩得伯理島 - - 坎頓島 @@ -4998,9 +5056,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - 西非時間 - 西非標準時間 - 西非夏令時間 + 西非時間 @@ -5421,6 +5477,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 蓋亞那時間 + + + 夏威夷-阿留申標準時間 + + + HAST + + 夏威夷-阿留申時間 @@ -5876,6 +5940,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 楚克島時間 + + + 土耳其時間 + 土耳其標準時間 + 土耳其夏令時間 + + 土庫曼時間 @@ -6003,8 +6074,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 - #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -6016,16 +6085,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 0 ¤0萬 + ¤ 0萬 ¤00萬 + ¤ 00萬 ¤000萬 + ¤ 000萬 ¤0000萬 + ¤ 0000萬 ¤0億 + ¤ 0億 ¤00億 + ¤ 00億 ¤000億 + ¤ 000億 ¤0000億 + ¤ 0000億 ¤0兆 + ¤ 0兆 ¤00兆 + ¤ 00兆 ¤000兆 + ¤ 000兆 @@ -6294,7 +6374,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 埃及鎊 - 厄立特里亞納克法 + 厄利垂亞納可法 + 厄利垂亞納可法 西班牙比塞塔(會計單位) @@ -6515,7 +6596,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 摩爾多瓦券 - 摩杜雲列伊 + 摩爾多瓦列伊 + 摩爾多瓦列伊 馬達加斯加阿里亞里 @@ -6596,7 +6678,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 尼加拉瓜科多巴 - 尼加拉瓜金科多巴 + 尼加拉瓜科多巴 + 尼加拉瓜科多巴 荷蘭盾 @@ -6838,7 +6921,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 西薩摩亞塔拉 - 法郎 (CFA–BEAC) + 中非法郎 + 中非法郎 白銀 @@ -6861,6 +6945,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 格瑞那達元 + + 加勒比盾 + 加勒比盾 + 特殊提款權 @@ -6874,13 +6962,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 法國法郎 (UIC) - 法郎 (CFA–BCEAO) + 西非法郎 + 西非法郎 帕拉狄昂 - 法郎 (CFP) + 太平洋法郎 + 太平洋法郎 白金 @@ -6941,6 +7031,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 辛巴威元 (1980–2008) + + 辛巴威金 + 辛巴威金 + 辛巴威元 (2009) @@ -7022,6 +7116,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 每公升毫莫耳 每公升 {0} 毫莫耳 + + 比例 + {0} 比例 + + + 葡萄糖 + {0} 葡萄糖 + 每公里公升 每公里 {0} 公升 @@ -7118,10 +7220,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} 英寸 每英寸 {0} - - 斯堪地那維亞里 - {0} 斯堪地那維亞里 - 太陽半徑 {0} 太陽半徑 @@ -7161,6 +7259,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 馬力 {0} 匹馬力 + + 汞柱 + {0} 汞柱 + 每平方英寸磅力 每平方英寸 {0} 磅力 @@ -7203,21 +7305,75 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} 公升 每公升 {0} + + 公制液盎司 + {0}公制液盎司 + 每加侖 {0} 每英制加侖 {0} - + + 球面度 + {0} 球面度 + + + 開特 + {0} 開特 + + + 庫侖 + {0} 庫侖 + + + 法拉 + {0} 法拉 + + + 亨利 + {0} 亨利 + + + 西門子 + {0} 西門子 + + + 卡路里-IT + + + 貝克勒 + {0} 貝克勒 + + + 西弗 + {0} 西弗 + + + 戈雷 + {0} 戈雷 + + + 公斤力 + {0} 公斤力 + + + 特斯拉 + {0} 特斯拉 + + + 韋伯 + {0} 韋伯 + + + 光速 + {0} 倍光速 + + 十億分點濃度 {0} 十億分點濃度 - - - {0} 夜 - {0}/夜 - 基本方向 @@ -7384,7 +7540,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 個項目 {0} 個項目 - + + 比例 + {0}比例 + + 百萬分率 {0} 百萬分率 @@ -7398,6 +7558,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 莫耳 {0} 莫耳 + + 葡萄糖 + 公升/公里 {0} 升/公里 @@ -7595,8 +7758,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 英尺 - {0} 呎 - {0}/呎 + {0}英尺 + {0}/英尺 英寸 @@ -7645,7 +7808,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 流明 - {0} 流明 公噸 @@ -7872,6 +8034,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 公制量杯 {0} 公制杯 + + 公制液盎司 + {0}公制液盎司 + 英畝英尺 {0} 英畝英尺 @@ -7950,7 +8116,32 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ 英制夸脫 {0} 英制夸脫 - + + 開特 + + + 庫侖 + {0} 庫侖 + + + 法拉 + {0} 法拉 + + + 亨利 + {0} 亨利 + + + 西門子 + + + 卡路里-IT + + + 光速 + {0} 倍光速 + + 濃度/十億 @@ -8030,12 +8221,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}個項目 - + + 比例 + {0} 比例 + + {0}百萬分率 {0}莫耳 + + 葡萄糖 + {0}升/公里 @@ -8206,7 +8404,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}碼 - {0}呎 + {0}英尺 + {0}/英尺 {0}吋 @@ -8230,7 +8429,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}nmi - 斯堪地那維亞里 {0}smi @@ -8246,7 +8444,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}燭光 - {0}流明 + lm + {0}lm {0}L☉ @@ -8416,6 +8615,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}公制杯 + + 公制液盎司 + {0}公制液盎司 + {0}英畝英尺 @@ -8473,13 +8676,34 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}英制夸脫 - + + 開特 + + + 庫侖 + + + 法拉 + + + 亨利 + {0} 亨利 + + + 西門子 + + + 卡路里-IT + + + 光速 + {0}倍光速 + + {0}ppb - {0}夜 - {0}/夜 diff --git a/make/data/cldr/common/main/zh_Hant_HK.xml b/make/data/cldr/common/main/zh_Hant_HK.xml index 8d6ffd863bb..1a49e48c798 100644 --- a/make/data/cldr/common/main/zh_Hant_HK.xml +++ b/make/data/cldr/common/main/zh_Hant_HK.xml @@ -50,6 +50,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic 扎扎其文 坎納達文 克裡奧爾文 + 庫德文 + 北庫德文 老撾文 盧歐文 毛里裘斯克里奧爾文 @@ -203,10 +205,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic 埃塞俄比亞曆 + 埃塞俄比亞曆 埃塞俄比亞阿美德阿萊姆曆 - 繁體中文排序 (Big5) + 埃塞俄比亞阿美德阿萊姆曆 + 伊斯蘭曆(表格曆,民用紀元) + 伊斯蘭曆(表格式,天文紀元) 詞典排序 - 簡體中文排序 (GB2312) + 詞典 英制 美制 天城體數字 @@ -329,6 +334,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic HH ah:mm ah:mm:ss + ah時 v r(U)年MMMMd日 r(U)年MMMMd日 E @@ -399,12 +405,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic + EB h時 d日E + E ah 時 E ah:mm Gy年 Gy年M月 Gy年M月d日 Gy年M月d日E + ah時 v d/M d/M(E) M月d日E @@ -566,22 +575,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic - {1} {0} + {1}{0} - {1} {0} + {1}{0} - {1} {0} + {1}{0} - {1} {0} + {1}{0} @@ -593,16 +602,16 @@ CLDR data files are interpreted according to the LDML specification (http://unic ah:mm:ss ah:mm:ss [v] ah:mm [v] + vah時 + vH時 d/M d/M(E) dd/MM - M月d日E M月第W週 M/y d/M/y d/M/y(E) MM/y - y年M月d日E Y年第w週 @@ -748,6 +757,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic 星期幾 + + 星期幾 + + + 星期幾 + 上星期日 本星期日 @@ -1096,9 +1111,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 比斯凱克 - - 恩德伯里島 - 科摩羅 @@ -1566,17 +1578,29 @@ CLDR data files are interpreted according to the LDML specification (http://unic ¤0K + ¤ 0K ¤00K + ¤ 00K ¤000K + ¤ 000K ¤0M + ¤ 0M ¤00M + ¤ 00M ¤000M + ¤ 000M ¤0B + ¤ 0B ¤00B + ¤ 00B ¤000B + ¤ 000B ¤0T + ¤ 0T ¤00T + ¤ 00T ¤000T + ¤ 000T @@ -1683,9 +1707,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic 立陶宛里塔 - - 摩爾多瓦列伊 - 毛里塔尼亞烏吉亞 (1973–2017) @@ -1773,18 +1794,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic 瓦努阿圖瓦圖 - - 中非法郎 - 東加勒比元 多哥非洲共同體法郎 - 西非法郎 - - - 太平洋法郎 也門里雅 @@ -1792,6 +1806,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic 贊比亞克瓦查 + + 津布巴韋金 + 津布巴韋金 + @@ -1831,6 +1849,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic 每公升毫摩爾 每公升 {0} 毫摩爾 + + 等份 + {0} 等份 + + + 百萬分比 + {0} 百萬分比 + 公升/公里 {0} 公升/公里 @@ -1988,9 +2014,33 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 每公升 + + 公制液安士 + {0} 公制液安士 + {0} 每加侖 + + 國際蒸汽表卡路里 + {0} 國際蒸汽表卡路里 + + + 貝克勒爾 + {0} 貝克勒爾 + + + 希沃特 + {0} 希沃特 + + + 戈瑞 + {0} 戈瑞 + + + 十億分比 + 十億分之{0} + 東經 {0} 北緯 {0} @@ -2090,6 +2140,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic 毫摩爾/公升 {0} 毫摩爾/公升 + + 等份 + {0}等份 + + + 百萬分比 + {0} 百萬分比 + + + {0}葡萄糖 + {0} 升每公里 @@ -2272,6 +2333,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 公制量杯 + + 公制液安士 + {0} 公制液安士 + 英畝呎 {0} 英畝呎 @@ -2290,6 +2355,44 @@ CLDR data files are interpreted according to the LDML specification (http://unic 英制液安士 {0} 英制液安士 + + 球面度 + {0}球面度 + + + {0}開特 + + + 國際蒸汽表卡 + {0} 國際蒸汽表卡 + + + 貝克 + {0} 貝克 + + + + {0} 希 + + + + {0} 戈 + + + 公斤力 + {0}公斤力 + + + 特斯拉 + {0}特斯拉 + + + 韋伯 + {0}韋伯 + + + 十億分比 + {0} 東 {0} 北 @@ -2310,9 +2413,17 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 個項目 - + + 等份 + {0}等份 + + + 百萬分比 {0} ppm + + {0}葡萄糖 + {0}L/100km @@ -2406,8 +2517,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0} 量杯 - - {0} 每加侖 + + 公制液穴士 {0}英液安士 @@ -2415,11 +2526,51 @@ CLDR data files are interpreted according to the LDML specification (http://unic {0}英制甜品匙 + + 球面度 + {0}球面度 + + + {0}開特 + + + {0} 庫侖 + + + {0} 法拉 + + + {0} 卡路里-IT + + + 貝克 + {0}貝克 + + + + {0}希 + + + + {0}戈 + + + 公斤力 + {0}公斤力 + + + 特斯拉 + {0}特斯拉 + + + 韋伯 + {0}韋伯 + {0}夜 - - 濃度/十億 + + ppb {0}E diff --git a/make/data/cldr/common/main/zu.xml b/make/data/cldr/common/main/zu.xml index bd893062aa9..c2469190306 100644 --- a/make/data/cldr/common/main/zu.xml +++ b/make/data/cldr/common/main/zu.xml @@ -45,6 +45,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ isi-Azerbaijani isi-Azeria isi-Bashkir + IsiBaluchi isi-Balinese isi-Basaa isi-Belarusian @@ -90,7 +91,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ isi-Carolina Algonquian i-Seselwa Creole French isi-Czech - Swampy Cree + isi-Swampy Cree isi-Church Slavic isi-Chuvash isi-Welsh @@ -233,11 +234,13 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ isi-Bafia isi-Colognian isi-Kurdish + isiKurdish + isiKurmanji isi-Kumyk isi-Komi isi-Cornish Kwakʼwala - Kuvi + isiKuvi isi-Kyrgyz isi-Latin isi-Ladino @@ -449,9 +452,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ isi-Uzbek isi-Vai isi-Venda - IsiVenetian + isiVenetian isi-Vietnamese - Makhuwa + isiMakhuwa isi-Volapük isiVunjo isi-Walloon @@ -689,7 +692,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ i-Eastern Europe i-Northern Europe i-Western Europe - Sub-Saharan Africa + i-Sub-Saharan Africa i-Latin America i-Ascension Island i-Andorra @@ -745,6 +748,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ i-China i-Colombia i-Clipperton Island + i-Sark i-Costa Rica i-Cuba i-Cape Verde @@ -960,8 +964,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ i-Vanuatu i-Wallis ne-Futuna i-Samoa - Pseudo-Accents - Pseudo-Bidi + i-Pseudo-Accents + i-Pseudo-Bidi i-Kosovo i-Yemen i-Mayotte @@ -1090,35 +1094,54 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Ukuhlelwa Ngezinombolo Amandla Okuhlelwa Imali + Emoji Presentation Umjikelezo wehora (12 vs 24 I-Line Break Style + Umugqa Uyanqamuka phakathi Kwamagama Isistimu yokulinganisa Izinombolo + Sentence Break After Abbr. Isikhathi Sendawo Okokwehlukanisa Kwasendaweni Yokusetshenziswa Ngasese ikhalenda lesi-Buddhist + Buddhist Ikhalenda lesi-Chinese + Chinese i-Coptic Calender + Coptic Ikhalenda lesi-Dangi + Dangi Ikhalenda lesi-Ethiopic + Ethiopic i-Ethiopic Amete Alem Calender + Ethiopic Amete Alem ikhalenda lesi-Gregorian + Gregorian Ikhalenda lesi-Hebrew + Hebrew i-Indian National Calender Ikhalenda lesi-Hijri + Hijri Ikhalenda lesiHijri (tabular, civil epoch) + Hijri (tabular, civil epoch) Ikhalenda yesi-Islamic (Saudi Arabia, sighting) Ikhalenda yesi-Islamic (tabular, astronomical epoch) Ikhalenda lesiHijri (Umm al-Qura)) + Hijri (Umm al-Qura) Ikhalenda le-ISO-8601 Ikhalenda lesi-Japanese + Japanese Ikhalenda lesi-Persian + Persian Ikhalenda lesi-Minguo + Minguo Ifomethi yemali ye-Accounting + Accounting Ifomethi yemali ejwayelekile + Standard Hlela Izimpawu Hlela Ukuziba Izimpawu Hlela Izindlela Zokuphimisela Ngokujwayelekile @@ -1128,19 +1151,20 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Hlela Izinhlamvu Ezinkulu Kuqala Hlela Okungancikile Ezinkinobhweni Hlela Okuncike Ekumeni Kwezinkinobho - Ukuhlunga kwe-Traditional Chinese - Big5 Ukuhlunga Kwangaphambilini, ngokusebenzisana Uhlelo Lokuhlunga Lesichazamazwi Ukuhlunga okuzenzakalelayo kwe-Unicode + Default Unicode Uhlelo Lokuhlunga le-Emoji Imithetho Yokuhlunga ye-European - Ukuhlunga kwe-Simplified Chinese - GB2312 Ukuhlunga kwebhuku lefoni Hlela Ngokwefonetiki Ukuhlunga nge-Pinyin Usesho olujwayelekile + Sesha Sesha nge-Hangul Ongwaqa Basekuqaleni I-oda yokuhlunga ejwayelekile + Standard Ukuhlunga kwe-Stroke Ukuhlunga ngokisiko Ukuhlunga kwe-Radical-Stroke @@ -1157,18 +1181,35 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ i-Fullwidth Ubude obuhhafu Okwezinombolo + Default + Emoji + Umbhalo isistimu yamahora angu-12 (0-11) + 12 (0–11) isistimu yamahora angu-12 (1-12) + 12 (1–12) isistimu yamahora angu-24 (0-23) + 24 (0–23) isistimu yamahora angu-24 (1-24) + 24 (1–24) i-Line Break Style exegayo + Khulula i-Line Break Style ekahle + Okujwayelekile i-Line Break Style enomthetho oqinile + Qinile + Phula konke + Gcina konke + Okujwayelekile + Gcina emishwaneni I-BGN I-UNGEGN isistimu ye-Metric + Metric isistimu yokulinganisa ebusayo + UK isistimu yokulinganisa yase-US + US Izinombolo ze-Ahom amadijithi esi-Arabic-Indic amadijithi esi-Arabic-Indic eluliwe @@ -1251,6 +1292,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Izinhlazu Zezinombolo ze-Vai Izinombolo ze-Warang Citi Izinombolo ze-Wancho + Cishiwe + Vuliwe i-Metric @@ -1347,7 +1390,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - GGGGG y-MM-dd + G y-MM-dd @@ -1380,7 +1423,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM y G MMM d, y G E, MMM d, y G - h a h:mm a h:mm:ss a M/d @@ -1441,7 +1483,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM d – d - MMM d – MMM d E, MMM d – E, MMM d @@ -1691,7 +1732,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ E h:mm a E h:mm:ss a M/d/y GGGGG - h a h:mm a h:mm:ss a h:mm:ss a v @@ -1706,7 +1746,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - h a – h a h – h a @@ -1731,7 +1770,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ HH:mm – HH:mm v - h a – h a v h – h a v @@ -1751,9 +1789,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ MMM – MMM - - MMM d – MMM d - E, MMM d – E, MMM d E, MMM d – E, MMM d @@ -2770,9 +2805,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ i-Phnom Penh - - i-Enderbury - i-Kiritimati @@ -3434,9 +3466,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ - Isikhathi saseNtshonalanga Afrika - Isikhathi esivamile saseNtshonalanga Afrika - Isikhathi sasehlobo saseNtshonalanga Afrika + Isikhathi saseNtshonalanga Afrika @@ -3793,6 +3823,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ Isikhathi sase-Guyana + + + Isikhathi sase-Hawaii-Aleutia esijwayelekile + + Isikhathi sase-Hawaii-Aleutia @@ -4352,7 +4387,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤#,##0.00 - ¤ #,##0.00 ¤#,##0.00;(¤#,##0.00) @@ -4376,10 +4410,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ ¤ 000K ¤0M ¤ 0M - ¤ 0M + ¤0M + ¤ 0M ¤00M ¤ 00M - ¤ 00M + ¤00M + ¤ 00M ¤000M ¤ 000M ¤000M @@ -4917,6 +4953,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ i-East Caribbean Dollar + + Caribbean guilder + Caribbean guilder + Caribbean guilders + i-West African CFA Franc i-West African CFA Franc @@ -4941,6 +4982,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ i-Zambian Kwacha + + Zimbabwean Gold + Zimbabwean gold + Zimbabwean gold + {0}+ @@ -5056,7 +5102,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} i-karat {0} ama-karats - + ppm @@ -5212,7 +5258,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ karats - + izingxenye/izigidi @@ -5385,7 +5431,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0}mg/dL {0}mg/dL - + {0}item {0}ppm @@ -5470,7 +5516,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ {0} w - {0} + {0} usuku {0} suku diff --git a/make/data/cldr/common/properties/coverageLevels.txt b/make/data/cldr/common/properties/coverageLevels.txt index e8d75b8af16..a4997d08963 100644 --- a/make/data/cldr/common/properties/coverageLevels.txt +++ b/make/data/cldr/common/properties/coverageLevels.txt @@ -9,29 +9,31 @@ af ; modern ; Afrikaans -ak ; moderate ; Akan +ak ; modern ; Akan am ; modern ; Amharic ar ; modern ; Arabic as ; modern ; Assamese ast ; basic ; Asturian az ; modern ; Azerbaijani -bal_Latn ; moderate ; Baluchi (Latin) +ba ; modern ; Bashkir +bal_Latn ; basic ; Baluchi (Latin) be ; modern ; Belarusian bg ; modern ; Bulgarian bgc ; basic ; Haryanvi bho ; basic ; Bhojpuri -blo ; basic ; Anii +blo ; moderate ; Anii bn ; modern ; Bangla br ; moderate ; Breton brx ; basic ; Bodo bs ; modern ; Bosnian bs_Cyrl ; basic ; Bosnian (Cyrillic) +bua ; basic ; Buriat ca ; modern ; Catalan ceb ; moderate ; Cebuano chr ; modern ; Cherokee cs ; modern ; Czech csw ; basic ; Swampy Cree -cv ; basic ; Chuvash +cv ; modern ; Chuvash cy ; modern ; Welsh da ; modern ; Danish de ; modern ; German @@ -40,7 +42,7 @@ dsb ; modern ; Lower Sorbian ee ; basic ; Ewe el ; modern ; Greek en ; modern ; English -eo ; basic ; Esperanto +eo ; moderate ; Esperanto es ; modern ; Spanish et ; modern ; Estonian eu ; modern ; Basque @@ -77,6 +79,7 @@ ka ; modern ; Georgian kea ; basic ; Kabuverdianu kgp ; basic ; Kaingang kk ; modern ; Kazakh +kk_Arab ; modern ; Kazakh (Arabic) km ; modern ; Khmer kn ; modern ; Kannada ko ; modern ; Korean @@ -84,7 +87,7 @@ kok ; modern ; Konkani kok_Latn ; basic ; Konkani (Latin) ks ; basic ; Kashmiri ks_Deva ; basic ; Kashmiri (Devanagari) -ku ; moderate ; Kurdish +ku ; basic ; Kurdish kxv ; basic ; Kuvi kxv_Deva ; basic ; Kuvi (Devanagari) kxv_Orya ; basic ; Kuvi (Odia) @@ -119,11 +122,12 @@ or ; modern ; Odia pa ; modern ; Punjabi pcm ; modern ; Nigerian Pidgin pl ; modern ; Polish +pms ; basic ; Piedmontese ps ; modern ; Pashto pt ; modern ; Portuguese -qu ; moderate ; Quechua +qu ; modern ; Quechua raj ; basic ; Rajasthani -rm ; basic ; Romansh +rm ; modern ; Romansh ro ; modern ; Romanian ru ; modern ; Russian rw ; basic ; Kinyarwanda @@ -131,8 +135,10 @@ sa ; basic ; Sanskrit sah ; basic ; Yakut sat ; basic ; Santali sc ; moderate ; Sardinian +scn ; basic ; Sicilian sd ; modern ; Sindhi sd_Deva ; basic ; Sindhi (Devanagari) +shn ; modern ; Shan si ; modern ; Sinhala sk ; modern ; Slovak sl ; modern ; Slovenian @@ -156,6 +162,7 @@ tn ; basic ; Tswana to ; basic ; Tongan tr ; modern ; Turkish tt ; moderate ; Tatar +tyv ; basic ; Tuvinian ug ; basic ; Uyghur uk ; modern ; Ukrainian ur ; modern ; Urdu diff --git a/make/data/cldr/common/supplemental/attributeValueValidity.xml b/make/data/cldr/common/supplemental/attributeValueValidity.xml index 10f314f7fd3..33158da3595 100644 --- a/make/data/cldr/common/supplemental/attributeValueValidity.xml +++ b/make/data/cldr/common/supplemental/attributeValueValidity.xml @@ -65,7 +65,7 @@ aa ab agq ak an ann apc arn asa - ba bal bas bem bew bez bgn blt bm bo bss byn + ba bal bas bem bew bez bgn blt bm bo bqi bss byn bua cad cch ccp ce cgg cho cic ckb co cop cu dav dje dua dv dyo dz ebu ee ewo @@ -74,15 +74,15 @@ haw hnj ht ii io iu jbo jgo jmc - kaa kab kaj kam kcg kde ken khq ki kkj kl kln kpe ksb ksf ksh kw - la lag lg lkt lld ln lrc ltg lu luo luy - mas mdf mer mfe mhn mg mgh mgo mic moh mua mus myv mzn - naq nb nd nmg nnh nr nso nus nv ny nyn om - os osa - pap pis + kaa kab kaj kam kcg kde kek ken khq ki kkj kl kln kpe ksb ksf ksh kw + la lag lg lkt lld ln lrc ltg lu luo luy lzz + mas mdf mer mfe mhn mg mgh mgo mic moh mua mus mww myv mzn + nan naq nb nd nmg nnh nr nso nus nv ny nyn om + oka os osa + pap pi pis pms quc rhg rif rn rof rw rwk - saq sbp scn sdh se seh ses sg shi shn sid skr sma smj smn sms sn ss ssy st + saq sbp scn sdh se seh ses sg sgs shi shn sid skr sma smj smn sms sn ss ssy st suz teo tig tn tok tpi trv trw ts twq tyv tzm vai ve vo vun wa wae wal wbp @@ -146,7 +146,7 @@ Maldivian Mongolian Oriya Pashto Persian Pinyin Russian Serbian Simplified Syriac Tamil Telugu Thai ThaiLogical Turkmen Ukrainian Uzbek az ch cs cs_FONIPA dsb el es es_419 es_FONIPA it ja_Latn la lt nl pl pl_FONIPA ro ro_FONIPA ru sk sk_FONIPA tlh tr ug uz_Cyrl yo zh_Latn_PINYIN ASCII Accents Armenian Bengali Bopomofo CanadianAboriginal ConjoiningJamo Devanagari Ethiopic Gujarati Gurmukhi Halfwidth Hangul InterIndic Jamo Kannada - Katakana Latin Lower Malayalam NumericPinyin Oriya Publishing Spacedhan Tamil Telugu Thaana Thai ThaiLogical ThaiSemi Title Traditional Upper + Katakana Latin Lower Malayalam NumericPinyin Oriya Publishing Spacedhan Sunuwar Tamil Telugu Thaana Thai ThaiLogical ThaiSemi Title Traditional Upper XSampa am ch_FONIPA cs_FONIPA dsb_FONIPA es_419_FONIPA es_FONIPA ja ko la_FONIPA pl_FONIPA ro_FONIPA ru sk_FONIPA tlh_FONIPA uz_Latn yo_BJ zh $alt $integer @@ -193,7 +193,6 @@ [0-9]+ $_bcp47_keys $_script - $_region $localeOrDeprecated $_variant diff --git a/make/data/cldr/common/supplemental/coverageLevels.xml b/make/data/cldr/common/supplemental/coverageLevels.xml index 2db941b8529..58ce64dd3ba 100644 --- a/make/data/cldr/common/supplemental/coverageLevels.xml +++ b/make/data/cldr/common/supplemental/coverageLevels.xml @@ -8,6 +8,7 @@ For terms of use, see http://www.unicode.org/copyright.html @@ -54,9 +55,9 @@ For terms of use, see http://www.unicode.org/copyright.html - + - + @@ -68,9 +69,8 @@ For terms of use, see http://www.unicode.org/copyright.html - - - + + @@ -81,7 +81,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -100,7 +100,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -108,7 +108,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -124,31 +124,33 @@ For terms of use, see http://www.unicode.org/copyright.html + - - + + - + - + + - + @@ -159,27 +161,24 @@ For terms of use, see http://www.unicode.org/copyright.html - + + - - - - - - - - + + + + @@ -230,38 +229,14 @@ For terms of use, see http://www.unicode.org/copyright.html - - - - - - - - - + + + + - - + + @@ -991,6 +1029,7 @@ modern //ldml/units/unitLength[@type="long"]/unit[@type="speed-light-speed"]/uni + @@ -1022,41 +1061,48 @@ modern //ldml/units/unitLength[@type="long"]/unit[@type="speed-light-speed"]/uni - + + + + + + + + + + + + + + + + + @@ -1084,78 +1130,142 @@ modern //ldml/units/unitLength[@type="long"]/unit[@type="speed-light-speed"]/uni + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1163,18 +1273,33 @@ modern //ldml/units/unitLength[@type="long"]/unit[@type="speed-light-speed"]/uni + + + + + + + + + + + + + + + @@ -1187,12 +1312,22 @@ modern //ldml/units/unitLength[@type="long"]/unit[@type="speed-light-speed"]/uni + + + + + + + + + + @@ -1205,125 +1340,216 @@ modern //ldml/units/unitLength[@type="long"]/unit[@type="speed-light-speed"]/uni + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/make/data/cldr/common/supplemental/dayPeriods.xml b/make/data/cldr/common/supplemental/dayPeriods.xml index a19e6779d87..256230d80b5 100644 --- a/make/data/cldr/common/supplemental/dayPeriods.xml +++ b/make/data/cldr/common/supplemental/dayPeriods.xml @@ -13,13 +13,13 @@ - - - - - - - + + + + + + + @@ -52,13 +52,13 @@ - - - - - - - + + + + + + + @@ -68,29 +68,21 @@ - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + @@ -122,14 +114,6 @@ - - - - - - - - @@ -146,13 +130,13 @@ - - - - - - - + + + + + + + @@ -162,14 +146,6 @@ - - - - - - - - @@ -187,29 +163,21 @@ - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + @@ -220,23 +188,14 @@ - - - - - - - - - - - - - - - - - + + + + + + + + @@ -247,14 +206,6 @@ - - - - - - - - @@ -271,21 +222,6 @@ - - - - - - - - - - - - - - - @@ -294,13 +230,21 @@ - + + + + + + + + + @@ -351,14 +295,6 @@ - - - - - - - - @@ -366,7 +302,7 @@ - + @@ -378,12 +314,12 @@ - - - - - - + + + + + + @@ -396,13 +332,6 @@ - - - - - - - @@ -430,23 +359,14 @@ - - - - - - - - - - - - - - - - - + + + + + + + + @@ -536,22 +456,6 @@ - - - - - - - - - - - - - - - - @@ -578,30 +482,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -635,14 +515,6 @@ - - - - - - - - @@ -663,22 +535,6 @@ - - - - - - - - - - - - - - - - @@ -693,11 +549,11 @@ - - - - - + + + + + @@ -705,12 +561,6 @@ - - - - - - @@ -727,12 +577,12 @@ - - - - - - + + + + + + @@ -741,24 +591,17 @@ - - - - - - + + + + + - - - - - - - - - - - + + + + + @@ -786,12 +629,6 @@ - - - - - - @@ -804,29 +641,23 @@ - - - - - + + + + + - - - - - + + + + + - - - - - - - - - - - + + + + + @@ -835,19 +666,12 @@ - - - - - - - - - - - - - + + + + + + @@ -876,18 +700,6 @@ - - - - - - - - - - - - @@ -908,12 +720,6 @@ - - - - - - @@ -934,12 +740,6 @@ - - - - - - @@ -948,7 +748,7 @@ - + @@ -991,12 +791,6 @@ - - - - - - @@ -1006,21 +800,7 @@ - - - - - - - - - - - - - - - + @@ -1058,18 +838,6 @@ - - - - - - - - - - - - @@ -1148,18 +916,6 @@ - - - - - - - - - - - - @@ -1174,12 +930,6 @@ - - - - - - @@ -1188,12 +938,6 @@ - - - - - - @@ -1217,18 +961,6 @@ - - - - - - - - - - - - diff --git a/make/data/cldr/common/supplemental/languageGroup.xml b/make/data/cldr/common/supplemental/languageGroup.xml index d3d4a89e290..c6d165124a3 100644 --- a/make/data/cldr/common/supplemental/languageGroup.xml +++ b/make/data/cldr/common/supplemental/languageGroup.xml @@ -1,6 +1,6 @@ - + + + + + diff --git a/make/data/cldr/common/supplemental/likelySubtags.xml b/make/data/cldr/common/supplemental/likelySubtags.xml index 8b87d7e23d7..76e215255fd 100644 --- a/make/data/cldr/common/supplemental/likelySubtags.xml +++ b/make/data/cldr/common/supplemental/likelySubtags.xml @@ -16,15 +16,20 @@ not be patched by hand, as any changes made in that fashion may be lost. + + + + + @@ -112,7 +117,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -123,9 +128,15 @@ not be patched by hand, as any changes made in that fashion may be lost. + + + + + + @@ -142,6 +153,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -248,7 +260,9 @@ not be patched by hand, as any changes made in that fashion may be lost. + + @@ -305,10 +319,13 @@ not be patched by hand, as any changes made in that fashion may be lost. + + + @@ -334,6 +351,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -350,6 +368,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -364,6 +383,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -375,14 +395,23 @@ not be patched by hand, as any changes made in that fashion may be lost. + + + + + + + + + @@ -398,6 +427,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -418,6 +448,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -441,7 +472,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -450,6 +481,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -459,7 +491,10 @@ not be patched by hand, as any changes made in that fashion may be lost. - + + + + @@ -469,7 +504,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -484,6 +519,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -505,9 +541,11 @@ not be patched by hand, as any changes made in that fashion may be lost. + + @@ -574,7 +612,17 @@ not be patched by hand, as any changes made in that fashion may be lost. + + + + + + + + + + @@ -585,10 +633,11 @@ not be patched by hand, as any changes made in that fashion may be lost. + + - @@ -597,6 +646,8 @@ not be patched by hand, as any changes made in that fashion may be lost. + + @@ -673,6 +724,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -685,10 +737,13 @@ not be patched by hand, as any changes made in that fashion may be lost. + + + - + @@ -720,7 +775,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -742,6 +797,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -751,7 +807,9 @@ not be patched by hand, as any changes made in that fashion may be lost. + + @@ -767,6 +825,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -802,6 +861,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -812,6 +872,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -848,7 +909,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -884,7 +944,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -1026,7 +1086,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -1080,6 +1140,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -1101,7 +1162,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -1160,7 +1220,14 @@ not be patched by hand, as any changes made in that fashion may be lost. - + + + + + + + + @@ -1169,7 +1236,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -1178,6 +1245,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -1192,7 +1260,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -1254,7 +1321,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -1282,6 +1348,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -1299,6 +1366,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -1312,6 +1380,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -1376,7 +1445,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -1411,6 +1479,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -1445,7 +1514,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -1635,6 +1703,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -1934,6 +2003,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -2095,7 +2165,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -2273,14 +2343,12 @@ not be patched by hand, as any changes made in that fashion may be lost. - - @@ -2296,15 +2364,11 @@ not be patched by hand, as any changes made in that fashion may be lost. - - - - @@ -2350,6 +2414,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -2412,7 +2477,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -2420,7 +2484,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -2567,7 +2631,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -2606,7 +2670,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -2635,7 +2698,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -3163,7 +3226,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -3245,7 +3307,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -3323,6 +3385,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -3517,7 +3580,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -3526,7 +3588,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -3535,7 +3596,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -3689,7 +3749,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -3730,7 +3790,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -3779,7 +3838,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -3819,7 +3878,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -3918,7 +3976,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4030,7 +4087,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4127,6 +4183,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -4167,7 +4224,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4303,7 +4359,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4436,6 +4491,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -4471,7 +4527,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4565,7 +4620,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4692,7 +4746,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4711,7 +4764,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4726,7 +4778,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -4749,6 +4801,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -4770,7 +4823,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -4823,6 +4875,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -4851,7 +4904,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -5347,7 +5399,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -5363,7 +5414,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -5401,6 +5452,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -5576,6 +5628,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -5649,7 +5702,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -5669,7 +5721,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -5756,11 +5807,9 @@ not be patched by hand, as any changes made in that fashion may be lost. - - @@ -5861,13 +5910,11 @@ not be patched by hand, as any changes made in that fashion may be lost. - - @@ -6170,6 +6217,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -6288,7 +6336,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -6465,7 +6512,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -6738,7 +6785,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -6797,7 +6843,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + @@ -6823,7 +6869,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -6835,7 +6880,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -6935,7 +6979,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -7274,7 +7317,6 @@ not be patched by hand, as any changes made in that fashion may be lost. - @@ -7539,6 +7581,7 @@ not be patched by hand, as any changes made in that fashion may be lost. + @@ -7681,7 +7724,7 @@ not be patched by hand, as any changes made in that fashion may be lost. - + diff --git a/make/data/cldr/common/supplemental/metaZones.xml b/make/data/cldr/common/supplemental/metaZones.xml index 9a610defca1..710934fef81 100644 --- a/make/data/cldr/common/supplemental/metaZones.xml +++ b/make/data/cldr/common/supplemental/metaZones.xml @@ -146,8 +146,9 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + + @@ -187,7 +188,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -645,6 +646,9 @@ For terms of use, see http://www.unicode.org/copyright.html + + + @@ -779,7 +783,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -809,8 +813,8 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + @@ -825,8 +829,8 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + @@ -840,22 +844,21 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + - - - + + @@ -865,7 +868,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -894,6 +897,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -939,10 +943,9 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -982,7 +985,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -1030,7 +1034,9 @@ For terms of use, see http://www.unicode.org/copyright.html - + + + @@ -1049,17 +1055,18 @@ For terms of use, see http://www.unicode.org/copyright.html + - - + + - - + + @@ -1071,10 +1078,9 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -1100,8 +1106,8 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + @@ -1180,6 +1186,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -1206,15 +1213,15 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + - - + + @@ -1232,8 +1239,8 @@ For terms of use, see http://www.unicode.org/copyright.html - - + + @@ -1322,6 +1329,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -1348,6 +1356,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -1365,7 +1374,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -1454,8 +1464,7 @@ For terms of use, see http://www.unicode.org/copyright.html - - + @@ -1743,7 +1752,8 @@ For terms of use, see http://www.unicode.org/copyright.html - + + @@ -1926,6 +1936,7 @@ For terms of use, see http://www.unicode.org/copyright.html + diff --git a/make/data/cldr/common/supplemental/numberingSystems.xml b/make/data/cldr/common/supplemental/numberingSystems.xml index 13b3ad5b7eb..e0bdfe12b5c 100644 --- a/make/data/cldr/common/supplemental/numberingSystems.xml +++ b/make/data/cldr/common/supplemental/numberingSystems.xml @@ -101,6 +101,7 @@ For terms of use, see http://www.unicode.org/copyright.html + diff --git a/make/data/cldr/common/supplemental/ordinals.xml b/make/data/cldr/common/supplemental/ordinals.xml index a6636b8df25..c8ea54b9386 100644 --- a/make/data/cldr/common/supplemental/ordinals.xml +++ b/make/data/cldr/common/supplemental/ordinals.xml @@ -1,7 +1,7 @@ - + @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @@ -57,11 +57,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic n % 10 = 6 or n % 10 = 9 or n % 10 = 0 and n != 0 @integer 6, 9, 10, 16, 19, 20, 26, 29, 30, 36, 39, 40, 100, 1000, 10000, 100000, 1000000, … @integer 0~5, 7, 8, 11~15, 17, 18, 21, 101, 1001, … - + n = 11,8,80,800 @integer 8, 11, 80, 800 @integer 0~7, 9, 10, 12~17, 100, 1000, 10000, 100000, 1000000, … - + n = 11,8,80..89,800..899 @integer 8, 11, 80~89, 800~803 @integer 0~7, 9, 10, 12~17, 100, 1000, 10000, 100000, 1000000, … @@ -101,7 +101,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic n % 10 = 3 and n % 100 != 13 @integer 3, 23, 33, 43, 53, 63, 73, 83, 103, 1003, … @integer 0, 4~18, 100, 1000, 10000, 100000, 1000000, … - + n = 1 @integer 1 n = 2,3 @integer 2, 3 n = 4 @integer 4 diff --git a/make/data/cldr/common/supplemental/plurals.xml b/make/data/cldr/common/supplemental/plurals.xml index 9b1100a2832..26cca25551f 100644 --- a/make/data/cldr/common/supplemental/plurals.xml +++ b/make/data/cldr/common/supplemental/plurals.xml @@ -1,7 +1,7 @@ - + i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04 @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … @@ -27,7 +27,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic i = 0,1 @integer 0, 1 @decimal 0.0~1.5 @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … - + i = 1 and v = 0 @integer 1 @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … @@ -76,12 +76,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6 @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … - - n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000 - n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000 - @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … - - + n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000 n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000 @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … @@ -197,6 +192,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic + + n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, … + n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000 + n != 2 and n % 10 = 2..9 and n % 100 != 11..19 @integer 3~9, 22~29, 32, 102, 1002, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, … + f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, … + @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, … + n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, … n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, … diff --git a/make/data/cldr/common/supplemental/rgScope.xml b/make/data/cldr/common/supplemental/rgScope.xml index d7731d7949e..06469310947 100644 --- a/make/data/cldr/common/supplemental/rgScope.xml +++ b/make/data/cldr/common/supplemental/rgScope.xml @@ -8,21 +8,21 @@ For terms of use, see http://www.unicode.org/copyright.html - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/make/data/cldr/common/supplemental/subdivisions.xml b/make/data/cldr/common/supplemental/subdivisions.xml index db8fbad9213..47b17e85213 100644 --- a/make/data/cldr/common/supplemental/subdivisions.xml +++ b/make/data/cldr/common/supplemental/subdivisions.xml @@ -1,7 +1,7 @@ @@ -1188,6 +1191,7 @@ The printed version of ISO-4217:2001 + @@ -1277,38 +1281,28 @@ XXX Code for transations where no currency is involved - - + - - - - - - - - - - + @@ -1316,91 +1310,64 @@ XXX Code for transations where no currency is involved - - - - + + - - - - - - - - - - - + + + - - + - + - - + - - + - - - - - + - - - - - - + - - - - - @@ -1408,42 +1375,35 @@ XXX Code for transations where no currency is involved - - - + - - - + - - + - + + - - + - - - + @@ -1451,19 +1411,15 @@ XXX Code for transations where no currency is involved - - - - + - - + @@ -1473,11 +1429,10 @@ XXX Code for transations where no currency is involved - - + @@ -1485,249 +1440,190 @@ XXX Code for transations where no currency is involved - - - - + - - - - - + - - - + + - + - - - - + - + - + - - + - - - - - + + + - - + - + - - - + - - - + - - - + - - + + - - + + - - - + + - - - - - - - - + - - - - - - + - - - + - - + + - - + - - - - + - - - - + + - - - - - - + + + + - - - - - + - + - - - + - - - - + + - - + - - + - - + - - + - - - + + - - + - @@ -1736,134 +1632,102 @@ XXX Code for transations where no currency is involved - - + + - - - - - - - - - + - - - - - + - - + - - + - - - - - - + - - - - + - - - - - + + - - + - - + - - - - + - - + - @@ -1871,518 +1735,399 @@ XXX Code for transations where no currency is involved - - - - - + - - - - + - - - - - - + - + - - - + - + - - - - + - - + + - - - - + - - + - + - - + - - - + + - + - - + - - - + + - - - + + - - + - - + + - - - - + + + - + - + - - - - + - - - - - + - - + - + - - + - - - - - - + - - - - + - - - - + + - - - - - + + - - - + + - - - + - - - - + + - + - - - - - + - - - - - + - - - + + - - + - - + - + - - - - + - - - - + - - + - - - + - - - + - - - + - - - + - - + - - + - - - - + + - - - - + + + - - - - + - - + + + - + - - - - - + + + + + - + - - + - - + - - - - - - - + + + - - + - - - - - + + - + - - - + - - + - - - - + + + - - - - - - + - + - - + - + - + - - + - - - - - - - + + - - - - + + - - - @@ -2390,29 +2135,21 @@ XXX Code for transations where no currency is involved - - - - - - - + + - - - @@ -2420,9 +2157,7 @@ XXX Code for transations where no currency is involved - - @@ -2432,36 +2167,34 @@ XXX Code for transations where no currency is involved - + - - + + - + - + - - - + + - - - + + @@ -2469,7 +2202,7 @@ XXX Code for transations where no currency is involved - + @@ -2517,8 +2250,10 @@ XXX Code for transations where no currency is involved - - + + + + @@ -2569,7 +2304,8 @@ XXX Code for transations where no currency is involved - + + @@ -2690,74 +2426,78 @@ XXX Code for transations where no currency is involved - - + + - - + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2784,7 +2524,7 @@ XXX Code for transations where no currency is involved - + @@ -2861,12 +2601,14 @@ XXX Code for transations where no currency is involved + + @@ -2970,8 +2712,11 @@ XXX Code for transations where no currency is involved + + + @@ -2998,6 +2743,7 @@ XXX Code for transations where no currency is involved + @@ -3080,6 +2826,7 @@ XXX Code for transations where no currency is involved + @@ -3110,6 +2857,7 @@ XXX Code for transations where no currency is involved + @@ -3122,7 +2870,7 @@ XXX Code for transations where no currency is involved - + @@ -3201,8 +2949,32 @@ XXX Code for transations where no currency is involved - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3228,7 +3000,8 @@ XXX Code for transations where no currency is involved - + + @@ -3392,6 +3165,7 @@ XXX Code for transations where no currency is involved + @@ -3399,7 +3173,8 @@ XXX Code for transations where no currency is involved - + + @@ -3410,8 +3185,7 @@ XXX Code for transations where no currency is involved - - + @@ -3421,6 +3195,8 @@ XXX Code for transations where no currency is involved + + @@ -3441,6 +3217,7 @@ XXX Code for transations where no currency is involved + @@ -3451,7 +3228,6 @@ XXX Code for transations where no currency is involved - @@ -3542,6 +3318,7 @@ XXX Code for transations where no currency is involved + @@ -3564,12 +3341,21 @@ XXX Code for transations where no currency is involved + - - - + + + + + + + + + + + @@ -3615,6 +3401,7 @@ XXX Code for transations where no currency is involved + @@ -3672,7 +3459,9 @@ XXX Code for transations where no currency is involved + + @@ -3686,7 +3475,7 @@ XXX Code for transations where no currency is involved - + @@ -3698,6 +3487,7 @@ XXX Code for transations where no currency is involved + @@ -3866,6 +3656,7 @@ XXX Code for transations where no currency is involved + @@ -4048,7 +3839,7 @@ XXX Code for transations where no currency is involved - + @@ -4063,6 +3854,7 @@ XXX Code for transations where no currency is involved + @@ -4172,7 +3964,7 @@ XXX Code for transations where no currency is involved - + @@ -4199,9 +3991,9 @@ XXX Code for transations where no currency is involved - - - + + + @@ -4255,8 +4047,10 @@ XXX Code for transations where no currency is involved + + @@ -4265,7 +4059,7 @@ XXX Code for transations where no currency is involved - + @@ -4277,7 +4071,7 @@ XXX Code for transations where no currency is involved - + @@ -4307,8 +4101,9 @@ XXX Code for transations where no currency is involved - + + @@ -4392,6 +4187,7 @@ XXX Code for transations where no currency is involved + @@ -4405,6 +4201,7 @@ XXX Code for transations where no currency is involved + @@ -4440,6 +4237,7 @@ XXX Code for transations where no currency is involved + @@ -4522,16 +4320,16 @@ XXX Code for transations where no currency is involved - - + + - + @@ -4764,101 +4562,106 @@ XXX Code for transations where no currency is involved - - + + + - - + + - + + - + + - + + - + + - + + - + - + - + - - + - + - + - - + + - + - + - - + + @@ -4915,7 +4718,7 @@ XXX Code for transations where no currency is involved FI FJ FO FR GB GE GF GP GR HR HU - IE IS IT + IE IT KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ MY @@ -4938,7 +4741,7 @@ XXX Code for transations where no currency is involved ET GT GU HK HN - ID IL IN + ID IL IN IS JM JP KE KH KR LA @@ -4993,7 +4796,7 @@ XXX Code for transations where no currency is involved + regions="AD AM AO AT AW BE BF BJ BL BR CG CI CV CW DE EE FR GA GF GN GP GW HR IL IT KZ MC MD MF MQ MZ NC NL PM PT RE RO SI SR ST TG TR WF YT ku_SY"/> @@ -5526,9 +5329,9 @@ XXX Code for transations where no currency is involved - + - + @@ -5571,7 +5374,7 @@ XXX Code for transations where no currency is involved 100k+ native, plus 1.5 mil 2nd lang speakers. For languages not customarily written, the writing population is artificially set to 5% in the absence of better information. For languages not customarily written, the writing population is artificially set to 5% in the absence of better information. English official; the figure is derived from literacy * lang pop - Canada 2021 Census language "Knowledge of Language"; official status from Wikipedia Languages_of_Canada + Regelmässig verwendete Sprachen - Percent of people that regularly use the language; literacy is mostly in standard German. For languages not customarily written, the writing population is artificially set to 5% in the absence of better information. [missing] Actually literacy in Nko writing unknown but historically they used the Latin script English official, the figure is derived from literacy * lang pop @@ -5593,6 +5396,7 @@ XXX Code for transations where no currency is involved [missing] German official 2020 Russian Census + 2022 Census Used CIA literacy figure times population, added 'Vlaams' population [missing] 70,000 in 1991, 100,000 who understand it, but do not speak it ; ethnic pop 530,000 in 2002 @@ -5624,7 +5428,7 @@ XXX Code for transations where no currency is involved The figure is from Wikipedia article on http://en.wikipedia.org/wiki/List_of_countries_by_English-speaking_population The figure is from Wikipedia article on English-speaking populations [missing] The figure is from Wikipedia article on English-speaking populations - Lang pop est, CIA factbook 15-20% country pop + Precise data not available -- listed with 2 speakers as a tie-breaker CIA Factbook [missing] CIA Factbook. See also http://www.jsmp.minihub.org/Reports/jsmpreports/Language%20Report/LanguageReport(english).pdf @@ -5635,6 +5439,7 @@ XXX Code for transations where no currency is involved English (official, primary language of commerce, administration, and higher education) Ethnologue lists 1 million 2nd lang users of English; no other good figures found. also: http://en.wikipedia.org/wiki/Bosnian_language + [missing] 2021 Census, counting people who are fluent in the language 5% writing pop estimated in absence of other data [missing] @@ -5674,17 +5479,20 @@ XXX Code for transations where no currency is involved Latin script official, used 98.8% of pop * 90% for the usage figure - five eastern provinces of the DRC are Swahili speaking. Nearly half the 66 million Congolese speak it. [missing] + 2022 Census number of people in Ethnic group [missing] [missing] - Most educated Kenyans are able to communicate fluently in Swahili, since it is a compulsory subject in school [missing] [missing] + 2019 Belarus Census English is the first language learned by half the children by the time they reach preschool age; using 92.6% of pop for the English figure Organisation internationale de la Francophonie Meta-study. Data from 2012 and 2016 Eurostat studies on first and second language usage across Europe - 90 percent of approximately 39 million Tanzanians speak Swahili - Baganda generally don't speak Swahili, but it is in common use among the 25 million people elsewhere in the country, and is currently being implemented in schools nationwide (use 75% of Cpop for this figure) [missing] [missing] + Salminen, T. (2007). Europe and North Asia. In Encyclopedia of the world’s endangered languages (pp. 211-280). Routledge. http://www.ofis-bzh.org/fr/langue_bretonne/chiffres_cles/index.php France blocks other languages in state schools; 1.4% attended Breton schools and 3% is estimated as family transmission rate 15.8% of population The 2008 estimate is ~2000 speakers due to revival efforts @@ -5708,13 +5516,16 @@ XXX Code for transations where no currency is involved Spoken by 70% of population, assumed to use Arabic script in Pakistan Reported to be (regional) official in Chuvashia, central Russia: taught at schools. However: http://cv.wikipedia.org/ Chuvash Wikipedia on-line. [missing] + 2022 Belize Census 'A lingua franca and a first language for 10% of the population but understood by 95%' http://en.wikipedia.org/wiki/Krio_language Dutch is spoken as a mother tongue by about 60% of the Surinamese, while most others speak it as a second or third language. main language of trade and comm. in Isan region, except ... media where it gives way to Thai; now largely an unwritten language. 10% writing pop estimated in absence of other data - primarily written using an Arabic-derived alphabet and https://islandstudies.com/files/2016/11/Guernsey-Herm-Sark.pdf - extrapolated GDP from per capita x population understood by 10 million, perhaps. Figure is questionable writing pop artificially set to 5% see also: http://en.wikipedia.org/wiki/Low_German (understood by 10 million people, and native to about 3 million people all around northern Germany) + 2018 Census, counting both maternal and secondary language usage See the 2006 language survey data for 2nd langs = Shimaore + 2018 Census, counting both maternal and secondary language usage. Co-official in Sacatepéquez Common lingua franca, widely used. High literacy. but subtracting 270,000 per https://en.wikipedia.org/wiki/Swiss_Italian [missing] @@ -5771,7 +5582,7 @@ XXX Code for transations where no currency is involved [missing] English official in education, 36.1% 2000 census no other info available for now - https://www.cia.gov/cia/publications/factbook/geos/gt.html Spanish official + [missing] language also called Kamta in India Modern use of Arabic (Jawi) seems to be minimal, but is co-official with ms; set to 5% for now. [missing] @@ -5796,6 +5607,7 @@ XXX Code for transations where no currency is involved population figure from CLDR-17483 ticket No Data Available at present. co-official in South Tyrol + 2018 Census, counting both maternal and secondary language usage. Co-official in Quiché and Totonicapán in Trieste and Gorizia [missing] Information on the Latin/Cyrillic script percentages for Montenegro not currently found. @@ -5814,7 +5626,7 @@ XXX Code for transations where no currency is involved http://en.wikipedia.org/wiki/Akademio_Internacia_de_la_Sciencoj_San_Marino - estimate 100% of the academy can use Esperanto; the language is used as 1st language of instruction; academy has 300 """"""""""""""""""""""""""""""""members"""""""""""""""""""""""""""""""". recognized in West Java Mainly unwritten - Vai script is the main script for this language. + 2018 Census, counting both maternal and secondary language usage. Co-official in Quiché Latin listed as being used (Scriptsource) but no pop figures available. 2011 Census -- the language is not distinguished in the 2021 census but no literacy data @@ -5832,7 +5644,7 @@ XXX Code for transations where no currency is involved No figures available for this language. Estimating at 5%. [missing] [missing] - [missing] + [missing] - near-zero Azeri population in last census http://en.wikipedia.org/wiki/Azerbaijanis_in_Armenia#Current_situation No figures available for breakdown of Latin vs. N'Ko for Bambara. The 2% figure is an estimate. pop 13k. Figure is questionable writing pop artificially set to 5% see also http://en.wikipedia.org/wiki/Upper_Sorbian @@ -5855,7 +5667,7 @@ XXX Code for transations where no currency is involved [missing] [missing] syr is a macrolang containing cld and aii) - [missing] + [missing] [missing] [missing] [missing] @@ -5872,7 +5684,9 @@ XXX Code for transations where no currency is involved [missing] [missing] Mainly in Guangdong Prov, ~70-80 million. Script unspecified so both listed + 2018 Census, counting both maternal and secondary language usage. Co-official in Chiquimula Analyzed from 2011 UK census and other sources + 2018 Census, counting both maternal and secondary language usage. Co-official in Suchitepéquez 2014 Maldives: 98% literacy in Divehi, 75% in English [missing] [missing] @@ -5887,7 +5701,7 @@ XXX Code for transations where no currency is involved Organisation internationale de la Francophonie Meta-study. Data from 1994 study Organisation internationale de la Francophonie Meta-study. Data from 2009 and 2012 studies Regelmässig verwendete Sprachen - Percent of people that regularly use the language - Regelmässig verwendete Sprachen - Percent of people that regularly use the language; literacy is mostly in standard German. For languages not customarily written, the writing population is artificially set to 5% in the absence of better information." + Latin alphabet usage for Kurdish also present but actual amount unknown Organisation internationale de la Francophonie Meta-study. Data from 2014 census Organisation internationale de la Francophonie Meta-study. Data from 2010 questionnaire Organisation internationale de la Francophonie Meta-study. Data from 2008 Census @@ -5912,5 +5726,23 @@ XXX Code for transations where no currency is involved Organisation internationale de la Francophonie Meta-study. Data from 2014 Organisation internationale de la Francophonie Meta-study. Data from 2010 census Organisation internationale de la Francophonie Meta-study. Data from 2007 Census + 1998 SIL study, cited in Ethnologue + from Instituto Cervantes 2021 + from 2013 Honduras census + Canada 2021 Census language 'Knowledge of Language'; official status from Wikipedia Languages_of_Canada + Regis, Riccardo. 'Su pianificazione, standardizzazione, polinomia: due esempi' Zeitschrift für romanische Philologie, vol. 128, no. 1, 2012, pp. 88-133. + Number & script usage hard to pin down because of many speakers in contested Nagorno Karabakh region. + Latin alphabet usage also present but exact breakdown unknown + Cyrillic usage for Kurdish may no longer be as dominant but it used to be + citation from 2016 + 2026 citation + Citation from 2016 + [missing] + [missing] + [missing] + [missing] + [missing] + [missing] + Leclerc (2014) diff --git a/make/data/cldr/common/supplemental/supplementalMetadata.xml b/make/data/cldr/common/supplemental/supplementalMetadata.xml index d8e5052adef..4f1f1804fdd 100644 --- a/make/data/cldr/common/supplemental/supplementalMetadata.xml +++ b/make/data/cldr/common/supplemental/supplementalMetadata.xml @@ -304,7 +304,6 @@ For terms of use, see http://www.unicode.org/copyright.html - @@ -552,6 +551,10 @@ For terms of use, see http://www.unicode.org/copyright.html + + + + @@ -1527,6 +1530,7 @@ For terms of use, see http://www.unicode.org/copyright.html + @@ -1880,8 +1884,8 @@ For terms of use, see http://www.unicode.org/copyright.html aa_ET ab_GE af_ZA agq_CM ak_GH am_ET an_ES ann_NG apc_SY ar_001 arn_CL as_IN asa_TZ ast_ES az_Arab_IR az_Cyrl_AZ az_Latn az_Latn_AZ ba_RU bal_Arab bal_Arab_PK bal_Latn_PK bas_CM be_BY bem_ZM bew_ID bez_TZ bg_BG - bgc_IN bgn_PK bho_IN blo_BJ blt_VN bm_ML bm_Nkoo_ML bn_BD bo_CN br_FR brx_IN - bs_Cyrl_BA bs_Latn bs_Latn_BA bss_CM byn_ER + bgc_IN bgn_PK bho_IN blo_BJ blt_VN bm_ML bm_Nkoo_ML bn_BD bo_CN bqi_IR br_FR brx_IN + bs_Cyrl_BA bs_Latn bs_Latn_BA bss_CM bua_RU byn_ER ca_ES cad_US cch_NG ccp_BD ce_RU ceb_PH cgg_UG cho_US chr_US cic_US ckb_IQ co_FR cop_EG cs_CZ csw_CA cu_RU cv_RU cy_GB da_DK dav_KE de_DE dje_NE doi_IN dsb_DE dua_CM dv_MV dyo_SN dz_BT @@ -1893,27 +1897,28 @@ For terms of use, see http://www.unicode.org/copyright.html hsb_DE ht_HT hu_HU hy_AM ia_001 id_ID ie_EE ife_TG ig_NG ii_CN io_001 is_IS it_IT iu_CA iu_Latn_CA ja_JP jbo_001 jgo_CM jmc_TZ jv_ID - ka_GE kaa_Cyrl kaa_Cyrl_UZ kaa_Latn_UZ kab_DZ kaj_NG kam_KE kcg_NG kde_TZ kea_CV ken_CM kgp_BR + ka_GE kaa_Cyrl kaa_Cyrl_UZ kaa_Latn_UZ kab_DZ kaj_NG kam_KE kcg_NG kde_TZ kea_CV kek_GT ken_CM kgp_BR khq_ML ki_KE kk_Arab_CN kk_Cyrl kk_Cyrl_KZ kkj_CM kl_GL kln_KE km_KH kn_IN ko_KR kok_Deva kok_Deva_IN kok_Latn_IN kpe_LR ks_Arab - ks_Arab_IN ks_Deva_IN ksb_TZ ksf_CM ksh_DE ku_TR kw_GB kxv_Deva_IN kxv_Latn + ks_Arab_IN ks_Deva_IN ksb_TZ ksf_CM ksh_DE ku_Arab_IQ ku_Latn ku_Latn_TR kw_GB kxv_Deva_IN kxv_Latn kxv_Latn_IN kxv_Orya_IN kxv_Telu_IN ky_KG la_VA lag_TZ lb_LU lg_UG lij_IT lkt_US lld_IT lmo_IT ln_CD lo_LA lrc_IR - lt_LT ltg_LV lu_CD luo_KE luy_KE lv_LV + lt_LT ltg_LV lu_CD luo_KE luy_KE lv_LV lzz_TR mai_IN mas_KE mdf_RU mer_KE mfe_MU mg_MG mgh_MZ mgo_CM mhn_IT mi_NZ mic_CA mk_MK ml_IN mn_MN mn_Mong_CN mni_Beng mni_Beng_IN mni_Mtei_IN moh_CA mr_IN ms_Arab_MY ms_MY - mt_MT mua_CM mus_US my_MM myv_RU mzn_IR + mt_MT mua_CM mus_US mww_Hmnp mww_Hmnp_US my_MM myv_RU mzn_IR naq_NA nb nb_NO nd_ZW nds_DE ne_NP nl_NL nmg_CM nn_NO nnh_CM nqo_GN nr_ZA nso_ZA nus_SS nv_US ny_MW nyn_UG - oc_FR om_ET or_IN os_GE osa_US - pa_Arab_PK pa_Guru pa_Guru_IN pap_CW pcm_NG pis_SB pl_PL prg_PL ps_AF pt_BR + oc_FR oka_CA om_ET or_IN os_GE osa_US + pa_Arab_PK pa_Guru pa_Guru_IN pap_CW pcm_NG pi_Latn pi_Latn_GB pis_SB pl_PL pms_IT prg_PL ps_AF pt_BR qu_PE quc_GT raj_IN rhg_Rohg rhg_Rohg_MM rif_MA rm_CH rn_BI ro_RO rof_TZ ru_RU rw_RW rwk_TZ sa_IN sah_RU saq_KE sat_Deva_IN sat_Olck sat_Olck_IN sbp_TZ sc_IT scn_IT - sd_Arab sd_Arab_PK sd_Deva_IN sdh_IR se_NO seh_MZ ses_ML sg_CF shi_Latn_MA + sd_Arab sd_Arab_PK sd_Deva_IN sdh_IR se_NO seh_MZ ses_ML sg_CF sgs_LT shi_Latn_MA shi_Tfng shi_Tfng_MA shn_MM si_LK sid_ET sk_SK skr_PK sl_SI sma_SE smj_SE smn_FI sms_FI sn_ZW so_SO sq_AL sr_Cyrl sr_Cyrl_RS sr_Latn_RS ss_ZA ssy_ER + suz_Deva suz_Sunu_NP suz_Deva_NP st_ZA su_Latn su_Latn_ID sv_SE sw_TZ syr_IQ szl_PL ta_IN te_IN teo_UG tg_TJ th_TH ti_ET tig_ER tk_TM tn_ZA to_TO tok_001 tpi_PG tr_TR trv_TW trw_PK ts_ZA tt_RU twq_NE tyv_RU tzm_MA diff --git a/make/data/cldr/common/supplemental/units.xml b/make/data/cldr/common/supplemental/units.xml index 747b5d79ee5..89b8524a69b 100644 --- a/make/data/cldr/common/supplemental/units.xml +++ b/make/data/cldr/common/supplemental/units.xml @@ -136,7 +136,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -181,10 +181,12 @@ For terms of use, see http://www.unicode.org/copyright.html + + @@ -215,7 +217,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + @@ -265,12 +267,11 @@ For terms of use, see http://www.unicode.org/copyright.html - - - - - - + + + + + @@ -621,15 +622,17 @@ For terms of use, see http://www.unicode.org/copyright.html - + + + + + - + diff --git a/make/data/cldr/common/supplemental/windowsZones.xml b/make/data/cldr/common/supplemental/windowsZones.xml index 7ec2ab619ad..26a62c3f064 100644 --- a/make/data/cldr/common/supplemental/windowsZones.xml +++ b/make/data/cldr/common/supplemental/windowsZones.xml @@ -235,7 +235,7 @@ For terms of use, see http://www.unicode.org/copyright.html - + diff --git a/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java b/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java index c4aaa28193a..a181625c293 100644 --- a/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java +++ b/make/jdk/src/classes/build/tools/cldrconverter/Bundle.java @@ -541,9 +541,12 @@ class Bundle { pattern = (String) parentsMap.remove(key); } if (pattern != null) { + // escape reserved chars, excluding date/time patterns, eg, "{1} {0}" + String transPattern = key.endsWith("-dateTime") ? pattern : escapeReservedChars(pattern); + // Perform date-time format pattern conversion which is // applicable to both SimpleDateFormat and j.t.f.DateTimeFormatter. - String transPattern = translateDateFormatLetters(calendarType, key, pattern, this::convertDateTimePatternLetter); + transPattern = translateDateFormatLetters(calendarType, key, transPattern, this::convertDateTimePatternLetter); dateTimePatterns.add(i, transPattern); // Additionally, perform SDF specific date-time format pattern conversion sdfPatterns.add(i, translateDateFormatLetters(calendarType, key, transPattern, this::convertSDFLetter)); @@ -780,7 +783,7 @@ class Bundle { e -> calendarPrefix + e.getKey(), e -> translateDateFormatLetters(calendarType, e.getKey(), - (String)e.getValue(), + escapeReservedChars((String)e.getValue()), this::convertDateTimePatternLetter) )) ); @@ -844,4 +847,39 @@ class Bundle { )) ); } + + /** + * Escape reserved pattern characters or optional start/ends, + * '#', '{', '}', '[', and ']' in the pattern string. + * + * @param pattern original pattern string + * @return escaped pattern string + * @see DateTimeFormatterBuilder#appendPattern + */ + private static String escapeReservedChars(String pattern) { + StringBuilder out = new StringBuilder(); + boolean inQuote = false; + + for (int i = 0; i < pattern.length(); i++) { + char c = pattern.charAt(i); + if (c == '\'') { + if (i + 1 < pattern.length() && pattern.charAt(i + 1) == '\'') { + // single quote literal + out.append("''"); + i++; + } else { + inQuote = !inQuote; + out.append(c); + } + } else if (!inQuote && + (c == '#' || c == '{' || c == '}' || c == '[' || c == ']')) { + // escape the reserved char + out.append('\'').append(c).append('\''); + } else { + out.append(c); + } + } + + return out.toString(); + } } diff --git a/make/jdk/src/classes/build/tools/cldrconverter/CopyrightHeaders.java b/make/jdk/src/classes/build/tools/cldrconverter/CopyrightHeaders.java index c6016c7cb8f..e2fdb103669 100644 --- a/make/jdk/src/classes/build/tools/cldrconverter/CopyrightHeaders.java +++ b/make/jdk/src/classes/build/tools/cldrconverter/CopyrightHeaders.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,43 +42,53 @@ class CopyrightHeaders { " * Copyright (c) 2012, %d, Oracle and/or its affiliates. All rights reserved.\n" + " */\n"; - // Last updated: - 4/06/2022 + // Last updated: - 11/03/2025 private static final String UNICODE = - "/*\n" + - " * COPYRIGHT AND PERMISSION NOTICE\n" + - " *\n" + - " * Copyright (c) 1991-2022 Unicode, Inc. All rights reserved.\n" + - " * Distributed under the Terms of Use in https://www.unicode.org/copyright.html.\n" + - " *\n" + - " * Permission is hereby granted, free of charge, to any person obtaining\n" + - " * a copy of the Unicode data files and any associated documentation\n" + - " * (the \"Data Files\") or Unicode software and any associated documentation\n" + - " * (the \"Software\") to deal in the Data Files or Software\n" + - " * without restriction, including without limitation the rights to use,\n" + - " * copy, modify, merge, publish, distribute, and/or sell copies of\n" + - " * the Data Files or Software, and to permit persons to whom the Data Files\n" + - " * or Software are furnished to do so, provided that either\n" + - " * (a) this copyright and permission notice appear with all copies\n" + - " * of the Data Files or Software, or\n" + - " * (b) this copyright and permission notice appear in associated\n" + - " * Documentation.\n" + - " *\n" + - " * THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\n" + - " * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n" + - " * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n" + - " * NONINFRINGEMENT OF THIRD PARTY RIGHTS.\n" + - " * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\n" + - " * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\n" + - " * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\n" + - " * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n" + - " * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n" + - " * PERFORMANCE OF THE DATA FILES OR SOFTWARE.\n" + - " *\n" + - " * Except as contained in this notice, the name of a copyright holder\n" + - " * shall not be used in advertising or otherwise to promote the sale,\n" + - " * use or other dealings in these Data Files or Software without prior\n" + - " * written authorization of the copyright holder.\n" + - " */\n"; + """ + /* + * UNICODE LICENSE V3 + * + * COPYRIGHT AND PERMISSION NOTICE + * + * Copyright © 1991-2025 Unicode, Inc. + * + * NOTICE TO USER: Carefully read the following legal agreement. BY + * DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR + * SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE + * TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT + * DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of data files and any associated documentation (the "Data Files") or + * software and any associated documentation (the "Software") to deal in the + * Data Files or Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, and/or sell + * copies of the Data Files or Software, and to permit persons to whom the + * Data Files or Software are furnished to do so, provided that either (a) + * this copyright and permission notice appear with all copies of the Data + * Files or Software, or (b) this copyright and permission notice appear in + * associated Documentation. + * + * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE + * BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA + * FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or other + * dealings in these Data Files or Software without prior written + * authorization of the copyright holder. + * + * SPDX-License-Identifier: Unicode-3.0 + */ + """; private static String OPENJDK2012 = "/*\n" + diff --git a/make/jdk/src/classes/build/tools/cldrconverter/LDMLParseHandler.java b/make/jdk/src/classes/build/tools/cldrconverter/LDMLParseHandler.java index 98c0605f8b7..f41dbad6c6c 100644 --- a/make/jdk/src/classes/build/tools/cldrconverter/LDMLParseHandler.java +++ b/make/jdk/src/classes/build/tools/cldrconverter/LDMLParseHandler.java @@ -123,12 +123,14 @@ class LDMLParseHandler extends AbstractLDMLHandler { case "type": // for LocaleNames/CalendarNames // copy string + // ignore scope="core" { String key = convertOldKeyName(attributes.getValue("key")); - if (key.length() == 2) { + String scope = attributes.getValue("scope"); + if (key.length() == 2 && scope == null) { pushStringEntry(qName, attributes, - CLDRConverter.LOCALE_TYPE_PREFIX + key + "." + - attributes.getValue("type")); + CLDRConverter.LOCALE_TYPE_PREFIX + key + "." + + attributes.getValue("type")); } else { pushIgnoredContainer(qName); } diff --git a/src/java.base/share/classes/java/util/Locale.java b/src/java.base/share/classes/java/util/Locale.java index 452b621ea05..97278cdbafa 100644 --- a/src/java.base/share/classes/java/util/Locale.java +++ b/src/java.base/share/classes/java/util/Locale.java @@ -2364,27 +2364,22 @@ public final class Locale implements Cloneable, Serializable { if (ret == null || ret.equals(type)) { // no localization for this type. try combining key/type separately - String displayType = type; - switch (key) { - case "cu": - displayType = lr.getCurrencyName(type.toLowerCase(Locale.ROOT)); - break; - case "rg": - if (type != null && - // UN M.49 code should not be allowed here - type.matches("^[a-zA-Z]{2}[zZ]{4}$")) { - displayType = lr.getLocaleName(type.substring(0, 2).toUpperCase(Locale.ROOT)); - } - break; - case "tz": - displayType = TimeZoneNameUtility.convertLDMLShortID(type) - .map(id -> TimeZoneNameUtility.retrieveGenericDisplayName(id, TimeZone.LONG, inLocale)) - .orElse(type); - break; - } ret = MessageFormat.format(lr.getLocaleName("ListKeyTypePattern"), getDisplayString(key, null, inLocale, DISPLAY_UEXT_KEY), - Optional.ofNullable(displayType).orElse(type)); + switch (key) { + case "cu" -> { + var cname = lr.getCurrencyName(type.toLowerCase(Locale.ROOT)); + yield cname != null ? cname : type; + } + case "rg" -> type != null && type.matches("^[a-zA-Z]{2}[zZ]{4}$") ? + // UN M.49 code should not be allowed here + lr.getLocaleName(type.substring(0, 2).toUpperCase(Locale.ROOT)) : + type; + case "tz" -> TimeZoneNameUtility.convertLDMLShortID(type) + .map(id -> TimeZoneNameUtility.retrieveGenericDisplayName(id, TimeZone.LONG, inLocale)) + .orElse(type); + default -> type; + }); } return ret; diff --git a/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java b/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java index cf629a7d57c..5e7b61e6c57 100644 --- a/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java +++ b/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java @@ -181,6 +181,8 @@ import java.util.Locale; * CLDR version * * + * JDK 26 + * CLDR 48 * JDK 25 * CLDR 47 * JDK 24 diff --git a/src/java.base/share/legal/cldr.md b/src/java.base/share/legal/cldr.md index f020d8f51ae..6e609f35302 100644 --- a/src/java.base/share/legal/cldr.md +++ b/src/java.base/share/legal/cldr.md @@ -1,4 +1,4 @@ -## Unicode Common Local Data Repository (CLDR) v47 +## Unicode Common Local Data Repository (CLDR) v48 ### CLDR License diff --git a/src/jdk.localedata/share/legal/cldr.md b/src/jdk.localedata/share/legal/cldr.md index f020d8f51ae..6e609f35302 100644 --- a/src/jdk.localedata/share/legal/cldr.md +++ b/src/jdk.localedata/share/legal/cldr.md @@ -1,4 +1,4 @@ -## Unicode Common Local Data Repository (CLDR) v47 +## Unicode Common Local Data Repository (CLDR) v48 ### CLDR License diff --git a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java index b81226c00db..83687d39bed 100644 --- a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java +++ b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java @@ -23,6 +23,7 @@ /* * @test * @bug 8177552 8217721 8222756 8295372 8306116 8319990 8338690 8363972 + * 8354548 * @summary Checks the functioning of compact number format * @modules jdk.localedata * @run junit/othervm TestCompactNumber @@ -116,26 +117,26 @@ public class TestCompactNumber { Object[][] compactFormatData() { return new Object[][]{ // compact number format instance, number to format, formatted output - {FORMAT_DZ_LONG, 1000.09, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55" - + "\u0FB2\u0F42 \u0F21"}, - {FORMAT_DZ_LONG, -999.99, "-\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55" - + "\u0FB2\u0F42 \u0F21"}, - {FORMAT_DZ_LONG, -0.0, "-\u0F20"}, - {FORMAT_DZ_LONG, 3000L, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55" - + "\u0FB2\u0F42 \u0F23"}, - {FORMAT_DZ_LONG, new BigInteger("12345678901234567890"), "\u0F51" - + "\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62\u0F0B\u0F66" - + "\u0F0B\u0F61\u0F0B \u0F21\u0F22\u0F23\u0F24\u0F25\u0F27"}, + {FORMAT_DZ_LONG, 1000.09, "སྟོང་ཕ" + + "ྲག ༡"}, + {FORMAT_DZ_LONG, -999.99, "-སྟོང་ཕ" + + "ྲག ༡"}, + {FORMAT_DZ_LONG, -0.0, "-༠"}, + {FORMAT_DZ_LONG, 3000L, "སྟོང་ཕ" + + "ྲག ༣"}, + {FORMAT_DZ_LONG, new BigInteger("12345678901234567890"), "ད" + + "ུང་ཕྱུར་ས" + + "་ཡ་ ༡༢༣༤༥༧"}, // negative - {FORMAT_DZ_LONG, new BigInteger("-12345678901234567890"), "-\u0F51" - + "\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62\u0F0B\u0F66" - + "\u0F0B\u0F61\u0F0B \u0F21\u0F22\u0F23\u0F24\u0F25\u0F27"}, - {FORMAT_DZ_LONG, new BigDecimal("12345678901234567890.89"), "\u0F51" - + "\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62\u0F0B\u0F66" - + "\u0F0B\u0F61\u0F0B \u0F21\u0F22\u0F23\u0F24\u0F25\u0F27"}, - {FORMAT_DZ_LONG, new BigDecimal("-12345678901234567890.89"), "-\u0F51" - + "\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62\u0F0B\u0F66" - + "\u0F0B\u0F61\u0F0B \u0F21\u0F22\u0F23\u0F24\u0F25\u0F27"}, + {FORMAT_DZ_LONG, new BigInteger("-12345678901234567890"), "-ད" + + "ུང་ཕྱུར་ས" + + "་ཡ་ ༡༢༣༤༥༧"}, + {FORMAT_DZ_LONG, new BigDecimal("12345678901234567890.89"), "ད" + + "ུང་ཕྱུར་ས" + + "་ཡ་ ༡༢༣༤༥༧"}, + {FORMAT_DZ_LONG, new BigDecimal("-12345678901234567890.89"), "-ད" + + "ུང་ཕྱུར་ས" + + "་ཡ་ ༡༢༣༤༥༧"}, // Zeros {FORMAT_EN_US_SHORT, 0, "0"}, {FORMAT_EN_US_SHORT, 0.0, "0"}, @@ -236,88 +237,88 @@ public class TestCompactNumber { // Less than 1000 no suffix {FORMAT_HI_IN_LONG, -999, "-999"}, // Round the value with 0 fraction digits and format it - {FORMAT_HI_IN_LONG, -999.99, "-1 \u0939\u091C\u093C\u093E\u0930"}, + {FORMAT_HI_IN_LONG, -999.99, "-1 हज़ार"}, // 10 thousand - {FORMAT_HI_IN_LONG, 99000, "99 \u0939\u091C\u093C\u093E\u0930"}, + {FORMAT_HI_IN_LONG, 99000, "99 हज़ार"}, // Long path - {FORMAT_HI_IN_LONG, 330000, "3 \u0932\u093E\u0916"}, + {FORMAT_HI_IN_LONG, 330000, "3 लाख"}, // Double path - {FORMAT_HI_IN_LONG, 3000.90, "3 \u0939\u091C\u093C\u093E\u0930"}, + {FORMAT_HI_IN_LONG, 3000.90, "3 हज़ार"}, // BigInteger path {FORMAT_HI_IN_LONG, new BigInteger("12345678901234567890"), - "123456789 \u0916\u0930\u092C"}, + "123456789 खरब"}, // BigDecimal path {FORMAT_HI_IN_LONG, new BigDecimal("12345678901234567890.89"), - "123456789 \u0916\u0930\u092C"}, + "123456789 खरब"}, // 1000 does not have any suffix in "ja" locale {FORMAT_JA_JP_SHORT, -999.99, "-1,000"}, // 0-9999 does not have any suffix {FORMAT_JA_JP_SHORT, 9999, "9,999"}, - // 99000/10000 => 9.9\u4E07 rounded to 10\u4E07 - {FORMAT_JA_JP_SHORT, 99000, "10\u4E07"}, + // 99000/10000 => 9.9万 rounded to 10万 + {FORMAT_JA_JP_SHORT, 99000, "10万"}, // Negative - {FORMAT_JA_JP_SHORT, -99000, "-10\u4E07"}, + {FORMAT_JA_JP_SHORT, -99000, "-10万"}, // Long path - {FORMAT_JA_JP_SHORT, 330000, "33\u4E07"}, + {FORMAT_JA_JP_SHORT, 330000, "33万"}, // Double path {FORMAT_JA_JP_SHORT, 3000.90, "3,001"}, // BigInteger path {FORMAT_JA_JP_SHORT, new BigInteger("12345678901234567890"), - "1235\u4EAC"}, + "1235京"}, // BigDecimal path {FORMAT_JA_JP_SHORT, new BigDecimal("12345678901234567890.89"), - "1235\u4EAC"}, + "1235京"}, // less than 1000 no suffix {FORMAT_IT_SHORT, 499, "499"}, // Boundary number - {FORMAT_IT_SHORT, 1000, "1.000"}, + {FORMAT_IT_SHORT, 1000, "1K"}, // Long path - {FORMAT_IT_SHORT, 3000000L, "3\u00a0Mln"}, + {FORMAT_IT_SHORT, 3000000L, "3 Mln"}, // Double path - {FORMAT_IT_SHORT, 3000000.0, "3\u00a0Mln"}, + {FORMAT_IT_SHORT, 3000000.0, "3 Mln"}, // BigInteger path {FORMAT_IT_SHORT, new BigInteger("12345678901234567890"), - "12345679\u00a0Bln"}, + "12345679 Bln"}, // BigDecimal path {FORMAT_IT_SHORT, new BigDecimal("12345678901234567890.89"), - "12345679\u00a0Bln"}, + "12345679 Bln"}, {FORMAT_CA_LONG, 999, "999"}, {FORMAT_CA_LONG, 999.99, "1 miler"}, {FORMAT_CA_LONG, 99000, "99 milers"}, {FORMAT_CA_LONG, 330000, "330 milers"}, {FORMAT_CA_LONG, 3000.90, "3 milers"}, - {FORMAT_CA_LONG, 1000000, "1 mili\u00f3"}, + {FORMAT_CA_LONG, 1000000, "1 milió"}, {FORMAT_CA_LONG, new BigInteger("12345678901234567890"), "12345679 bilions"}, {FORMAT_CA_LONG, new BigDecimal("12345678901234567890.89"), "12345679 bilions"}, - {FORMAT_AS_LONG, 5000.0, "\u09eb \u09b9\u09be\u099c\u09be\u09f0"}, - {FORMAT_AS_LONG, 50000.0, "\u09eb\u09e6 \u09b9\u09be\u099c\u09be\u09f0"}, - {FORMAT_AS_LONG, 500000.0, "\u09eb \u09b2\u09be\u0996"}, - {FORMAT_AS_LONG, 5000000.0, "\u09eb \u09a8\u09bf\u09af\u09c1\u09a4"}, - {FORMAT_AS_LONG, 50000000.0, "\u09eb\u09e6 \u09a8\u09bf\u09af\u09c1\u09a4"}, - {FORMAT_AS_LONG, 500000000.0, "\u09eb\u09e6\u09e6 \u09a8\u09bf\u09af\u09c1\u09a4"}, - {FORMAT_AS_LONG, 5000000000.0, "\u09eb \u09b6\u09a4 \u0995\u09cb\u099f\u09bf"}, - {FORMAT_AS_LONG, 50000000000.0, "\u09eb\u09e6 \u09b6\u09a4 \u0995\u09cb\u099f\u09bf"}, - {FORMAT_AS_LONG, 500000000000.0, "\u09eb\u09e6\u09e6 \u09b6\u09a4 \u0995\u09cb\u099f\u09bf"}, - {FORMAT_AS_LONG, 5000000000000.0, "\u09eb \u09b6\u09a4 \u09aa\u09f0\u09be\u09f0\u09cd\u09a6\u09cd\u09a7"}, - {FORMAT_AS_LONG, 50000000000000.0, "\u09eb\u09e6 \u09b6\u09a4 \u09aa\u09f0\u09be\u09f0\u09cd\u09a6\u09cd\u09a7"}, - {FORMAT_AS_LONG, 500000000000000.0, "\u09eb\u09e6\u09e6 \u09b6\u09a4 \u09aa\u09f0\u09be\u09f0\u09cd\u09a6\u09cd\u09a7"}, - {FORMAT_AS_LONG, 5000000000000000.0, "\u09eb\u09e6\u09e6\u09e6 \u09b6\u09a4 \u09aa\u09f0\u09be\u09f0\u09cd\u09a6\u09cd\u09a7"}, + {FORMAT_AS_LONG, 5000.0, "৫ হাজাৰ"}, + {FORMAT_AS_LONG, 50000.0, "৫০ হাজাৰ"}, + {FORMAT_AS_LONG, 500000.0, "৫ লাখ"}, + {FORMAT_AS_LONG, 5000000.0, "৫ নিযুত"}, + {FORMAT_AS_LONG, 50000000.0, "৫০ নিযুত"}, + {FORMAT_AS_LONG, 500000000.0, "৫০০ নিযুত"}, + {FORMAT_AS_LONG, 5000000000.0, "৫ শত কোটি"}, + {FORMAT_AS_LONG, 50000000000.0, "৫০ শত কোটি"}, + {FORMAT_AS_LONG, 500000000000.0, "৫০০ শত কোটি"}, + {FORMAT_AS_LONG, 5000000000000.0, "৫ শত পৰাৰ্দ্ধ"}, + {FORMAT_AS_LONG, 50000000000000.0, "৫০ শত পৰাৰ্দ্ধ"}, + {FORMAT_AS_LONG, 500000000000000.0, "৫০০ শত পৰাৰ্দ্ধ"}, + {FORMAT_AS_LONG, 5000000000000000.0, "৫০০০ শত পৰাৰ্দ্ধ"}, {FORMAT_AS_LONG, new BigInteger("12345678901234567890"), - "\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ef \u09b6\u09a4 \u09aa\u09f0\u09be\u09f0\u09cd\u09a6\u09cd\u09a7"}, + "১২৩৪৫৬৭৯ শত পৰাৰ্দ্ধ"}, {FORMAT_AS_LONG, new BigDecimal("12345678901234567890123466767.89"), - "\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ee \u09b6\u09a4 \u09aa\u09f0\u09be\u09f0\u09cd\u09a6\u09cd\u09a7"}, + "১২৩৪৫৬৭৮৯০১২৩৪৫৬৮ শত পৰাৰ্দ্ধ"}, {FORMAT_BRX_SHORT, 999, "999"}, - {FORMAT_BRX_SHORT, 999.99, "1\u0915\u0947"}, - {FORMAT_BRX_SHORT, 99000, "99\u0915\u0947"}, - {FORMAT_BRX_SHORT, 330000, "330\u0915\u0947"}, - {FORMAT_BRX_SHORT, 3000.90, "3\u0915\u0947"}, - {FORMAT_BRX_SHORT, 1000000, "1\u090f\u092e"}, + {FORMAT_BRX_SHORT, 999.99, "1के"}, + {FORMAT_BRX_SHORT, 99000, "99के"}, + {FORMAT_BRX_SHORT, 330000, "330के"}, + {FORMAT_BRX_SHORT, 3000.90, "3के"}, + {FORMAT_BRX_SHORT, 1000000, "1एम"}, {FORMAT_BRX_SHORT, new BigInteger("12345678901234567890"), - "12345679\u0924\u093f"}, + "12345679ति"}, {FORMAT_BRX_SHORT, new BigDecimal("12345678901234567890.89"), - "12345679\u0924\u093f"}, + "12345679ति"}, // Less than 1000 no suffix {FORMAT_SW_LONG, 499, "499"}, // Boundary number @@ -340,24 +341,24 @@ public class TestCompactNumber { // No compact form {FORMAT_SE_SHORT, 999, "999"}, // Long - {FORMAT_SE_SHORT, 8000000L, "8\u00a0mn"}, + {FORMAT_SE_SHORT, 8000000L, "8 mn"}, // Double - {FORMAT_SE_SHORT, 8000.98, "8\u00a0dt"}, + {FORMAT_SE_SHORT, 8000.98, "8 dt"}, // Big integer - {FORMAT_SE_SHORT, new BigInteger("12345678901234567890"), "12345679\u00a0bn"}, + {FORMAT_SE_SHORT, new BigInteger("12345678901234567890"), "12345679 bn"}, // Big decimal - {FORMAT_SE_SHORT, new BigDecimal("12345678901234567890.98"), "12345679\u00a0bn"}, + {FORMAT_SE_SHORT, new BigDecimal("12345678901234567890.98"), "12345679 bn"}, // Negatives // No compact form - {FORMAT_SE_SHORT, -999, "\u2212999"}, + {FORMAT_SE_SHORT, -999, "−999"}, // Long - {FORMAT_SE_SHORT, -8000000L, "\u22128\u00a0mn"}, + {FORMAT_SE_SHORT, -8000000L, "−8 mn"}, // Double - {FORMAT_SE_SHORT, -8000.98, "\u22128\u00a0dt"}, + {FORMAT_SE_SHORT, -8000.98, "−8 dt"}, // BigInteger - {FORMAT_SE_SHORT, new BigInteger("-12345678901234567890"), "\u221212345679\u00a0bn"}, + {FORMAT_SE_SHORT, new BigInteger("-12345678901234567890"), "−12345679 bn"}, // BigDecimal - {FORMAT_SE_SHORT, new BigDecimal("-12345678901234567890.98"), "\u221212345679\u00a0bn"}, + {FORMAT_SE_SHORT, new BigDecimal("-12345678901234567890.98"), "−12345679 bn"}, // Plurals // DE: one:i = 1 and v = 0 @@ -368,17 +369,17 @@ public class TestCompactNumber { // few:v = 0 and i % 100 = 3..4 or v != 0 {FORMAT_SL_LONG, 1_000_000, "1 milijon"}, {FORMAT_SL_LONG, 2_000_000, "2 milijona"}, - {FORMAT_SL_LONG, 3_000_000, "3 milijone"}, + {FORMAT_SL_LONG, 3_000_000, "3 milijoni"}, {FORMAT_SL_LONG, 5_000_000, "5 milijonov"}, // Fractional plurals {FORMAT_ES_LONG_FD1, 1_234_500, "1,2 millones"}, {FORMAT_DE_LONG_FD2, 1_234_500, "1,23 Millionen"}, {FORMAT_IT_LONG_FD3, 1_234_500, "1,234 milioni"}, - {FORMAT_PT_LONG_FD4, 1_234_500, "1,2345 milh\u00f5es"}, + {FORMAT_PT_LONG_FD4, 1_234_500, "1,2345 milhões"}, // 8338690 - {FORMAT_PL_LONG, 5_000, "5 tysi\u0119cy"}, - {FORMAT_PL_LONG, 4_949, "5 tysi\u0119cy"}, + {FORMAT_PL_LONG, 5_000, "5 tysięcy"}, + {FORMAT_PL_LONG, 4_949, "5 tysięcy"}, {FORMAT_FR_LONG, 1_949, "2 mille"}, {FORMAT_IT_LONG, 1_949, "2 mila"}, }; @@ -387,16 +388,16 @@ public class TestCompactNumber { Object[][] compactParseData() { return new Object[][]{ // compact number format instance, string to parse, parsed number, return type - {FORMAT_DZ_LONG, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" - + "\u0F42 \u0F21", 1000L, Long.class}, - {FORMAT_DZ_LONG, "-\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" - + "\u0F42 \u0F23", -3000L, Long.class}, - {FORMAT_DZ_LONG, "\u0F51\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62" - + "\u0F0B\u0F66\u0F0B\u0F61\u0F0B \u0F21" - + "\u0F22\u0F23\u0F24\u0F25\u0F27", 1.23457E19, Double.class}, - {FORMAT_DZ_LONG, "-\u0F51\u0F74\u0F44\u0F0B\u0F55\u0FB1\u0F74\u0F62" - + "\u0F0B\u0F66\u0F0B\u0F61\u0F0B \u0F21" - + "\u0F22\u0F23\u0F24\u0F25\u0F27", -1.23457E19, Double.class}, + {FORMAT_DZ_LONG, "སྟོང་ཕྲ" + + "ག ༡", 1000L, Long.class}, + {FORMAT_DZ_LONG, "-སྟོང་ཕྲ" + + "ག ༣", -3000L, Long.class}, + {FORMAT_DZ_LONG, "དུང་ཕྱུར" + + "་ས་ཡ་ ༡" + + "༢༣༤༥༧", 1.23457E19, Double.class}, + {FORMAT_DZ_LONG, "-དུང་ཕྱུར" + + "་ས་ཡ་ ༡" + + "༢༣༤༥༧", -1.23457E19, Double.class}, {FORMAT_EN_US_SHORT, "-0.0", -0.0, Double.class}, {FORMAT_EN_US_SHORT, "-0", -0.0, Double.class}, {FORMAT_EN_US_SHORT, "0", 0L, Long.class}, @@ -427,23 +428,23 @@ public class TestCompactNumber { {FORMAT_EN_LONG, "12345679 trillion", 1.2345679E19, Double.class}, {FORMAT_HI_IN_LONG, "999", 999L, Long.class}, {FORMAT_HI_IN_LONG, "-999", -999L, Long.class}, - {FORMAT_HI_IN_LONG, "1 \u0939\u091C\u093C\u093E\u0930", 1000L, Long.class}, - {FORMAT_HI_IN_LONG, "-1 \u0939\u091C\u093C\u093E\u0930", -1000L, Long.class}, - {FORMAT_HI_IN_LONG, "3 \u0939\u091C\u093C\u093E\u0930", 3000L, Long.class}, - {FORMAT_HI_IN_LONG, "12345679 \u0916\u0930\u092C", 1234567900000000000L, Long.class}, - {FORMAT_HI_IN_LONG, "-12345679 \u0916\u0930\u092C", -1234567900000000000L, Long.class}, + {FORMAT_HI_IN_LONG, "1 हज़ार", 1000L, Long.class}, + {FORMAT_HI_IN_LONG, "-1 हज़ार", -1000L, Long.class}, + {FORMAT_HI_IN_LONG, "3 हज़ार", 3000L, Long.class}, + {FORMAT_HI_IN_LONG, "12345679 खरब", 1234567900000000000L, Long.class}, + {FORMAT_HI_IN_LONG, "-12345679 खरब", -1234567900000000000L, Long.class}, {FORMAT_JA_JP_SHORT, "-99", -99L, Long.class}, - {FORMAT_JA_JP_SHORT, "1\u4E07", 10000L, Long.class}, - {FORMAT_JA_JP_SHORT, "30\u4E07", 300000L, Long.class}, - {FORMAT_JA_JP_SHORT, "-30\u4E07", -300000L, Long.class}, - {FORMAT_JA_JP_SHORT, "12345679\u5146", 1.2345679E19, Double.class}, - {FORMAT_JA_JP_SHORT, "-12345679\u5146", -1.2345679E19, Double.class}, + {FORMAT_JA_JP_SHORT, "1万", 10000L, Long.class}, + {FORMAT_JA_JP_SHORT, "30万", 300000L, Long.class}, + {FORMAT_JA_JP_SHORT, "-30万", -300000L, Long.class}, + {FORMAT_JA_JP_SHORT, "12345679兆", 1.2345679E19, Double.class}, + {FORMAT_JA_JP_SHORT, "-12345679兆", -1.2345679E19, Double.class}, {FORMAT_IT_SHORT, "-99", -99L, Long.class}, - {FORMAT_IT_SHORT, "1\u00a0Mln", 1000000L, Long.class}, - {FORMAT_IT_SHORT, "30\u00a0Mln", 30000000L, Long.class}, - {FORMAT_IT_SHORT, "-30\u00a0Mln", -30000000L, Long.class}, - {FORMAT_IT_SHORT, "12345679\u00a0Bln", 1.2345679E19, Double.class}, - {FORMAT_IT_SHORT, "-12345679\u00a0Bln", -1.2345679E19, Double.class}, + {FORMAT_IT_SHORT, "1 Mln", 1000000L, Long.class}, + {FORMAT_IT_SHORT, "30 Mln", 30000000L, Long.class}, + {FORMAT_IT_SHORT, "-30 Mln", -30000000L, Long.class}, + {FORMAT_IT_SHORT, "12345679 Bln", 1.2345679E19, Double.class}, + {FORMAT_IT_SHORT, "-12345679 Bln", -1.2345679E19, Double.class}, {FORMAT_SW_LONG, "-0.0", -0.0, Double.class}, {FORMAT_SW_LONG, "499", 499L, Long.class}, {FORMAT_SW_LONG, "elfu 1", 1000L, Long.class}, @@ -461,17 +462,17 @@ public class TestCompactNumber { {FORMAT_SW_LONG, "elfu 599.01", 599010L, Long.class}, {FORMAT_SW_LONG, "elfu -599.01", -599010L, Long.class}, {FORMAT_SE_SHORT, "999", 999L, Long.class}, - {FORMAT_SE_SHORT, "8\u00a0mn", 8000000L, Long.class}, - {FORMAT_SE_SHORT, "8\u00a0dt", 8000L, Long.class}, - {FORMAT_SE_SHORT, "12345679\u00a0bn", 1.2345679E19, Double.class}, - {FORMAT_SE_SHORT, "12345679,89\u00a0bn", 1.2345679890000001E19, Double.class}, + {FORMAT_SE_SHORT, "8 mn", 8000000L, Long.class}, + {FORMAT_SE_SHORT, "8 dt", 8000L, Long.class}, + {FORMAT_SE_SHORT, "12345679 bn", 1.2345679E19, Double.class}, + {FORMAT_SE_SHORT, "12345679,89 bn", 1.2345679890000001E19, Double.class}, {FORMAT_SE_SHORT, "\u2212999", -999L, Long.class}, {FORMAT_SE_SHORT, "\u22128\u00a0mn", -8000000L, Long.class}, // lenient parsing. Hyphen-minus should match the localized minus sign - {FORMAT_SE_SHORT, "-8\u00a0mn", -8000000L, Long.class}, - {FORMAT_SE_SHORT, "\u22128\u00a0dt", -8000L, Long.class}, - {FORMAT_SE_SHORT, "\u221212345679\u00a0bn", -1.2345679E19, Double.class}, - {FORMAT_SE_SHORT, "\u221212345679,89\u00a0bn", -1.2345679890000001E19, Double.class}, + {FORMAT_SE_SHORT, "−8 mn", -8000000L, Long.class}, + {FORMAT_SE_SHORT, "\u22128 dt", -8000L, Long.class}, + {FORMAT_SE_SHORT, "\u221212345679 bn", -1.2345679E19, Double.class}, + {FORMAT_SE_SHORT, "\u221212345679,89 bn", -1.2345679890000001E19, Double.class}, // Plurals // DE: one:i = 1 and v = 0 @@ -482,15 +483,15 @@ public class TestCompactNumber { // few:v = 0 and i % 100 = 3..4 or v != 0 {FORMAT_SL_LONG, "1 milijon", 1_000_000L, Long.class}, {FORMAT_SL_LONG, "2 milijona", 2_000_000L, Long.class}, - {FORMAT_SL_LONG, "3 milijone", 3_000_000L, Long.class}, + {FORMAT_SL_LONG, "3 milijoni", 3_000_000L, Long.class}, {FORMAT_SL_LONG, "5 milijonov", 5_000_000L, Long.class}, // Fractional plurals {FORMAT_ES_LONG_FD1, "1,2 millones", 1_200_000L, Long.class}, {FORMAT_DE_LONG_FD2, "1,23 Millionen", 1_230_000L, Long.class}, {FORMAT_IT_LONG_FD3, "1,234 milioni", 1_234_000L, Long.class}, - {FORMAT_PT_LONG_FD4, "1,2345 milh\u00f5es", 1_234_500L, Long.class}, + {FORMAT_PT_LONG_FD4, "1,2345 milhões", 1_234_500L, Long.class}, // 8338690 - {FORMAT_PL_LONG, "5 tysi\u0119cy", 5_000L, Long.class}, + {FORMAT_PL_LONG, "5 tysięcy", 5_000L, Long.class}, {FORMAT_FR_LONG, "2 mille", 2_000L, Long.class}, {FORMAT_IT_LONG, "2 mila", 2_000L, Long.class}, }; @@ -500,15 +501,15 @@ public class TestCompactNumber { return new Object[][]{ // compact number instance, string to parse, null (no o/p; must throw exception) // no number - {FORMAT_DZ_LONG, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" - + "\u0F42", null}, + {FORMAT_DZ_LONG, "སྟོང་ཕྲ" + + "ག", null}, // Invalid prefix - {FORMAT_DZ_LONG, "-\u0F66\u0F9F\u0F7C\u0F44,\u0F0B\u0F55\u0FB2" - + "\u0F42 \u0F23", null}, + {FORMAT_DZ_LONG, "-སྟོང,་ཕྲ" + + "ག ༣", null}, // Invalid prefix for en_US {FORMAT_EN_US_SHORT, "K12,347", null}, // Invalid prefix for ja_JP - {FORMAT_JA_JP_SHORT, "\u4E071", null}, + {FORMAT_JA_JP_SHORT, "万1", null}, }; } @@ -516,8 +517,8 @@ public class TestCompactNumber { return new Object[][]{ // compact number instance, string to parse, parsed number // Prefix and suffix do not match - {FORMAT_DZ_LONG, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" - + "\u0F42 \u0F21 KM", 1000L}, + {FORMAT_DZ_LONG, "སྟོང་ཕྲ" + + "ག ༡ KM", 1000L}, // Exponents are unparseable {FORMAT_EN_US_SHORT, "-1.05E4K", -1.05}, // Default instance does not allow grouping @@ -525,15 +526,15 @@ public class TestCompactNumber { // Take partial suffix "K" as 1000 for en_US_SHORT patterns {FORMAT_EN_US_SHORT, "12KM", 12000L}, // Invalid suffix - {FORMAT_HI_IN_LONG, "-1 \u00a0\u0915.", -1L}, + {FORMAT_HI_IN_LONG, "-1  क.", -1L}, // invalid plurals {FORMAT_DE_LONG, "2 Million", 2L}, {FORMAT_SL_LONG, "2 milijon", 2L}, {FORMAT_SL_LONG, "2 milijone", 2L}, {FORMAT_SL_LONG, "2 milijonv", 2L}, + {FORMAT_SL_LONG, "5 milijona", 5L}, {FORMAT_SL_LONG, "3 milijon", 3L}, - {FORMAT_SL_LONG, "3 milijona", 3L}, {FORMAT_SL_LONG, "3 milijonv", 3L}, {FORMAT_SL_LONG, "5 milijon", 5L}, {FORMAT_SL_LONG, "5 milijona", 5L}, @@ -548,14 +549,14 @@ public class TestCompactNumber { Object[][] formatFieldPositionData() { return new Object[][]{ //compact number instance, number to format, field, start position, end position, formatted string - {FORMAT_DZ_LONG, -3500, NumberFormat.Field.SIGN, 0, 1, "-\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2\u0F42 \u0F24"}, - {FORMAT_DZ_LONG, 3500, NumberFormat.Field.INTEGER, 9, 10, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2\u0F42 \u0F24"}, - {FORMAT_DZ_LONG, -3500, NumberFormat.Field.INTEGER, 10, 11, "-\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2\u0F42 \u0F24"}, - {FORMAT_DZ_LONG, 999, NumberFormat.Field.INTEGER, 0, 3, "\u0F29\u0F29\u0F29"}, - {FORMAT_DZ_LONG, -999, NumberFormat.Field.INTEGER, 1, 4, "-\u0F29\u0F29\u0F29"}, - {FORMAT_DZ_LONG, 3500, NumberFormat.Field.PREFIX, 0, 9, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2\u0F42 \u0F24"}, - {FORMAT_DZ_LONG, -3500, NumberFormat.Field.PREFIX, 0, 10, "-\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2\u0F42 \u0F24"}, - {FORMAT_DZ_LONG, 999, NumberFormat.Field.PREFIX, 0, 0, "\u0F29\u0F29\u0F29"}, + {FORMAT_DZ_LONG, -3500, NumberFormat.Field.SIGN, 0, 1, "-སྟོང་ཕྲག ༤"}, + {FORMAT_DZ_LONG, 3500, NumberFormat.Field.INTEGER, 9, 10, "སྟོང་ཕྲག ༤"}, + {FORMAT_DZ_LONG, -3500, NumberFormat.Field.INTEGER, 10, 11, "-སྟོང་ཕྲག ༤"}, + {FORMAT_DZ_LONG, 999, NumberFormat.Field.INTEGER, 0, 3, "༩༩༩"}, + {FORMAT_DZ_LONG, -999, NumberFormat.Field.INTEGER, 1, 4, "-༩༩༩"}, + {FORMAT_DZ_LONG, 3500, NumberFormat.Field.PREFIX, 0, 9, "སྟོང་ཕྲག ༤"}, + {FORMAT_DZ_LONG, -3500, NumberFormat.Field.PREFIX, 0, 10, "-སྟོང་ཕྲག ༤"}, + {FORMAT_DZ_LONG, 999, NumberFormat.Field.PREFIX, 0, 0, "༩༩༩"}, {FORMAT_EN_US_SHORT, -3500, NumberFormat.Field.SIGN, 0, 1, "-4K"}, {FORMAT_EN_US_SHORT, 3500, NumberFormat.Field.INTEGER, 0, 1, "4K"}, {FORMAT_EN_US_SHORT, 14900000067L, NumberFormat.Field.INTEGER, 0, 2, "15B"}, @@ -566,49 +567,49 @@ public class TestCompactNumber { {FORMAT_EN_LONG, 14900000067L, NumberFormat.Field.INTEGER, 0, 2, "15 billion"}, {FORMAT_EN_LONG, 3500, NumberFormat.Field.SUFFIX, 1, 10, "4 thousand"}, {FORMAT_EN_LONG, 14900000067L, NumberFormat.Field.SUFFIX, 2, 10, "15 billion"}, - {FORMAT_JA_JP_SHORT, 14900000067L, NumberFormat.Field.INTEGER, 0, 3, "149\u5104"}, + {FORMAT_JA_JP_SHORT, 14900000067L, NumberFormat.Field.INTEGER, 0, 3, "149億"}, {FORMAT_JA_JP_SHORT, -999.99, NumberFormat.Field.INTEGER, 1, 6, "-1,000"}, - {FORMAT_JA_JP_SHORT, 14900000067L, NumberFormat.Field.SUFFIX, 3, 4, "149\u5104"}, + {FORMAT_JA_JP_SHORT, 14900000067L, NumberFormat.Field.SUFFIX, 3, 4, "149億"}, {FORMAT_JA_JP_SHORT, -999.99, NumberFormat.Field.SUFFIX, 0, 0, "-1,000"}, {FORMAT_JA_JP_SHORT, -999.99, NumberFormat.Field.SIGN, 0, 1, "-1,000"}, {FORMAT_HI_IN_LONG, -14900000067L, NumberFormat.Field.SIGN, 0, 1, - "-15 \u0905\u0930\u092C"}, + "-15 अरब"}, {FORMAT_HI_IN_LONG, 3500, NumberFormat.Field.INTEGER, 0, 1, - "4 \u0939\u091C\u093C\u093E\u0930"}, + "4 हज़ार"}, {FORMAT_HI_IN_LONG, 14900000067L, NumberFormat.Field.INTEGER, 0, 2, - "15 \u0905\u0930\u092C"}, + "15 अरब"}, {FORMAT_HI_IN_LONG, 3500, NumberFormat.Field.SUFFIX, 1, 7, - "4 \u0939\u091C\u093C\u093E\u0930"}, + "4 हज़ार"}, {FORMAT_HI_IN_LONG, 14900000067L, NumberFormat.Field.SUFFIX, 2, 6, - "15 \u0905\u0930\u092C"}, - {FORMAT_SE_SHORT, 8000000L, NumberFormat.Field.SUFFIX, 1, 4, "8\u00a0mn"}, - {FORMAT_SE_SHORT, 8000.98, NumberFormat.Field.SUFFIX, 1, 4, "8\u00a0dt"}, - {FORMAT_SE_SHORT, new BigInteger("12345678901234567890"), NumberFormat.Field.SUFFIX, 8, 11, "12345679\u00a0bn"}, - {FORMAT_SE_SHORT, new BigDecimal("12345678901234567890.98"), NumberFormat.Field.SUFFIX, 8, 11, "12345679\u00a0bn"}, - {FORMAT_SE_SHORT, -8000000L, NumberFormat.Field.INTEGER, 1, 2, "\u22128\u00a0mn"}, - {FORMAT_SE_SHORT, -8000.98, NumberFormat.Field.SIGN, 0, 1, "\u22128\u00a0dt"}, - {FORMAT_SE_SHORT, new BigDecimal("-48982865901234567890.98"), NumberFormat.Field.INTEGER, 1, 9, "\u221248982866\u00a0bn"},}; + "15 अरब"}, + {FORMAT_SE_SHORT, 8000000L, NumberFormat.Field.SUFFIX, 1, 4, "8 mn"}, + {FORMAT_SE_SHORT, 8000.98, NumberFormat.Field.SUFFIX, 1, 4, "8 dt"}, + {FORMAT_SE_SHORT, new BigInteger("12345678901234567890"), NumberFormat.Field.SUFFIX, 8, 11, "12345679 bn"}, + {FORMAT_SE_SHORT, new BigDecimal("12345678901234567890.98"), NumberFormat.Field.SUFFIX, 8, 11, "12345679 bn"}, + {FORMAT_SE_SHORT, -8000000L, NumberFormat.Field.INTEGER, 1, 2, "−8 mn"}, + {FORMAT_SE_SHORT, -8000.98, NumberFormat.Field.SIGN, 0, 1, "−8 dt"}, + {FORMAT_SE_SHORT, new BigDecimal("-48982865901234567890.98"), NumberFormat.Field.INTEGER, 1, 9, "−48982866 bn"},}; } Object[][] varParsePosition() { return new Object[][]{ // compact number instance, parse string, parsed number, // start position, end position, error index - {FORMAT_DZ_LONG, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" - + "\u0F42 \u0F21 KM", 1000L, 0, 10, -1}, + {FORMAT_DZ_LONG, "སྟོང་ཕྲ" + + "ག ༡ KM", 1000L, 0, 10, -1}, // Invalid prefix returns null - {FORMAT_DZ_LONG, "Number is: -\u0F66\u0F9F\u0F7C\u0F44,\u0F0B\u0F55\u0FB2" - + "\u0F42 \u0F23", null, 11, 11, 11}, + {FORMAT_DZ_LONG, "Number is: -སྟོང,་ཕྲ" + + "ག ༣", null, 11, 11, 11}, // Returns null - {FORMAT_DZ_LONG, "\u0F66\u0F9F\u0F7C\u0F44\u0F0B\u0F55\u0FB2" - + "\u0F42", null, 0, 0, 0}, + {FORMAT_DZ_LONG, "སྟོང་ཕྲ" + + "ག", null, 0, 0, 0}, {FORMAT_EN_US_SHORT, "Exponent: -1.05E4K", -1.05, 10, 15, -1}, // Default instance does not allow grouping {FORMAT_EN_US_SHORT, "12,347", 12L, 0, 2, -1}, // Invalid suffix "KM" for en_US_SHORT patterns {FORMAT_EN_US_SHORT, "12KM", 12000L, 0, 3, -1}, // Invalid suffix - {FORMAT_HI_IN_LONG, "-1 \u00a0\u0915.", -1L, 0, 2, -1}, + {FORMAT_HI_IN_LONG, "-1  क.", -1L, 0, 2, -1}, {FORMAT_EN_LONG, "Number is: 12345679 trillion", 1.2345679E19, 11, 28, -1}, {FORMAT_EN_LONG, "Number is: -12345679 trillion", diff --git a/test/jdk/java/text/Format/NumberFormat/Bug8132125.java b/test/jdk/java/text/Format/NumberFormat/Bug8132125.java index 1f702a9ba24..00e4db74bad 100644 --- a/test/jdk/java/text/Format/NumberFormat/Bug8132125.java +++ b/test/jdk/java/text/Format/NumberFormat/Bug8132125.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* * @test - * @bug 8132125 8202537 + * @bug 8132125 8202537 8354548 * @summary Checks Swiss' number elements * @modules jdk.localedata * @run junit Bug8132125 @@ -44,8 +44,8 @@ public class Bug8132125 { Locale deCH = Locale.of("de", "CH"); NumberFormat nf = NumberFormat.getInstance(deCH); - // "\u002E" as decimal separator, "\u2019" as grouping separator - String expected = "54\u2019839\u2019483.142"; + // "\u002E" as decimal separator, "\u0027" as grouping separator + String expected = "54'839'483.142"; String actual = nf.format(54839483.1415); assertEquals(expected, actual, "incorrect number elements for de_CH"); } diff --git a/test/jdk/java/time/test/java/time/chrono/TestEraDisplayName.java b/test/jdk/java/time/test/java/time/chrono/TestEraDisplayName.java index 291eab833c4..4e20ceb5495 100644 --- a/test/jdk/java/time/test/java/time/chrono/TestEraDisplayName.java +++ b/test/jdk/java/time/test/java/time/chrono/TestEraDisplayName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ import static org.testng.Assert.assertFalse; * chrono implementation. * Note: The exact result may depend on locale data provider's implementation. * - * @bug 8171049 8224105 8240626 + * @bug 8171049 8224105 8240626 8354548 */ @Test public class TestEraDisplayName { @@ -132,7 +132,7 @@ public class TestEraDisplayName { { MinguoEra.ROC, TextStyle.NARROW, Locale.TAIWAN, "\u6c11\u570b" }, // HijrahEra - { HijrahEra.AH, TextStyle.FULL, Locale.US, "AH" }, + { HijrahEra.AH, TextStyle.FULL, Locale.US, "Anno Hegirae" }, { HijrahEra.AH, TextStyle.FULL, EGYPT, "\u0647\u0640" }, { HijrahEra.AH, TextStyle.SHORT, Locale.US, "AH" }, { HijrahEra.AH, TextStyle.SHORT, EGYPT, "\u0647\u0640" }, diff --git a/test/jdk/java/time/test/java/time/format/Skeletons_en_US.properties b/test/jdk/java/time/test/java/time/format/Skeletons_en_US.properties index af3d46e308c..c274ffc0b32 100644 --- a/test/jdk/java/time/test/java/time/format/Skeletons_en_US.properties +++ b/test/jdk/java/time/test/java/time/format/Skeletons_en_US.properties @@ -1,3 +1,26 @@ +# +# Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + H=15 h=3 PM j=3 PM @@ -38,8 +61,8 @@ yM=1/2022 yMEd=Wed, 1/26/2022 yMMM=Jan 2022 yMMMMEd=Wed, Jan 26, 2022 -GyM=Jan 2022 AD -GyMEd=Wed, Jan 26, 2022 AD +GyM=1/2022 AD +GyMEd=Wed, 1/26/2022 AD GyMMM=Jan 2022 AD GyMMMMEd=Wed, Jan 26, 2022 AD yQQQ=Q1 2022 diff --git a/test/jdk/java/time/test/java/time/format/Skeletons_ja.properties b/test/jdk/java/time/test/java/time/format/Skeletons_ja.properties index 1b8823d369e..98a2460d075 100644 --- a/test/jdk/java/time/test/java/time/format/Skeletons_ja.properties +++ b/test/jdk/java/time/test/java/time/format/Skeletons_ja.properties @@ -1,3 +1,26 @@ +# +# Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + H=15時 h=午後3時 j=15時 @@ -32,8 +55,8 @@ yM=4/1 yMEd=4/1/26(水) yMMM=4年1月 yMMMMEd=4年1月26日(水) -GyM=令和4年1月 -GyMEd=令和4年1月26日(水) +GyM=令和4/1 +GyMEd=令和4/1/26(水) GyMMM=令和4年1月 GyMMMMEd=令和4年1月26日(水) diff --git a/test/jdk/java/time/test/java/time/format/TestLocalizedPattern.java b/test/jdk/java/time/test/java/time/format/TestLocalizedPattern.java index 4071d210191..aa8ff763aad 100644 --- a/test/jdk/java/time/test/java/time/format/TestLocalizedPattern.java +++ b/test/jdk/java/time/test/java/time/format/TestLocalizedPattern.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ import org.testng.annotations.Test; /** * Test DateTimeFormatter.ofLocalizedPattern() related methods. - * @bug 8176706 8284840 + * @bug 8176706 8284840 8354548 */ @Test public class TestLocalizedPattern { diff --git a/test/jdk/java/time/test/java/time/format/TestUnicodeExtension.java b/test/jdk/java/time/test/java/time/format/TestUnicodeExtension.java index 550dc5b31c2..6b99fea5c7c 100644 --- a/test/jdk/java/time/test/java/time/format/TestUnicodeExtension.java +++ b/test/jdk/java/time/test/java/time/format/TestUnicodeExtension.java @@ -24,7 +24,7 @@ /* * @test * @bug 8176841 8202537 8244245 8265315 8284840 8296248 8306116 8333582 - * 8346948 + * 8346948 8354548 * @summary Tests java.time classes deals with Unicode extensions * correctly. * @modules jdk.localedata @@ -104,41 +104,41 @@ public class TestUnicodeExtension { // Locale, Chrono override, Zone override, Expected Chrono, Expected Zone, // Expected formatted string {Locale.JAPAN, null, null, ISO, null, - "2017\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 " + - "\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593" + "2017年8月10日木曜日 15時15分00秒 " + + "米国太平洋夏時間" }, {Locale.JAPAN, JAPANESE, null, ISO, null, - "2017\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 " + - "\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593" + "2017年8月10日木曜日 15時15分00秒 " + + "米国太平洋夏時間" }, {Locale.JAPAN, JAPANESE, ASIATOKYO, ISO, ASIATOKYO, - "2017\u5e748\u670811\u65e5\u91d1\u66dc\u65e5 7\u664215\u520600\u79d2 " + - "\u65e5\u672c\u6a19\u6e96\u6642" + "2017年8月11日金曜日 7時15分00秒 " + + "日本標準時" }, {JCAL, null, null, JAPANESE, null, - "Thursday, August 10, 29 Heisei, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 29 Heisei, 3:15:00 PM Pacific Daylight Time" }, {JCAL, HIJRAH, null, JAPANESE, null, - "Thursday, August 10, 29 Heisei, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 29 Heisei, 3:15:00 PM Pacific Daylight Time" }, {HCAL, JAPANESE, null, HIJRAH, null, - "Thursday, Dhu\u02bbl-Qi\u02bbdah 18, 1438 AH, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, Dhuʻl-Qiʻdah 18, 1438 AH, 3:15:00 PM Pacific Daylight Time" }, {JPTYO, null, null, ISO, ASIATOKYO, - "Friday, August 11, 2017, 7:15:00\u202fAM Japan Standard Time" + "Friday, August 11, 2017, 7:15:00 AM Japan Standard Time" }, {JPTYO, null, AMLA, ISO, ASIATOKYO, - "Friday, August 11, 2017, 7:15:00\u202fAM Japan Standard Time" + "Friday, August 11, 2017, 7:15:00 AM Japan Standard Time" }, // invalid tz {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null, ISO, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, AMLA, ISO, AMLA, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, {RG_GB, null, null, ISO, null, @@ -147,43 +147,43 @@ public class TestUnicodeExtension { // DecimalStyle {Locale.forLanguageTag("en-US-u-nu-thai"), null, null, ISO, null, - "Thursday, August \u0e51\u0e50, \u0e52\u0e50\u0e51\u0e57, \u0e53:\u0e51\u0e55:" + - "\u0e50\u0e50\u202fPM Pacific Daylight Time" + "Thursday, August ๑๐, ๒๐๑๗, ๓:๑๕:" + + "๐๐ PM Pacific Daylight Time" }, // DecimalStyle, "nu" vs "rg" {Locale.forLanguageTag("en-US-u-nu-thai-rg-uszzzz"), null, null, ISO, null, - "Thursday, August \u0e51\u0e50, \u0e52\u0e50\u0e51\u0e57, \u0e53:\u0e51\u0e55:" + - "\u0e50\u0e50\u202fPM Pacific Daylight Time" + "Thursday, August ๑๐, ๒๐๑๗, ๓:๑๕:" + + "๐๐ PM Pacific Daylight Time" }, // DecimalStyle, invalid {Locale.forLanguageTag("en-US-u-nu-foo"), null, null, ISO, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, // DecimalStyle, locale default // Farsi uses Extended Arabic-Indic numbering system {Locale.forLanguageTag("fa"), null, null, ISO, null, - "\u067e\u0646\u062c\u0634\u0646\u0628\u0647 \u06f1\u06f0 \u0627\u0648\u062a " + - "\u06f2\u06f0\u06f1\u06f7\u060c \u0633\u0627\u0639\u062a \u06f1\u06f5:\u06f1\u06f5:" + - "\u06f0\u06f0 (\u0648\u0642\u062a \u062a\u0627\u0628\u0633\u062a\u0627\u0646\u06cc " + - "\u063a\u0631\u0628 \u0627\u0645\u0631\u06cc\u06a9\u0627)" + "پنجشنبه ۱۰ اوت " + + "۲۰۱۷، ساعت ۱۵:۱۵:" + + "۰۰ (وقت تابستانی " + + "غرب امریکا)" }, // Farsi uses Extended Arabic-Indic numbering system // (should not be overridden with it, as "latn" is explicitly specified) {Locale.forLanguageTag("fa-u-nu-latn"), null, null, ISO, null, - "\u067e\u0646\u062c\u0634\u0646\u0628\u0647 10 \u0627\u0648\u062a 2017\u060c " + - "\u0633\u0627\u0639\u062a 15:15:00 (\u0648\u0642\u062a \u062a\u0627\u0628\u0633" + - "\u062a\u0627\u0646\u06cc \u063a\u0631\u0628 \u0627\u0645\u0631\u06cc\u06a9\u0627)" + "پنجشنبه 10 اوت 2017، " + + "ساعت 15:15:00 (وقت تابس" + + "تانی غرب امریکا)" }, // Dzongkha uses Tibetan numbering system {Locale.forLanguageTag("dz"), null, null, ISO, null, - "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b, \u0f66\u0fa4\u0fb1" + - "\u0f72\u0f0b\u0f63\u0f7c\u0f0b\u0f22\u0f20\u0f21\u0f27 \u0f5f\u0fb3\u0f0b\u0f56" + - "\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54\u0f0b \u0f5a\u0f7a\u0f66\u0f0b\u0f21\u0f20 " + - "\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b \u0f23 \u0f66\u0f90\u0f62\u0f0b\u0f58" + - "\u0f0b \u0f21\u0f25:\u0f20\u0f20 \u0f55\u0fb1\u0f72\u0f0b\u0f46\u0f0b \u0f56\u0fb1" + - "\u0f44\u0f0b\u0f68\u0f0b\u0f58\u0f72\u0f0b\u0f62\u0f72\u0f0b\u0f40\u0f0b\u0f54\u0f7a" + - "\u0f0b\u0f66\u0f72\u0f0b\u0f55\u0f72\u0f42\u0f0b\u0f49\u0f72\u0f53\u0f0b\u0f66\u0fb2" + - "\u0f74\u0f44\u0f0b\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51" + "གཟའ་པ་སངས་, སྤྱ" + + "ི་ལོ་༢༠༡༧ ཟླ་བ" + + "རྒྱད་པ་ ཚེས་༡༠ " + + "ཆུ་ཚོད་ ༣ སྐར་མ" + + "་ ༡༥:༠༠ ཕྱི་ཆ་ བྱ" + + "ང་ཨ་མི་རི་ཀ་པེ" + + "་སི་ཕིག་ཉིན་སྲ" + + "ུང་ཆུ་ཚོད" }, }; } @@ -194,41 +194,41 @@ public class TestUnicodeExtension { // Locale, Chrono override, Zone override, Expected Chrono, Expected Zone, // Expected formatted string {Locale.JAPAN, null, null, null, null, - "2017\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 " + - "\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593" + "2017年8月10日木曜日 15時15分00秒 " + + "米国太平洋夏時間" }, {Locale.JAPAN, JAPANESE, null, JAPANESE, null, - "\u5e73\u621029\u5e748\u670810\u65e5\u6728\u66dc\u65e5 15\u664215\u520600\u79d2 " + - "\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593" + "平成29年8月10日木曜日 15時15分00秒 " + + "米国太平洋夏時間" }, {Locale.JAPAN, JAPANESE, ASIATOKYO, JAPANESE, ASIATOKYO, - "\u5e73\u621029\u5e748\u670811\u65e5\u91d1\u66dc\u65e5 7\u664215\u520600\u79d2 " + - "\u65e5\u672c\u6a19\u6e96\u6642" + "平成29年8月11日金曜日 7時15分00秒 " + + "日本標準時" }, {JCAL, null, null, null, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, {JCAL, HIJRAH, null, HIJRAH, null, - "Thursday, Dhu\u02bbl-Qi\u02bbdah 18, 1438 AH, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, Dhuʻl-Qiʻdah 18, 1438 AH, 3:15:00 PM Pacific Daylight Time" }, {HCAL, JAPANESE, null, JAPANESE, null, - "Thursday, August 10, 29 Heisei, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 29 Heisei, 3:15:00 PM Pacific Daylight Time" }, {JPTYO, null, null, null, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, {JPTYO, null, AMLA, null, AMLA, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, // invalid tz {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null, null, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, {Locale.forLanguageTag("en-US-u-tz-jpzzz"), null, null, null, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, {RG_GB, null, null, null, null, @@ -237,42 +237,42 @@ public class TestUnicodeExtension { // DecimalStyle {Locale.forLanguageTag("en-US-u-nu-thai"), null, null, null, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, // DecimalStyle, "nu" vs "rg" {Locale.forLanguageTag("en-US-u-nu-thai-rg-uszzzz"), null, null, null, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, // DecimalStyle, invalid {Locale.forLanguageTag("en-US-u-nu-foo"), null, null, null, null, - "Thursday, August 10, 2017, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 2017, 3:15:00 PM Pacific Daylight Time" }, // DecimalStyle, locale default // Farsi uses Extended Arabic-Indic numbering system // (should not be overridden with it) {Locale.forLanguageTag("fa"), null, null, null, null, - "\u067e\u0646\u062c\u0634\u0646\u0628\u0647 10 \u0627\u0648\u062a 2017\u060c " + - "\u0633\u0627\u0639\u062a 15:15:00 (\u0648\u0642\u062a \u062a\u0627\u0628\u0633" + - "\u062a\u0627\u0646\u06cc \u063a\u0631\u0628 \u0627\u0645\u0631\u06cc\u06a9\u0627)" + "پنجشنبه 10 اوت 2017، " + + "ساعت 15:15:00 (وقت تابس" + + "تانی غرب امریکا)" }, // Farsi uses Extended Arabic-Indic numbering system // (should not be overridden with it) {Locale.forLanguageTag("fa-u-nu-latn"), null, null, null, null, - "\u067e\u0646\u062c\u0634\u0646\u0628\u0647 10 \u0627\u0648\u062a 2017\u060c " + - "\u0633\u0627\u0639\u062a 15:15:00 (\u0648\u0642\u062a \u062a\u0627\u0628\u0633" + - "\u062a\u0627\u0646\u06cc \u063a\u0631\u0628 \u0627\u0645\u0631\u06cc\u06a9\u0627)" + "پنجشنبه 10 اوت 2017، " + + "ساعت 15:15:00 (وقت تابس" + + "تانی غرب امریکا)" }, // Dzongkha uses Tibetan numbering system // (should not be overridden with it) {Locale.forLanguageTag("dz"), null, null, null, null, - "\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b, \u0f66\u0fa4\u0fb1" + - "\u0f72\u0f0b\u0f63\u0f7c\u0f0b2017 \u0f5f\u0fb3\u0f0b\u0f56\u0f62\u0f92\u0fb1" + - "\u0f51\u0f0b\u0f54\u0f0b \u0f5a\u0f7a\u0f66\u0f0b10 \u0f46\u0f74\u0f0b\u0f5a" + - "\u0f7c\u0f51\u0f0b 3 \u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b 15:00 \u0f55\u0fb1" + - "\u0f72\u0f0b\u0f46\u0f0b \u0f56\u0fb1\u0f44\u0f0b\u0f68\u0f0b\u0f58\u0f72\u0f0b" + - "\u0f62\u0f72\u0f0b\u0f40\u0f0b\u0f54\u0f7a\u0f0b\u0f66\u0f72\u0f0b\u0f55\u0f72" + - "\u0f42\u0f0b\u0f49\u0f72\u0f53\u0f0b\u0f66\u0fb2\u0f74\u0f44\u0f0b\u0f46\u0f74" + - "\u0f0b\u0f5a\u0f7c\u0f51" + "གཟའ་པ་སངས་, སྤྱ" + + "ི་ལོ་2017 ཟླ་བརྒྱ" + + "ད་པ་ ཚེས་10 ཆུ་ཚ" + + "ོད་ 3 སྐར་མ་ 15:00 ཕྱ" + + "ི་ཆ་ བྱང་ཨ་མི་" + + "རི་ཀ་པེ་སི་ཕི" + + "ག་ཉིན་སྲུང་ཆུ" + + "་ཚོད" }, }; } @@ -346,7 +346,7 @@ public class TestUnicodeExtension { Object[][] shortTZID() { return new Object[][] { // LDML's short ID, Expected Zone, - // Based on timezone.xml from CLDR v47 + // Based on timezone.xml from CLDR v48 {"adalv", "Europe/Andorra"}, {"aedxb", "Asia/Dubai"}, {"afkbl", "Asia/Kabul"}, @@ -356,7 +356,7 @@ public class TestUnicodeExtension { {"amevn", "Asia/Yerevan"}, {"ancur", "America/Curacao"}, {"aolad", "Africa/Luanda"}, - {"aqams", "Pacific/Auckland"}, + {"aqams", "Antarctica/McMurdo"}, {"aqcas", "Antarctica/Casey"}, {"aqdav", "Antarctica/Davis"}, {"aqddu", "Antarctica/DumontDUrville"}, @@ -821,10 +821,10 @@ public class TestUnicodeExtension { Object[][] getLocalizedDateTimePattern() { return new Object[][] { // Locale, Expected pattern, - {Locale.US, FormatStyle.FULL, "EEEE, MMMM d, y, h:mm:ss\u202fa zzzz"}, - {Locale.US, FormatStyle.LONG, "MMMM d, y, h:mm:ss\u202fa z"}, - {Locale.US, FormatStyle.MEDIUM, "MMM d, y, h:mm:ss\u202fa"}, - {Locale.US, FormatStyle.SHORT, "M/d/yy, h:mm\u202fa"}, + {Locale.US, FormatStyle.FULL, "EEEE, MMMM d, y, h:mm:ss a zzzz"}, + {Locale.US, FormatStyle.LONG, "MMMM d, y, h:mm:ss a z"}, + {Locale.US, FormatStyle.MEDIUM, "MMM d, y, h:mm:ss a"}, + {Locale.US, FormatStyle.SHORT, "M/d/yy, h:mm a"}, {RG_GB, FormatStyle.FULL, "EEEE, d MMMM y, HH:mm:ss zzzz"}, {RG_GB, FormatStyle.LONG, "d MMMM y, HH:mm:ss z"}, {RG_GB, FormatStyle.MEDIUM, "d MMM y, HH:mm:ss"}, diff --git a/test/jdk/java/util/Calendar/CalendarDataTest.java b/test/jdk/java/util/Calendar/CalendarDataTest.java index 2fa767b081a..8d3678bbba9 100644 --- a/test/jdk/java/util/Calendar/CalendarDataTest.java +++ b/test/jdk/java/util/Calendar/CalendarDataTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,7 @@ /** * @test * @bug 8190918 8202537 8221432 8231273 8265315 8284840 8333582 + * 8354548 * @summary Tests for region dependent calendar data, i.e., * firstDayOfWeek and minimalDaysInFirstWeek. * @modules jdk.localedata @@ -41,12 +42,12 @@ public class CalendarDataTest { // golden data from CLDR private static final List> FIRSTDAYDATA = List.of( List.of("1", "AG AS BD BR BS BT BW BZ CA CO DM DO ET GT " + - "GU HK HN ID IL IN JM JP KE KH KR LA MH MM MO MT MX MZ " + + "GU HK HN ID IL IN IS JM JP KE KH KR LA MH MM MO MT MX MZ " + "NI NP PA PE PH PK PR PT PY SA SG SV TH TT TW UM US VE " + "VI WS YE ZA ZW"), List.of("2", "001 AD AE AI AL AM AN AR AT AU AX AZ BA BE BG BM BN BY " + "CH CL CM CN CR CY CZ DE DK EC EE ES FI FJ FO FR GB GE GF GP " + - "GR HR HU IE IS IT KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ " + + "GR HR HU IE IT KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ " + "MY NL NO NZ PL RE RO RS RU SE SI SK SM TJ TM TR UA UY UZ " + "VA VN XK"), List.of("6", "MV"), diff --git a/test/jdk/java/util/Calendar/CldrFormatNamesTest.java b/test/jdk/java/util/Calendar/CldrFormatNamesTest.java index 36369bef8a7..52d64185269 100644 --- a/test/jdk/java/util/Calendar/CldrFormatNamesTest.java +++ b/test/jdk/java/util/Calendar/CldrFormatNamesTest.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8004489 8006509 8008577 8145136 8202537 8306116 + * @bug 8004489 8006509 8008577 8145136 8202537 8306116 8354548 * @summary Unit test for CLDR FormatData resources * @modules java.base/sun.util.locale.provider * jdk.localedata @@ -47,42 +47,42 @@ public class CldrFormatNamesTest { static final Object[][] CLDR_DATA = { { Locale.JAPAN, - "field.zone", "\u30bf\u30a4\u30e0\u30be\u30fc\u30f3", + "field.zone", "タイムゾーン", "java.time.japanese.DatePatterns", new String[] { - "Gy\u5e74M\u6708d\u65e5EEEE", - "Gy\u5e74M\u6708d\u65e5", - "Gy\u5e74M\u6708d\u65e5", + "Gy年M月d日EEEE", + "Gy年M月d日", + "Gy年M月d日", "GGGGGy/M/d", }, "java.time.roc.DatePatterns", new String[] { - "Gy\u5e74M\u6708d\u65e5EEEE", - "Gy\u5e74M\u6708d\u65e5", + "Gy年M月d日EEEE", + "Gy年M月d日", "Gy/MM/dd", "Gy/MM/dd", }, - "calendarname.buddhist", "\u4ecf\u66a6", + "calendarname.buddhist", "仏暦", }, { Locale.PRC, - "field.zone", "\u65f6\u533a", + "field.zone", "时区", "java.time.islamic.DatePatterns", new String[] { - "Gy\u5e74M\u6708d\u65e5EEEE", - "Gy\u5e74M\u6708d\u65e5", - "Gy\u5e74M\u6708d\u65e5", + "Gy年M月d日EEEE", + "Gy年M月d日", + "Gy年M月d日", "Gy/M/d", }, - "calendarname.islamic", "\u4f0a\u65af\u5170\u5386", + "calendarname.islamic", "伊斯兰历", }, { Locale.GERMANY, - "field.dayperiod", "Tagesh\u00e4lfte", + "field.dayperiod", "Tageshälfte", "java.time.islamic.DatePatterns", new String[] { "EEEE, d. MMMM y G", "d. MMMM y G", "dd.MM.y G", "dd.MM.yy GGGGG", }, - "calendarname.islamic", "Hidschri-Kalender", + "calendarname.islamic", "Hidschra-Kalender", }, { Locale.FRANCE, @@ -93,34 +93,34 @@ public class CldrFormatNamesTest { "d MMM y G", "dd/MM/y GGGGG", }, - "calendarname.islamic", "calendrier h\u00e9girien", + "calendarname.islamic", "calendrier hégirien", }, }; // Islamic calendar symbol names in ar private static final String[] ISLAMIC_MONTH_NAMES = { - "\u0645\u062d\u0631\u0645", - "\u0635\u0641\u0631", - "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644", - "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631", - "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649", - "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629", - "\u0631\u062c\u0628", - "\u0634\u0639\u0628\u0627\u0646", - "\u0631\u0645\u0636\u0627\u0646", - "\u0634\u0648\u0627\u0644", - "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629", - "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629", + "محرم", + "صفر", + "ربيع الأول", + "ربيع الآخر", + "جمادى الأولى", + "جمادى الآخرة", + "رجب", + "شعبان", + "رمضان", + "شوال", + "ذو القعدة", + "ذو الحجة", }; private static final String[] ISLAMIC_ERA_NAMES = { "", - "\u0647\u0640", + "هـ", }; // Minguo calendar symbol names in zh_Hant private static final String[] ROC_ERA_NAMES = { - "\u6c11\u570b\u524d", - "\u6c11\u570b", + "民國前", + "民國", }; private static int errors = 0; diff --git a/test/jdk/java/util/Locale/bcp47u/DisplayNameTests.java b/test/jdk/java/util/Locale/bcp47u/DisplayNameTests.java index 71606933bfb..7e40985e326 100644 --- a/test/jdk/java/util/Locale/bcp47u/DisplayNameTests.java +++ b/test/jdk/java/util/Locale/bcp47u/DisplayNameTests.java @@ -24,7 +24,7 @@ /* * * @test - * @bug 8176841 8202537 + * @bug 8176841 8202537 8354548 * @summary Tests the display names for BCP 47 U extensions * @modules jdk.localedata * @run junit DisplayNameTests @@ -78,11 +78,11 @@ public class DisplayNameTests { return new Object[][] { // Locale for display, Test Locale, Expected output, {Locale.US, loc1, - "English (Latin, United States, Japanese Calendar, Accounting Currency Format, Pinyin Sort Order, Currency: Japanese Yen, Prefer Emoji Presentation For Emoji Characters, First Day of Week Is Wednesday, 24 Hour System (0\u201323), Loose Line Break Style, Allow Line Breaks In All Words, Imperial Measurement System, Roman Numerals, Region For Supplemental Data: United Kingdom, Region Subdivision: gbsct, Suppress Sentence Breaks After Standard Abbreviations, Time Zone: Japan Time, POSIX Compliant Locale)"}, + "English (Latin, United States, Japanese Calendar, Accounting Currency Format, Pinyin Sort Order, Currency: Japanese Yen, Emoji Presentation For Emoji, First day of week: Wednesday, 24 Hour System (0–23), Loose Line Break Style, Allow Line Breaks In All Words, Imperial Measurement System, Roman Numerals, Region For Supplemental Data: United Kingdom, Region Subdivision: gbsct, Suppress Sentence Breaks After Standard Abbreviations, Time Zone: Japan Time, POSIX Compliant Locale)"}, {Locale.JAPAN, loc1, - "\u82f1\u8a9e (\u30e9\u30c6\u30f3\u6587\u5b57\u3001\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd\u3001\u548c\u66a6\u3001\u4f1a\u8a08\u901a\u8ca8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3001\u30d4\u30f3\u30a4\u30f3\u9806\u3001\u901a\u8ca8: \u65e5\u672c\u5186\u3001em: emoji\u3001fw: wed\u300124\u6642\u9593\u5236(0\u301c23)\u3001\u7981\u5247\u51e6\u7406(\u5f31)\u3001lw: breakall\u3001\u30e4\u30fc\u30c9\u30fb\u30dd\u30f3\u30c9\u6cd5\u3001\u30ed\u30fc\u30de\u6570\u5b57\u3001rg: \u30a4\u30ae\u30ea\u30b9\u3001sd: gbsct\u3001ss: standard\u3001\u30bf\u30a4\u30e0\u30be\u30fc\u30f3: \u65e5\u672c\u6642\u9593\u3001\u30ed\u30b1\u30fc\u30eb\u306e\u30d0\u30ea\u30a2\u30f3\u30c8: posix)"}, + "英語 (ラテン文字、アメリカ合衆国、和暦、会計通貨フォーマット、ピンイン順、通貨: 日本円、絵文字表示方法: emoji、fw: wed、24時間制(0〜23)、禁則処理(弱)、単語途中の改行: breakall、ヤード・ポンド法、ローマ数字、rg: イギリス、sd: gbsct、略語の後の文分割: standard、タイムゾーン: 日本時間、ロケールのバリアント: posix)"}, {Locale.forLanguageTag("hi-IN"), loc1, - "\u0905\u0902\u0917\u094d\u0930\u0947\u091c\u093c\u0940 (\u0932\u0948\u091f\u093f\u0928, \u0938\u0902\u092f\u0941\u0915\u094d\u0924 \u0930\u093e\u091c\u094d\u092f, \u091c\u093e\u092a\u093e\u0928\u0940 \u092a\u0902\u091a\u093e\u0902\u0917, \u0932\u0947\u0916\u093e\u0902\u0915\u0928 \u092e\u0941\u0926\u094d\u0930\u093e \u092a\u094d\u0930\u093e\u0930\u0942\u092a, \u092a\u093f\u0928\u092f\u093f\u0928 \u0935\u0930\u094d\u0917\u0940\u0915\u0930\u0923 \u0915\u094d\u0930\u092e, \u092e\u0941\u0926\u094d\u0930\u093e: \u091c\u093e\u092a\u093e\u0928\u0940 \u092f\u0947\u0928, em: emoji, fw: wed, 24 \u0918\u0902\u091f\u094b\u0902 \u0915\u0940 \u092a\u094d\u0930\u0923\u093e\u0932\u0940 (0\u201323), \u0922\u0940\u0932\u0940 \u092a\u0902\u0915\u094d\u0924\u093f \u0935\u093f\u091a\u094d\u091b\u0947\u0926 \u0936\u0948\u0932\u0940, lw: breakall, \u0907\u092e\u094d\u092a\u0940\u0930\u093f\u092f\u0932 \u092e\u093e\u092a\u0928 \u092a\u094d\u0930\u0923\u093e\u0932\u0940, \u0930\u094b\u092e\u0928 \u0938\u0902\u0916\u094d\u092f\u093e\u090f\u0901, rg: \u092f\u0942\u0928\u093e\u0907\u091f\u0947\u0921 \u0915\u093f\u0902\u0917\u0921\u092e, sd: gbsct, ss: standard, \u0938\u092e\u092f \u0915\u094d\u0937\u0947\u0924\u094d\u0930: \u091c\u093e\u092a\u093e\u0928 \u0938\u092e\u092f, \u0938\u094d\u0925\u093e\u0928\u0940\u092f \u092a\u094d\u0930\u0915\u093e\u0930: posix)"}, + "अंग्रेज़ी (लैटिन, संयुक्त राज्य, जापानी पंचांग, लेखांकन मुद्रा प्रारूप, पिनयिन वर्गीकरण क्रम, मुद्रा: जापानी येन, इमोजी का प्रज़ेंटेशन: emoji, fw: wed, 24 घंटों की प्रणाली (0–23), ढीली पंक्ति विच्छेद शैली, शब्दों के बीच पंक्ति विच्छेद: breakall, इम्पीरियल मापन प्रणाली, रोमन संख्याएँ, rg: यूनाइटेड किंगडम, sd: gbsct, संक्षेपण के बाद वाक्य विच्छेद: standard, समय क्षेत्र: जापान समय, स्थानीय प्रकार: posix)"}, // cases where no localized types are available. fall back to "key: type" {Locale.US, Locale.forLanguageTag("en-u-ca-unknown"), "English (Calendar: unknown)"}, @@ -93,8 +93,8 @@ public class DisplayNameTests { {Locale.US, loc4, "United States (Japanese Calendar)"}, {Locale.US, loc5, ""}, - // invalid cases - {loc6, loc6, "\u4e2d\u6587 (\u4e2d\u56fd\uff0c\u65e5\u5386\uff1adddd\uff0c\u8d27\u5e01\uff1addd\uff0cfw\uff1amoq\uff0c\u6570\u5b57\uff1addd\uff0crg\uff1atwzz\uff0c\u65f6\u533a\uff1aunknown)"}, + // non localizable cases + {loc6, loc6, "中文 (中国,日历:dddd,货币:ddd,fw:moq,数字:ddd,rg:twzz,时区:unknown)"}, {Locale.US, loc6, "Chinese (China, Calendar: dddd, Currency: ddd, First day of week: moq, Numbers: ddd, Region For Supplemental Data: twzz, Time Zone: unknown)"}, }; } diff --git a/test/jdk/java/util/Locale/bcp47u/FormatTests.java b/test/jdk/java/util/Locale/bcp47u/FormatTests.java index 4ad676e56c5..952a8c47821 100644 --- a/test/jdk/java/util/Locale/bcp47u/FormatTests.java +++ b/test/jdk/java/util/Locale/bcp47u/FormatTests.java @@ -24,7 +24,7 @@ /* * * @test - * @bug 8176841 8194148 8284840 8306116 8333582 + * @bug 8176841 8194148 8284840 8306116 8333582 8354548 * @summary Tests *Format class deals with Unicode extensions * correctly. * @modules jdk.localedata @@ -96,7 +96,7 @@ public class FormatTests { // -ca {JCAL, "java.util.JapaneseImperialCalendar", null, - "Thursday, August 10, 29 Heisei, 3:15:00\u202fPM Pacific Daylight Time" + "Thursday, August 10, 29 Heisei at 3:15:00\u202fPM Pacific Daylight Time" }, // -tz diff --git a/test/jdk/java/util/Locale/bcp47u/spi/LocaleNameProviderTests.java b/test/jdk/java/util/Locale/bcp47u/spi/LocaleNameProviderTests.java index 2ff229fa1c9..f39ca802530 100644 --- a/test/jdk/java/util/Locale/bcp47u/spi/LocaleNameProviderTests.java +++ b/test/jdk/java/util/Locale/bcp47u/spi/LocaleNameProviderTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ /* * * @test - * @bug 8176841 + * @bug 8176841 8354548 * @summary Tests LocaleNameProvider SPIs * @library provider * @build provider/module-info provider/foo.LocaleNameProviderImpl @@ -40,7 +40,7 @@ import java.util.Locale; * LocaleNameProvider works. */ public class LocaleNameProviderTests { - private static final String expected = "foo (foo_ca:foo_japanese)"; + private static final String expected = "foo (foo_ca=foo_japanese)"; public static void main(String... args) { String name = Locale.forLanguageTag("foo-u-ca-japanese").getDisplayName(Locale.of("foo")); diff --git a/test/jdk/java/util/Locale/bcp47u/spi/provider/foo/LocaleNameProviderImpl.java b/test/jdk/java/util/Locale/bcp47u/spi/provider/foo/LocaleNameProviderImpl.java index 8bf1a8e597d..6a9fa06557a 100644 --- a/test/jdk/java/util/Locale/bcp47u/spi/provider/foo/LocaleNameProviderImpl.java +++ b/test/jdk/java/util/Locale/bcp47u/spi/provider/foo/LocaleNameProviderImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,6 @@ public class LocaleNameProviderImpl extends LocaleNameProvider { @Override public String getDisplayUnicodeExtensionType(String extType, String key, Locale target) { - return "foo_" + key + ":foo_" + extType; + return "foo_" + key + "=foo_" + extType; } } diff --git a/test/jdk/java/util/TimeZone/CLDRDisplayNamesTest.java b/test/jdk/java/util/TimeZone/CLDRDisplayNamesTest.java index b6c80b6d7d0..0114c42375d 100644 --- a/test/jdk/java/util/TimeZone/CLDRDisplayNamesTest.java +++ b/test/jdk/java/util/TimeZone/CLDRDisplayNamesTest.java @@ -24,7 +24,7 @@ /* * @test * @bug 8005471 8008577 8129881 8130845 8136518 8181157 8210490 8220037 - * 8234347 8236548 8317979 + * 8234347 8236548 8317979 8354548 * @modules jdk.localedata * @run main CLDRDisplayNamesTest * @summary Make sure that localized time zone names of CLDR are used @@ -47,34 +47,28 @@ public class CLDRDisplayNamesTest { static final String[][] CLDR_DATA = { { "ja-JP", - "\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u6a19\u6e96\u6642", + "米国太平洋標準時", "PST", - "\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593", + "米国太平洋夏時間", "PDT", - //"\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u6642\u9593", - //"PT" }, { "zh-CN", - "\u5317\u7f8e\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4", + "北美太平洋标准时间", "PST", - "\u5317\u7f8e\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6\u95f4", + "北美太平洋夏令时间", "PDT", - //"\u5317\u7f8e\u592a\u5e73\u6d0b\u65f6\u95f4", - //"PT", }, { "de-DE", - "Nordamerikanische Westk\u00fcsten-Normalzeit", + "Nordamerikanische Westküsten-Normalzeit", "PST", - "Nordamerikanische Westk\u00fcsten-Sommerzeit", + "Nordamerikanische Westküsten-Sommerzeit", "PDT", - //"Nordamerikanische Westk\u00fcstenzeit", - //"PT", }, }; - private static final String NO_INHERITANCE_MARKER = "\u2205\u2205\u2205"; + private static final String NO_INHERITANCE_MARKER = "∅∅∅"; public static void main(String[] args) { // Make sure that localized time zone names of CLDR are used diff --git a/test/jdk/sun/text/resources/LocaleData.cldr b/test/jdk/sun/text/resources/LocaleData.cldr index c56ad663798..9d81c50ae1e 100644 --- a/test/jdk/sun/text/resources/LocaleData.cldr +++ b/test/jdk/sun/text/resources/LocaleData.cldr @@ -1,5 +1,26 @@ # +# Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + # # List of locale data for locale-data test # @@ -2384,15 +2405,15 @@ FormatData/zh_HK/DayAbbreviations/1=週一 FormatData/zh_HK/DayAbbreviations/2=週二 FormatData/zh_HK/latn.NumberPatterns/1=¤#,##0.00 CurrencyNames/zh_HK/HKD=HK$ -FormatData/zh_HK/TimePatterns/0=ah:mm:ss [zzzz] -FormatData/zh_HK/TimePatterns/1=ah:mm:ss [z] +FormatData/zh_HK/TimePatterns/0=ah:mm:ss '['zzzz']' +FormatData/zh_HK/TimePatterns/1=ah:mm:ss '['z']' FormatData/zh_HK/TimePatterns/2=ah:mm:ss FormatData/zh_HK/TimePatterns/3=ah:mm FormatData/zh_HK/DatePatterns/0=y年M月d日EEEE FormatData/zh_HK/DatePatterns/1=y年M月d日 FormatData/zh_HK/DatePatterns/2=y年M月d日 FormatData/zh_HK/DatePatterns/3=d/M/y -FormatData/zh_HK/DateTimePatterns/0={1} {0} +FormatData/zh_HK/DateTimePatterns/0={1}{0} #bug #4149569 LocaleNames/tr/TR=Türkiye @@ -3216,8 +3237,8 @@ LocaleNames/es_US/kk=kazajo LocaleNames/es_US/km=jemer LocaleNames/es_US/kn=canarés LocaleNames/es_US/kr=kanuri -LocaleNames/es_US/ks=cachemiro -LocaleNames/es_US/ku=kurdo +LocaleNames/es_US/ks=cachemir +LocaleNames/es_US/ku=kurdo kurmanyi LocaleNames/es_US/kv=komi LocaleNames/es_US/kw=córnico LocaleNames/es_US/ky=kirguís @@ -3249,7 +3270,7 @@ LocaleNames/es_US/sn=shona LocaleNames/es_US/ss=siswati LocaleNames/es_US/st=sesotho del sur LocaleNames/es_US/su=sundanés -LocaleNames/es_US/sw=swahili +LocaleNames/es_US/sw=suajili LocaleNames/es_US/tg=tayiko LocaleNames/es_US/tn=setsuana LocaleNames/es_US/to=tongano @@ -3344,7 +3365,7 @@ LocaleNames/pt/gu=guzerate LocaleNames/pt/gv=manx LocaleNames/pt/ha=hauçá LocaleNames/pt/he=hebraico -LocaleNames/pt/hi=híndi +LocaleNames/pt/hi=hindi LocaleNames/pt/ho=hiri motu LocaleNames/pt/hr=croata LocaleNames/pt/ht=haitiano @@ -3372,7 +3393,7 @@ LocaleNames/pt/kn=canarim LocaleNames/pt/ko=coreano LocaleNames/pt/kr=canúri LocaleNames/pt/ks=caxemira -LocaleNames/pt/ku=curdo +LocaleNames/pt/ku=curmânji LocaleNames/pt/kv=komi LocaleNames/pt/kw=córnico LocaleNames/pt/ky=quirguiz @@ -3859,7 +3880,7 @@ LocaleNames/ga/CD=Poblacht Dhaonlathach an Chongó LocaleNames/ga/CF=Poblacht na hAfraice Láir LocaleNames/ga/CG=Congó-Brazzaville LocaleNames/ga/CH=an Eilvéis -LocaleNames/ga/CI=An Cósta Eabhair +LocaleNames/ga/CI=Côte d’Ivoire LocaleNames/ga/CK=Oileáin Cook LocaleNames/ga/CL=an tSile LocaleNames/ga/CM=Camarún @@ -3867,7 +3888,7 @@ LocaleNames/ga/CN=an tSín LocaleNames/ga/CO=an Cholóim LocaleNames/ga/CR=Cósta Ríce LocaleNames/ga/CU=Cúba -LocaleNames/ga/CV=Rinn Verde +LocaleNames/ga/CV=Poblacht Cabo Verde LocaleNames/ga/CX=Oileán na Nollag LocaleNames/ga/CY=an Chipir LocaleNames/ga/CZ=an tSeicia @@ -3875,11 +3896,11 @@ LocaleNames/ga/DE=an Ghearmáin LocaleNames/ga/DK=an Danmhairg LocaleNames/ga/DM=Doiminice LocaleNames/ga/DO=an Phoblacht Dhoiminiceach -LocaleNames/ga/DZ=An Ailgéir +LocaleNames/ga/DZ=an Ailgéir LocaleNames/ga/EC=Eacuadór LocaleNames/ga/EE=an Eastóin -LocaleNames/ga/EG=An Éigipt -LocaleNames/ga/EH=An Sahára Thiar +LocaleNames/ga/EG=an Éigipt +LocaleNames/ga/EH=an Sahára Thiar LocaleNames/ga/ES=an Spáinn LocaleNames/ga/ET=an Aetóip LocaleNames/ga/FI=an Fhionlainn @@ -3895,8 +3916,8 @@ LocaleNames/ga/GF=Guáin na Fraince LocaleNames/ga/GH=Gána LocaleNames/ga/GI=Giobráltar LocaleNames/ga/GL=an Ghraonlainn -LocaleNames/ga/GM=An Ghaimbia -LocaleNames/ga/GN=An Ghuine +LocaleNames/ga/GM=an Ghaimbia +LocaleNames/ga/GN=an Ghuine LocaleNames/ga/GP=Guadalúip LocaleNames/ga/GQ=an Ghuine Mheánchiorclach LocaleNames/ga/GR=an Ghréig @@ -3935,12 +3956,12 @@ LocaleNames/ga/KZ=an Chasacstáin LocaleNames/ga/LB=an Liobáin LocaleNames/ga/LI=Lichtinstéin LocaleNames/ga/LK=Srí Lanca -LocaleNames/ga/LR=An Libéir +LocaleNames/ga/LR=an Libéir LocaleNames/ga/LS=Leosóta LocaleNames/ga/LT=an Liotuáin LocaleNames/ga/LU=Lucsamburg LocaleNames/ga/LV=an Laitvia -LocaleNames/ga/LY=An Libia +LocaleNames/ga/LY=an Libia LocaleNames/ga/MA=Maracó LocaleNames/ga/MC=Monacó LocaleNames/ga/MD=an Mholdóiv @@ -3950,7 +3971,7 @@ LocaleNames/ga/ML=Mailí LocaleNames/ga/MM=Maenmar (Burma) LocaleNames/ga/MN=an Mhongóil LocaleNames/ga/MP=Na hOileáin Mháirianacha Thuaidh -LocaleNames/ga/MR=An Mháratái +LocaleNames/ga/MR=an Mháratáin LocaleNames/ga/MS=Montsarat LocaleNames/ga/MT=Málta LocaleNames/ga/MU=Oileán Mhuirís @@ -3961,9 +3982,9 @@ LocaleNames/ga/MY=an Mhalaeisia LocaleNames/ga/MZ=Mósaimbíc LocaleNames/ga/NA=an Namaib LocaleNames/ga/NC=an Nua-Chaladóin -LocaleNames/ga/NE=An Nígir +LocaleNames/ga/NE=an Nígir LocaleNames/ga/NF=Oileán Norfolk -LocaleNames/ga/NG=An Nigéir +LocaleNames/ga/NG=an Nigéir LocaleNames/ga/NI=Nicearagua LocaleNames/ga/NL=an Ísiltír LocaleNames/ga/NO=an Iorua @@ -3989,7 +4010,7 @@ LocaleNames/ga/RW=Ruanda LocaleNames/ga/SA=an Araib Shádach LocaleNames/ga/SB=Oileáin Sholaimh LocaleNames/ga/SC=na Séiséil -LocaleNames/ga/SD=An tSúdáin +LocaleNames/ga/SD=an tSúdáin LocaleNames/ga/SE=an tSualainn LocaleNames/ga/SG=Singeapór LocaleNames/ga/SH=San Héilin @@ -3998,13 +4019,13 @@ LocaleNames/ga/SJ=Svalbard agus Jan Mayen LocaleNames/ga/SK=an tSlóvaic LocaleNames/ga/SL=Siarra Leon LocaleNames/ga/SM=San Mairíne -LocaleNames/ga/SN=An tSeineagáil +LocaleNames/ga/SN=an tSeineagáil LocaleNames/ga/SO=an tSomáil LocaleNames/ga/SR=Suranam LocaleNames/ga/ST=São Tomé agus Príncipe LocaleNames/ga/SV=An tSalvadóir LocaleNames/ga/SY=an tSiria -LocaleNames/ga/SZ=eSuaitíní +LocaleNames/ga/SZ=Esuaitíní LocaleNames/ga/TC=Oileáin na dTurcach agus Caicos LocaleNames/ga/TD=Sead LocaleNames/ga/TF=Críocha Francacha Dheisceart an Domhain @@ -4014,7 +4035,7 @@ LocaleNames/ga/TJ=an Táidsíceastáin LocaleNames/ga/TK=Tócalá LocaleNames/ga/TL=Tíomór Thoir LocaleNames/ga/TM=an Tuircméanastáin -LocaleNames/ga/TN=An Tuinéis +LocaleNames/ga/TN=an Tuinéis LocaleNames/ga/TR=an Tuirc LocaleNames/ga/TT=Oileán na Tríonóide agus Tobága LocaleNames/ga/TV=Túvalú @@ -4133,7 +4154,7 @@ LocaleNames/sr/ja=јапански LocaleNames/sr/ka=грузијски LocaleNames/sr/km=кмерски LocaleNames/sr/ko=корејски -LocaleNames/sr/ku=курдски +LocaleNames/sr/ku=курманџи LocaleNames/sr/ky=киргиски LocaleNames/sr/la=латински LocaleNames/sr/lt=литвански @@ -5328,7 +5349,7 @@ LocaleNames/es/kk=kazajo LocaleNames/es/km=jemer LocaleNames/es/kn=canarés LocaleNames/es/ks=cachemir -LocaleNames/es/ku=kurdo +LocaleNames/es/ku=kurmanji LocaleNames/es/ky=kirguís LocaleNames/es/lu=luba-katanga LocaleNames/es/mr=maratí @@ -5447,7 +5468,7 @@ LocaleNames/nl/kn=Kannada LocaleNames/nl/ko=Koreaans LocaleNames/nl/kr=Kanuri LocaleNames/nl/ks=Kasjmiri -LocaleNames/nl/ku=Koerdisch +LocaleNames/nl/ku=Kurmanci LocaleNames/nl/kv=Komi LocaleNames/nl/kw=Cornish LocaleNames/nl/ky=Kirgizisch @@ -6504,7 +6525,7 @@ CurrencyNames/zh_TW/mxn=墨西哥披索 CurrencyNames/zh_TW/mxv=墨西哥轉換單位 (UDI) CurrencyNames/zh_TW/myr=馬來西亞令吉 CurrencyNames/zh_TW/mzn=莫三比克梅蒂卡爾 -CurrencyNames/zh_TW/nio=尼加拉瓜金科多巴 +CurrencyNames/zh_TW/nio=尼加拉瓜科多巴 CurrencyNames/zh_TW/rol=舊羅馬尼亞列伊 CurrencyNames/zh_TW/ron=羅馬尼亞列伊 CurrencyNames/zh_TW/rsd=塞爾維亞戴納 @@ -6521,9 +6542,9 @@ CurrencyNames/zh_TW/tzs=坦尚尼亞先令 CurrencyNames/zh_TW/uzs=烏茲別克索姆 CurrencyNames/zh_TW/veb=委內瑞拉玻利瓦 (1871–2008) CurrencyNames/zh_TW/vef=委內瑞拉玻利瓦 (2008–2018) -CurrencyNames/zh_TW/xaf=法郎 (CFA–BEAC) +CurrencyNames/zh_TW/xaf=中非法郎 CurrencyNames/zh_TW/xag=白銀 -CurrencyNames/zh_TW/xof=法郎 (CFA–BCEAO) +CurrencyNames/zh_TW/xof=西非法郎 CurrencyNames/zh_TW/xpd=帕拉狄昂 CurrencyNames/zh_TW/xpt=白金 CurrencyNames/zh_TW/xts=測試用貨幣代碼 @@ -7867,7 +7888,7 @@ FormatData/nn/latn.NumberElements/0=, FormatData/nn/latn.NumberElements/1=  # CalendarData consolidated to root -CalendarData//firstDayOfWeek=1: AG AS BD BR BS BT BW BZ CA CO DM DO ET GT GU HK HN ID IL IN JM JP KE KH KR LA MH MM MO MT MX MZ NI NP PA PE PH PK PR PT PY SA SG SV TH TT TW UM US VE VI WS YE ZA ZW;2: 001 AD AE AI AL AM AN AR AT AU AX AZ BA BE BG BM BN BY CH CL CM CN CR CY CZ DE DK EC EE ES FI FJ FO FR GB GE GF GP GR HR HU IE IS IT KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ MY NL NO NZ PL RE RO RS RU SE SI SK SM TJ TM TR UA UY UZ VA VN XK;6: MV;7: AF BH DJ DZ EG IQ IR JO KW LY OM QA SD SY +CalendarData//firstDayOfWeek=1: AG AS BD BR BS BT BW BZ CA CO DM DO ET GT GU HK HN ID IL IN IS JM JP KE KH KR LA MH MM MO MT MX MZ NI NP PA PE PH PK PR PT PY SA SG SV TH TT TW UM US VE VI WS YE ZA ZW;2: 001 AD AE AI AL AM AN AR AT AU AX AZ BA BE BG BM BN BY CH CL CM CN CR CY CZ DE DK EC EE ES FI FJ FO FR GB GE GF GP GR HR HU IE IT KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ MY NL NO NZ PL RE RO RS RU SE SI SK SM TJ TM TR UA UY UZ VA VN XK;6: MV;7: AF BH DJ DZ EG IQ IR JO KW LY OM QA SD SY CalendarData//minimalDaysInFirstWeek=1: 001 GU UM US VI;4: AD AN AT AX BE BG CH CZ DE DK EE ES FI FJ FO FR GB GF GG GI GP GR HU IE IM IS IT JE LI LT LU MC MQ NL NO PL PT RE RU SE SJ SK SM VA # tzdata2022f @@ -7876,3 +7897,9 @@ TimeZoneNames/en/America\/Chihuahua/1=Central Standard Time # bug 8303472 LocaleNames/en/TR=Türkiye + +# tok locale has '#' literals. Verify they are correctly escaped +FormatData/tok/DatePatterns/0='sike' '#'y 'la' MMM 'la' 'suno' '#'d +FormatData/tok/DatePatterns/1='tenpo' 'sike' '#'y 'la' 'tenpo' MMMM 'la' 'tenpo' 'suno' '#'d +FormatData/tok/DatePatterns/2='sike' '#'y 'la' MMM 'la' 'suno' '#'d +FormatData/tok/DatePatterns/3=y-MM-dd diff --git a/test/jdk/sun/text/resources/LocaleDataTest.java b/test/jdk/sun/text/resources/LocaleDataTest.java index 40182034854..472576f327c 100644 --- a/test/jdk/sun/text/resources/LocaleDataTest.java +++ b/test/jdk/sun/text/resources/LocaleDataTest.java @@ -42,6 +42,7 @@ * 8209775 8221432 8227127 8230284 8231273 8233579 8234288 8250665 8255086 * 8251317 8274658 8283277 8283805 8265315 8287868 8295564 8284840 8296715 * 8301206 8303472 8317979 8306116 8174269 8333582 8357075 8357882 8367021 + 8354548 * @summary Verify locale data * @modules java.base/sun.util.resources * @modules jdk.localedata diff --git a/test/jdk/sun/util/resources/TimeZone/Bug6317929.java b/test/jdk/sun/util/resources/TimeZone/Bug6317929.java index e952b3f1be3..8b0eba1760e 100644 --- a/test/jdk/sun/util/resources/TimeZone/Bug6317929.java +++ b/test/jdk/sun/util/resources/TimeZone/Bug6317929.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* * @test - * @bug 6317929 6409419 8008577 8174269 + * @bug 6317929 6409419 8008577 8174269 8354548 * @modules jdk.localedata * @summary Test case for tzdata2005m support for 9 locales * @run main Bug6317929 @@ -59,25 +59,25 @@ public class Bug6317929 { "\"Eastern Standard Time\""); tzLocale = locales2Test[1]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("Nordamerikanische Ostk\u00fcsten-Normalzeit")) + ("Nordamerikanische Ostküsten-Normalzeit")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"Nordamerikanische Ostk\u00fcsten-Normalzeit\""); + "\"Nordamerikanische Ostküsten-Normalzeit\""); tzLocale = locales2Test[2]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("hora est\u00e1ndar oriental")) + ("hora estándar oriental")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"hora est\u00e1ndar oriental\""); + "\"hora estándar oriental\""); tzLocale = locales2Test[3]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("heure normale de l\u2019Est nord-am\u00e9ricain")) + ("heure normale de l’Est nord-américain")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"heure normale de l\u2019Est nord-am\u00e9ricain\""); + "\"heure normale de l’Est nord-américain\""); tzLocale = locales2Test[4]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals ("Ora standard orientale USA")) @@ -86,40 +86,39 @@ public class Bug6317929 { "America/Coral_Harbour should be " + "\"Ora standard orientale USA\""); tzLocale = locales2Test[5]; - if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u30a2\u30e1\u30ea\u30ab\u6771\u90e8\u6a19\u6e96\u6642")) + if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals("米国東部標準時")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"\u30a2\u30e1\u30ea\u30ab\u6771\u90e8\u6a19\u6e96\u6642\""); + "\"米国東部標準時\""); tzLocale = locales2Test[6]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\ubbf8 \ub3d9\ubd80 \ud45c\uc900\uc2dc")) + ("미 동부 표준시")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"\ubbf8 \ub3d9\ubd80 \ud45c\uc900\uc2dc\""); + "\"미 동부 표준시\""); tzLocale = locales2Test[7]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u00f6stnordamerikansk normaltid")) + ("östnordamerikansk normaltid")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"\u00f6stnordamerikansk normaltid\""); + "\"östnordamerikansk normaltid\""); tzLocale = locales2Test[8]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u5317\u7f8e\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4")) + ("北美东部标准时间")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"\u5317\u7f8e\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\""); + "\"北美东部标准时间\""); tzLocale = locales2Test[9]; if (!Coral_Harbour.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u6771\u90e8\u6a19\u6e96\u6642\u9593")) + ("東部標準時間")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "America/Coral_Harbour should be " + - "\"\u6771\u90e8\u6a19\u6e96\u6642\u9593\""); + "\"東部標準時間\""); TimeZone Currie = TimeZone.getTimeZone("Australia/Currie"); tzLocale = locales2Test[0]; @@ -138,59 +137,59 @@ public class Bug6317929 { "\"Ostaustralische Normalzeit\""); tzLocale = locales2Test[2]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("hora est\u00e1ndar de Australia oriental")) + ("hora estándar de Australia oriental")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"hora est\u00e1ndar de Australia oriental\""); + "\"hora estándar de Australia oriental\""); tzLocale = locales2Test[3]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("heure normale de l\u2019Est de l\u2019Australie")) + ("heure normale de l’Est de l’Australie")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"heure normale de l\u2019Est de l\u2019Australie\""); + "\"heure normale de l’Est de l’Australie\""); tzLocale = locales2Test[4]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("Ora standard dell\u2019Australia orientale")) + ("Ora standard dell’Australia orientale")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"Ora standard dell\u2019Australia orientale\""); + "\"Ora standard dell’Australia orientale\""); tzLocale = locales2Test[5]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2\u6771\u90e8\u6a19\u6e96\u6642")) + ("オーストラリア東部標準時")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2\u6771\u90e8\u6a19\u6e96\u6642\""); + "\"オーストラリア東部標準時\""); tzLocale = locales2Test[6]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544 \ub3d9\ubd80 \ud45c\uc900\uc2dc")) + ("호주 동부 표준시")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"\uc624\uc2a4\ud2b8\ub808\uc77c\ub9ac\uc544 \ub3d9\ubd80 \ud45c\uc900\uc2dc\""); + "\"호주 동부 표준시\""); tzLocale = locales2Test[7]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u00f6staustralisk normaltid")) + ("östaustralisk normaltid")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"\u00f6staustralisk normaltid\""); + "\"östaustralisk normaltid\""); tzLocale = locales2Test[8]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u6fb3\u5927\u5229\u4e9a\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4")) + ("澳大利亚东部标准时间")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"\u6fb3\u5927\u5229\u4e9a\u4e1c\u90e8\u6807\u51c6\u65f6\u95f4\""); + "\"澳大利亚东部标准时间\""); tzLocale = locales2Test[9]; if (!Currie.getDisplayName(false, TimeZone.LONG, tzLocale).equals - ("\u6fb3\u6d32\u6771\u90e8\u6a19\u6e96\u6642\u9593")) + ("澳洲東部標準時間")) throw new RuntimeException("\n" + tzLocale + ": LONG, " + "non-daylight saving name for " + "Australia/Currie should be " + - "\"\u6fb3\u6d32\u6771\u90e8\u6a19\u6e96\u6642\u9593\""); + "\"澳洲東部標準時間\""); } } diff --git a/test/jdk/sun/util/resources/TimeZone/Bug6442006.java b/test/jdk/sun/util/resources/TimeZone/Bug6442006.java index 982347093be..074e2d8060f 100644 --- a/test/jdk/sun/util/resources/TimeZone/Bug6442006.java +++ b/test/jdk/sun/util/resources/TimeZone/Bug6442006.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* * @test - * @bug 6442006 8008577 8174269 + * @bug 6442006 8008577 8174269 8354548 * @modules jdk.localedata * @summary Test case for verifying timezone display name for Asia/Taipei * @run main Bug6442006 @@ -38,8 +38,8 @@ public class Bug6442006 { TimeZone tz = TimeZone.getTimeZone("Asia/Taipei"); Locale tzLocale = Locale.JAPANESE; - String jaStdName = "\u53f0\u5317\u6a19\u6e96\u6642"; - String jaDstName = "\u53f0\u5317\u590f\u6642\u9593"; + String jaStdName = "台湾標準時"; + String jaDstName = "台湾夏時間"; if (!tz.getDisplayName(false, TimeZone.LONG, tzLocale).equals (jaStdName)) diff --git a/test/jdk/sun/util/resources/TimeZone/Bug8139107.java b/test/jdk/sun/util/resources/TimeZone/Bug8139107.java index 3a65569ad98..e00d4c88889 100644 --- a/test/jdk/sun/util/resources/TimeZone/Bug8139107.java +++ b/test/jdk/sun/util/resources/TimeZone/Bug8139107.java @@ -23,13 +23,14 @@ /* * @test - * @bug 8139107 8174269 + * @bug 8139107 8174269 8354548 * @summary Test that date parsing with DateTimeFormatter pattern * that contains timezone field doesn't trigger NPE. All supported * locales are tested. * @run testng/timeout=480 Bug8139107 */ import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.Locale; import org.testng.annotations.Test; @@ -48,7 +49,16 @@ public class Bug8139107 { DateTimeFormatter inputDateTimeFormat = DateTimeFormatter .ofPattern(pattern) .withLocale(tl); - System.out.println("Parse result: " + inputDateTimeFormat.parse(inputDate)); + try { + System.out.println("Parse result: " + inputDateTimeFormat.parse(inputDate)); + } catch (DateTimeParseException dateTimeParseException) { + // Short tz name "MSK" no longer resides in the root locale since CLDR 48 + // as the zone "Europe/Kirov" became the link to "moscow" metazone. + // Prior to that, "Europe/Kirov" had no l10n, thus only the short + // names were retrieved from TZDB, and placed in the root (thus + // guaranteed to be parsed in any locale before). + System.out.println(dateTimeParseException.getMessage()); + } } // Input date time string with short time zone name diff --git a/test/jdk/sun/util/resources/cldr/DateTimeRoundTripTest.java b/test/jdk/sun/util/resources/cldr/DateTimeRoundTripTest.java new file mode 100644 index 00000000000..0c9879c8fd9 --- /dev/null +++ b/test/jdk/sun/util/resources/cldr/DateTimeRoundTripTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8354548 + * @modules jdk.localedata + * @summary Tests DateTimeFormatter format/parse round trips; some locale + * may contain reserved characters, eg '#', which should correctly + * be escaped + * @run junit DateTimeRoundTripTest + */ + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; +import java.util.Arrays; +import java.util.Locale; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +public class DateTimeRoundTripTest { + private static Stream availableLocales() { + return Locale.availableLocales(); + } + + @ParameterizedTest + @MethodSource("availableLocales") + public void testDateTimeRoundTripTest(Locale locale) { + Arrays.stream(FormatStyle.values()).forEach(style -> { + assertDoesNotThrow(() -> + Instant.parse("2018-07-16T23:58:59.000000200Z") + .atZone(ZoneId.of("UTC")) + .format(DateTimeFormatter.ofLocalizedDate(style).withLocale(locale))); + }); + } +} diff --git a/test/jdk/sun/util/resources/cldr/TimeZoneNamesTest.java b/test/jdk/sun/util/resources/cldr/TimeZoneNamesTest.java index ed6fb2a58d8..05b0114f1b4 100644 --- a/test/jdk/sun/util/resources/cldr/TimeZoneNamesTest.java +++ b/test/jdk/sun/util/resources/cldr/TimeZoneNamesTest.java @@ -24,6 +24,7 @@ /* * @test * @bug 8181157 8202537 8234347 8236548 8261279 8322647 8174269 8346948 + * 8354548 * @modules jdk.localedata * @summary Checks CLDR time zone names are generated correctly at * either build or runtime @@ -51,21 +52,22 @@ public class TimeZoneNamesTest { return new Object[][] { // tzid, locale, style, expected - // This list is as of CLDR version 47, and should be examined + // This list is as of CLDR version 48, and should be examined // on the CLDR data upgrade. - // no "metazone" zones - {"Asia/Srednekolymsk", Locale.US, "Srednekolymsk Standard Time", + // no "metazone" zones (some of them were assigned metazones + // over time, thus they are not "generated" per se + {"Asia/Srednekolymsk", Locale.US, "Magadan Standard Time", "GMT+11:00", - "Srednekolymsk Daylight Time", + "Magadan Summer Time", "GMT+12:00", - "Srednekolymsk Time", + "Magadan Time", "GMT+11:00"}, - {"Asia/Srednekolymsk", Locale.FRANCE, "Srednekolymsk (heure standard)", + {"Asia/Srednekolymsk", Locale.FRANCE, "heure normale de Magadan", "UTC+11:00", - "Srednekolymsk (heure d\u2019\u00e9t\u00e9)", + "heure d’été de Magadan", "UTC+12:00", - "heure : Srednekolymsk", + "heure de Magadan", "UTC+11:00"}, {"America/Punta_Arenas", Locale.US, "Punta Arenas Standard Time", "GMT-03:00", @@ -74,58 +76,58 @@ public class TimeZoneNamesTest { "Punta Arenas Time", "GMT-03:00"}, {"America/Punta_Arenas", Locale.FRANCE, "Punta Arenas (heure standard)", - "UTC\u221203:00", - "Punta Arenas (heure d\u2019\u00e9t\u00e9)", - "UTC\u221202:00", + "UTC−03:00", + "Punta Arenas (heure d’été)", + "UTC−02:00", "heure : Punta Arenas", - "UTC\u221203:00"}, - {"Asia/Famagusta", Locale.US, "Famagusta Standard Time", + "UTC−03:00"}, + {"Asia/Famagusta", Locale.US, "Eastern European Standard Time", "EET", - "Famagusta Daylight Time", + "Eastern European Summer Time", "EEST", - "Famagusta Time", + "Eastern European Time", "EET"}, - {"Asia/Famagusta", Locale.FRANCE, "Famagouste (heure standard)", + {"Asia/Famagusta", Locale.FRANCE, "heure normale d’Europe de l’Est", "EET", - "Famagouste (heure d\u2019\u00e9t\u00e9)", + "heure d’été d’Europe de l’Est", "EEST", - "heure : Famagouste", + "heure d’Europe de l’Est", "EET"}, - {"Europe/Astrakhan", Locale.US, "Astrakhan Standard Time", + {"Europe/Astrakhan", Locale.US, "Samara Standard Time", "GMT+04:00", - "Astrakhan Daylight Time", + "Samara Summer Time", "GMT+05:00", - "Astrakhan Time", + "Samara Time", "GMT+04:00"}, - {"Europe/Astrakhan", Locale.FRANCE, "Astrakhan (heure standard)", + {"Europe/Astrakhan", Locale.FRANCE, "heure normale de Samara", "UTC+04:00", - "Astrakhan (heure d\u2019\u00e9t\u00e9)", + "heure d’été de Samara", "UTC+05:00", - "heure : Astrakhan", + "heure de Samara", "UTC+04:00"}, - {"Europe/Saratov", Locale.US, "Saratov Standard Time", + {"Europe/Saratov", Locale.US, "Samara Standard Time", "GMT+04:00", - "Saratov Daylight Time", + "Samara Summer Time", "GMT+05:00", - "Saratov Time", + "Samara Time", "GMT+04:00"}, - {"Europe/Saratov", Locale.FRANCE, "Saratov (heure standard)", + {"Europe/Saratov", Locale.FRANCE, "heure normale de Samara", "UTC+04:00", - "Saratov (heure d\u2019\u00e9t\u00e9)", + "heure d’été de Samara", "UTC+05:00", - "heure : Saratov", + "heure de Samara", "UTC+04:00"}, - {"Europe/Ulyanovsk", Locale.US, "Ulyanovsk Standard Time", + {"Europe/Ulyanovsk", Locale.US, "Samara Standard Time", "GMT+04:00", - "Ulyanovsk Daylight Time", + "Samara Summer Time", "GMT+05:00", - "Ulyanovsk Time", + "Samara Time", "GMT+04:00"}, - {"Europe/Ulyanovsk", Locale.FRANCE, "Oulianovsk (heure standard)", + {"Europe/Ulyanovsk", Locale.FRANCE, "heure normale de Samara", "UTC+04:00", - "Oulianovsk (heure d\u2019\u00e9t\u00e9)", + "heure d’été de Samara", "UTC+05:00", - "heure : Oulianovsk", + "heure de Samara", "UTC+04:00"}, {"Pacific/Bougainville", Locale.US, "Bougainville Standard Time", "GMT+11:00", @@ -135,45 +137,45 @@ public class TimeZoneNamesTest { "GMT+11:00"}, {"Pacific/Bougainville", Locale.FRANCE, "Bougainville (heure standard)", "UTC+11:00", - "Bougainville (heure d\u2019\u00e9t\u00e9)", + "Bougainville (heure d’été)", "UTC+11:00", "heure : Bougainville", "UTC+11:00"}, - {"Europe/Istanbul", Locale.US, "Istanbul Standard Time", + {"Europe/Istanbul", Locale.US, "Türkiye Standard Time", "GMT+03:00", - "Istanbul Daylight Time", + "Türkiye Summer Time", "GMT+04:00", - "Istanbul Time", + "Türkiye Time", "GMT+03:00"}, - {"Europe/Istanbul", Locale.FRANCE, "Istanbul (heure standard)", + {"Europe/Istanbul", Locale.FRANCE, "heure normale de Turquie", "UTC+03:00", - "Istanbul (heure d\u2019\u00e9t\u00e9)", + "heure avancée de Turquie", "UTC+04:00", - "heure : Istanbul", + "heure de Turquie", "UTC+03:00"}, - {"Asia/Istanbul", Locale.US, "Istanbul Standard Time", + {"Asia/Istanbul", Locale.US, "Türkiye Standard Time", "GMT+03:00", - "Istanbul Daylight Time", + "Türkiye Summer Time", "GMT+04:00", - "Istanbul Time", + "Türkiye Time", "GMT+03:00"}, - {"Asia/Istanbul", Locale.FRANCE, "Istanbul (heure standard)", + {"Asia/Istanbul", Locale.FRANCE, "heure normale de Turquie", "UTC+03:00", - "Istanbul (heure d\u2019\u00e9t\u00e9)", + "heure avancée de Turquie", "UTC+04:00", - "heure : Istanbul", + "heure de Turquie", "UTC+03:00"}, - {"Turkey", Locale.US, "Istanbul Standard Time", + {"Turkey", Locale.US, "Türkiye Standard Time", "GMT+03:00", - "Istanbul Daylight Time", + "Türkiye Summer Time", "GMT+04:00", - "Istanbul Time", + "Türkiye Time", "GMT+03:00"}, - {"Turkey", Locale.FRANCE, "Istanbul (heure standard)", + {"Turkey", Locale.FRANCE, "heure normale de Turquie", "UTC+03:00", - "Istanbul (heure d\u2019\u00e9t\u00e9)", + "heure avancée de Turquie", "UTC+04:00", - "heure : Istanbul", + "heure de Turquie", "UTC+03:00"}, // Short names derived from TZDB at build time diff --git a/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java b/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java index d2c3f2800a8..5551d54a1ea 100644 --- a/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java +++ b/test/jdk/tools/jlink/plugins/IncludeLocalesPluginTest.java @@ -53,7 +53,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; * @test * @bug 8152143 8152704 8155649 8165804 8185841 8176841 8190918 * 8179071 8202537 8221432 8222098 8251317 8258794 8265315 - * 8296248 8306116 8174269 8347146 8346948 + * 8296248 8306116 8174269 8347146 8346948 8354548 * @summary IncludeLocalesPlugin tests * @author Naoto Sato * @requires (vm.compMode != "Xcomp" & os.maxMemory >= 2g) @@ -139,15 +139,15 @@ public class IncludeLocalesPluginTest { "(root)", "en", "en_001", "en_150", "en_AG", "en_AI", "en_AT", "en_AU", "en_BB", "en_BE", "en_BM", "en_BS", "en_BW", "en_BZ", "en_CC", "en_CH", "en_CK", "en_CM", "en_CX", "en_CY", "en_CZ", "en_DE", - "en_DG", "en_DK", "en_DM", "en_ER", "en_ES", "en_FI", "en_FJ", "en_FK", "en_FM", "en_FR", - "en_GB", "en_GD", "en_GG", "en_GH", "en_GI", "en_GM", "en_GS", "en_GY", "en_HK", "en_HU", "en_ID", + "en_DG", "en_DK", "en_DM", "en_EE", "en_ER", "en_ES", "en_FI", "en_FJ", "en_FK", "en_FM", "en_FR", + "en_GB", "en_GD", "en_GE", "en_GG", "en_GH", "en_GI", "en_GM", "en_GS", "en_GY", "en_HK", "en_HU", "en_ID", "en_IE", "en_IL", "en_IM", "en_IN", "en_IO", "en_IT", "en_JE", "en_JM", "en_KE", - "en_KI", "en_KN", "en_KY", "en_LC", "en_LR", "en_LS", "en_MG", "en_MO", + "en_KI", "en_KN", "en_KY", "en_LC", "en_LR", "en_LS", "en_LT", "en_LV", "en_MG", "en_MO", "en_MS", "en_MT", "en_MU", "en_MV", "en_MW", "en_MY", "en_NA", "en_NF", "en_NG", "en_NL", "en_NO", "en_NR", "en_NU", "en_NZ", "en_PG", "en_PK", "en_PL", "en_PN", "en_PT", "en_PW", "en_RO", "en_RW", "en_SB", "en_SC", "en_SD", "en_SE", "en_SG", "en_SH", "en_SI", "en_SK", "en_SL", "en_SS", "en_SX", "en_SZ", "en_TC", "en_TK", "en_TO", - "en_TT", "en_TV", "en_TZ", "en_UG", "en_US", "en_US_#Latn", "en_US_POSIX", "en_VC", "en_VG", "en_VU", "en_WS", + "en_TT", "en_TV", "en_TZ", "en_UA", "en_UG", "en_US", "en_US_#Latn", "en_US_POSIX", "en_VC", "en_VG", "en_VU", "en_WS", "en_ZA", "en_ZM", "en_ZW", "es", "es_419", "es_AR", "es_BO", "es_BR", "es_BZ", "es_CL", "es_CO", "es_CR", "es_CU", "es_DO", "es_EC", "es_GT", "es_HN", "es_MX", "es_NI", "es_PA", "es_PE", "es_PR", "es_PY", "es_SV", "es_US", @@ -176,15 +176,15 @@ public class IncludeLocalesPluginTest { "(root)", "en", "en_001", "en_150", "en_AE", "en_AG", "en_AI", "en_AS", "en_AT", "en_AU", "en_BB", "en_BE", "en_BI", "en_BM", "en_BS", "en_BW", "en_BZ", "en_CA", "en_CC", "en_CH", "en_CK", "en_CM", "en_CX", "en_CY", "en_CZ", "en_DE", - "en_DG", "en_DK", "en_DM", "en_ER", "en_ES", "en_FI", "en_FJ", "en_FK", "en_FM", "en_FR", - "en_GB", "en_GD", "en_GG", "en_GH", "en_GI", "en_GM", "en_GS", "en_GU", "en_GY", + "en_DG", "en_DK", "en_DM", "en_EE", "en_ER", "en_ES", "en_FI", "en_FJ", "en_FK", "en_FM", "en_FR", + "en_GB", "en_GD", "en_GE", "en_GG", "en_GH", "en_GI", "en_GM", "en_GS", "en_GU", "en_GY", "en_HK", "en_HU", "en_ID", "en_IE", "en_IL", "en_IM", "en_IN", "en_IO", "en_IT", "en_JE", "en_JM", - "en_KE", "en_KI", "en_KN", "en_KY", "en_LC", "en_LR", "en_LS", "en_MG", + "en_JP", "en_KE", "en_KI", "en_KN", "en_KY", "en_LC", "en_LR", "en_LS", "en_LT", "en_LV", "en_MG", "en_MH", "en_MO", "en_MP", "en_MS", "en_MT", "en_MU", "en_MV", "en_MW", "en_MY", "en_NA", "en_NF", "en_NG", "en_NL", "en_NO", "en_NR", "en_NU", "en_NZ", "en_PG", "en_PH", "en_PK", "en_PL", "en_PN", "en_PR", "en_PT", "en_PW", "en_RO", "en_RW", "en_SB", "en_SC", "en_SD", "en_SE", "en_SG", "en_SH", "en_SI", "en_SK", "en_SL", "en_SS", "en_SX", - "en_SZ", "en_TC", "en_TK", "en_TO", "en_TT", "en_TV", "en_TZ", "en_UG", + "en_SZ", "en_TC", "en_TK", "en_TO", "en_TT", "en_TV", "en_TZ", "en_UA","en_UG", "en_UM", "en_US", "en_US_#Latn", "en_US_POSIX", "en_VC", "en_VG", "en_VI", "en_VU", "en_WS", "en_ZA", "en_ZM", "en_ZW", "ja", "ja_JP", "ja_JP_#Jpan", "ja_JP_JP_#u-ca-japanese"), @@ -356,15 +356,15 @@ public class IncludeLocalesPluginTest { "(root)", "en", "en_001", "en_150", "en_AE", "en_AG", "en_AI", "en_AS", "en_AT", "en_AU", "en_BB", "en_BE", "en_BI", "en_BM", "en_BS", "en_BW", "en_BZ", "en_CA", "en_CC", "en_CH", "en_CK", "en_CM", "en_CX", "en_CY", "en_CZ", "en_DE", - "en_DG", "en_DK", "en_DM", "en_ER", "en_ES", "en_FI", "en_FJ", "en_FK", "en_FM", "en_FR", - "en_GB", "en_GD", "en_GG", "en_GH", "en_GI", "en_GM", "en_GS", "en_GU", "en_GY", + "en_DG", "en_DK", "en_DM", "en_EE", "en_ER", "en_ES", "en_FI", "en_FJ", "en_FK", "en_FM", "en_FR", + "en_GB", "en_GD", "en_GE", "en_GG", "en_GH", "en_GI", "en_GM", "en_GS", "en_GU", "en_GY", "en_HK", "en_HU", "en_ID", "en_IE", "en_IL", "en_IM", "en_IN", "en_IO", "en_IT", "en_JE", "en_JM", - "en_KE", "en_KI", "en_KN", "en_KY", "en_LC", "en_LR", "en_LS", "en_MG", + "en_JP", "en_KE", "en_KI", "en_KN", "en_KY", "en_LC", "en_LR", "en_LS", "en_LT", "en_LV", "en_MG", "en_MH", "en_MO", "en_MP", "en_MS", "en_MT", "en_MU", "en_MV", "en_MW", "en_MY", "en_NA", "en_NF", "en_NG", "en_NL", "en_NO", "en_NR", "en_NU", "en_NZ", "en_PG", "en_PH", "en_PK", "en_PL", "en_PN", "en_PR", "en_PT", "en_PW", "en_RO", "en_RW", "en_SB", "en_SC", "en_SD", "en_SE", "en_SG", "en_SH", "en_SI", "en_SK", "en_SL", "en_SS", "en_SX", - "en_SZ", "en_TC", "en_TK", "en_TO", "en_TT", "en_TV", "en_TZ", "en_UG", + "en_SZ", "en_TC", "en_TK", "en_TO", "en_TT", "en_TV", "en_TZ", "en_UA","en_UG", "en_UM", "en_US", "en_US_#Latn", "en_US_POSIX", "en_VC", "en_VG", "en_VI", "en_VU", "en_WS", "en_ZA", "en_ZM", "en_ZW"), ""), From 066810c877b206a66cc87537487b17f0481646c3 Mon Sep 17 00:00:00 2001 From: Lawrence Andrews Date: Fri, 7 Nov 2025 20:36:13 +0000 Subject: [PATCH 089/512] 8371485: ProblemList awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java for linux Reviewed-by: azvegint --- test/jdk/ProblemList.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index f7b8939ac6a..5132d012d7f 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -179,7 +179,7 @@ java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801 windows-al java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801 windows-all java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801 windows-all java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801 windows-all -java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801 windows-all +java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801,8357360 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801 windows-all java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801 windows-all java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801 windows-all From 88c4678eed818cbe9380f35352e90883fed27d33 Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Sat, 8 Nov 2025 21:30:58 +0000 Subject: [PATCH 090/512] 8371103: vmTestbase/nsk/jvmti/scenarios/events/EM02/em02t006/TestDescription.java failing Reviewed-by: amenkov, sspitsyn --- src/hotspot/share/prims/jvmtiEventController.cpp | 7 ++++--- test/hotspot/jtreg/ProblemList.txt | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/prims/jvmtiEventController.cpp b/src/hotspot/share/prims/jvmtiEventController.cpp index 2b44c069dc5..169ccbe035f 100644 --- a/src/hotspot/share/prims/jvmtiEventController.cpp +++ b/src/hotspot/share/prims/jvmtiEventController.cpp @@ -792,9 +792,6 @@ void JvmtiEventControllerPrivate::set_event_callbacks(JvmtiEnvBase *env, assert(Threads::number_of_threads() == 0 || JvmtiThreadState_lock->is_locked(), "sanity check"); EC_TRACE(("[*] # set event callbacks")); - // May be changing the event handler for ObjectFree. - flush_object_free_events(env); - env->set_event_callbacks(callbacks, size_of_callbacks); jlong enabled_bits = env->env_event_enable()->_event_callback_enabled.get_bits(); @@ -1107,6 +1104,8 @@ JvmtiEventController::set_event_callbacks(JvmtiEnvBase *env, // call the functionality without holding the JvmtiThreadState_lock. JvmtiEventControllerPrivate::set_event_callbacks(env, callbacks, size_of_callbacks); } else { + JvmtiEventControllerPrivate::flush_object_free_events(env); + MutexLocker mu(JvmtiThreadState_lock); JvmtiEventControllerPrivate::set_event_callbacks(env, callbacks, size_of_callbacks); } @@ -1194,6 +1193,8 @@ JvmtiEventController::env_dispose(JvmtiEnvBase *env) { // call the functionality without holding the JvmtiThreadState_lock. JvmtiEventControllerPrivate::env_dispose(env); } else { + JvmtiEventControllerPrivate::flush_object_free_events(env); + MutexLocker mu(JvmtiThreadState_lock); JvmtiEventControllerPrivate::env_dispose(env); } diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 1e4ac9e2848..bc163ae8197 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -171,7 +171,6 @@ vmTestbase/metaspace/gc/firstGC_default/TestDescription.java 8208250 generic-all vmTestbase/nsk/jvmti/scenarios/capability/CM03/cm03t001/TestDescription.java 8073470 linux-all vmTestbase/nsk/jvmti/InterruptThread/intrpthrd003/TestDescription.java 8288911 macosx-all -vmTestbase/nsk/jvmti/scenarios/events/EM02/em02t006/TestDescription.java 8371103 generic-all vmTestbase/jit/escape/LockCoarsening/LockCoarsening001.java 8148743 generic-all vmTestbase/jit/escape/LockCoarsening/LockCoarsening002.java 8208259 generic-all From ebd1c03829c354007a4ca9971be313d19eac2373 Mon Sep 17 00:00:00 2001 From: Prasanta Sadhukhan Date: Sun, 9 Nov 2025 07:22:45 +0000 Subject: [PATCH 091/512] 8371163: Make GlyphView/TestGlyphBGHeight.java headless 8371377: javax/swing/text/GlyphView/TestGlyphBGHeight.java fails in Ubuntu 24.04 X11 Reviewed-by: aivanov --- .../text/GlyphView/TestGlyphBGHeight.java | 87 ++++++++----------- 1 file changed, 34 insertions(+), 53 deletions(-) diff --git a/test/jdk/javax/swing/text/GlyphView/TestGlyphBGHeight.java b/test/jdk/javax/swing/text/GlyphView/TestGlyphBGHeight.java index 000ba16339e..b9062cef0c8 100644 --- a/test/jdk/javax/swing/text/GlyphView/TestGlyphBGHeight.java +++ b/test/jdk/javax/swing/text/GlyphView/TestGlyphBGHeight.java @@ -24,85 +24,66 @@ /* * @test * @bug 8017266 - * @key headful * @summary Verifies if Background is painted taller than needed for styled text. * @run main TestGlyphBGHeight */ import java.io.File; -import java.awt.Graphics2D; +import java.awt.Graphics; import java.awt.BorderLayout; import java.awt.Color; import java.awt.image.BufferedImage; -import java.awt.Robot; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JTextPane; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; -import javax.swing.SwingUtilities; public class TestGlyphBGHeight { - static JFrame frame; + private static final int WIDTH = 100; + private static final int HEIGHT = 100; + private static final int FONTSIZE = 32; + private static final Color EMPTY_PIXEL = new Color(0xFFFFFFFF); + + static BufferedImage createImage() throws Exception { + final BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB); + Graphics g = img.getGraphics(); + g.setColor(EMPTY_PIXEL); + g.fillRect(0, 0, WIDTH, HEIGHT); + return img; + } public static void main(String[] args) throws Exception { - int width = 100; - int height = 100; + final BufferedImage img = createImage(); + final JTextPane textPane = new JTextPane(); + final StyledDocument doc = textPane.getStyledDocument(); + + Style style = textPane.addStyle("superscript", null); + StyleConstants.setSuperscript(style, true); + StyleConstants.setFontSize(style, FONTSIZE); + StyleConstants.setBackground(style, Color.YELLOW); try { - Robot robot = new Robot(); - SwingUtilities.invokeAndWait(() -> { - frame = new JFrame("TestGlyphBGHeight"); - frame.setSize(width, height); - frame.getContentPane().setLayout(new BorderLayout()); + doc.insertString(doc.getLength(), "hello", style); + } catch (Exception e) {} - final JTextPane comp = new JTextPane(); - final StyledDocument doc = comp.getStyledDocument(); + textPane.setSize(WIDTH, HEIGHT); + textPane.setBackground(Color.RED); - Style style = comp.addStyle("superscript", null); - StyleConstants.setSuperscript(style, true); - StyleConstants.setFontSize(style, 32); - StyleConstants.setBackground(style, Color.YELLOW); - try { - doc.insertString(doc.getLength(), "hello", style); - } catch (Exception e) {} + textPane.paint(img.getGraphics()); - comp.setDocument(doc); - comp.setBackground(Color.RED); + ImageIO.write(img, "png", new File("AppTest.png")); - frame.getContentPane().add(comp, BorderLayout.CENTER); - - frame.setLocationRelativeTo(null); - frame.setVisible(true); - }); - robot.waitForIdle(); - robot.delay(1000); - - BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); - Graphics2D g2d = (Graphics2D) img.getGraphics(); - frame.paint(g2d); - ImageIO.write(img, "png", new File("AppTest.png")); - g2d.dispose(); - - BufferedImage bimg = img.getSubimage(0, 80, width, 1); - ImageIO.write(bimg, "png", new File("AppTest1.png")); - robot.waitForIdle(); - robot.delay(1000); - for (int x = 10; x < width / 2; x++) { - Color col = new Color(bimg.getRGB(x, 0)); - System.out.println(Integer.toHexString(bimg.getRGB(x, 0))); - if (col.equals(Color.YELLOW)) { - throw new RuntimeException(" Background is painted taller than needed for styled text"); - } + BufferedImage bimg = img.getSubimage(0, FONTSIZE + 20, WIDTH, 1); + ImageIO.write(bimg, "png", new File("AppTest1.png")); + for (int x = 10; x < WIDTH / 2; x++) { + int col = bimg.getRGB(x, 0); + System.out.println(Integer.toHexString(col)); + if (col == Color.YELLOW.getRGB()) { + throw new RuntimeException(" Background is painted taller than needed for styled text"); } - } finally { - SwingUtilities.invokeAndWait(() -> { - if (frame != null) { - frame.dispose(); - } - }); } } } From 4a14c81a06ab2be1d56cd01288135fbd369eb9c7 Mon Sep 17 00:00:00 2001 From: Prasanta Sadhukhan Date: Sun, 9 Nov 2025 07:23:10 +0000 Subject: [PATCH 092/512] 8299304: Test "java/awt/print/PrinterJob/PageDialogTest.java" fails on macOS 13 x64 because the Page Dialog blocks the Toolkit Reviewed-by: tr --- .../jdk/java/awt/print/PrinterJob/PageDialogTest.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java b/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java index eea118733de..ed02c64b48e 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java @@ -22,11 +22,12 @@ */ /* - @test - @bug 6302514 - @key printer - @run main/manual PageDialogTest - @summary A toolkit modal dialog should not be blocked by Page/Print dialog. + * @test + * @bug 6302514 + * @key printer + * @requires (os.family != "mac") + * @run main/manual PageDialogTest + * @summary A toolkit modal dialog should not be blocked by Page/Print dialog. */ import java.awt.BorderLayout; From 66e5a68a33dcd6b23c73c892d51b3efed162b8f8 Mon Sep 17 00:00:00 2001 From: Axel Boldt-Christmas Date: Mon, 10 Nov 2025 05:53:36 +0000 Subject: [PATCH 093/512] 8371343: ZGC: Remove dependency on test execution order for gtests Reviewed-by: stefank, eosterlund --- src/hotspot/share/gc/z/zAddress.hpp | 2 -- test/hotspot/gtest/gc/z/test_zAddress.cpp | 9 ++++----- test/hotspot/gtest/gc/z/test_zLiveMap.cpp | 7 +++---- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/gc/z/zAddress.hpp b/src/hotspot/share/gc/z/zAddress.hpp index de97c17d089..ca904f69277 100644 --- a/src/hotspot/share/gc/z/zAddress.hpp +++ b/src/hotspot/share/gc/z/zAddress.hpp @@ -309,8 +309,6 @@ public: }; class ZGlobalsPointers : public AllStatic { - friend class ZAddressTest; - private: static void set_good_masks(); static void pd_set_good_masks(); diff --git a/test/hotspot/gtest/gc/z/test_zAddress.cpp b/test/hotspot/gtest/gc/z/test_zAddress.cpp index 9f5c8e1f0bc..0df77b01ad2 100644 --- a/test/hotspot/gtest/gc/z/test_zAddress.cpp +++ b/test/hotspot/gtest/gc/z/test_zAddress.cpp @@ -23,9 +23,9 @@ #include "gc/z/zAddress.inline.hpp" #include "gc/z/zGlobals.hpp" -#include "unittest.hpp" +#include "zunittest.hpp" -class ZAddressTest : public ::testing::Test { +class ZAddressTest : public ZTest { protected: static zpointer color(uintptr_t value, uintptr_t color) { return ZAddress::color(zaddress(value | ZAddressHeapBase), color); @@ -374,8 +374,7 @@ protected: static void is_checks() { int young_phase = 0; int old_phase = 0; - // Setup - ZGlobalsPointers::initialize(); + test_is_checks_on_all(); advance_and_test_old_phase(old_phase, 4); @@ -431,6 +430,6 @@ protected: } }; -TEST_F(ZAddressTest, is_checks) { +TEST_VM_F(ZAddressTest, is_checks) { is_checks(); } diff --git a/test/hotspot/gtest/gc/z/test_zLiveMap.cpp b/test/hotspot/gtest/gc/z/test_zLiveMap.cpp index 18b90f5f149..da956b70b2a 100644 --- a/test/hotspot/gtest/gc/z/test_zLiveMap.cpp +++ b/test/hotspot/gtest/gc/z/test_zLiveMap.cpp @@ -24,9 +24,9 @@ #include "gc/z/zGenerationId.hpp" #include "gc/z/zGlobals.hpp" #include "gc/z/zLiveMap.inline.hpp" -#include "unittest.hpp" +#include "zunittest.hpp" -class ZLiveMapTest : public ::testing::Test { +class ZLiveMapTest : public ZTest { private: // Setup and tear down ZHeap* _old_heap; @@ -36,7 +36,6 @@ private: public: virtual void SetUp() { - ZGlobalsPointers::initialize(); _old_heap = ZHeap::_heap; ZHeap::_heap = (ZHeap*)os::malloc(sizeof(ZHeap), mtTest); @@ -84,6 +83,6 @@ protected: } }; -TEST_F(ZLiveMapTest, strongly_live_for_large_zpage) { +TEST_VM_F(ZLiveMapTest, strongly_live_for_large_zpage) { strongly_live_for_large_zpage(); } From a8b35bf5a60c26e8975a468d4ebe6aac557e4d85 Mon Sep 17 00:00:00 2001 From: Axel Boldt-Christmas Date: Mon, 10 Nov 2025 05:53:55 +0000 Subject: [PATCH 094/512] 8367317: ZGC: ZVirtualMemoryReserver::force_reserve_discontiguous arithmetic underflow Reviewed-by: jsikstro, eosterlund --- src/hotspot/share/gc/z/zVirtualMemoryManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/z/zVirtualMemoryManager.cpp b/src/hotspot/share/gc/z/zVirtualMemoryManager.cpp index 2f81a5cfe09..aec54818a68 100644 --- a/src/hotspot/share/gc/z/zVirtualMemoryManager.cpp +++ b/src/hotspot/share/gc/z/zVirtualMemoryManager.cpp @@ -100,9 +100,10 @@ size_t ZVirtualMemoryReserver::force_reserve_discontiguous(size_t size) { if (reserve_contiguous(to_zoffset(reserve_start), reserve_size)) { reserved += reserve_size; + end -= reserve_size; } - end -= reserve_size * 2; + end -= MIN2(end, reserve_size); } // If (reserved < size) attempt to reserve the rest via normal divide and conquer From 4e4cced710a8e4cd5bb8f49b08798c87b21e8b78 Mon Sep 17 00:00:00 2001 From: Axel Boldt-Christmas Date: Mon, 10 Nov 2025 05:55:34 +0000 Subject: [PATCH 095/512] 8371341: ZGC: Improve gtest interoperability with instrumented builds (ASAN) Reviewed-by: stefank, eosterlund --- .../share/gc/z/zVirtualMemoryManager.hpp | 1 + test/hotspot/gtest/gc/z/test_zForwarding.cpp | 77 ++++++++----------- .../gtest/gc/z/test_zMapper_windows.cpp | 20 +++-- .../gtest/gc/z/test_zVirtualMemoryManager.cpp | 24 +++--- test/hotspot/gtest/gc/z/zunittest.hpp | 45 +++++++++++ 5 files changed, 101 insertions(+), 66 deletions(-) diff --git a/src/hotspot/share/gc/z/zVirtualMemoryManager.hpp b/src/hotspot/share/gc/z/zVirtualMemoryManager.hpp index a9ab86761ac..0fd6045d633 100644 --- a/src/hotspot/share/gc/z/zVirtualMemoryManager.hpp +++ b/src/hotspot/share/gc/z/zVirtualMemoryManager.hpp @@ -33,6 +33,7 @@ using ZVirtualMemoryRegistry = ZRangeRegistry; class ZVirtualMemoryReserver { + friend class ZTest; friend class ZMapperTest; friend class ZVirtualMemoryManagerTest; diff --git a/test/hotspot/gtest/gc/z/test_zForwarding.cpp b/test/hotspot/gtest/gc/z/test_zForwarding.cpp index f22eef50858..3a69ff3cbb7 100644 --- a/test/hotspot/gtest/gc/z/test_zForwarding.cpp +++ b/test/hotspot/gtest/gc/z/test_zForwarding.cpp @@ -28,9 +28,10 @@ #include "gc/z/zGlobals.hpp" #include "gc/z/zHeap.hpp" #include "gc/z/zPage.inline.hpp" +#include "gc/z/zRangeRegistry.inline.hpp" #include "gc/z/zVirtualMemory.inline.hpp" #include "runtime/os.hpp" -#include "unittest.hpp" +#include "zunittest.hpp" using namespace testing; @@ -40,35 +41,21 @@ using namespace testing; #define CAPTURE(expression) CAPTURE1(expression) -class ZForwardingTest : public Test { +class ZForwardingTest : public ZTest { public: // Setup and tear down ZHeap* _old_heap; ZGenerationOld* _old_old; ZGenerationYoung* _old_young; - char* _reserved; - static size_t _page_offset; - - char* reserve_page_memory() { - // Probe for a free 2MB region inside the usable address range. - // Inspired by ZVirtualMemoryManager::reserve_contiguous. - const size_t unused = ZAddressOffsetMax - ZGranuleSize; - const size_t increment = MAX2(align_up(unused / 100, ZGranuleSize), ZGranuleSize); - - for (uintptr_t start = 0; start + ZGranuleSize <= ZAddressOffsetMax; start += increment) { - char* const reserved = os::attempt_reserve_memory_at((char*)ZAddressHeapBase + start, ZGranuleSize, mtTest); - if (reserved != nullptr) { - // Success - return reserved; - } - } - - // Failed - return nullptr; - } + ZAddressReserver _zaddress_reserver; + zoffset _page_offset; virtual void SetUp() { - ZGlobalsPointers::initialize(); + // Only run test on supported Windows versions + if (!is_os_supported()) { + GTEST_SKIP() << "OS not supported"; + } + _old_heap = ZHeap::_heap; ZHeap::_heap = (ZHeap*)os::malloc(sizeof(ZHeap), mtTest); @@ -84,36 +71,34 @@ public: ZGeneration::_old->_seqnum = 1; ZGeneration::_young->_seqnum = 2; - // Preconditions for reserve_free_granule() - ASSERT_NE(ZAddressHeapBase, 0u); - ASSERT_NE(ZAddressOffsetMax, 0u); - ASSERT_NE(ZGranuleSize, 0u); + _zaddress_reserver.SetUp(ZGranuleSize); + _page_offset = _zaddress_reserver.registry()->peek_low_address(); - _reserved = nullptr; + if (_page_offset == zoffset::invalid) { + GTEST_SKIP() << "Unable to reserve memory"; + } - // Find a suitable address for the testing page - char* reserved = reserve_page_memory(); - - ASSERT_NE(reserved, nullptr) << "Failed to reserve the page granule. Test needs tweaking"; - ASSERT_GE(reserved, (char*)ZAddressHeapBase); - ASSERT_LT(reserved, (char*)ZAddressHeapBase + ZAddressOffsetMax); - - _reserved = reserved; - - os::commit_memory((char*)_reserved, ZGranuleSize, false /* executable */); - - _page_offset = uintptr_t(_reserved) - ZAddressHeapBase; + char* const addr = (char*)untype(ZOffset::address_unsafe(_page_offset)); + os::commit_memory(addr, ZGranuleSize, /* executable */ false); } virtual void TearDown() { + if (!is_os_supported()) { + // Test skipped, nothing to cleanup + return; + } + os::free(ZHeap::_heap); ZHeap::_heap = _old_heap; ZGeneration::_old = _old_old; ZGeneration::_young = _old_young; - if (_reserved != nullptr) { - os::uncommit_memory((char*)_reserved, ZGranuleSize, false /* executable */); - os::release_memory((char*)_reserved, ZGranuleSize); + + if (_page_offset != zoffset::invalid) { + char* const addr = (char*)untype(ZOffset::address_unsafe(_page_offset)); + os::uncommit_memory(addr, ZGranuleSize, false /* executable */); } + + _zaddress_reserver.TearDown(); } // Helper functions @@ -219,7 +204,7 @@ public: } } - static void test(void (*function)(ZForwarding*), uint32_t size) { + void test(void (*function)(ZForwarding*), uint32_t size) { // Create page const ZVirtualMemory vmem(zoffset(_page_offset), ZPageSizeSmall); ZPage page(ZPageType::small, ZPageAge::eden, vmem, 0u); @@ -257,7 +242,7 @@ public: } // Run the given function with a few different input values. - static void test(void (*function)(ZForwarding*)) { + void test(void (*function)(ZForwarding*)) { test(function, 1); test(function, 2); test(function, 3); @@ -285,5 +270,3 @@ TEST_VM_F(ZForwardingTest, find_full) { TEST_VM_F(ZForwardingTest, find_every_other) { test(&ZForwardingTest::find_every_other); } - -size_t ZForwardingTest::_page_offset; diff --git a/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp index ea43859b051..1789d2e3b43 100644 --- a/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp +++ b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp @@ -34,8 +34,9 @@ using namespace testing; class ZMapperTest : public ZTest { private: - static constexpr size_t ReservationSize = 32 * M; + static constexpr size_t ReservationSize = 3 * ZGranuleSize; + ZAddressReserver _zaddress_reserver; ZVirtualMemoryReserver* _reserver; ZVirtualMemoryRegistry* _registry; @@ -46,9 +47,14 @@ public: GTEST_SKIP() << "OS not supported"; } - _reserver = (ZVirtualMemoryReserver*)os::malloc(sizeof(ZVirtualMemoryManager), mtTest); - _reserver = ::new (_reserver) ZVirtualMemoryReserver(ReservationSize); - _registry = &_reserver->_registry; + _zaddress_reserver.SetUp(ReservationSize); + _reserver = _zaddress_reserver.reserver(); + _registry = _zaddress_reserver.registry(); + + if (_reserver->reserved() < ReservationSize || !_registry->is_contiguous()) { + GTEST_SKIP() << "Fixture failed to reserve adequate memory, reserved " + << (_reserver->reserved() >> ZGranuleSizeShift) << " * ZGranuleSize"; + } } virtual void TearDown() { @@ -58,9 +64,9 @@ public: } // Best-effort cleanup - _reserver->unreserve_all(); - _reserver->~ZVirtualMemoryReserver(); - os::free(_reserver); + _registry = nullptr; + _reserver = nullptr; + _zaddress_reserver.TearDown(); } void test_unreserve() { diff --git a/test/hotspot/gtest/gc/z/test_zVirtualMemoryManager.cpp b/test/hotspot/gtest/gc/z/test_zVirtualMemoryManager.cpp index b6b827aa0b7..2b6fbc198ca 100644 --- a/test/hotspot/gtest/gc/z/test_zVirtualMemoryManager.cpp +++ b/test/hotspot/gtest/gc/z/test_zVirtualMemoryManager.cpp @@ -56,6 +56,7 @@ class ZVirtualMemoryManagerTest : public ZTest { private: static constexpr size_t ReservationSize = 32 * M; + ZAddressReserver _zaddress_reserver; ZVirtualMemoryReserver* _reserver; ZVirtualMemoryRegistry* _registry; @@ -66,9 +67,14 @@ public: GTEST_SKIP() << "OS not supported"; } - _reserver = (ZVirtualMemoryReserver*)os::malloc(sizeof(ZVirtualMemoryManager), mtTest); - _reserver = ::new (_reserver) ZVirtualMemoryReserver(ReservationSize); - _registry = &_reserver->_registry; + _zaddress_reserver.SetUp(ReservationSize); + _reserver = _zaddress_reserver.reserver(); + _registry = _zaddress_reserver.registry(); + + if (_reserver->reserved() < ReservationSize || !_registry->is_contiguous()) { + GTEST_SKIP() << "Fixture failed to reserve adequate memory, reserved " + << (_reserver->reserved() >> ZGranuleSizeShift) << " * ZGranuleSize"; + } } virtual void TearDown() { @@ -77,10 +83,9 @@ public: return; } - // Best-effort cleanup - _reserver->unreserve_all(); - _reserver->~ZVirtualMemoryReserver(); - os::free(_reserver); + _registry = nullptr; + _reserver = nullptr; + _zaddress_reserver.TearDown(); } void test_reserve_discontiguous_and_coalesce() { @@ -112,11 +117,6 @@ public: // to separate the fetched memory from the memory left in the manager. This // used to fail because the memory was already split into two placeholders. - if (_reserver->reserved() < 4 * ZGranuleSize || !_registry->is_contiguous()) { - GTEST_SKIP() << "Fixture failed to reserve adequate memory, reserved " - << (_reserver->reserved() >> ZGranuleSizeShift) << " * ZGranuleSize"; - } - // Start at the offset we reserved. const zoffset base_offset = _registry->peek_low_address(); diff --git a/test/hotspot/gtest/gc/z/zunittest.hpp b/test/hotspot/gtest/gc/z/zunittest.hpp index c732b7d4f7e..a4586d51a0e 100644 --- a/test/hotspot/gtest/gc/z/zunittest.hpp +++ b/test/hotspot/gtest/gc/z/zunittest.hpp @@ -30,6 +30,7 @@ #include "gc/z/zNUMA.hpp" #include "gc/z/zRangeRegistry.hpp" #include "gc/z/zVirtualMemory.inline.hpp" +#include "gc/z/zVirtualMemoryManager.hpp" #include "runtime/os.hpp" #include "unittest.hpp" @@ -60,6 +61,50 @@ public: }; class ZTest : public testing::Test { +public: + class ZAddressReserver { + ZVirtualMemoryReserver* _reserver; + bool _active; + + public: + ZAddressReserver() + : _reserver(nullptr), + _active(false) {} + + ~ZAddressReserver() { + GTEST_EXPECT_FALSE(_active) << "ZAddressReserver deconstructed without calling TearDown"; + } + + void SetUp(size_t reservation_size) { + GTEST_EXPECT_TRUE(ZArguments::is_os_supported()) << "Should not use SetUp on unsupported systems"; + GTEST_EXPECT_FALSE(_active) << "SetUp called twice without a TearDown"; + _active = true; + + _reserver = (ZVirtualMemoryReserver*)os::malloc(sizeof(ZVirtualMemoryManager), mtTest); + _reserver = ::new (_reserver) ZVirtualMemoryReserver(reservation_size); + } + + void TearDown() { + GTEST_EXPECT_TRUE(_active) << "TearDown called without a preceding SetUp"; + _active = false; + + // Best-effort cleanup + _reserver->unreserve_all(); + _reserver->~ZVirtualMemoryReserver(); + os::free(_reserver); + } + + ZVirtualMemoryReserver* reserver() { + GTEST_EXPECT_TRUE(_active) << "Should only use HeapReserver while active"; + return _reserver; + } + + ZVirtualMemoryRegistry* registry() { + GTEST_EXPECT_TRUE(_active) << "Should only use HeapReserver while active"; + return &_reserver->_registry; + } + }; + private: ZAddressOffsetMaxSetter _zaddress_offset_max_setter; unsigned int _rand_seed; From f77a5117db2d01a935762e948aef2d0ade3512a3 Mon Sep 17 00:00:00 2001 From: Jasmine Karthikeyan Date: Mon, 10 Nov 2025 06:16:02 +0000 Subject: [PATCH 096/512] 8350468: x86: Improve implementation of vectorized numberOfLeadingZeros for int and long Co-authored-by: Raffaello Giulietti Reviewed-by: sviswanathan, qamai, vlivanov --- src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp | 99 ++++++++----------- .../TestNumberOfContinuousZeros.java | 93 +++++++++++++++-- .../bench/vm/compiler/LeadingZeros.java | 81 +++++++++++++++ 3 files changed, 208 insertions(+), 65 deletions(-) create mode 100644 test/micro/org/openjdk/bench/vm/compiler/LeadingZeros.java diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp index 51b2eff2cfb..3de7f473fea 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp @@ -6119,77 +6119,64 @@ void C2_MacroAssembler::vector_count_leading_zeros_short_avx(XMMRegister dst, XM void C2_MacroAssembler::vector_count_leading_zeros_int_avx(XMMRegister dst, XMMRegister src, XMMRegister xtmp1, XMMRegister xtmp2, XMMRegister xtmp3, int vec_enc) { - // Since IEEE 754 floating point format represents mantissa in 1.0 format - // hence biased exponent can be used to compute leading zero count as per - // following formula:- - // LZCNT = 31 - (biased_exp - 127) - // Special handling has been introduced for Zero, Max_Int and -ve source values. - - // Broadcast 0xFF - vpcmpeqd(xtmp1, xtmp1, xtmp1, vec_enc); - vpsrld(xtmp1, xtmp1, 24, vec_enc); + // By converting the integer to a float, we can obtain the number of leading zeros based on the exponent of the float. + // As the float exponent contains a bias of 127 for nonzero values, the bias must be removed before interpreting the + // exponent as the leading zero count. // Remove the bit to the right of the highest set bit ensuring that the conversion to float cannot round up to a higher // power of 2, which has a higher exponent than the input. This transformation is valid as only the highest set bit // contributes to the leading number of zeros. - vpsrld(xtmp2, src, 1, vec_enc); - vpandn(xtmp3, xtmp2, src, vec_enc); + vpsrld(dst, src, 1, vec_enc); + vpandn(dst, dst, src, vec_enc); - // Extract biased exponent. - vcvtdq2ps(dst, xtmp3, vec_enc); + vcvtdq2ps(dst, dst, vec_enc); + + // By comparing the register to itself, all the bits in the destination are set. + vpcmpeqd(xtmp1, xtmp1, xtmp1, vec_enc); + + // Move the biased exponent to the low end of the lane and mask with 0xFF to discard the sign bit. + vpsrld(xtmp2, xtmp1, 24, vec_enc); vpsrld(dst, dst, 23, vec_enc); - vpand(dst, dst, xtmp1, vec_enc); + vpand(dst, xtmp2, dst, vec_enc); - // Broadcast 127. - vpsrld(xtmp1, xtmp1, 1, vec_enc); - // Exponent = biased_exp - 127 - vpsubd(dst, dst, xtmp1, vec_enc); + // Subtract 127 from the exponent, which removes the bias from the exponent. + vpsrld(xtmp2, xtmp1, 25, vec_enc); + vpsubd(dst, dst, xtmp2, vec_enc); - // Exponent_plus_one = Exponent + 1 - vpsrld(xtmp3, xtmp1, 6, vec_enc); - vpaddd(dst, dst, xtmp3, vec_enc); + vpsrld(xtmp2, xtmp1, 27, vec_enc); - // Replace -ve exponent with zero, exponent is -ve when src - // lane contains a zero value. - vpxor(xtmp2, xtmp2, xtmp2, vec_enc); - vblendvps(dst, dst, xtmp2, dst, vec_enc); + // If the original value is 0 the exponent would not have bias, so the subtraction creates a negative number. If this + // is found in any of the lanes, replace the lane with -1 from xtmp1. + vblendvps(dst, dst, xtmp1, dst, vec_enc, true, xtmp3); - // Rematerialize broadcast 32. - vpslld(xtmp1, xtmp3, 5, vec_enc); - // Exponent is 32 if corresponding source lane contains max_int value. - vpcmpeqd(xtmp2, dst, xtmp1, vec_enc); - // LZCNT = 32 - exponent_plus_one - vpsubd(dst, xtmp1, dst, vec_enc); + // If the original value is negative, replace the lane with 31. + vblendvps(dst, dst, xtmp2, src, vec_enc, true, xtmp3); - // Replace LZCNT with a value 1 if corresponding source lane - // contains max_int value. - vpblendvb(dst, dst, xtmp3, xtmp2, vec_enc); - - // Replace biased_exp with 0 if source lane value is less than zero. - vpxor(xtmp2, xtmp2, xtmp2, vec_enc); - vblendvps(dst, dst, xtmp2, src, vec_enc); + // Subtract the exponent from 31, giving the final result. For 0, the result is 32 as the exponent was replaced with -1, + // and for negative numbers the result is 0 as the exponent was replaced with 31. + vpsubd(dst, xtmp2, dst, vec_enc); } void C2_MacroAssembler::vector_count_leading_zeros_long_avx(XMMRegister dst, XMMRegister src, XMMRegister xtmp1, XMMRegister xtmp2, XMMRegister xtmp3, Register rtmp, int vec_enc) { - vector_count_leading_zeros_short_avx(dst, src, xtmp1, xtmp2, xtmp3, rtmp, vec_enc); - // Add zero counts of lower word and upper word of a double word if - // upper word holds a zero value. - vpsrld(xtmp3, src, 16, vec_enc); - // xtmp1 is set to all zeros by vector_count_leading_zeros_byte_avx. - vpcmpeqd(xtmp3, xtmp1, xtmp3, vec_enc); - vpslld(xtmp2, dst, 16, vec_enc); - vpaddd(xtmp2, xtmp2, dst, vec_enc); - vpblendvb(dst, dst, xtmp2, xtmp3, vec_enc); - vpsrld(dst, dst, 16, vec_enc); - // Add zero counts of lower doubleword and upper doubleword of a - // quadword if upper doubleword holds a zero value. - vpsrlq(xtmp3, src, 32, vec_enc); - vpcmpeqq(xtmp3, xtmp1, xtmp3, vec_enc); - vpsllq(xtmp2, dst, 32, vec_enc); - vpaddq(xtmp2, xtmp2, dst, vec_enc); - vpblendvb(dst, dst, xtmp2, xtmp3, vec_enc); - vpsrlq(dst, dst, 32, vec_enc); + // Find the leading zeros of the top and bottom halves of the long individually. + vector_count_leading_zeros_int_avx(dst, src, xtmp1, xtmp2, xtmp3, vec_enc); + + // Move the top half result to the bottom half of xtmp1, setting the top half to 0. + vpsrlq(xtmp1, dst, 32, vec_enc); + // By moving the top half result to the right by 6 bits, if the top half was empty (i.e. 32 is returned) the result bit will + // be in the most significant position of the bottom half. + vpsrlq(xtmp2, dst, 6, vec_enc); + + // In the bottom half, add the top half and bottom half results. + vpaddq(dst, xtmp1, dst, vec_enc); + + // For the bottom half, choose between the values using the most significant bit of xtmp2. + // If the MSB is set, then bottom+top in dst is the resulting value. If the top half is less than 32 xtmp1 is chosen, + // which contains only the top half result. + // In the top half the MSB is always zero, so the value in xtmp1 is always chosen. This value is always 0, which clears + // the lane as required. + vblendvps(dst, xtmp1, dst, xtmp2, vec_enc, true, xtmp3); } void C2_MacroAssembler::vector_count_leading_zeros_avx(BasicType bt, XMMRegister dst, XMMRegister src, diff --git a/test/hotspot/jtreg/compiler/vectorization/TestNumberOfContinuousZeros.java b/test/hotspot/jtreg/compiler/vectorization/TestNumberOfContinuousZeros.java index 9eda6f85e3d..e9773e8ac07 100644 --- a/test/hotspot/jtreg/compiler/vectorization/TestNumberOfContinuousZeros.java +++ b/test/hotspot/jtreg/compiler/vectorization/TestNumberOfContinuousZeros.java @@ -46,7 +46,8 @@ import jdk.test.lib.Asserts; import jdk.test.lib.Utils; public class TestNumberOfContinuousZeros { - private static final int[] SPECIAL = { 0x01FFFFFF, 0x03FFFFFE, 0x07FFFFFC, 0x0FFFFFF8, 0x1FFFFFF0, 0x3FFFFFE0, 0xFFFFFFFF }; + private static final int[] SPECIAL_INT = { 0, 0x01FFFFFF, 0x03FFFFFE, 0x07FFFFFC, 0x0FFFFFF8, 0x1FFFFFF0, 0x3FFFFFE0, 0xFFFFFFFF }; + private static final long[] SPECIAL_LONG = { 0, 0xFF, 0xFFFF, 0x01FFFFFF, 0x03FFFFFE, 0x07FFFFFC, 0x0FFFFFF8, 0x1FFFFFF0, 0x3FFFFFE0, 0xFFFFFFFF, 0xFFFFFFFFFFFFFFFFL, 0x7FFFFFFFFFFFFFFFL }; private long[] inputLong; private int[] outputLong; private int[] inputInt; @@ -134,7 +135,18 @@ public class TestNumberOfContinuousZeros { int[] res = new int[LEN]; for (int i = 0; i < LEN; i++) { - res[i] = SPECIAL[i % SPECIAL.length]; + res[i] = SPECIAL_INT[i % SPECIAL_INT.length]; + } + + return new Object[] { res }; + } + + @Setup + static Object[] setupSpecialLongArray() { + long[] res = new long[LEN]; + + for (int i = 0; i < LEN; i++) { + res[i] = SPECIAL_LONG[i % SPECIAL_LONG.length]; } return new Object[] { res }; @@ -167,23 +179,51 @@ public class TestNumberOfContinuousZeros { } } - private static final VectorSpecies SPECIES = IntVector.SPECIES_PREFERRED; + @Test + @IR(counts = {IRNode.COUNT_LEADING_ZEROS_VL, "> 0"}) + @Arguments(setup = "setupSpecialLongArray") + public Object[] testSpecialLongLeadingZeros(long[] longs) { + int[] res = new int[LEN]; + + for (int i = 0; i < LEN; ++i) { + res[i] = Long.numberOfLeadingZeros(longs[i]); + } + + return new Object[] { longs, res }; + } + + @Check(test = "testSpecialLongLeadingZeros") + public void checkSpecialLongLeadingZeros(Object[] vals) { + long[] in = (long[]) vals[0]; + int[] out = (int[]) vals[1]; + + for (int i = 0; i < LEN; ++i) { + int value = Long.numberOfLeadingZeros(in[i]); + + if (out[i] != value) { + throw new IllegalStateException("Expected lzcnt(" + in[i] + ") to be " + value + " but got " + out[i]); + } + } + } + + private static final VectorSpecies SPECIES_INT = IntVector.SPECIES_PREFERRED; + private static final VectorSpecies SPECIES_LONG = LongVector.SPECIES_PREFERRED; @Test @IR(counts = {IRNode.COUNT_LEADING_ZEROS_VI, "> 0"}) @Arguments(setup = "setupSpecialIntArray") - public Object[] checkSpecialIntLeadingZerosVector(int[] ints) { + public Object[] testIntLeadingZerosVector(int[] ints) { int[] res = new int[LEN]; - for (int i = 0; i < ints.length; i += SPECIES.length()) { - IntVector av = IntVector.fromArray(SPECIES, ints, i); + for (int i = 0; i < ints.length; i += SPECIES_INT.length()) { + IntVector av = IntVector.fromArray(SPECIES_INT, ints, i); av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(res, i); } return new Object[] { ints, res }; } - @Check(test = "checkSpecialIntLeadingZerosVector") + @Check(test = "testIntLeadingZerosVector") public void checkSpecialIntLeadingZerosVector(Object[] vals) { int[] ints = (int[]) vals[0]; int[] res = (int[]) vals[1]; @@ -192,8 +232,43 @@ public class TestNumberOfContinuousZeros { int[] check = new int[LEN]; - for (int i = 0; i < ints.length; i += SPECIES.length()) { - IntVector av = IntVector.fromArray(SPECIES, ints, i); + for (int i = 0; i < ints.length; i += SPECIES_INT.length()) { + IntVector av = IntVector.fromArray(SPECIES_INT, ints, i); + av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(check, i); + } + + for (int i = 0; i < LEN; i++) { + if (res[i] != check[i]) { + throw new IllegalStateException("Expected " + check[i] + " but got " + res[i]); + } + } + } + + @Test + @IR(counts = {IRNode.COUNT_LEADING_ZEROS_VL, "> 0"}) + @Arguments(setup = "setupSpecialLongArray") + public Object[] testLongLeadingZerosVector(long[] longs) { + long[] res = new long[LEN]; + + for (int i = 0; i < longs.length; i += SPECIES_LONG.length()) { + LongVector av = LongVector.fromArray(SPECIES_LONG, longs, i); + av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(res, i); + } + + return new Object[] { longs, res }; + } + + @Check(test = "testLongLeadingZerosVector") + public void checkSpecialLongLeadingZerosVector(Object[] vals) { + long[] longs = (long[]) vals[0]; + long[] res = (long[]) vals[1]; + + // Verification + + long[] check = new long[LEN]; + + for (int i = 0; i < longs.length; i += SPECIES_LONG.length()) { + LongVector av = LongVector.fromArray(SPECIES_LONG, longs, i); av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(check, i); } diff --git a/test/micro/org/openjdk/bench/vm/compiler/LeadingZeros.java b/test/micro/org/openjdk/bench/vm/compiler/LeadingZeros.java new file mode 100644 index 00000000000..5ecdbcf28db --- /dev/null +++ b/test/micro/org/openjdk/bench/vm/compiler/LeadingZeros.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package org.openjdk.bench.vm.compiler; + +import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.infra.Blackhole; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Measurement(iterations = 5, time = 1000, timeUnit = TimeUnit.MILLISECONDS) +@Warmup(iterations = 5, time = 1000, timeUnit = TimeUnit.MILLISECONDS) +@Fork(3) +public class LeadingZeros { + private static final int SIZE = 512; + + @Benchmark + public void testInt(Blackhole blackhole, BenchState state) { + for (int i = 0; i < SIZE; i++) { + state.result[i] = Integer.numberOfLeadingZeros(state.ints[i]); + } + + blackhole.consume(state.result); + } + + @Benchmark + public void testLong(Blackhole blackhole, BenchState state) { + for (int i = 0; i < SIZE; i++) { + state.result[i] = Long.numberOfLeadingZeros(state.longs[i]); + } + + blackhole.consume(state.result); + } + + @State(Scope.Benchmark) + public static class BenchState { + private final int[] ints = new int[SIZE]; + private final long[] longs = new long[SIZE]; + + private final int[] result = new int[SIZE]; + + private Random random; + + public BenchState() { + } + + @Setup + public void setup() { + this.random = new Random(1000); + + for (int i = 0; i < SIZE; i++) { + ints[i] = this.random.nextInt(); + + longs[i] = this.random.nextLong(); + } + } + } +} From d570765e2720a11c88c806554df9b13587a041a2 Mon Sep 17 00:00:00 2001 From: Axel Boldt-Christmas Date: Mon, 10 Nov 2025 06:19:27 +0000 Subject: [PATCH 097/512] 8367149: Add convenient construction for creating ad-hoc VMErrorCallback Reviewed-by: ayang, stefank --- src/hotspot/share/utilities/vmError.hpp | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/hotspot/share/utilities/vmError.hpp b/src/hotspot/share/utilities/vmError.hpp index 5e5e074fb20..04cea6de47c 100644 --- a/src/hotspot/share/utilities/vmError.hpp +++ b/src/hotspot/share/utilities/vmError.hpp @@ -251,4 +251,52 @@ public: ~VMErrorCallbackMark(); }; +// Convenient construction for creating ad-hoc VMErrorCallback which automatically +// calls the provided invocable f if a VM crash occurs within its lifetime. +// Can be used to instrument a build for more detailed contextual information +// gathering. Especially useful when hunting down intermittent bugs, or issues +// only reproducible in environments where access to a debugger is not readily +// available. Example use: +/* + { + // Note the lambda is invoked after an error occurs within this thread, + // and during on_error's lifetime. If state prior to the crash is required, + // capture a copy of it first. + auto important_value = get_the_value(); + + OnVMError on_error([&](outputStream* st) { + // Dump the important bits. + st->print("Prior value: "); + important_value.print_on(st); + st->print("During crash: ") + get_the_value().print_on(st); + // Dump whole the whole state. + this->print_on(st); + }); + + // When VM crashes, the above lambda will be invoked and print relevant info. + might_cause_vm_crash(); + } +*/ +template +class OnVMError : public VMErrorCallback { + CallableType _callable; + VMErrorCallbackMark _mark; + + void call(outputStream* st) final { _callable(st); } + +public: + template + OnVMError(Callable&& callable) : VMErrorCallback(), _callable(static_cast(callable)), _mark(this) {} +}; + +// This deduction rule enables creating a type with out using auto, decltype +// and/or helping construction functions. It enables the generic template type +// to be deduced in the following code: +// OnVMError on_error([&](outputStream* st) { ... }) +// Rather than having to something along the lines of: +// auto f = [&](outputStream* st) { ... }; +// OnVMError on_error(f); +template OnVMError(CallableType) -> OnVMError; + #endif // SHARE_UTILITIES_VMERROR_HPP From 79fee607fd77320cd5deb8e424582e2f6c2b31a2 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Mon, 10 Nov 2025 07:58:13 +0000 Subject: [PATCH 098/512] 8371473: Problem list TestEmergencyDumpAtOOM.java on ppc64 platforms related to JDK-8371014 Reviewed-by: mdoerr, phubner --- test/jdk/ProblemList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index 5132d012d7f..b01460c3816 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -748,6 +748,7 @@ jdk/incubator/vector/LoadJsvmlTest.java 8305390 windows- # jdk_jfr jdk/jfr/event/compiler/TestCodeSweeper.java 8338127 generic-all +jdk/jfr/event/oldobject/TestEmergencyDumpAtOOM.java 8371014 aix-ppc64,linux-ppc64le jdk/jfr/event/oldobject/TestShenandoah.java 8342951 generic-all jdk/jfr/event/runtime/TestResidentSetSizeEvent.java 8309846 aix-ppc64 jdk/jfr/jvm/TestWaste.java 8369949 generic-all From 5e8bf7a283f75464dbd906454c852e4d1db497dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Maillard?= Date: Mon, 10 Nov 2025 08:39:21 +0000 Subject: [PATCH 099/512] 8369646: Detection of redundant conversion patterns in add_users_of_use_to_worklist is too restrictive Reviewed-by: chagedorn, epeter --- src/hotspot/share/opto/phaseX.cpp | 13 ++++++++----- src/hotspot/share/opto/phaseX.hpp | 16 ++++++++++++++++ ...estEliminateRedundantConversionSequences.java | 11 +++++++++-- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/hotspot/share/opto/phaseX.cpp b/src/hotspot/share/opto/phaseX.cpp index b5b15275e21..5fcb2a62682 100644 --- a/src/hotspot/share/opto/phaseX.cpp +++ b/src/hotspot/share/opto/phaseX.cpp @@ -2566,13 +2566,16 @@ void PhaseIterGVN::add_users_of_use_to_worklist(Node* n, Node* use, Unique_Node_ // ConvI2F->ConvF2I->ConvI2F // Note: there may be other 3-nodes conversion chains that would require to be added here, but these // are the only ones that are known to trigger missed optimizations otherwise - if ((n->Opcode() == Op_ConvD2L && use_op == Op_ConvL2D) || - (n->Opcode() == Op_ConvF2I && use_op == Op_ConvI2F) || - (n->Opcode() == Op_ConvF2L && use_op == Op_ConvL2F) || - (n->Opcode() == Op_ConvI2F && use_op == Op_ConvF2I)) { + if (use_op == Op_ConvL2D || + use_op == Op_ConvI2F || + use_op == Op_ConvL2F || + use_op == Op_ConvF2I) { for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { Node* u = use->fast_out(i2); - if (u->Opcode() == n->Opcode()) { + if ((use_op == Op_ConvL2D && u->Opcode() == Op_ConvD2L) || + (use_op == Op_ConvI2F && u->Opcode() == Op_ConvF2I) || + (use_op == Op_ConvL2F && u->Opcode() == Op_ConvF2L) || + (use_op == Op_ConvF2I && u->Opcode() == Op_ConvI2F)) { worklist.push(u); } } diff --git a/src/hotspot/share/opto/phaseX.hpp b/src/hotspot/share/opto/phaseX.hpp index 300c8fc2757..083e77bf6d9 100644 --- a/src/hotspot/share/opto/phaseX.hpp +++ b/src/hotspot/share/opto/phaseX.hpp @@ -528,7 +528,23 @@ public: // Add users of 'n' to worklist static void add_users_to_worklist0(Node* n, Unique_Node_List& worklist); + + // Add one or more users of 'use' to the worklist if it appears that a + // known optimization could be applied to those users. + // Node 'n' is a node that was modified or is about to get replaced, + // and 'use' is one use of 'n'. + // Certain optimizations have dependencies that extend beyond a node's + // direct inputs, so it is necessary to ensure the appropriate + // notifications are made here. static void add_users_of_use_to_worklist(Node* n, Node* use, Unique_Node_List& worklist); + + // Add users of 'n', and any other nodes that could be directly + // affected by changes to 'n', to the worklist. + // Node 'n' may be a node that is about to get replaced. In this + // case, 'n' should not be considered part of the new graph. + // Passing the old node (as 'n'), rather than the new node, + // prevents unnecessary notifications when the new node already + // has other users. void add_users_to_worklist(Node* n); // Replace old node with new one. diff --git a/test/hotspot/jtreg/compiler/c2/TestEliminateRedundantConversionSequences.java b/test/hotspot/jtreg/compiler/c2/TestEliminateRedundantConversionSequences.java index b452b8f67dd..f7bcaa94230 100644 --- a/test/hotspot/jtreg/compiler/c2/TestEliminateRedundantConversionSequences.java +++ b/test/hotspot/jtreg/compiler/c2/TestEliminateRedundantConversionSequences.java @@ -23,13 +23,20 @@ /* * @test - * @bug 8359603 + * @bug 8359603 8369646 * @summary Redundant ConvX2Y->ConvY2X->ConvX2Y sequences should be * simplified to a single ConvX2Y operation when applicable * VerifyIterativeGVN checks that this optimization was applied * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions * -XX:CompileCommand=compileonly,compiler.c2.TestEliminateRedundantConversionSequences::test* - * -XX:-TieredCompilation -Xbatch -XX:VerifyIterativeGVN=1110 compiler.c2.TestEliminateRedundantConversionSequences + * -XX:-TieredCompilation -Xbatch -XX:VerifyIterativeGVN=1110 + * -XX:+UnlockDiagnosticVMOptions -XX:+StressIGVN + * compiler.c2.TestEliminateRedundantConversionSequences + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions + * -XX:CompileCommand=compileonly,compiler.c2.TestEliminateRedundantConversionSequences::test* + * -XX:-TieredCompilation -Xbatch -XX:VerifyIterativeGVN=1110 + * -XX:+UnlockDiagnosticVMOptions -XX:+StressIGVN -XX:StressSeed=115074401 + * compiler.c2.TestEliminateRedundantConversionSequences * @run main compiler.c2.TestEliminateRedundantConversionSequences * */ From 0c1b7267e374192f30322a45a1a34f734565cc15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Maillard?= Date: Mon, 10 Nov 2025 08:41:13 +0000 Subject: [PATCH 100/512] 8366990: C2: Compilation hits the memory limit when verifying loop opts in Split-If code Reviewed-by: chagedorn, dfenacci --- src/hotspot/share/ci/ciInstanceKlass.cpp | 42 ++++++-- src/hotspot/share/ci/ciInstanceKlass.hpp | 3 + src/hotspot/share/opto/type.cpp | 12 +-- ...stVerifyLoopOptimizationsHitsMemLimit.java | 101 ++++++++++++++++++ 4 files changed, 144 insertions(+), 14 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/loopopts/TestVerifyLoopOptimizationsHitsMemLimit.java diff --git a/src/hotspot/share/ci/ciInstanceKlass.cpp b/src/hotspot/share/ci/ciInstanceKlass.cpp index c367170f2c2..9bbf005356c 100644 --- a/src/hotspot/share/ci/ciInstanceKlass.cpp +++ b/src/hotspot/share/ci/ciInstanceKlass.cpp @@ -391,17 +391,21 @@ bool ciInstanceKlass::contains_field_offset(int offset) { return get_instanceKlass()->contains_field_offset(offset); } +ciField* ciInstanceKlass::get_non_static_field_by_offset(const int field_offset) { + for (int i = 0, len = nof_nonstatic_fields(); i < len; i++) { + ciField* field = _nonstatic_fields->at(i); + int field_off = field->offset_in_bytes(); + if (field_off == field_offset) + return field; + } + return nullptr; +} + // ------------------------------------------------------------------ // ciInstanceKlass::get_field_by_offset ciField* ciInstanceKlass::get_field_by_offset(int field_offset, bool is_static) { if (!is_static) { - for (int i = 0, len = nof_nonstatic_fields(); i < len; i++) { - ciField* field = _nonstatic_fields->at(i); - int field_off = field->offset_in_bytes(); - if (field_off == field_offset) - return field; - } - return nullptr; + return get_non_static_field_by_offset(field_offset); } VM_ENTRY_MARK; InstanceKlass* k = get_instanceKlass(); @@ -427,6 +431,30 @@ ciField* ciInstanceKlass::get_field_by_name(ciSymbol* name, ciSymbol* signature, return field; } +// This is essentially a shortcut for: +// get_field_by_offset(field_offset, is_static)->layout_type() +// except this does not require allocating memory for a new ciField +BasicType ciInstanceKlass::get_field_type_by_offset(const int field_offset, const bool is_static) { + if (!is_static) { + ciField* field = get_non_static_field_by_offset(field_offset); + return field != nullptr ? field->layout_type() : T_ILLEGAL; + } + + // Avoid allocating a new ciField by obtaining the field type directly + VM_ENTRY_MARK; + InstanceKlass* k = get_instanceKlass(); + fieldDescriptor fd; + if (!k->find_field_from_offset(field_offset, is_static, &fd)) { + return T_ILLEGAL; + } + + // Reproduce the behavior of ciField::layout_type + BasicType field_type = fd.field_type(); + if (is_reference_type(field_type)) { + return T_OBJECT; + } + return type2field[make(field_type)->basic_type()]; +} // ------------------------------------------------------------------ // ciInstanceKlass::compute_nonstatic_fields diff --git a/src/hotspot/share/ci/ciInstanceKlass.hpp b/src/hotspot/share/ci/ciInstanceKlass.hpp index d3d988e8735..ec8fc789c7d 100644 --- a/src/hotspot/share/ci/ciInstanceKlass.hpp +++ b/src/hotspot/share/ci/ciInstanceKlass.hpp @@ -82,6 +82,8 @@ private: bool compute_injected_fields_helper(); void compute_transitive_interfaces(); + ciField* get_non_static_field_by_offset(int field_offset); + protected: ciInstanceKlass(Klass* k); ciInstanceKlass(ciSymbol* name, jobject loader); @@ -204,6 +206,7 @@ public: ciInstanceKlass* get_canonical_holder(int offset); ciField* get_field_by_offset(int field_offset, bool is_static); ciField* get_field_by_name(ciSymbol* name, ciSymbol* signature, bool is_static); + BasicType get_field_type_by_offset(int field_offset, bool is_static); // total number of nonstatic fields (including inherited): int nof_nonstatic_fields() { diff --git a/src/hotspot/share/opto/type.cpp b/src/hotspot/share/opto/type.cpp index f62eea893cd..96fee925e5d 100644 --- a/src/hotspot/share/opto/type.cpp +++ b/src/hotspot/share/opto/type.cpp @@ -3478,13 +3478,12 @@ TypeOopPtr::TypeOopPtr(TYPES t, PTR ptr, ciKlass* k, const TypeInterfaces* inter } else if (klass() == ciEnv::current()->Class_klass() && _offset >= InstanceMirrorKlass::offset_of_static_fields()) { // Static fields - ciField* field = nullptr; + BasicType basic_elem_type = T_ILLEGAL; if (const_oop() != nullptr) { ciInstanceKlass* k = const_oop()->as_instance()->java_lang_Class_klass()->as_instance_klass(); - field = k->get_field_by_offset(_offset, true); + basic_elem_type = k->get_field_type_by_offset(_offset, true); } - if (field != nullptr) { - BasicType basic_elem_type = field->layout_type(); + if (basic_elem_type != T_ILLEGAL) { _is_ptr_to_narrowoop = UseCompressedOops && ::is_reference_type(basic_elem_type); } else { // unsafe access @@ -3492,9 +3491,8 @@ TypeOopPtr::TypeOopPtr(TYPES t, PTR ptr, ciKlass* k, const TypeInterfaces* inter } } else { // Instance fields which contains a compressed oop references. - ciField* field = ik->get_field_by_offset(_offset, false); - if (field != nullptr) { - BasicType basic_elem_type = field->layout_type(); + BasicType basic_elem_type = ik->get_field_type_by_offset(_offset, false); + if (basic_elem_type != T_ILLEGAL) { _is_ptr_to_narrowoop = UseCompressedOops && ::is_reference_type(basic_elem_type); } else if (klass()->equals(ciEnv::current()->Object_klass())) { // Compile::find_alias_type() cast exactness on all types to verify diff --git a/test/hotspot/jtreg/compiler/loopopts/TestVerifyLoopOptimizationsHitsMemLimit.java b/test/hotspot/jtreg/compiler/loopopts/TestVerifyLoopOptimizationsHitsMemLimit.java new file mode 100644 index 00000000000..a2834c26dcc --- /dev/null +++ b/test/hotspot/jtreg/compiler/loopopts/TestVerifyLoopOptimizationsHitsMemLimit.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package compiler.loopopts; + +/** + * @test + * @bug 8366990 + * @summary Loop optimizations verification results in hitting the memory limit. + * This is caused by the high number of verification passes triggered + * in PhaseIdealLoop::split_if_with_blocks_post and repetitive memory + * allocations while building the ideal loop tree in preparation for + * the verification. + * + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions + * -XX:CompileCommand=compileonly,compiler.loopopts.TestVerifyLoopOptimizationsHitsMemLimit::test + * -XX:CompileCommand=memlimit,compiler.loopopts.TestVerifyLoopOptimizationsHitsMemLimit::test,100M~crash + * -XX:-TieredCompilation -Xcomp -XX:PerMethodTrapLimit=0 + * -XX:+StressLoopPeeling -XX:+VerifyLoopOptimizations + * -XX:StressSeed=1870557292 + * compiler.loopopts.TestVerifyLoopOptimizationsHitsMemLimit + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions + * -XX:CompileCommand=compileonly,compiler.loopopts.TestVerifyLoopOptimizationsHitsMemLimit::test + * -XX:CompileCommand=memlimit,compiler.loopopts.TestVerifyLoopOptimizationsHitsMemLimit::test,100M~crash + * -XX:-TieredCompilation -Xcomp -XX:PerMethodTrapLimit=0 + * -XX:+StressLoopPeeling -XX:+VerifyLoopOptimizations + * compiler.loopopts.TestVerifyLoopOptimizationsHitsMemLimit + * @run main compiler.loopopts.TestVerifyLoopOptimizationsHitsMemLimit + */ + +public class TestVerifyLoopOptimizationsHitsMemLimit { + final int a = 400; + int b; + float c; + static double d; + static byte f; + long g[]; + volatile int h[]; + + void test() { + int j, k = 2, l, o[] = new int[a]; + short m = 10492; + for (j = 1;; ++j) { + l = 1; + do { + g[j] = l; + switch (j) { + case 45: + o[1] = b; + case 163: + case 62: + case 72: + case 319: + h[1] -= k; + case 109: + case 47: + case 91: + case 68: + case 162: + case 76: + case 60: + case 66: + case 83: + d = m; + case 2314: + f = (byte) c; + } + } while (++l < 4); + } + } + + public static void main(String[] args) { + try { + TestVerifyLoopOptimizationsHitsMemLimit test = new TestVerifyLoopOptimizationsHitsMemLimit(); + test.test(); + throw new RuntimeException("Expected a NPE for uninitialized array"); + } catch (NullPointerException e) { + // expected + } + } +} From 2c378e26d7319b6b0e273d2409dd3f591c5f5f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joel=20Sikstr=C3=B6m?= Date: Mon, 10 Nov 2025 08:54:04 +0000 Subject: [PATCH 101/512] 8370813: Deprecate AggressiveHeap Reviewed-by: ayang, shade --- src/hotspot/share/gc/shared/gc_globals.hpp | 5 +++-- src/hotspot/share/runtime/arguments.cpp | 1 + src/java.base/share/man/java.md | 12 ++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/hotspot/share/gc/shared/gc_globals.hpp b/src/hotspot/share/gc/shared/gc_globals.hpp index 938544b9a2c..4fb72f4102a 100644 --- a/src/hotspot/share/gc/shared/gc_globals.hpp +++ b/src/hotspot/share/gc/shared/gc_globals.hpp @@ -270,11 +270,12 @@ \ product(uint64_t, MaxRAM, 0, \ "(Deprecated) Real memory size (in bytes) used to set maximum " \ - "heap size") \ + "heap size") \ range(0, 0XFFFFFFFFFFFFFFFF) \ \ product(bool, AggressiveHeap, false, \ - "Optimize heap options for long-running memory intensive apps") \ + "(Deprecated) Optimize heap options for long-running memory " \ + "intensive apps") \ \ product(size_t, ErgoHeapSizeLimit, 0, \ "Maximum ergonomically set heap size (in bytes); zero means use " \ diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 6ab2b7a887c..730bb7871e2 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -536,6 +536,7 @@ static SpecialFlag const special_jvm_flags[] = { { "ParallelRefProcBalancingEnabled", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, { "PSChunkLargeArrays", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, { "MaxRAM", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, + { "AggressiveHeap", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: { "CreateMinidumpOnCrash", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, diff --git a/src/java.base/share/man/java.md b/src/java.base/share/man/java.md index 1e9eaa67d6d..0f9d8e89bfc 100644 --- a/src/java.base/share/man/java.md +++ b/src/java.base/share/man/java.md @@ -2309,12 +2309,6 @@ perform extensive debugging. These `java` options control how garbage collection (GC) is performed by the Java HotSpot VM. -`-XX:+AggressiveHeap` -: Enables Java heap optimization. This sets various parameters to be - optimal for long-running jobs with intensive memory allocation, based on - the configuration of the computer (RAM and CPU). By default, the option - is disabled and the heap sizes are configured less aggressively. - `-XX:+AlwaysPreTouch` : Requests the VM to touch every page on the Java heap after requesting it from the operating system and before handing memory out to the application. @@ -2951,6 +2945,12 @@ they're used. > `-XX:MaxRAM=2G` +`-XX:+AggressiveHeap` +: Enables Java heap optimization. This sets various parameters to be + optimal for long-running jobs with intensive memory allocation, based on + the configuration of the computer (RAM and CPU). By default, the option + is disabled and the heap sizes are configured less aggressively. + ## Obsolete Java Options These `java` options are still accepted but ignored, and a warning is issued From f48ad21ecc288c280db3ffb2e098df12518e2a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20H=C3=BCbner?= Date: Mon, 10 Nov 2025 09:24:45 +0000 Subject: [PATCH 102/512] 8371216: oopDesc::print_value_on breaks if klass is garbage Reviewed-by: coleenp, mdoerr --- src/hotspot/share/oops/oop.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/oops/oop.cpp b/src/hotspot/share/oops/oop.cpp index f874a39bf31..5f453241c3d 100644 --- a/src/hotspot/share/oops/oop.cpp +++ b/src/hotspot/share/oops/oop.cpp @@ -83,7 +83,10 @@ char* oopDesc::print_value_string() { void oopDesc::print_value_on(outputStream* st) const { oop obj = const_cast(this); - if (java_lang_String::is_instance(obj)) { + // We can't use java_lang_String::is_instance since that has klass assertions enabled. + // If the klass is garbage we want to just fail the check and continue printing, as + // opposed to aborting the VM entirely. + if (obj != nullptr && obj->klass_without_asserts() == vmClasses::String_klass()) { java_lang_String::print(obj, st); print_address_on(st); } else { From c0b82ff2e5b696371de62e0f4fcbba61361fc6b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joel=20Sikstr=C3=B6m?= Date: Mon, 10 Nov 2025 09:41:55 +0000 Subject: [PATCH 103/512] 8370843: Deprecate AlwaysActAsServerClassMachine and NeverActAsServerClassMachine Reviewed-by: ayang, kvn --- src/hotspot/share/gc/shared/gc_globals.hpp | 4 +-- src/hotspot/share/runtime/arguments.cpp | 2 ++ src/java.base/share/man/java.md | 40 +++++++++++----------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/hotspot/share/gc/shared/gc_globals.hpp b/src/hotspot/share/gc/shared/gc_globals.hpp index 4fb72f4102a..e86a8744847 100644 --- a/src/hotspot/share/gc/shared/gc_globals.hpp +++ b/src/hotspot/share/gc/shared/gc_globals.hpp @@ -263,10 +263,10 @@ "before pushing a continuation entry") \ \ product_pd(bool, NeverActAsServerClassMachine, \ - "Never act like a server-class machine") \ + "(Deprecated) Never act like a server-class machine") \ \ product(bool, AlwaysActAsServerClassMachine, false, \ - "Always act like a server-class machine") \ + "(Deprecated) Always act like a server-class machine") \ \ product(uint64_t, MaxRAM, 0, \ "(Deprecated) Real memory size (in bytes) used to set maximum " \ diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 730bb7871e2..79027cf113f 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -537,6 +537,8 @@ static SpecialFlag const special_jvm_flags[] = { { "PSChunkLargeArrays", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, { "MaxRAM", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, { "AggressiveHeap", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, + { "NeverActAsServerClassMachine", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, + { "AlwaysActAsServerClassMachine", JDK_Version::jdk(26), JDK_Version::jdk(27), JDK_Version::jdk(28) }, // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: { "CreateMinidumpOnCrash", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, diff --git a/src/java.base/share/man/java.md b/src/java.base/share/man/java.md index 0f9d8e89bfc..43719ff619a 100644 --- a/src/java.base/share/man/java.md +++ b/src/java.base/share/man/java.md @@ -1235,26 +1235,6 @@ These `java` options control the runtime behavior of the Java HotSpot VM. This option is only supported on Linux with GNU C Library (glibc). -`-XX:+NeverActAsServerClassMachine` -: Enable the "Client VM emulation" mode which only uses the C1 JIT compiler, - a 32Mb CodeCache and the Serial GC. The maximum amount of memory that the - JVM may use (controlled by the `-XX:MaxRAM=n` flag) is set to 1GB by default. - The string "emulated-client" is added to the JVM version string. - - By default the flag is set to `true` only on Windows in 32-bit mode and - `false` in all other cases. - - The "Client VM emulation" mode will not be enabled if any of the following - flags are used on the command line: - - ``` - -XX:{+|-}TieredCompilation - -XX:CompilationMode=mode - -XX:TieredStopAtLevel=n - -XX:{+|-}EnableJVMCI - -XX:{+|-}UseJVMCICompiler - ``` - `-XX:ObjectAlignmentInBytes=`*alignment* : Sets the memory alignment of Java objects (in bytes). By default, the value is set to 8 bytes. The specified value should be a power of 2, and must be @@ -2951,6 +2931,26 @@ they're used. the configuration of the computer (RAM and CPU). By default, the option is disabled and the heap sizes are configured less aggressively. +`-XX:+NeverActAsServerClassMachine` +: Enable the "Client VM emulation" mode which only uses the C1 JIT compiler, + a 32Mb CodeCache and the Serial GC. The maximum amount of memory that the + JVM may use (controlled by the `-XX:MaxRAM=n` flag) is set to 1GB by default. + The string "emulated-client" is added to the JVM version string. + + By default the flag is set to `true` only on Windows in 32-bit mode and + `false` in all other cases. + + The "Client VM emulation" mode will not be enabled if any of the following + flags are used on the command line: + + ``` + -XX:{+|-}TieredCompilation + -XX:CompilationMode=mode + -XX:TieredStopAtLevel=n + -XX:{+|-}EnableJVMCI + -XX:{+|-}UseJVMCICompiler + ``` + ## Obsolete Java Options These `java` options are still accepted but ignored, and a warning is issued From 49f51f9450ac3b923f83ba7d9089e5560e25ec7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20Walln=C3=B6fer?= Date: Mon, 10 Nov 2025 10:06:09 +0000 Subject: [PATCH 104/512] 8370612: Simplify implementation of dark theme 8371021: Tab order in theme picker is broken Reviewed-by: jlamperth, liach --- .../doclets/formats/html/Navigation.java | 39 ++- .../formats/html/resources/highlight.css | 126 +--------- .../formats/html/resources/script.js.template | 46 ++-- .../formats/html/resources/stylesheet.css | 226 +++--------------- .../CheckStylesheetClasses.java | 3 - .../testNavigation/TestModuleNavigation.java | 37 +-- .../doclet/testNavigation/TestNavigation.java | 46 +--- .../doclet/testSpecTag/TestSpecTag.java | 6 +- .../doclet/testStylesheet/TestStylesheet.java | 2 +- 9 files changed, 113 insertions(+), 418 deletions(-) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Navigation.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Navigation.java index 1938a4838f5..30318bbaeea 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Navigation.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/Navigation.java @@ -500,14 +500,28 @@ public class Navigation { private void addThemeSwitcher(Content target) { var selectTheme = contents.getContent("doclet.theme.select_theme"); target.add(HtmlTree.LI(HtmlTree.BUTTON(HtmlIds.THEME_BUTTON) - .add(HtmlTree.IMG(pathToRoot.resolve(DocPaths.RESOURCE_FILES).resolve(DocPaths.SUN_SVG), - selectTheme.toString()).addStyle(HtmlIds.THEME_LIGHT.name())) - .add(HtmlTree.IMG(pathToRoot.resolve(DocPaths.RESOURCE_FILES).resolve(DocPaths.MOON_SVG), - selectTheme.toString()).addStyle(HtmlIds.THEME_DARK.name())) .put(HtmlAttr.ARIA_LABEL, selectTheme.toString()) .put(HtmlAttr.TITLE, selectTheme.toString()))); } + private void addThemePanel(Content target) { + var selectTheme = contents.getContent("doclet.theme.select_theme"); + target.add(HtmlTree.DIV(HtmlIds.THEME_PANEL) + .add(HtmlTree.DIV(selectTheme)) + .add(HtmlTree.DIV(HtmlTree.LABEL(HtmlIds.THEME_LIGHT.name(), Text.EMPTY) + .add(HtmlTree.INPUT(HtmlAttr.InputType.RADIO, HtmlIds.THEME_LIGHT) + .put(HtmlAttr.NAME, "theme").put(HtmlAttr.VALUE, HtmlIds.THEME_LIGHT.name())) + .add(HtmlTree.SPAN(contents.getContent("doclet.theme.light")))) + .add(HtmlTree.LABEL(HtmlIds.THEME_DARK.name(), Text.EMPTY) + .add(HtmlTree.INPUT(HtmlAttr.InputType.RADIO, HtmlIds.THEME_DARK) + .put(HtmlAttr.NAME, "theme").put(HtmlAttr.VALUE, HtmlIds.THEME_DARK.name())) + .add(HtmlTree.SPAN(contents.getContent("doclet.theme.dark")))) + .add(HtmlTree.LABEL(HtmlIds.THEME_OS.name(), Text.EMPTY) + .add(HtmlTree.INPUT(HtmlAttr.InputType.RADIO, HtmlIds.THEME_OS) + .put(HtmlAttr.NAME, "theme").put(HtmlAttr.VALUE, HtmlIds.THEME_OS.name())) + .add(HtmlTree.SPAN(contents.getContent("doclet.theme.system")))))); + } + private void addSearch(Content target) { var resources = configuration.getDocResources(); var inputText = HtmlTree.INPUT(HtmlAttr.InputType.TEXT, HtmlIds.SEARCH_INPUT) @@ -557,6 +571,7 @@ public class Navigation { .put(HtmlAttr.TITLE, rowListTitle); addMainNavLinks(navList); navContent.add(navList); + addThemePanel(navContent); var aboutDiv = HtmlTree.DIV(HtmlStyles.aboutLanguage, aboutContent); navContent.add(aboutDiv); navigationBar.add(HtmlTree.DIV(HtmlStyles.topNav, navContent).setId(HtmlIds.NAVBAR_TOP)); @@ -574,22 +589,6 @@ public class Navigation { breadcrumbNav.addAll(subNavLinks, HtmlTree::LI); subNavContent.addUnchecked(breadcrumbNav); - var selectTheme = contents.getContent("doclet.theme.select_theme"); - subNavContent.add(HtmlTree.DIV(HtmlIds.THEME_PANEL) - .add(HtmlTree.DIV(selectTheme)) - .add(HtmlTree.DIV(HtmlTree.LABEL(HtmlIds.THEME_LIGHT.name(), Text.EMPTY) - .add(HtmlTree.INPUT(HtmlAttr.InputType.RADIO, HtmlIds.THEME_LIGHT) - .put(HtmlAttr.NAME, "theme").put(HtmlAttr.VALUE, HtmlIds.THEME_LIGHT.name())) - .add(HtmlTree.SPAN(contents.getContent("doclet.theme.light")))) - .add(HtmlTree.LABEL(HtmlIds.THEME_DARK.name(), Text.EMPTY) - .add(HtmlTree.INPUT(HtmlAttr.InputType.RADIO, HtmlIds.THEME_DARK) - .put(HtmlAttr.NAME, "theme").put(HtmlAttr.VALUE, HtmlIds.THEME_DARK.name())) - .add(HtmlTree.SPAN(contents.getContent("doclet.theme.dark")))) - .add(HtmlTree.LABEL(HtmlIds.THEME_OS.name(), Text.EMPTY) - .add(HtmlTree.INPUT(HtmlAttr.InputType.RADIO, HtmlIds.THEME_OS) - .put(HtmlAttr.NAME, "theme").put(HtmlAttr.VALUE, HtmlIds.THEME_OS.name())) - .add(HtmlTree.SPAN(contents.getContent("doclet.theme.system")))))); - if (options.createIndex() && documentedPage != PageMode.SEARCH) { addSearch(subNavContent); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/highlight.css b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/highlight.css index 77c32543049..54ee304478e 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/highlight.css +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/highlight.css @@ -65,7 +65,7 @@ /* ignored */ } -body.theme-dark { +:root[data-theme="theme-dark"] { .hljs-title.function_, .hljs-template-variable { color: #66bcce; @@ -126,127 +126,3 @@ body.theme-dark { /* ignored */ } } - -@media (prefers-color-scheme: dark) { - .hljs-title.function_, - .hljs-template-variable { - color: #66bcce; - } - .hljs-code, - .hljs-comment, - .hljs-quote { - color:#9d9d9d; - font-style: italic; - } - .hljs-meta { - color: #836F00; - } - .hljs-symbol, - .hljs-template-tag, - .hljs-keyword, - .hljs-literal, - .hljs-name, - .hljs-built_in, - .hljs-char.escape_ { - color: #88aece; - } - .hljs-variable, - .hljs-property, - .hljs-attr, - .hljs-section { - color: #c59bc1; - } - .hljs-attribute { - color: #c59bc1; - } - .hljs-regexp, - .hljs-number { - color: #cfe374; - } - .hljs-link { - color: #b5bd68; - } - .hljs-string { - color: #b5bd68; - } - .hljs-doctag { - text-decoration: underline; - } - .hljs-emphasis { - font-style: italic; - } - .hljs-strong { - font-weight: bold; - } - .hljs-subst, - .hljs-title, - .hljs-params, - .hljs-bullet, - .hljs-formula, - .hljs-tag, - .hljs-type { - /* ignored */ - } - - body.theme-light { - .hljs-title.function_, - .hljs-template-variable { - color: #00738F; - } - .hljs-code, - .hljs-comment, - .hljs-quote { - color: #6e6e71; - font-style: italic; - } - .hljs-meta { - color: #836F00; - } - .hljs-symbol, - .hljs-template-tag, - .hljs-keyword, - .hljs-literal, - .hljs-name, - .hljs-built_in, - .hljs-char.escape_ { - color: #0C40C2; - } - .hljs-variable, - .hljs-property, - .hljs-attr, - .hljs-section { - color: #841191; - } - .hljs-attribute { - color: #164ad9; - } - .hljs-regexp, - .hljs-number { - color: #104BEB; - } - .hljs-link { - color: #47688a; - } - .hljs-string { - color: #008313; - } - .hljs-doctag { - text-decoration: underline; - } - .hljs-emphasis { - font-style: italic; - } - .hljs-strong { - font-weight: bold; - } - .hljs-subst, - .hljs-title, - .hljs-params, - .hljs-bullet, - .hljs-formula, - .hljs-tag, - .hljs-type { - /* ignored */ - } - } -} diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script.js.template b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script.js.template index 235d0a87d24..f4c54714986 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script.js.template +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/script.js.template @@ -17,7 +17,9 @@ const sortAsc = "sort-asc"; const sortDesc = "sort-desc"; const tableTab = "table-tab"; const activeTableTab = "active-table-tab"; -const THEMES = Object.freeze(["theme-light", "theme-dark", "theme-os"]); +const THEME_LIGHT = "theme-light"; +const THEME_DARK = "theme-dark"; +const THEME_OS = "theme-os"; const linkIcon = "##REPLACE:doclet.Link_icon##"; const linkToSection = "##REPLACE:doclet.Link_to_section##"; @@ -320,12 +322,21 @@ function makeFilterWidget(sidebar, updateToc) { return sidebar; } +const osDarkTheme = window.matchMedia("(prefers-color-scheme: dark)"); +osDarkTheme.addEventListener("change", e => { + if (getTheme() === THEME_OS) { + setTheme(THEME_OS); + } +}); function getTheme() { - return localStorage.getItem('theme') || THEMES[0]; + return localStorage.getItem("theme") || THEME_LIGHT; +} +function setTheme(theme) { + var value = theme !== THEME_OS ? theme : osDarkTheme.matches ? THEME_DARK : THEME_LIGHT; + document.documentElement.setAttribute("data-theme", value); } - function initTheme() { - document.body.classList.add(getTheme()); + setTheme(getTheme()); } function setTopMargin() { @@ -347,7 +358,6 @@ document.addEventListener("readystatechange", (e) => { document.addEventListener("DOMContentLoaded", function(e) { setTopMargin(); - const subnav = document.querySelector("ol.sub-nav-list"); const keymap = new Map(); const searchInput = document.getElementById("search-input") || document.getElementById("page-search-input"); @@ -360,10 +370,9 @@ document.addEventListener("DOMContentLoaded", function(e) { keymap.set(".", filterInput); } // Clone TOC sidebar to header for mobile navigation - const navbar = document.querySelector("div#navbar-top"); const sidebar = document.querySelector(".main-grid nav.toc"); const main = document.querySelector(".main-grid main"); - const mainnav = navbar.querySelector("ul.nav-list"); + const mainnav = document.querySelector("div#navbar-top ul.nav-list"); const toggleButton = document.querySelector("button#navbar-toggle-button"); const tocMenu = sidebar ? sidebar.cloneNode(true) : null; const themeButton = document.querySelector("button#theme-button"); @@ -401,19 +410,22 @@ document.addEventListener("DOMContentLoaded", function(e) { } input.addEventListener("change", e => { setTheme(e.target.value); + localStorage.setItem("theme", e.target.value); }) }); - function setTheme(theme) { - THEMES.forEach(t => { - if (t !== theme) document.body.classList.remove(t); - }); - document.body.classList.add(theme); - localStorage.setItem("theme", theme); - document.getElementById(theme).checked = true; - } + themePanel.addEventListener("focusout", e => { + if (e.relatedTarget && !themePanel.contains(e.relatedTarget) && !themeButton.contains(e.relatedTarget)) { + closeThemePanel(); + } + }); + themePanel.addEventListener("keydown", e => { + if (e.key === "Escape" || e.key === "Enter") { + closeThemePanel(); + } + }); makeFilterWidget(sidebar, updateToc); if (tocMenu) { - navbar.appendChild(tocMenu); + document.querySelector("div#navbar-top").appendChild(tocMenu); makeFilterWidget(tocMenu, updateToc); var menuInput = tocMenu.querySelector("input.filter-input"); } @@ -473,7 +485,7 @@ document.addEventListener("DOMContentLoaded", function(e) { expanded = true; mainnav.style.display = "block"; mainnav.style.removeProperty("height"); - var maxHeight = window.innerHeight - subnav.offsetTop + 4; + var maxHeight = window.innerHeight - document.querySelector("div.sub-nav").offsetTop; var expandedHeight = Math.min(maxHeight, mainnav.scrollHeight + 10); if (tocMenu) { tocMenu.style.display = "flex"; diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/stylesheet.css b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/stylesheet.css index 8da885a12cc..53b9d8ca6b2 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/stylesheet.css +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/stylesheet.css @@ -34,22 +34,6 @@ --nav-height: calc(var(--top-nav-height) + var(--sub-nav-height)); --max-content-width: 1500px; --content-margin: 0 auto; - /* Inline SVG icons for dark theme */ - --right-svg-dark: url('data:image/svg+xml; utf8, \ - \ - \ - '); - --glass-svg-dark: url('data:image/svg+xml; utf8, \ - \ - \ - '); - --x-svg-dark: url('data:image/svg+xml; utf8, \ - \ - \ - '); -} -body { /* Text colors for body and block elements */ --body-text-color: #181818; --block-text-color: #181818; @@ -111,9 +95,14 @@ body { --invalid-tag-text-color: #000000; --icon-filter: none; --caption-link-color: var(--subnav-link-color); + /* SVG icons for light theme */ + --right-svg: url("right.svg"); + --glass-svg: url("glass.svg"); + --x-svg: url("x.svg"); + --current-theme-svg: url("sun.svg"); } - -body.theme-dark { +/* Dark theme variables */ +:root[data-theme="theme-dark"] { --body-text-color: #e8e8e8; --block-text-color: #e8e8e8; --body-background-color: #1f2124; @@ -159,107 +148,21 @@ body.theme-dark { --invalid-tag-text-color: #000000; --icon-filter: invert(100%) brightness(160%); --caption-link-color: var(--link-color); -} - -/* - * Dark theme - */ -@media (prefers-color-scheme: dark) { - body { - --body-text-color: #e8e8e8; - --block-text-color: #e8e8e8; - --body-background-color: #1f2124; - --section-background-color: var(--body-background-color); - --detail-background-color: var(--body-background-color); - --code-background-color: #303940; - --mark-background-color: #313131; - --detail-block-color: #31363c; - --navbar-background-color: #395A6F; - --navbar-text-color: #ffffff; - --subnav-background-color: #3d454d; - --subnav-link-color: #d8dcdf; - --member-heading-background-color: var(--subnav-background-color); - --selected-background-color: #f8981d; - --selected-text-color: #253441; - --selected-link-color: #4a698a; - --table-header-color: #38444d; - --even-row-color: #222528; - --odd-row-color: #2d3135; - --title-color: #fff; - --link-color: #94badb; - --link-color-active: #e8a351; - --toc-background-color: #2f3439; - --toc-highlight-color: var(--subnav-background-color); - --toc-hover-color: #3f4146; - --snippet-background-color: #2c353b; - --snippet-text-color: var(--block-text-color); - --snippet-highlight-color: #f7c590; - --pre-background-color: var(--snippet-background-color); - --pre-text-color: var(--snippet-text-color); - --border-color: #444444; - --table-border-color: #717171; - --tab-border-radius: 2px 2px 0 0; - --search-input-background-color: #303030; - --search-input-text-color: #d0d0d0; - --search-input-placeholder-color: #979797; - --search-tag-background-color: #c6c61e; - --search-tag-text-color: #282828; - --button-border-color: #909090; - --button-active-filter: brightness(96%); - --button-focus-filter: brightness(104%); - --invalid-tag-background-color: #ffe6e6; - --invalid-tag-text-color: #000000; - --icon-filter: invert(100%) brightness(160%); - --caption-link-color: var(--link-color); - } - - body.theme-light { - --body-text-color: #181818; - --block-text-color: #181818; - --body-background-color: #ffffff; - --section-background-color: var(--body-background-color); - --detail-background-color: var(--body-background-color); - --code-background-color: #f5f5f5; - --mark-background-color: #f7f7f7; - --detail-block-color: #f4f4f4; - --navbar-background-color: #4D7A97; - --navbar-text-color: #ffffff; - --subnav-background-color: #dee3e9; - --subnav-link-color: #47688a; - --member-heading-background-color: var(--subnav-background-color); - --selected-background-color: #f8981d; - --selected-text-color: #253441; - --selected-link-color: #4a698a; - --table-header-color: #ebeff4; - --even-row-color: #fdfdfe; - --odd-row-color: #f0f0f2; - --title-color: #2c4557; - --link-color: #437291; - --link-color-active: #bb7a2a; - --toc-background-color: #f8f8f8; - --toc-highlight-color: var(--subnav-background-color); - --toc-hover-color: #e9ecf0; - --snippet-background-color: #f2f2f4; - --snippet-text-color: var(--block-text-color); - --snippet-highlight-color: #f7c590; - --pre-background-color: var(--snippet-background-color); - --pre-text-color: var(--snippet-text-color); - --border-color: #e6e6e6; - --table-border-color: #000000; - --tab-border-radius: 2px 2px 0 0; - --search-input-background-color: #ffffff; - --search-input-text-color: #000000; - --search-input-placeholder-color: #757575; - --search-tag-background-color: #ffff66; - --search-tag-text-color: var(--block-text-color); - --button-border-color: #b0b8c8; - --button-active-filter: brightness(96%); - --button-focus-filter: brightness(104%); - --invalid-tag-background-color: #ffe6e6; - --invalid-tag-text-color: #000000; - --icon-filter: none; - --caption-link-color: var(--subnav-link-color); - } + /* Inline SVG icons for dark theme */ + --right-svg: url('data:image/svg+xml; utf8, \ + \ + \ + '); + --glass-svg: url('data:image/svg+xml; utf8, \ + \ + \ + '); + --x-svg: url('data:image/svg+xml; utf8, \ + \ + \ + '); + --current-theme-svg: url("moon.svg"); } /* * Styles for individual HTML elements. @@ -386,7 +289,6 @@ hr { height: 100%; max-width: var(--max-content-width); margin: var(--content-margin); - position: relative; } .top-nav { background-color:var(--navbar-background-color); @@ -415,6 +317,8 @@ button#theme-button { height: 32px; padding: 6px; margin-left: -6px; + background: var(--current-theme-svg) no-repeat 6px; + background-size: 18px 18px; background-color: transparent; border: 1px solid transparent; border-radius: 6px; @@ -424,26 +328,6 @@ button#theme-button:hover, button#theme-button:focus-visible { border: 1px solid var(--button-border-color); } -button#theme-button img { - display: none; - width: 18px; -} -body.theme-light button#theme-button img.theme-light { - display: inline; -} -body.theme-dark button#theme-button img.theme-dark { - display: inline; -} -@media (prefers-color-scheme: dark) { - body.theme-os button#theme-button img.theme-dark { - display: inline; - } -} -@media (prefers-color-scheme: light) { - body.theme-os button#theme-button img.theme-light { - display: inline; - } -} div#theme-panel { display: none; position: fixed; @@ -507,22 +391,11 @@ ol.sub-nav-list li { margin-right: -4px; } ol.sub-nav-list li:not(:first-child) { - background: url("right.svg") no-repeat 3px; + background: var(--right-svg) no-repeat 3px; background-size: 10px; padding-left: 17px; list-style: none; } -body.theme-dark ol.sub-nav-list li:not(:first-child) { - background-image: var(--right-svg-dark); -} -@media (prefers-color-scheme: dark) { - ol.sub-nav-list li:not(:first-child) { - background-image: var(--right-svg-dark); - } - body.theme-light ol.sub-nav-list li:not(:first-child) { - background-image: url("right.svg"); - } -} ol.sub-nav-list a { padding: 3px; } @@ -683,13 +556,10 @@ dl.name-value > dd { padding: 15px 20px; } .main-grid nav.toc > ol.toc-list { - max-height: calc(100vh - var(--nav-height) - 100px); + max-height: calc(100vh - var(--nav-height) - 110px); padding-left: 12px; } .main-grid nav.toc button { - position: absolute; - bottom: 16px; - z-index: 3; background-color: var(--toc-background-color); color: #666666; font-size: 0.76rem; @@ -697,12 +567,19 @@ dl.name-value > dd { padding: 6px 10px; white-space: nowrap; border: 1px solid transparent; + border-radius: 3px; } .main-grid nav.toc button > img { vertical-align: middle; width: 16px; height: 16px; } +.main-grid nav.toc button.hide-sidebar, +.main-grid nav.toc button.show-sidebar { + position: absolute; + bottom: 15px; + z-index: 3; +} .main-grid nav.toc button.hide-sidebar { right: 0; } @@ -716,7 +593,7 @@ dl.name-value > dd { .main-grid nav.toc button:hover, .main-grid nav.toc button:focus { color: var(--body-text-color); - border: 1px solid var(--subnav-background-color); + border: 1px solid var(--button-border-color); } .main-grid nav.toc button:active { background-color: var(--subnav-background-color); @@ -758,6 +635,7 @@ nav.toc div.toc-header { nav.toc > ol.toc-list { overflow: hidden auto; overscroll-behavior: contain; + height: inherit; } nav.toc ol.toc-list { list-style: none; @@ -1281,7 +1159,7 @@ li.ui-static-link a, li.ui-static-link a:visited { padding: 3px 4px; } input[type="text"] { - background-image:url('glass.svg'); + background-image:var(--glass-svg); background-size:13px; background-repeat:no-repeat; background-position:3px 4px; @@ -1294,17 +1172,6 @@ input[type="text"] { font-size: var(--nav-font-size); height: 19px; } -body.theme-dark input[type="text"] { - background-image: var(--glass-svg-dark); -} -@media (prefers-color-scheme: dark) { - input[type="text"] { - background-image: var(--glass-svg-dark); - } - body.theme-light input[type="text"] { - background-image: url('glass.svg'); - } -} input#page-search-input { width: calc(180px + 10vw); margin: 10px 0; @@ -1320,7 +1187,7 @@ input.filter-input { } input#reset-search, input.reset-filter, input#page-search-reset { background-color: transparent; - background-image:url('x.svg'); + background-image:var(--x-svg); background-repeat:no-repeat; background-size:contain; border:0; @@ -1332,21 +1199,6 @@ input#reset-search, input.reset-filter, input#page-search-reset { font-size:0; visibility:hidden; } -body.theme-dark input#reset-search, -body.theme-dark input.reset-filter, -body.theme-dark input#page-search-reset { - background-image: var(--x-svg-dark); -} -@media (prefers-color-scheme: dark) { - input#reset-search, input.reset-filter, input#page-search-reset { - background-image: var(--x-svg-dark); - } - body.theme-light input#reset-search, - body.theme-light input.reset-filter, - body.theme-light input#page-search-reset { - background-image: url('x.svg'); - } -} input#reset-search { position:absolute; right:5px; @@ -1801,7 +1653,7 @@ table.striped > tbody > tr > th { top: var(--top-nav-height); left: 40vw; width: 60vw; - z-index: 7; + z-index: 5; background-color: var(--toc-background-color); box-sizing: border-box; } @@ -1973,7 +1825,7 @@ nav.toc div.toc-header .toc-sort-toggle { position: static; display: inline-flex; align-items: center; - padding: .5em; + padding: 4px; cursor: pointer; } diff --git a/test/langtools/jdk/javadoc/doclet/checkStylesheetClasses/CheckStylesheetClasses.java b/test/langtools/jdk/javadoc/doclet/checkStylesheetClasses/CheckStylesheetClasses.java index ba846c293a2..ee1fa538a57 100644 --- a/test/langtools/jdk/javadoc/doclet/checkStylesheetClasses/CheckStylesheetClasses.java +++ b/test/langtools/jdk/javadoc/doclet/checkStylesheetClasses/CheckStylesheetClasses.java @@ -143,9 +143,6 @@ public class CheckStylesheetClasses { "search-result-desc", "search-result-label", "search-result-link", "selected", "sort-asc", "sort-desc", "two-column-search-results", "visible"); - // used for themes - removeAll(styleSheetNames, "theme-dark", "theme-light", "theme-os"); - // very JDK specific styleSheetNames.remove("module-graph"); styleSheetNames.remove("sealed-graph"); diff --git a/test/langtools/jdk/javadoc/doclet/testNavigation/TestModuleNavigation.java b/test/langtools/jdk/javadoc/doclet/testNavigation/TestModuleNavigation.java index b4f28b36f3f..4f13bfb6d3a 100644 --- a/test/langtools/jdk/javadoc/doclet/testNavigation/TestModuleNavigation.java +++ b/test/langtools/jdk/javadoc/doclet/testNavigation/TestModuleNavigation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* * @test - * @bug 8196027 8196202 8320458 8342705 + * @bug 8196027 8196202 8320458 8342705 8371021 * @summary test navigation links * @modules jdk.compiler/com.sun.tools.javac.api * jdk.compiler/com.sun.tools.javac.main @@ -36,7 +36,6 @@ import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import javadoc.tester.JavadocTester; import toolbox.ModuleBuilder; @@ -87,9 +86,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("overview-tree.html", true, @@ -101,9 +98,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("deprecated-list.html", true, @@ -115,9 +110,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("index-all.html", true, @@ -129,9 +122,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Search
  • Help
  • -
  • +
  • """); checkOutput("search.html", true, @@ -143,9 +134,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Index
  • Help
  • -
  • +
  • """); checkOutput("help-doc.html", true, @@ -157,9 +146,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Index
  • Search
  • -
  • +
  • """); checkOutput("m/p1/package-summary.html", true, @@ -172,9 +159,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("m/p1/A.html", true, @@ -187,9 +172,7 @@ public class TestModuleNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); } diff --git a/test/langtools/jdk/javadoc/doclet/testNavigation/TestNavigation.java b/test/langtools/jdk/javadoc/doclet/testNavigation/TestNavigation.java index 5be754a3163..f0a045f1a51 100644 --- a/test/langtools/jdk/javadoc/doclet/testNavigation/TestNavigation.java +++ b/test/langtools/jdk/javadoc/doclet/testNavigation/TestNavigation.java @@ -25,7 +25,7 @@ * @test * @bug 7025314 8023700 7198273 8025633 8026567 8081854 8196027 8182765 * 8196200 8196202 8223378 8258659 8261976 8320458 8329537 8350638 - * 8342705 + * 8342705 8371021 * @summary Make sure the Next/Prev Class links iterate through all types. * Make sure the navagation is 2 columns, not 3. * @library /tools/lib ../../lib @@ -71,9 +71,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/package-summary.html", true, @@ -85,9 +83,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/A.html", true, @@ -99,9 +95,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/C.html", true, @@ -113,9 +107,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/E.html", true, @@ -127,9 +119,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/I.html", true, @@ -355,9 +345,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/A.html", true, @@ -369,9 +357,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/C.html", true, @@ -383,9 +369,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/E.html", true, @@ -397,9 +381,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """); checkOutput("pkg/I.html", true, @@ -439,9 +421,7 @@ public class TestNavigation extends JavadocTester {
  • Index
  • Search
  • Help
  • -
  • +
  • """, """